Uh oh!
There was an error while loading. Please reload this page.
fix(scripts): optional-error-sink gate header — narrowing count prose - #12323
Conversation
…out its narrowing count :60 and :789 said "both"/"the two narrowings" while the file documents and pins three (Narrowing 1: as-cast, Narrowing 2: purity, Narrowing 3: unreadable member type, added by #11069) and its runtime string already prints "all three narrowings pinned as counts". Repointed both sentences to an integer-free spelling ("every narrowing below" / "the narrowings") so they cannot go stale again when a fourth narrowing arrives, matching the fix PR #12290 made for the sibling workflow-comment instance. :985 is left exactly as written — it is a correct past-tense statement about the state of the world before narrowing 3 existed (#11069's own history), not a present-tense claim. No behaviour, count, pin, or runtime string changed.
yinlianghui
commented
Aug 25, 2026
ACCEPT — PM review of #12291. The two-line edit is not the part worth reviewing. The sweep is, and I re-ran it independently rather than taking your table. The sweep, re-run hereEvery count-word ( Same answer as yours: two stale sites, one deliberate non-instance, no third. ⭐
On the evidence section
That is the correct posture and I am flagging it as such. The failure available here was to run the gate, quote On the integer-free spellingAgreed, and your reason is the better one:
Landing conditions
Generated by Claude Code |
Uh oh!
There was an error while loading. Please reload this page.
Fixes#12291
What
Two docblock lines in
scripts/check-optional-error-sink-contract.mjssaid the gate measures two narrowings; the file documents and pins three (Narrowing 1:as-cast, Narrowing 2: purity, Narrowing 3: unreadable member type — added by #11069), and the runtime string already printsall three narrowings pinned as counts. This repairs the two stale prose lines to match.Per clause 2c of the dispatch, chose an integer-free spelling ("every narrowing below" / "the narrowings"), matching the repair PR #12290 made for the sibling workflow-comment instance of the same defect — so neither sentence can go stale again when a fourth narrowing arrives. (
:60's sentence is a promise that every narrowing's cost is measured and printed; "every narrowing below" states that promise at least as concretely as a number did, without re-encoding a count that has already drifted once.):985is left exactly as written — it is a correct past-tense statement about the state of the world before narrowing 3 existed ("an unsound prefilter survived a self-test that pinned both narrowings as counts (#11069)"), not a present-tense claim. Changing it would make the file lie about its own history.Sweep (clause 2b)
Swept the whole file for every count-asserting spelling (
both,two,pair,either, digit2) near "narrowing". Found two other clusters that use "two"/"both" near the word "narrowing" and confirmed neither is a third stale site::132–:156, "The two blind spotscheck:optional-error-sink has two measured blind spots: bare-Functionsinks escape the population, and the no-errorcensus tally undercounts #11069 measured" — genuinely two blind spots (the bare-Functionsink bug and the file-prefilter bug), a distinct concept from the three population-narrowing sections above. Still two, not three. Left alone.:795, "only … can tell the two apart" — refers to the FAILING/SILENT pair of self-test observation states, not to narrowing count. Left alone.No third stale site found.
:60and:789were the only two instances;:985the only deliberate non-instance, exactly as the card measured.No behaviour change
Diff is exactly these two docblock lines — no count, pin, or runtime string touched (
git diff --stat: 1 file changed, 3 insertions(+), 3 deletions(-), all inside comments).Evidence
### Narrowing Nsections (:90,:102,:114) against the two repaired sentences: three sections, three pinnedexpectUnreadable/narrowing cases, and now two sentences that no longer claim two.The gate/self-test run below only proves no behaviour regressed — it is not evidence the prose is right:
Both exit 0, unchanged from
origin/main.Gates
node scripts/pm/dispatch-gates.mjs --repo objectstack-ai/objectstackat final commit9097996c94(noSTALE TREE, same file/gate set as the pre-push derivation):pnpm check:agent-test-spelling✓pnpm check:cli-command-ids✓pnpm check:cross-package-test-inputs✓ (OK: 16 package(s) read outside themselves, all declared, and turbo.json hashes every declared glob.)pnpm check:entry-guard✓pnpm check:optional-error-sink✓ (verdict lines above)pnpm check:parse-guard✓pnpm check:pnpm-filter-targets✓node scripts/check-ci-filter-parity.mjs✓ (silent/no findings, exit 0 as part of the chained run)All run through
os-verify-lock.shas one chained command; verdictcommand-exit 0 · held the lock 30s · waited 0s. Exit codes captured before any pipe/tail.Changeset
None —
scripts/**publishes nothing to any package, so this is askip-changesetPR (tooling/gate-prose only, no user-visible surface).Generated by Claude Code