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
{{ message }}
Repository navigation
Cross the four uncrossed scan surfaces #1834 measured and reported — the walk against the literal, and one ruling on whether a filename counts as content (epic #1579) #1839
Filed by the epic PM (session_01DuzfS5chho38Yx1jxx9DEj), 2026-09-09. pm:epic reserves it for the epic PM.
⭐ This card is not new analysis. It is #1834's own measured output, carried forward exactly as that card intended: it asked for "a measured inventory … here are the N and what each needs", delivered 34 surfaces measured, 28 already content-pinned, 1 repaired, 1 self-falsified, 4 reported. These are the 4. ⛔ Do not re-run the sweep — read #1834 and PR #1838 and act on what they already measured.
The shape, in one line
A guard walks a root and filters by suffix; a second mechanism in the same file names a specific carrier by literal path. If the walk stops reaching that carrier, nothing notices — the count is still healthy and the literal read still succeeds. #1778 crossed exactly this pair for PACK_FILES; these four were left uncrossed.
The four
#
surface
today
what it needs
1
TEST_FILES in test/docs-object-term-consistency.test.ts
> 100 only. The ROW_LABEL content pin beside it reaches test/sharing-coverage.test.ts by literal path, not through TEST_FILES.
One line: the walk's output must contain that ledger file. ⚠️ This edits #1778's own file — the precedent. Match its shape and its comment discipline.
2
hook-query-predicate.test.ts
> 10 plus toContain('_line-item-price-fill.ts').
⭐ A ruling, below.
3
collaboration-capabilities.test.ts
The feeds: true sweep over src/objects/*.object.ts asserts nothing at all about its surface.
A size pin is the right and sufficient answer — the class here is any.object.ts, so a count is a content proof. ⭐ #1834 left this for "whoever owns the vacuity sweep"; #1770 is CLOSED, so nobody owns it. It is yours.
4
docs-drift.test.ts and docs-conversion-rate-spelling.test.ts
Each holds a carrier list (VERBATIM_PAGES, CARRIERS) proved by existsSync on a literal path while the sweep runs over a walk.
One expect(PAGES).toContain(carrier) in each — or establish that the count plus existsSync already is the pin, and say why. Exposure is low (both walks rooted at content/docs, counts > 100 / > 50); ⛔ that is a reason to be honest about the verdict, not a reason to skip measuring it.
⭐ The PM's ruling on #2, and you may overturn it with a measurement
toContain('_line-item-price-fill.ts') pins that the file list contains a name. It does not pin that any file in the surface issues a query. A file that is renamed, emptied, or stripped of its where: keys leaves that assertion green. ⇒ A filename proxy is not a content pin. 18 of 44 files carry a where: key today, so the class is well populated and the honest form is available.
The shape to reach for is row 5's — the equality cross-reference in hook-write-shape.test.ts:444, which this seat re-read and confirmed: expect(covered, …).toBe(sites.length), the scanned surface's update( call sites against the writes the runtime half exercises. ⭐ That is the strongest form in this repo and it is the one that falsified#1834's dev when they thought that file was blind.
⚠️But measure before you copy it.hook-write-shape can do equality because its runtime half enumerates the writes. If hook-query-predicate has no such second population, equality is not authorable and the honest check is the weaker "the surface holds at least one instance of the class". If my ruling is wrong for this file, say so with the measurement — that is how the last three cards went, and each time the dev was right.
Restore under trap … EXIT INT TERM; prove the restore by bytes (post-restore blob identical to HEAD, git diff HEAD --name-only empty, git status --porcelain empty).
⚠️The false-negative mode #1834 discovered, which applies directly to you: classifying a surface by grepping its self-check block for toBeGreaterThan / toHaveLengthmisses equality-form content pins three blocks away. Before you call any of these four blind, read the whole file.
Also: pnpm verify green, exit codes before any pipe · pnpm lint --json before/after on your own base (⚠️neither number should move; say so if one does) · test count before and after, expected unchanged.
Changeset
Empty frontmatter. ⭐ Ruled by the PM on #1834, correcting the dispatch wording that card carried: .github/workflows/changeset-check.yml:33 states in its own comment that "An empty-frontmatter changeset still counts: it is the sanctioned" declaration that a PR releases nothing, and #1778 — this whole line of work's precedent — used exactly that for the same kind of change. ⛔ Do not name a package bump for test/**-only work; it would accrete a CHANGELOG row for something no user can see.
Base and coordination
Base off main at 965933b or later. ⛔ Not claude/issue-1581-lint-strict-flip.
Any src/** change — if a repair needs one, that is a finding to report, not a rider.
Refs: #1579 (epic) · #1834 / PR #1838 (where these four were measured — read them, do not re-derive) · #1778 (the precedent, and file #1 belongs to it) · #1770 (closed — which is why surface #3 is unowned) · #1755 · #1529.
Filed by the epic PM (
session_01DuzfS5chho38Yx1jxx9DEj), 2026-09-09.pm:epicreserves it for the epic PM.⭐ This card is not new analysis. It is #1834's own measured output, carried forward exactly as that card intended: it asked for "a measured inventory … here are the N and what each needs", delivered 34 surfaces measured, 28 already content-pinned, 1 repaired, 1 self-falsified, 4 reported. These are the 4. ⛔ Do not re-run the sweep — read #1834 and PR #1838 and act on what they already measured.
The shape, in one line
A guard walks a root and filters by suffix; a second mechanism in the same file names a specific carrier by literal path. If the walk stops reaching that carrier, nothing notices — the count is still healthy and the literal read still succeeds. #1778 crossed exactly this pair for
PACK_FILES; these four were left uncrossed.The four
TEST_FILESintest/docs-object-term-consistency.test.ts> 100only. TheROW_LABELcontent pin beside it reachestest/sharing-coverage.test.tsby literal path, not throughTEST_FILES.hook-query-predicate.test.ts> 10plustoContain('_line-item-price-fill.ts').collaboration-capabilities.test.tsfeeds: truesweep oversrc/objects/*.object.tsasserts nothing at all about its surface..object.ts, so a count is a content proof. ⭐ #1834 left this for "whoever owns the vacuity sweep"; #1770 is CLOSED, so nobody owns it. It is yours.docs-drift.test.tsanddocs-conversion-rate-spelling.test.tsVERBATIM_PAGES,CARRIERS) proved byexistsSyncon a literal path while the sweep runs over a walk.expect(PAGES).toContain(carrier)in each — or establish that the count plusexistsSyncalready is the pin, and say why. Exposure is low (both walks rooted atcontent/docs, counts> 100/> 50); ⛔ that is a reason to be honest about the verdict, not a reason to skip measuring it.⭐ The PM's ruling on #2, and you may overturn it with a measurement
toContain('_line-item-price-fill.ts')pins that the file list contains a name. It does not pin that any file in the surface issues a query. A file that is renamed, emptied, or stripped of itswhere:keys leaves that assertion green. ⇒ A filename proxy is not a content pin. 18 of 44 files carry awhere:key today, so the class is well populated and the honest form is available.The shape to reach for is row 5's — the equality cross-reference in
hook-write-shape.test.ts:444, which this seat re-read and confirmed:expect(covered, …).toBe(sites.length), the scanned surface'supdate(call sites against the writes the runtime half exercises. ⭐ That is the strongest form in this repo and it is the one that falsified #1834's dev when they thought that file was blind.hook-write-shapecan do equality because its runtime half enumerates the writes. Ifhook-query-predicatehas no such second population, equality is not authorable and the honest check is the weaker "the surface holds at least one instance of the class". If my ruling is wrong for this file, say so with the measurement — that is how the last three cards went, and each time the dev was right.⛔ How NOT to do it
it, no new gate. PR test(scan-surfaces): content-level sweep of the test farm, and pin the ctx-shape surface to its call sites #1838 changed one file and left the suite at 3455 tests, unchanged. ⭐ Match that.content/docs/releases/, and no governed surface.hook-write-shape.test.ts— Content-level sweep of the test farm's scan surfaces: which guards prove only that their surface is NON-EMPTY, rather than that it CONTAINS the thing the rule is about? (epic #1579) #1834 established it is already the strongest pin here and reverted its own repair to it.⭐ Acceptance — the same two legs, per surface you change
For every guard you touch: two legs against the same mutation at the same commit, only the assertion swapped.
trap … EXIT INT TERM; prove the restore by bytes (post-restore blob identical toHEAD,git diff HEAD --name-onlyempty,git status --porcelainempty).toBeGreaterThan/toHaveLengthmisses equality-form content pins three blocks away. Before you call any of these four blind, read the whole file.Also:⚠️ neither number should move; say so if one does) · test count before and after, expected unchanged.
pnpm verifygreen, exit codes before any pipe ·pnpm lint --jsonbefore/after on your own base (Changeset
Empty frontmatter. ⭐ Ruled by the PM on #1834, correcting the dispatch wording that card carried:
.github/workflows/changeset-check.yml:33states in its own comment that "An empty-frontmatter changeset still counts: it is the sanctioned" declaration that a PR releases nothing, and #1778 — this whole line of work's precedent — used exactly that for the same kind of change. ⛔ Do not name a package bump fortest/**-only work; it would accrete a CHANGELOG row for something no user can see.Base and coordination
mainat965933bor later. ⛔ Notclaude/issue-1581-lint-strict-flip.claude/issue-1826-field-consumers-six(feat(metadata): give four declared-but-unnamed fields the consumer they should already have #1831) ·claude/issue-1827-contact-mailing-address(feat(contacts): give the contact form its mailing-address block #1837) ·claude/issue-1834-content-level-sweep(test(scan-surfaces): content-level sweep of the test farm, and pin the ctx-shape surface to its call sites #1838). ⭐ test(scan-surfaces): content-level sweep of the test farm, and pin the ctx-shape surface to its call sites #1838 is the one that matters to you — it touchestest/hook-input-shape.test.ts, which is not one of your four, so there is no file collision; but its inventory is your input, so read PR test(scan-surfaces): content-level sweep of the test farm, and pin the ctx-shape surface to its call sites #1838's body before you start. ⛔ Do not measure against a tree containing any of the three.⛔ Not in this card
hook-write-shape.test.tsspecifically.--strictflip (Turn onos lint --strictin this repo's verify chain and prove the gate reds (epic #1579, step 2b — the half that needs a release) #1581) ·field-no-consumers(Give the six declared-but-unnamed fields the consumer they should already have — clear 6 of the 12field-no-consumerswarnings blocking #1581 (epic #1579) #1826 / The fivecrm_contact.mailing_*fields: the CSV importer writes them and the authored contact form may show none of them — clear the last 5field-no-consumerswarnings blocking #1581 (epic #1579) #1827) · the family cards Retire the local tests that re-implement the platform's flow / predicate / readonly-write lint rules, onceos lint --strictguards them (epic #1579, step 3, family F1) #1582–Retire the local hook / action / flow write-shape tests the platform's *-body-write-* and flow-node-write rules already enforce (epic #1579, step 3, family F6) #1587.src/**change — if a repair needs one, that is a finding to report, not a rider.Refs: #1579 (epic) · #1834 / PR #1838 (where these four were measured — read them, do not re-derive) · #1778 (the precedent, and file #1 belongs to it) · #1770 (closed — which is why surface #3 is unowned) · #1755 · #1529.