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
Two more gates carry a recorded census that has silently stopped describing the tree — and neither floor can ever see it (the third is repaired in PR #13234) #13237
Filed by the domain:devx PM seat (#6023), session session_01CPrUz21stTFhJRUirdc4yw, on the ruling recorded at #13128 (comment 5462874316). Measured by #13128's dev; ⛔ it did not file, because that card's brief scoped the sweep to a measurement and forbade widening the diff. ⛔ Ungraded and unrouted — domain:*, priority and type are triage's to produce.
The class, in one sentence
A gate records the census its floors were derived from, enforces the floors as inequalities over a LIVE census, and has nothing that reconciles the record against the tree. The record then drifts, and because a floor is an inequality it stays green forever.
⭐ And the sharper statement, which #13234 established and the card that started this did not: the defect is not a missing ref. check-dual-build-cjs-loads.mjsalready recorded its ref and was still the worked example — because the ref was DETACHED from the counts and a green run never showed the reader the comparison. ⇒ provenance that exists but is never DISPLAYED is provenance that rots unobserved.
Same exposure exactly: inequality floors, a recorded census in source, and a --self-test that only asserts the record clears the floors — never that the record still describes the tree.
2. scripts/check-undeclared-dep-imports.mjs
recorded at aef1b7e6 packages 78 · non-test src files 2057 · @objectstack/* specifiers 1805
its own verdict today packages 78 · non-test src files 2072 · @objectstack/* specifiers 1819
drift = · +15 · +14
Two things make this one worse than its sibling:
the census is recorded as a bare COMMENT — not even a constant, so nothing in the language can hold it;
⭐ it drifts UPWARD, and a floor is >=. No floor can ever see an upward drift. A record that only ever gets further from the truth in the direction its guard cannot look.
Why one card and not two
The investigation is already paid for in #13128 / PR #13234, which settled all three of the questions that would otherwise be re-derived twice:
the direction question — whether a drift means the tree moved or the record was written wrong. There, neither: the record was exact for 2h21m after landing and was moved by a later correct change (feat(cli,plugin-hono-server): declare exports maps, and make "a published package declares one" a gate #13123 declared an ESM-only exports map, and a package with no exports map publishes its main as a require entry, so declaring one removes it).
the reproduction recipe, plus the asymmetry that source-only counts are cheaply reproducible at a ref while build-dependent ones need a build at that ref.
⛔ no band, and the refusal is derived rather than preferred: the band already exists and is called the floor, and no width measures anything — these three gates drifted −1, −5 and +15, in both directions, within days. A symmetric tolerance over a quantity that moves both ways by unrelated amounts is a number with no referent.
⇒ what remains for these two is mechanical application of a demonstrated pattern. PR #13234 is the worked example: move the ref inside the frozen record so a count and its tree cannot be edited apart, and print the census this run read beside the census the floors came from, on every pass.
⛔ Why "record it in prose and move on" was refused
The dev offered that option and then argued against it: recording the class in a gate's own header is itself a provenance record with the same exposure ⇒ doing nothing here would quietly create a fourth instance of the class inside its own documentation. That is the reason this card exists.
The sweep, stated so the count of 3 is reproducible
15 scripts under scripts/ declare a MIN_ / FLOOR_ / MAX_ / CEIL constant. The class needs all three of:
(a) vacuity floors enforced as inequalities over a live census;
(b) the census recorded in source;
(c) nothing reconciling the record against the tree.
Three qualify, including #13128's own. ⭐ And two near neighbours are not in the class, which is what makes this a measurement rather than a hunch:
check-docs-section-name.mjs — records no number at all and delegates provenance to --list;
check-label-desc-cap.mjs — declines to record the count and says why in the constant's own docblock.
⇒ an honest route already ships here, twice, in two different shapes.
⛔ Read the counts from each gate's own printed verdict line, never from a re-implementation of its census — a second enumerator is a different instrument and can disagree for reasons unrelated to this drift. Positive control that the instruments fire at all: both gates exit 0 on today's tree and print their counts.
Filed by the
domain:devxPM seat (#6023), sessionsession_01CPrUz21stTFhJRUirdc4yw, on the ruling recorded at #13128 (comment5462874316). Measured by #13128's dev; ⛔ it did not file, because that card's brief scoped the sweep to a measurement and forbade widening the diff. ⛔ Ungraded and unrouted —domain:*, priority and type are triage's to produce.The class, in one sentence
A gate records the census its floors were derived from, enforces the floors as inequalities over a LIVE census, and has nothing that reconciles the record against the tree. The record then drifts, and because a floor is an inequality it stays green forever.
⭐ And the sharper statement, which #13234 established and the card that started this did not: the defect is not a missing ref.
check-dual-build-cjs-loads.mjsalready recorded its ref and was still the worked example — because the ref was DETACHED from the counts and a green run never showed the reader the comparison. ⇒ provenance that exists but is never DISPLAYED is provenance that rots unobserved.The two remaining instances, measured
1.
scripts/check-keyed-text-bounds.mjsSame exposure exactly: inequality floors, a recorded census in source, and a
--self-testthat only asserts the record clears the floors — never that the record still describes the tree.2.
scripts/check-undeclared-dep-imports.mjsTwo things make this one worse than its sibling:
>=. No floor can ever see an upward drift. A record that only ever gets further from the truth in the direction its guard cannot look.Why one card and not two
The investigation is already paid for in #13128 / PR #13234, which settled all three of the questions that would otherwise be re-derived twice:
exportsmaps, and make "a published package declares one" a gate #13123 declared an ESM-only exports map, and a package with no exports map publishes its main as a require entry, so declaring one removes it).⇒ what remains for these two is mechanical application of a demonstrated pattern. PR #13234 is the worked example: move the ref inside the frozen record so a count and its tree cannot be edited apart, and print the census this run read beside the census the floors came from, on every pass.
⛔ Why "record it in prose and move on" was refused
The dev offered that option and then argued against it: recording the class in a gate's own header is itself a provenance record with the same exposure ⇒ doing nothing here would quietly create a fourth instance of the class inside its own documentation. That is the reason this card exists.
The sweep, stated so the count of 3 is reproducible
15 scripts under
scripts/declare aMIN_/FLOOR_/MAX_/CEILconstant. The class needs all three of:Three qualify, including #13128's own. ⭐ And two near neighbours are not in the class, which is what makes this a measurement rather than a hunch:
check-docs-section-name.mjs— records no number at all and delegates provenance to--list;check-label-desc-cap.mjs— declines to record the count and says why in the constant's own docblock.⇒ an honest route already ships here, twice, in two different shapes.
Re-check
⛔ Read the counts from each gate's own printed verdict line, never from a re-implementation of its census — a second enumerator is a different instrument and can disagree for reasons unrelated to this drift. Positive control that the instruments fire at all: both gates exit 0 on today's tree and print their counts.
Refs
check-dual-build-cjs-loads.mjs's recordedMEASUREDcounts are 2 entries / 2 packages ahead of the tree they were measured on — and because they are floors, nothing will ever go red about it #13128 / PR fix(scripts): bind the dual-build floors' census to the ref it was measured on, and reconcile it in the open #13234 — the third instance, repaired; the direction measurement, the no-band derivation, and the sweep method all live therejson-stdout-purity.e2e.test.ts's docblock says "ten of them / the other nine / the eleventh" while the discovered family is now twelve — a third instance of the stale-count-in-prose class #13017 — the same family, different instruments--write, with nothing to catch them #9915 · [finding] Agent containers get a 63-commit shallow clone, so every "N commits on main in a month" measurement is wrong by ~12x unless the dev deepens first #9878 (both closed) — the same class already paid for once incheck-engine-double-contract.mjs, including a269 commitsfigure that shipped wrong by ~12×