You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
[finding] Measured over all 139 Silent gate families: 49 read a packages/examples subtree their declaration never names — the Silent bucket is a class, not a bucket of cleared gates #14325
Measured by the os-dev seat working #14131 (PR #14323), whose triage made the census
the first deliverable: "那 127 个里有多少是同一形状 —— 声明了几个字面量、真实人口却是一
整棵子树? ⛔ 这个数没人量过,而它决定本卡是「修一个门」还是「修一个类」." Filed unassigned and ungraded — domain:*, priority and type are triage's.
Answer: it is a class. ⛔ Not a claim that all of them want the same repair — see the
refusals at the bottom, and the two subsets already carrying their own cards.
Method, stated so the number is checkable rather than believed
Static classification was tried first and is not good enough: a gate's corpus walk is
usually a recursive helper (walk(dir)) whose seed root is somewhere else in the file, so
a source scan either misses the root or invents one. The population was measured
instead, at origin/main@a39b02a6b:
Every one of the 139 was run with an fs-tracing preload
(NODE_OPTIONS=--require trace.cjs) that logs the repo-relative path of every readFileSync / readdirSync / openSync and every git ls-files argument list.
Each trace was compared against the literals extractWatchHints reads out of that
family's own sources, judged with the derivation's own hintCovers.
Counted as population: content reads of tracked files
(readFileSync/readFile/openSync/createReadStream). statSync/existsSync probes
are excluded, and pnpm's own 5-path footprint is subtracted.
The census
bucket
families
read 20+ tracked files under packages/ or examples/ that no declared literal covers
49
read 20+ undeclared tracked files anywhere
53
read 1..19 undeclared files
83
declaration covers every file read, or nothing tracked was read
3
of the 139, exited non-zero — partial trace, so they UNDER-count
22
⭐ So check-system-context-census is not special: it sits eleventh by undeclared
reads. Head of the list, declared literals then undeclared reads:
node scripts/check-system-context-census.mjs (repaired by PR #14323)
29
5387
pnpm check:error-code-casing
23
5161
node scripts/check-tenant-audit-census.mjs
24
4177
pnpm check:query-options-erasure
8
3903
pnpm check:type-check-coverage
10
3122
pnpm check:type-check-debt
10
3122
pnpm check:examples-live-imports
2
3051
pnpm check:dispatcher-error-vocabulary
28
2199
pnpm check:authz-resolver
4
2176
pnpm check:runtime-services-index
2
2165
pnpm check:error-status-conformance
4
2159
pnpm check:route-envelope
28
2126
pnpm check:cli-command-ids
4
2084
pnpm --filter @objectstack/spec run check:error-code-provenance
3
2005
(the remaining members of the 53 trail off from 760 down to 34)
Four were confirmed by reading the source, not just the trace, and all four are exactly #14131's shape — declared literals name artifacts, the walk names a subtree:
check:engine-double-contract — SCAN_ROOTS = ['packages', 'examples'], ONE declared literal
check:error-code-casing — SCAN_ROOTS = ['packages'], 23 literals, all of them baseline rows
check:route-envelope — walk(join(ROOT, 'packages')), 28 literals, all of them route files it cites
check:error-status-conformance — walk(SCAN_ROOT) over packages, 4 literals
⚠️ What this number is NOT
Reads are an upper bound on the verdict-bearing population. A gate that opens every package.json to build a workspace list reads far more than can ever red it, and the trace
cannot tell those apart. ⇒ ⛔ Do not read "49" as "49 gates need a ROOT_DIR_WATCH_HINTS
line". The honest claim is narrower and still decisive: the shape #14131 describes is
common, and the Silent bucket is not a bucket of cleared gates.
Two more limits, stated rather than buried: 22 of the 139 exited non-zero (missing build
artifacts, a CI-only prerequisite), so their traces are partial and their numbers are floors;
and three families exceeded the container's foreground ceiling and were cut at 75s.
So the residue this card is FOR is the ~40 families that are neither whole-tree nor already
repaired: gates whose real population is a specific subtree (packages, packages/spec, skills, content/docs) that their declaration does not name.
⚠️ The derivation-side half is NOT free-standing work today
scripts/pm/dispatch-gates.mjs is held by #14013. Anything here that turns out to be a
derivation change — a channel for "my population is the whole tree", or a rule that makes an
artifact-only declaration visibly different from a population declaration — queues behind it.
The per-gate half (a declaration in the gate's own module body, pinned in its own self-test)
needs no derivation change and is what PR #14323 and PR #14188 both did.
Measured by the
os-devseat working #14131 (PR #14323), whose triage made the censusthe first deliverable: "那 127 个里有多少是同一形状 —— 声明了几个字面量、真实人口却是一
整棵子树? ⛔ 这个数没人量过,而它决定本卡是「修一个门」还是「修一个类」." Filed
unassigned and ungraded —
domain:*, priority and type are triage's.Answer: it is a class. ⛔ Not a claim that all of them want the same repair — see the
refusals at the bottom, and the two subsets already carrying their own cards.
Method, stated so the number is checkable rather than believed
Static classification was tried first and is not good enough: a gate's corpus walk is
usually a recursive helper (
walk(dir)) whose seed root is somewhere else in the file, soa source scan either misses the root or invents one. The population was measured
instead, at
origin/main@a39b02a6b:node scripts/pm/dispatch-gates.mjs --residue packages/metadata-protocol/src/protocol.tslists the Silent bucket — 139 families today (the 127 in [finding] check-system-context-census declares 29 literals but never the packages/** subtree it censuses — a diff that SHIFTS a cited line derives green and reds in CI #14131 was 24h ago).
(
NODE_OPTIONS=--require trace.cjs) that logs the repo-relative path of everyreadFileSync/readdirSync/openSyncand everygit ls-filesargument list.extractWatchHintsreads out of thatfamily's own sources, judged with the derivation's own
hintCovers.Counted as population: content reads of tracked files
(
readFileSync/readFile/openSync/createReadStream).statSync/existsSyncprobesare excluded, and
pnpm's own 5-path footprint is subtracted.The census
packages/orexamples/that no declared literal covers⭐ So
check-system-context-censusis not special: it sits eleventh by undeclaredreads. Head of the list, declared literals then undeclared reads:
pnpm check:nul-bytesnode scripts/check-closing-keyword-parity.mjsnode scripts/check-self-test-workflow-commands.mjsnode scripts/check-position-name-fold-loaders.mjspnpm check:refd-timer-probenode scripts/check-comment-mask-corpus.mjspnpm check:vendor-version-stampspnpm check:skill-identifier-livenesspnpm check:parse-guardpnpm check:watch-hint-literalpnpm check:engine-double-contractnode scripts/check-system-context-census.mjs(repaired by PR #14323)pnpm check:error-code-casingnode scripts/check-tenant-audit-census.mjspnpm check:query-options-erasurepnpm check:type-check-coveragepnpm check:type-check-debtpnpm check:examples-live-importspnpm check:dispatcher-error-vocabularypnpm check:authz-resolverpnpm check:runtime-services-indexpnpm check:error-status-conformancepnpm check:route-envelopepnpm check:cli-command-idspnpm --filter @objectstack/spec run check:error-code-provenance(the remaining members of the 53 trail off from 760 down to 34)
Four were confirmed by reading the source, not just the trace, and all four are exactly
#14131's shape — declared literals name artifacts, the walk names a subtree:
check:engine-double-contract—SCAN_ROOTS = ['packages', 'examples'], ONE declared literalcheck:error-code-casing—SCAN_ROOTS = ['packages'], 23 literals, all of them baseline rowscheck:route-envelope—walk(join(ROOT, 'packages')), 28 literals, all of them route files it citescheck:error-status-conformance—walk(SCAN_ROOT)overpackages, 4 literalsReads are an upper bound on the verdict-bearing population. A gate that opens every
package.jsonto build a workspace list reads far more than can ever red it, and the tracecannot tell those apart. ⇒ ⛔ Do not read "49" as "49 gates need a
ROOT_DIR_WATCH_HINTSline". The honest claim is narrower and still decisive: the shape #14131 describes is
common, and the Silent bucket is not a bucket of cleared gates.
Two more limits, stated rather than buried: 22 of the 139 exited non-zero (missing build
artifacts, a CI-only prerequisite), so their traces are partial and their numbers are floors;
and three families exceeded the container's foreground ceiling and were cut at 75s.
⛔ Already carried elsewhere — not re-filed here
read, plus
check:declared-population-live, which refuses a declaration that reachesnothing. Closed.
check:nul-bytes,check-comment-mask-corpus,check:refd-timer-probe). For those a truthful declaration is"every file", which the derivation's own "22 leads is the same as none" rule refuses; they
need an always-runs channel, not a hint. ⭐ This census puts three more in the same
position:
check-closing-keyword-parity,check-self-test-workflow-commandsandcheck:watch-hint-literalalso sweep the whole tracked corpus.So the residue this card is FOR is the ~40 families that are neither whole-tree nor already
repaired: gates whose real population is a specific subtree (
packages,packages/spec,skills,content/docs) that their declaration does not name.scripts/pm/dispatch-gates.mjsis held by #14013. Anything here that turns out to be aderivation change — a channel for "my population is the whole tree", or a rule that makes an
artifact-only declaration visibly different from a population declaration — queues behind it.
The per-gate half (a declaration in the gate's own module body, pinned in its own self-test)
needs no derivation change and is what PR #14323 and PR #14188 both did.
Re-check
scripts/pm/dispatch-gates.mjsmoves several times a day and the bucket sizes move withit — ⛔ re-derive rather than quoting this card.
Refs
scripts/pm/dispatch-gates.mjsGenerated by Claude Code
Generated by Claude Code