Measured
node scripts/pm/dispatch-gates.mjs --repo objectstack-ai/objectstack, run twice today from a worktree on claude/issue-16025-hono-auth-mount-basepath.
The Reconciliation block ends with the sentence that tells a harvester what its total does not cover:
⛔ 87 is what THIS CARD owes by path and kind — NOT a complete account of what CI runs on
the PR. The pending-changeset families, the unreachable listing and the always-runs tail
below are each OUTSIDE it, each with its own count.
It names three outside blocks. The same run prints five. The two it does not name are:
Artifact rosters — 37 famil(ies)
Declared WIDE population — 9 famil(ies) (10 on a diff that does not touch a gate script)
Both print their own count and their own heading, exactly like the three that are named.
Why this is not cosmetic — it cost a CI round trip, measured
The WIDE block's own text already says the right thing:
… so no path of yours can narrow them and their absence from the matched block above is
NOT a clearance.
But a harvester who follows the reconciliation line's enumeration never reaches that text, because the reconciliation line is the thing that says "here is what else you owe".
That is what happened on PR #16380 (round 1). The implementer reported the union derived twice, Reconciliation — 68 famil(ies), all 68 green, plus the 37 artifact rosters, plus a whole-repo pnpm lint at exit 0. CI then failed on Lint & Repo Gates → check:wildcard-fallthrough, on a defect that diff introduced (it renamed a wildcard mount and left the MOUNTS ledger declaring the old spelling).
Re-derived on that diff's paths: check:wildcard-fallthrough was not in the 68. It was printed, in the Declared WIDE population block — one of the two the reconciliation line omits. The derivation was not blind to the gate; the line that tells you where else to look did not point at the block that named it.
The rosters block is in the same position and is only saved today by seats hand-carrying the instruction ("the Artifact rosters block sits outside that total and must be run, not read as silence") in their dispatch briefs — i.e. by prose outside the tool.
Shape of the class
#13642 fixed the inside-the-total version of this: a harvest that stopped at one of the two sections that make up the total. The reconciliation line now enumerates those explicitly and it works. This is the same failure one level out — the enumeration of what sits outside the total is itself incomplete.
Not measured here
Suggested remedy (not prescriptive)
Add both blocks to that sentence's enumeration, with their counts, in the same shape as the three already there. The blocks themselves need no change.
Measured
node scripts/pm/dispatch-gates.mjs --repo objectstack-ai/objectstack, run twice today from a worktree onclaude/issue-16025-hono-auth-mount-basepath.The Reconciliation block ends with the sentence that tells a harvester what its total does not cover:
It names three outside blocks. The same run prints five. The two it does not name are:
Artifact rosters — 37 famil(ies)Declared WIDE population — 9 famil(ies)(10 on a diff that does not touch a gate script)Both print their own count and their own heading, exactly like the three that are named.
Why this is not cosmetic — it cost a CI round trip, measured
The WIDE block's own text already says the right thing:
But a harvester who follows the reconciliation line's enumeration never reaches that text, because the reconciliation line is the thing that says "here is what else you owe".
That is what happened on PR #16380 (round 1). The implementer reported the union derived twice,
Reconciliation — 68 famil(ies), all 68 green, plus the 37 artifact rosters, plus a whole-repopnpm lintat exit 0. CI then failed onLint & Repo Gates→check:wildcard-fallthrough, on a defect that diff introduced (it renamed a wildcard mount and left theMOUNTSledger declaring the old spelling).Re-derived on that diff's paths:
check:wildcard-fallthroughwas not in the 68. It was printed, in theDeclared WIDE populationblock — one of the two the reconciliation line omits. The derivation was not blind to the gate; the line that tells you where else to look did not point at the block that named it.The rosters block is in the same position and is only saved today by seats hand-carrying the instruction ("the Artifact rosters block sits outside that total and must be run, not read as silence") in their dispatch briefs — i.e. by prose outside the tool.
Shape of the class
#13642fixed the inside-the-total version of this: a harvest that stopped at one of the two sections that make up the total. The reconciliation line now enumerates those explicitly and it works. This is the same failure one level out — the enumeration of what sits outside the total is itself incomplete.Not measured here
Suggested remedy (not prescriptive)
Add both blocks to that sentence's enumeration, with their counts, in the same shape as the three already there. The blocks themselves need no change.