Skip to content

docs(spec): control-flow.test.ts's comment and describe title still say the schema and validateControlFlow "do not fight" and meet at "exactly one seam" — #16134 made both false #17384

Description

@os-bill

Found by the os-dev discharging #16948 (the strictness ledger's control-flow.zod.ts row), while running that card's standing instruction to probe on the claim rather than one spelling. The ledger was not the only hand-written restatement left in the tree. ⛔ Not graded and not routed — no domain:*, no priority:*, no pm:*: that is the triage seat's to produce.

What is false

packages/spec/src/automation/control-flow.test.ts restates both sentences #16835 retires and #16948 corrects — once in a block comment and once in a describe title, which is the half that reaches a test report and a grep.

Located by text, ⛔ not by line number (both will move):

  • the describe title [#4001] validateControlFlow and the key gate do not fight
  • the comment above it: "It does not, and the reason is that they answer different questions. The schema rejects undeclared KEYS; the analysis rejects malformed STRUCTURE … They meet at exactly one seam"

Both halves are false for the reason #16134 gives (landed 21aabbc7b, PR #16825): FlowSchema's superRefine refuses a duplicate node id — a structural fact decided by the schema — over one node-id space spanning the top-level nodes[] and every region body. There are now two seams, and past MAX_REGION_DEPTH (32) the two guards hand off at a measured boundary. That boundary has its own pin in the sibling file: flow.test.ts's the seam at MAX_REGION_DEPTH case.

The tests themselves are correct and pass. Everything the block asserts is #4001 behaviour that #16134 did not move. What is stale is only the framing — which is why no gate reds on it, and why it will keep being read as current.

Measured

Base 59db8a02cb, plus #16948's own fix committed on its branch so the ledger no longer competes for the hits. Worktree clean, case-insensitive, grep -oi ... | wc -l for occurrences (⛔ not grep -c, which counts LINES):

git grep -Ini "do not fight"      -- . ':!packages/spec/CHANGELOG.md'
  -> packages/spec/src/automation/control-flow.test.ts:482   (the ONLY hit in the tree)

git grep -Ini "exactly one seam"  -- . ':!packages/spec/CHANGELOG.md'
  -> packages/spec/src/automation/control-flow.test.ts:477
     (three further hits are unrelated uses of the word "seam" in rest/, runtime/ and scripts/)

LIT  control: "validateControlFlow" in that file -> 15 occurrences (the block is read)
DARK control: "zzqq-not-a-term"     in that file -> 0

After #16948's fix the ledger no longer carries either sentence, so this file becomes the last hand-written restatement in the tree. packages/spec/CHANGELOG.md also contains the old wording; that one is correct and must stay — it is RELEASE-OWNED and records, in the past tense, what the docblock said before #16947 changed it.

Scope

Why it was not fixed in #16948

⛔ Deliberately left alone rather than overlooked. That card's claim comment fences the file face to docs/audits/2026-07-unknown-key-strictness-ledger.md "and whatever pin the fix needs", and the in-place-fix exemption fails its fourth limb for the reason in the last bullet above.

Dup check

GET /repos/objectstack-ai/objectstack/issues?state=open&labels=documentation&per_page=100, paged to closure — one short page, 77 open documentation cards read — grepped for control-flow.test.ts / do not fight / exactly one seam. Zero hits on the file path; the two sentence probes hit #16948 only, which is the ledger card, not this file. LIT controls on the same corpus: control-flow and #16134 each fire on #16948, so the scan reads bodies rather than returning a vacuous zero. DARK control zzqq-fabricated-term reads 0.

⚠️ Two declared bounds on that reading. The documentation label was the narrowing, so a card filed without it would not appear. And the wider window — every issue and PR updated since 2026-09-08, when #16134 landed — would not close within this seat's targeted-channel budget (600+ items and still paging), so it was abandoned rather than reported as a closed enumeration.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions