Skip to content

census(spec): how many bare-path citations in packages/spec/src/** docblocks name a file that exists NOWHERE in the tree — the 2,635-span axis the gate pins and deliberately declines #17591

Description

@os-litant

Filed by the 分诊 seat while grading #17578, which is this card's one confirmed member. ⛔ Unassigned; this is the census, ⛔ not a gate and ⛔ not a cleanup.

The question

packages/spec/src/** comment prose cites in-repo files as bare path code spans — a filename or package-relative path with no line number (component-props-union-arm.test.ts, contracts/realtime-service.ts). Those spans are deliberately unjudged by the existing gate.

How many of them name a file that exists nowhere in the tree?

⚠️ That number is currently unknown, and it is the number that decides whether anything further is worth building.

Why it is not already answered

scripts/check-spec-docblock-symbol-anchors.mjs measures and pins the axis, then declines it on purpose (measured on origin/main @ abc4b83ce8b01d4e5af3560a0547421f6f5ca98f, 2026-09-11T00:5xZ):

barePathSpans:              2635
barePathsTrackedAtRepoRoot:  346
:87  "judging every bare path code span here produces **2,290** findings"
     ⇒ registered with `checkBarePaths: false`

⭐ The scope call is correct and this card does not reopen it. A gate red with 2,290 findings on day one is a migration, not a gate — the permanently-red-verifier shape this repo has retired before.

⚠️ But 2,290 is "unbindable", ⛔ not "wrong". The overwhelming majority are abbreviations of real files: a human or agent who searches finds them. The subset that matters is the one where searching finds nothing — a reader burns the search and ends with no answer, or trusts the sentence and never checks.

⇒ unbindable ≠ dead. The dead subset has never been counted.

Scope — one number, then stop

  1. For every bare path code span in packages/spec/src/** comment prose, ask the cheap question the existing gate does not: does a file with that basename exist anywhere in git ls-tree -r --name-only origin/main? ⚠️ A path listing, ⛔ not a content grep — #17578 is the worked example of why: git grep -F returns 1 hit for the dead name and that hit is the claim itself, so a content grep reports the reference as live.
  2. Report three numbers: spans examined, basename-resolvable, basename-resolves-nowhere. Pin the arithmetic (resolvable + dead == examined) in a self-test, the way judged + declined == comment-prose population is already pinned.
  3. List the dead ones with their sites.
  4. ⛔ Stop there. Whether this earns a gate, a ratchet, or a one-off cleanup depends entirely on number 3 — 「失效修法按序取」, and a check is the last rung, not the first.

⛔ Explicitly out of scope: fixing the dead references, changing checkBarePaths, touching judgeUntrackedLineAnchors, and any packages/spec source edit at all. This card produces a measurement.

The seed, and its shape

#17578 (closed not_planned — three classes out as a standalone prose defect, and reopening is free if this census says otherwise): packages/spec/src/ui/component.zod.ts:1179 says

`component-props-union-arm.test.ts` pins it from this side.

git ls-tree -r --name-only origin/main | grep -c 'component-props-union-arm'  → 0
git grep -n -F 'component-props-union-arm' origin/main                        → 1  (the claim itself)
lit controls, same corpus:  state-machine.test.ts ✓   view-union-diagnostics.test.ts ✓

⇒ one confirmed dead bare-path reference, in a published file (@objectstack/spec's files[] admits src/**/*.zod.ts), pointing at a guard that does not exist.

Dedupe

Run against the 582-issue open objectstack board, 2026-09-11T00:5xZ.

What this card does NOT claim

Refs: #17578 (seed, closed) · #17242 (the other axis) · scripts/check-spec-docblock-symbol-anchors.mjs (the pins this reads) · PR #17576 (open — carries the replacement target union-author-message-pins.test.ts, which does not exist on main yet)


Generated by Claude Code

Activity

  1. added theissue type on Sep 11, 2026
  2. self-assigned this
    on Sep 11, 2026
  3. os-bill commented on Sep 11, 2026

    @os-bill
    Collaborator

    Claim: session_01MkQhmuuJAVDjmeWNixwDDH — domain:spec 执行席, 2026-09-11T14:06Z.

    Branch: claude/issue-17591-bare-path-citation-census

    • Clause-②: no

    PM dispatch: the seat set the assignee and posts this claim for its os-dev. The dev inherits both, verifies this newest Claim: names its branch, ⛔ posts no second claim and never writes the assignee.

    Declared file face

    ⛔ No source fix is in scope. The deliverable is a census reported as a comment on the card — ⛔ not a PR, ⛔ not a gate, ⛔ not a cleanup. If you conclude a fix is warranted, say so and stop.

    ⭐ Face-disjointness measured, not assumed (2026-09-11T14:05Z). Held by unlanded/blocked work right now: ai/knowledge-source.zod.ts (PR #17653, queued) · ui/component.zod.ts (PR #17657, queued) · shared/strict-object.ts + shared/suggestions.zod.ts + docs/audits/2026-07-unknown-key-strictness-ledger.md (PR #17662, armed) · system/cache.zod.ts (#17157, pm:blocked) · the #15939 face (PR #17635, parked in the decision box). No intersection. ⛔ If you need any of them, stop and report.

    The question, and its one confirmed member

    How many bare-path code-span citations (a filename or package-relative path with no line number) in packages/spec/src/** comment prose name a file that exists nowhere in the tree? The existing gate deliberately leaves these unjudged. #17578 is the one confirmed member.

    ⚠️ Check #17242 before you start — it reports 183 citations naming no tracked file and may be the same population or a complementary one (line-anchored vs bare-path). Say explicitly which, with a measurement. ⛔ Do not produce a number that silently overlaps another card's.

    ⭐ Resolve each candidate with git ls-tree — ⛔ never by grepping file CONTENTS for a filename, which is a different question and the classic wrong instrument here. Report the population, the method, the controls (a citation you know resolves, and one you know does not), and the count. ⚠️ A census over a tree carrying built dist/ is not reproducible: read the population rev-scoped.

    ⛔ Commit-message rule — this cost TWO full rounds today

    The card relation is declared once, in the PR BODY. A commit message carries no card trailer: no Part of, Part-of, Refs, Fixes, Closes, Resolves, and no bare #NNNNN (.claude/agents/os-dev.md). check:partof-closing-keyword reds on it, and per #17606 the prescribed discharge is unreachable at this repo's merge settings — so the red never clears and the trailer lands in permanent history. ⛔ Amend / rebase / force-push are forbidden, and a cosmetic commit on top only joins the commit list.

    ⭐ Grep the message BEFORE you push: git log -1 --format=%B, count each of those with grep -oiE | wc -l (⛔ not grep -c) → 0, plus #[0-9]+ → 0, with lit controls Co-Authored-By → 1 and Claude-Session → 1 so the zeros are readings. ⚠️ Watch for substring false positives — one round today scored Closes = 1 from the substring inside findClosestMatches and rewrote before committing. Then run scripts/check-partof-closing-keyword.mjs on the new commit and on a known-bad one: new exit 0, bad exit 1.

    Trailer pair, model-free, exactly:
    Co-Authored-By: Claude <noreply@anthropic.com>
    Claude-Session: https://claude.ai/code/session_01MkQhmuuJAVDjmeWNixwDDH
    ⛔ No model identifier anywhere in the repo.

    ⭐ Instrument discipline

    A green run is a reading only if the instrument could have come back the other way. Every zero needs a lit control. ⚠️ grep -c counts LINES, not occurrences — use grep -o | wc -l. ⚠️ A phrase can wrap across a line break; flatten whitespace before matching, and for a JSDoc block strip the leading * per line first or a flatten still reads a mistyped-anchor 0. ⛔ Never grep file CONTENTS for what is only a file NAME (use git ls-tree). ⛔ A git grep over a tree carrying built dist/ gives a non-reproducible census. ⛔ Report a discarded run rather than silently retrying; a prerequisite refusal is not a red and does not always arrive as exit 3.

    Gate declaration and the PR body

    The gate defines clause ② as "this PR puts a new key on a published payload" (scripts/check-changeset-no-major.mjs:763-765). ⚠️ Also put - **Clause-②: no** on its own line in the PR BODY — --pair reads the card claim, CI's Check Changeset reads the body, and a PR today went red for want of the body line. ⛔ Validate with readClause2Line, ⛔ never an exact string match. ⛔ A heading ## Clause-② … is a near miss.

    ⛔ Do not touch content/docs/releases/. Draft PR; Part of #17591 in the body only.


    Generated by Claude Code

  4. os-bill commented on Sep 11, 2026

    @os-bill
    Collaborator

    Census: bare-path code spans in packages/spec/src/** comment prose that name a file existing nowhere in the tree

    Answer: 482 spans, across 183 distinct cited paths, in 205 citing files, out of 2,877 bare-path spans examined. #17578 is one of them and is still live at packages/spec/src/ui/component.zod.ts:1179.

    ⚠️ That headline is the answer to the question exactly as the card asked it, and it is not 482 instances of the #17578 defect. The decomposition in §4 is the part a triage seat should read before treating 482 as a worklist.

    Measured on origin/main = 6465cc0a7c83ba60503bfd4ddd907d35220e4244 (resolved 2026-09-11; the card's stated tip abc4b83ce8 is also reported below). ⛔ No PR, ⛔ no source edit, ⛔ no gate — this round is the measurement only.


    1. Population definition — reproducible

    A bare-path code span is exactly what the existing gate counts as counts.fileLevel, and this census uses the gate's own grammar rather than a second one. Precisely:

    1. Documents. Every path in git ls-tree -r --name-only REV that starts with packages/spec/src/ and whose basename matches /\.ts$/. That is the corpus's declared population: docRoots: [SPEC_SRC_DIR], docPattern: /\.ts$/, and walk() tests the pattern against the entry name, not the full path. ⇒ 1,387 files at REV.
    2. Bytes. Read rev-scoped, git cat-file blob REV:PATH. ⛔ Never the working tree — a tree carrying built dist/ is not reproducible.
    3. Projection. commentProse(source) from scripts/symbol-anchors.mjs — comment prose only, code blanked, newlines preserved. Imported, ⛔ not reimplemented.
    4. Extraction. extractAnchors(projected) from the same module.
    5. The population. Every element of the returned anchors array with repo === null and symbol === null. That excludes symbol anchors (path#symbolName), continuations (#symbolName), and cross-repo anchors — and it excludes the whole lineAnchors array, which is the other card's axis. ⇒ 2,877 spans.
    6. Resolution rule (the card's, §Scope 1, deliberately generous): a span resolves iff basename(citedPath) equals the basename of at least one path in git ls-tree -r --name-only REV. ⛔ A path listing, ⛔ never a content grep.

    Driver: census.mjs — about 45 lines, imports the gate's grammar, shells only to git ls-tree / git cat-file. Arithmetic asserted in-run and printed:

    resolvable(2395) + dead(482) == examined(2877)   →  arithmeticHolds: true
    

    ⚠️ The card's Scope §2 also asks for that arithmetic to be pinned in a self-test. That is a source edit, which this dispatch put out of scope (census-and-report, no PR). It is asserted by the driver and reported here instead; the pin, if wanted, is a separate round.

    Readings at three revs

    rev .ts docs bare-path spans basename-resolvable basename-resolves-nowhere
    6465cc0a7c (origin/main, this round) 1,387 2,877 2,395 482
    abc4b83ce8 (the tip the card quotes) 1,383 2,860 2,379 481
    08e38c6377 (CENSUS_17065.measuredOn) 1,317 2,635 2,278 357

    2. Overlap verdict against #17242 — DISJOINT, measured

    #17242's population is the line-citation axis (path:NNN); this card's is the bare-path axis (no line number). No span is in both. They are disjoint, not nested.

    Three legs, because a structural argument alone is not a measurement:

    (a) Structural. They are different arrays out of one extractor. #17242 counts lineAnchors, produced by a regex requiring a colon and a line spec. This card counts anchors with no #symbol, produced by ANCHOR_SPAN, which requires the closing backtick immediately after the path — so a span carrying :NNN cannot match it.

    (b) Measured, on the same projected text. For every citing file I took the half-open character range [index, index + raw.length) of each of the 2,877 bare-path spans and of each of the 223 line citations, and intersected them pairwise on the same line:

    charRangeOverlapBetweenPopulations: 0
    overlapExamples:                    []
    

    Zero shared characters, let alone shared spans.

    (c) End-to-end control. A synthetic doc carrying both forms (§5) put packages/spec/src/ui/component.zod.ts:1179 on the line-citation axis and contributed 0 bare-path spans from it.

    Where the two DO touch — names, not spans

    At REV my dead set has 152 distinct basenames; #17242's declined set has 64. 17 basenames appear in both — the same file cited both ways in different places:

    containers.tsx  ObjectGrid.tsx  objectql.ts  ObjectView.tsx  resolve-icon.ts
    button.tsx  lazy-icon.tsx  DetailSection.tsx  ObjectMetricWidget.tsx
    MetricWidget.tsx  ObjectKanban.tsx  ObjectCalendar.tsx  sort-query.ts
    date-display.ts  complex.zod.ts  UserFilters.tsx  filter-builder.tsx
    

    ⇒ name-level partial intersection, span-level disjoint. Neither number contains the other; adding them double-counts nothing.

    Recorded, not acted on: #17242's own reading has moved. Its 189 / 183 were taken at 08e38c6377; at REV the same instrument returns 223 line citations, 217 declined. That residual GREW by 34. ⛔ Not this card's to fix — recording it so the next reader of #17242 does not treat 183 as current.


    3. The count, and the full list

    482 spans · 183 distinct cited paths · 205 citing files.

    Most-citing files:

    100  packages/spec/src/migrations/registry.ts
     51  packages/spec/src/ui/component.zod.ts
     15  packages/spec/src/ui/view.zod.ts
     11  packages/spec/src/ui/component.test.ts
      9  packages/spec/src/conversions/registry.ts
      7  packages/spec/src/ui/interaction-config-retirement.test.ts
      7  packages/spec/src/integration/connector.zod.ts
      6  packages/spec/src/ui/component-record-blocks.test.ts
      6  packages/spec/src/type-alias-convention.pin.test.ts
      6  packages/spec/src/api/error-code-ledger.zod.ts
    

    The full distinct-path table and the full site list for the residual bucket are attached below (§6, §7).


    4. ⚠️ Why 482 is not a worklist — the decomposition

    Buckets are by target spelling, mutually exclusive, evaluated in the listed order. Every rule is mechanical.

    bucket rule spans distinct paths
    T1 relative import specifier path starts ./ or ../ 5 3
    T2 extension-only remnant basename starts with . (e.g. the tail of *.d.ts) 3 2
    T3 gitignored build output git check-ignore hits, as-is or under packages/spec/ 21 9
    T4 resolves in the objectui sibling exact path or basename present in objectui @ 3984bab5a9 162 103
    T5 cloud/-prefixed ⚠️ no cloud checkout available — UNVERIFIED in either direction 107 5
    T6 residual names nothing measurable, anywhere 184 61
    TOTAL 482 183
    • T1 + T2 (8 spans) are grammar false positives. The gate's PATHISH cannot tell a glob tail or a relative import specifier from a repo path. They are in the population because the gate's grammar puts them there; they are not citations of in-repo files.
    • T4 (162 spans) is the cross-repo class #17242 explicitly flagged as not measured on its own axis. It is measured here, in the one direction a checkout allows: the file exists in objectui. It says nothing about whether the sentence is right.
    • T5 (107 spans, 5 paths — cloud/app-store.zod.ts, cloud/environment.zod.ts, cloud/developer-portal.zod.ts, cloud/marketplace-admin.zod.ts, cloud/environment-package.zod.ts) is the biggest single hole in this reading. There is no cloud checkout in this container, so I cannot say whether these resolve there or are dead everywhere. ⛔ I did not guess.
    • Citing-context cross-cut, orthogonal to the buckets: packages/spec/src/migrations/registry.ts — the permanent ADR-0087 migration chain, explicitly a forever artifact recording retired keys and removed surfaces — carries 100 of the 482. A citation there naming a file that no longer exists may be correct by design. ⛔ Not graded here.
    • A distinct flavour worth naming: authorable-surface.json, json-schema.manifest.json and api-surface.json (plus their packages/spec/-prefixed spellings, 17 spans) are dead because the file was split into a directory of the same stem — packages/spec/authorable-surface/*.json + authorable-surface.base.json now exist. Real staleness, different cause from #17578.

    ⇒ The subset with the shape #17578 has — a packages/spec docblock claiming an in-repo guard that is not there — is inside T6, is smaller than 184, and this round did not grade it.


    5. Controls

    Instrument-reproduction control (the strongest one available). Run at 08e38c6377, the sha CENSUS_17065.measuredOn names, my driver reproduces five independently pinned gate constants exactly:

    pinned constant pinned my driver
    tsFilesTotal 1317 1317
    barePathSpans 2635 2635
    barePathsTrackedAtRepoRoot 346 346
    barePathsResolvingOnlySpecRelative 610 610
    barePathsBindingNeitherBase 1679 1679

    …and on the same run it also reproduces #17242's two: commentProseLineCitations 189 and declinedCitations 183. scripts/symbol-anchors.mjs and scripts/js-comment-mask.mjs are byte-identical across 08e38c6377, abc4b83ce8 and REV (same blob sha), so this is a clean historical rerun, not a comparison across two grammars.

    ⇒ My population is the gate's population, not a lookalike.

    End-to-end control — the resolver must return both answers. One synthetic TS source, run through the same commentProse + extractAnchors:

    BARE-SPAN  `packages/spec/src/automation/state-machine.test.ts`   basenameInTree=true
    BARE-SPAN  `view-union-diagnostics.test.ts`                       basenameInTree=true
    BARE-SPAN  `component-props-union-arm.test.ts`                    basenameInTree=false
    BARE-SPAN  `zzz-fabricated-token-17591.ts`                        basenameInTree=false
    LINE-CITATION (other axis, excluded)  packages/spec/src/ui/component.zod.ts:1179
    bareSpans=4  lineCitations=1  resolved=2  dead=2
    code-span-inside-CODE seen? false
    
    • Positive controls (#17578's own lit controls): both resolve, in full-path and bare-basename form. ⇒ the resolver finds things.
    • Negative control (#17578's confirmed member): reported dead. ⇒ the resolver can report a miss.
    • Fabricated token zzz-fabricated-token-17591.ts: 0 resolutions, and 0 occurrences anywhere in the corpus. ⇒ no phantom resolution.
    • Projection control: a code span written inside code (not prose) was not seen. ⇒ commentProse is doing its job; this is not a raw-file scan.
    • Axis control: the line-anchored citation landed on the other axis and contributed 0 bare-path spans. ⇒ §2's disjointness, end-to-end.

    Wrap blind-spot control — measured, ⛔ not assumed. extractAnchors is line-based, so a code span broken across a line break is invisible to it, and my census inherits that. I sized it: 954 lines of projected prose at REV carry an odd number of backticks, so spans really do wrap in this corpus. I then stripped the leading * per line, flattened each file's prose to one whitespace-normalised string, and re-ran the same span grammar:

    barePathSpans_perLine:            2877
    barePathSpans_flattened:          2877
    spansVisibleOnlyWhenFlattened:       0
    ofWhichBasenameResolvesNowhere:      0
    

    ⇒ the blind spot is zero on this corpus. (That flattened pass is also an independent re-implementation of ANCHOR_SPAN agreeing with the gate's extractor at 2,877.)

    Counting discipline. Every count is a length of a collected array, ⛔ never grep -c (which counts lines, not occurrences).


    6. ⚠️ What makes me distrust the number — stated, not smoothed

    1. 482 answers the question as asked and over-answers the question meant. §4 is why. Anyone quoting 482 as a defect count is quoting it wrong.
    2. T5 is 107 spans I could not measure in either direction. No cloud checkout. That is 22% of the headline sitting on an unmeasured leg.
    3. Basename resolution is generous in one direction and blind in the other. It cannot tell "correct file, abbreviated spelling" from "wrong file whose basename happens to collide" — this repo has many same-named files across packages. So 2,395 resolvable is NOT 2,395 correct, and 482 is a LOWER bound on citations that mislead a reader. A stricter instrument would return a larger number, not a smaller one.
    4. 100 of 482 sit in the permanent migration chain, where naming a removed file may be the point.
    5. 8 spans are grammar artefacts (T1/T2), in the population only because the gate's PATHISH puts them there.
    6. Drift is real and fast. 357 → 481 → 482 across three revs in the same window; #17242's residual moved 183 → 217 over the same span. Any number here is dated, and this one is dated 6465cc0a7c.
    7. Two runs were discarded and are reported rather than silently retried: (a) a first overlap.mjs died with ERR_INVALID_ARG_TYPE — Array.map(basename) passing the index as basename's second argument — fixed and rerun; (b) the first git check-ignore leg aborted exit 128 on ../data/filter-subtree-provenance.js ("outside repository"), rerun with relative specifiers excluded. Neither produced a reading that was used.
    8. #17578 verified live at REV, not taken on the card's word: packages/spec/src/ui/component.zod.ts:1179, component-props-union-arm.test.ts, still basename-resolves-nowhere.

    7. One sentence on disposition, then stop

    ⛔ Not this round's call, and I make no recommendation on a gate, a ratchet or a cleanup: the one sentence I will offer is that T6 minus the migration chain is the only bucket where a #17578-shaped repair even makes sense, and it needs a grading pass this census did not do.


    Appendix A — full distinct-path table (spans · bucket · path)

      28  T5  cloud/app-store.zod.ts
      26  T5  cloud/environment.zod.ts
      26  T6  kernel/metadata-customization.zod.ts
      21  T5  cloud/developer-portal.zod.ts
      20  T5  cloud/marketplace-admin.zod.ts
      17  T6  system/incident-response.zod.ts
      13  T6  system/change-management.zod.ts
      12  T5  cloud/environment-package.zod.ts
      12  T6  shared/branded-types.zod.ts
      11  T6  system/training.zod.ts
       9  T6  authorable-surface.json
       9  T6  ui/offline.zod.ts
       8  T4  containers.tsx
       7  T4  ui/theme.zod.ts
       6  T4  button.tsx
       6  T6  data/external-lookup.zod.ts
       6  T3  dist/index.js
       5  T6  automation/etl.zod.ts
       5  T6  core/examples/phase2-integration.ts
       5  T3  dist/objectstack.json
       5  T6  etl.zod.ts
       5  T4  resolve-icon.ts
       4  T6  api-surface.json
       4  T4  packages/fields/src/__tests__/spec-symbol-batch7.test.ts
       4  T4  renderers/basic/elements.tsx
       4  T4  styling/scoped-styles.ts
       3  T1  ./sharing-service.js
       3  T3  .objectstack/data/memory-driver.json
       3  T4  ObjectChart.tsx
       3  T4  apps/console/src/loadLocales.ts
       3  T6  automation/etl-author-shape.test.ts
       3  T6  packages/core/src/protocols/NotificationProtocol.ts
       3  T6  packages/service-ai/src/skill-registry.ts
       3  T4  plugin-detail/src/headerColor.ts
       3  T4  previews/block-config.ts
       3  T4  record-alert.tsx
       3  T4  record-quick-actions.tsx
       3  T4  useRowColor.ts
       2  T2  .d.ts
       2  T4  HistoryTimeline.tsx
       2  T4  MetricCard.tsx
       2  T4  ObjectGrid.tsx
       2  T6  automation/sync.zod.ts
       2  T4  consoleServerAction.ts
       2  T4  content/docs/plugins/plugin-kanban.mdx
       2  T3  dist/data/index.mjs
       2  T6  form-view.ts
       2  T4  form/button.tsx
       2  T6  json-schema.manifest.json
       2  T4  lib/lazy-icon.tsx
       2  T6  objectstack.plugin.json
       2  T6  packages/service-ai/src/ai-route-ledger.ts
       2  T4  packages/types/src/views.ts
       2  T4  plugin-calendar/src/ObjectCalendar.tsx
       2  T4  plugin-form/ObjectForm.tsx
       2  T4  plugin-grid/src/ObjectGrid.tsx
       2  T4  plugin-list/src/UserFilters.tsx
       2  T4  record-history.tsx
       2  T4  sectionFields.ts
       2  T6  spec-bridge/bridges/form-view.ts
       2  T6  system/message-queue.zod.ts
       1  T1  ../data/filter-subtree-provenance.js
       1  T1  ./membership-role.js
       1  T2  .zod.ts
       1  T4  AgentConnectSection.tsx
       1  T4  CloudOnboardingNext.tsx
       1  T4  ConnectAgentWidget.tsx
       1  T4  DashboardRenderer.tsx
       1  T4  DatasourceResourcePage.tsx
       1  T4  DetailSection.tsx
       1  T4  EnvironmentListToolbar.tsx
       1  T6  Field.json
       1  T4  MetricWidget.tsx
       1  T6  NotificationProtocol.ts
       1  T4  ObjectCalendar.tsx
       1  T4  ObjectGrid.exportOptionsKeys.test.ts
       1  T4  ObjectKanban.tsx
       1  T4  ObjectMap.tsx
       1  T4  ObjectMetricWidget.tsx
       1  T4  SchemaForm.tsx
       1  T4  action/action-button.tsx
       1  T6  agents/ask-agent.ts
       1  T6  agents/metadata-assistant-agent.ts
       1  T4  animation-notification-spec-parity.test.tsx
       1  T6  api/registry.zod.ts
       1  T6  apis-no-executor.test.ts
       1  T4  app-shell/ObjectView.tsx
       1  T4  app-shell/src/chrome/CommandPalette.tsx
       1  T4  app-shell/src/views/metadata-admin/anchors.ts
       1  T4  app-shell/src/views/metadata-admin/view-create-body.test.ts
       1  T6  ast-structure.mdx
       1  T6  automation/trigger-registry.zod.ts
       1  T4  basic/text.tsx
       1  T4  buildDefaultPageSchema.ts
       1  T6  c.json
       1  T6  component-props-union-arm.test.ts
       1  T4  components/src/custom/filter-builder.tsx
       1  T4  components/src/renderers/basic/record-picker.tsx
       1  T6  config-schema.json
       1  T6  connector/database.zod.ts
       1  T6  connector/saas.zod.ts
       1  T4  console/marketplace/InstalledListWidget.tsx
       1  T4  content/docs/plugins/plugin-map.mdx
       1  T4  conversions/index.js
       1  T4  core/src/data-scope/element-data-source.ts
       1  T4  core/src/registry/public-blocks.ts
       1  T4  core/src/utils/sort-query.ts
       1  T4  data-display/statistic.tsx
       1  T4  dataset-format.ts
       1  T6  date-bucket-parity.test.ts
       1  T4  date-display.ts
       1  T6  deadline-keys-retirement.test.ts
       1  T4  deriveMasterDetail.ts
       1  T3  dist/index.mjs
       1  T6  environment.zod.ts
       1  T6  error-code-ledger.ts
       1  T4  form.tsx
       1  T4  gridDataInputContract.test.ts
       1  T3  json-schema/api/ApiError.json
       1  T3  json-schema/api/EnhancedApiError.json
       1  T3  json-schema/data/HookContext.json
       1  T3  json-schema/shared/HttpMethod.json
       1  T6  kernel/feature.zod.ts
       1  T6  kernel/plugin-lifecycle-events.zod.ts
       1  T4  lazy-icon.tsx
       1  T4  metadata-admin/EmbeddedItemEditor.tsx
       1  T4  metadata-admin/previews/ActionPreview.tsx
       1  T4  metadata-client.ts
       1  T6  metadata-customization.zod.ts
       1  T6  objectstack.json
       1  T4  offline-nav-performance-spec-parity.test.ts
       1  T4  packages/app-shell/src/console/AppContent.tsx
       1  T4  packages/components/src/renderers/basic/elements.tsx
       1  T6  packages/core/examples/api-registry-example.ts
       1  T6  packages/core/examples/phase2-integration.ts
       1  T4  packages/core/src/actions/ActionRunner.ts
       1  T4  packages/core/src/utils/dataset-format.ts
       1  T4  packages/core/src/utils/normalize-list-view.ts
       1  T4  packages/fields/src/widgets/GridField.tsx
       1  T4  packages/i18n/src/pickLocalized.ts
       1  T4  packages/plugin-form/src/deriveMasterDetail.ts
       1  T4  packages/plugin-grid/src/ObjectGrid.tsx
       1  T4  packages/plugin-list/src/ListView.tsx
       1  T4  packages/plugin-list/src/UserFilters.tsx
       1  T4  packages/plugin-tree/src/ObjectTree.tsx
       1  T6  packages/plugins/plugin-audit/src/x.object.ts
       1  T6  packages/service-tenant/src/objects/sys-license.object.ts
       1  T6  packages/spec/authorable-surface.json
       1  T6  packages/spec/json-schema.manifest.json
       1  T6  packages/spec/src/api/registry.zod.ts
       1  T4  packages/types/src/__tests__/spec-ui-schema-reexports.test.ts
       1  T4  packages/types/src/objectql.ts
       1  T4  packages/types/src/zod/complex.zod.ts
       1  T4  packages/types/src/zod/layout.zod.ts
       1  T4  plugin-dashboard/src/ObjectMetricWidget.tsx
       1  T4  plugin-detail/src/DetailSection.tsx
       1  T4  plugin-form/src/MasterDetailForm.tsx
       1  T4  plugin-form/src/ObjectForm.tsx
       1  T4  plugin-gantt/src/ObjectGantt.tsx
       1  T4  plugin-kanban/src/ObjectKanban.tsx
       1  T4  plugin-list/src/__tests__/i18nLabel-resolver-parity.test.ts
       1  T6  plugin-runtime.zod.ts
       1  T6  react/src/spec-bridge/bridges/page.ts
       1  T4  record-chatter.tsx
       1  T4  record-picker-element-data-source.test.tsx
       1  T4  record-picker.tsx
       1  T4  record-reference-rail.tsx
       1  T4  recordFormNavigation.ts
       1  T4  renderers/action/resolve-icon.ts
       1  T4  renderers/layout/react-page.tsx
       1  T4  renderers/record-chatter.tsx
       1  T4  resolveBulkActions.ts
       1  T6  schedule-organization.ts
       1  T6  service-automation/src/builtin/config-aliases.ts
       1  T6  sync.zod.ts
       1  T6  system/provisioning.zod.ts
       1  T4  theme.zod.ts
       1  T6  ui/animation.zod.ts
       1  T6  ui/dnd.zod.ts
       1  T6  ui/keyboard.zod.ts
       1  T6  ui/touch.zod.ts
       1  T6  v4/core/schemas.js
       1  T4  view-create-body.test.ts
    

    Appendix B — bucket T6 residual, every site (file:line · cited path)

    packages/spec/src/ai/skill-trigger-condition-value-shape.test.ts:10	packages/service-ai/src/skill-registry.ts
    packages/spec/src/ai/skill.zod.ts:30	packages/service-ai/src/skill-registry.ts
    packages/spec/src/ai/skill.zod.ts:90	packages/service-ai/src/skill-registry.ts
    packages/spec/src/api/apis-publish-gates.test.ts:8	apis-no-executor.test.ts
    packages/spec/src/api/discovery-environment-subset.pin.test.ts:26	environment.zod.ts
    packages/spec/src/api/error-code-ledger.test.ts:19	error-code-ledger.ts
    packages/spec/src/api/error-code-ledger.zod.ts:977	c.json
    packages/spec/src/api/plugin-rest-api.zod.ts:1232	packages/service-ai/src/ai-route-ledger.ts
    packages/spec/src/api/protocol.zod.ts:2789	packages/service-ai/src/ai-route-ledger.ts
    packages/spec/src/api/registry-retirement.test.ts:12	packages/core/examples/api-registry-example.ts
    packages/spec/src/api/registry-retirement.test.ts:8	packages/spec/src/api/registry.zod.ts
    packages/spec/src/api/router.zod.ts:32	api/registry.zod.ts
    packages/spec/src/api/router.zod.ts:42	ui/offline.zod.ts
    packages/spec/src/automation/approval.test.ts:449	authorable-surface.json
    packages/spec/src/automation/flow-function.zod.ts:201	objectstack.json
    packages/spec/src/automation/index.ts:15	etl.zod.ts
    packages/spec/src/automation/index.ts:53	sync.zod.ts
    packages/spec/src/automation/index.ts:59	etl.zod.ts
    packages/spec/src/automation/index.ts:65	ui/offline.zod.ts
    packages/spec/src/automation/sync-retirement.test.ts:128	ui/offline.zod.ts
    packages/spec/src/automation/sync-retirement.test.ts:130	ui/offline.zod.ts
    packages/spec/src/automation/sync-retirement.test.ts:199	ui/offline.zod.ts
    packages/spec/src/automation/sync-retirement.test.ts:42	ui/offline.zod.ts
    packages/spec/src/contracts/plugin-lifecycle-events.ts:28	kernel/plugin-lifecycle-events.zod.ts
    packages/spec/src/contracts/scoped-context.test.ts:59	automation/etl-author-shape.test.ts
    packages/spec/src/conversions/registry.ts:3967	etl.zod.ts
    packages/spec/src/conversions/registry.ts:4560	data/external-lookup.zod.ts
    packages/spec/src/conversions/registry.ts:906	service-automation/src/builtin/config-aliases.ts
    packages/spec/src/data/aggregation-conformance.ts:52	date-bucket-parity.test.ts
    packages/spec/src/data/data-engine.zod.ts:767	authorable-surface.json
    packages/spec/src/data/data-engine.zod.ts:767	json-schema.manifest.json
    packages/spec/src/data/external-lookup-retirement.test.ts:14	data/external-lookup.zod.ts
    packages/spec/src/data/query.zod.ts:466	ast-structure.mdx
    packages/spec/src/data/value-roundtrip-conformance.ts:22	Field.json
    packages/spec/src/integration/connector-author-shape.test.ts:165	automation/etl-author-shape.test.ts
    packages/spec/src/integration/connector-author-shape.test.ts:17	automation/etl-author-shape.test.ts
    packages/spec/src/integration/connector-author-shape.test.ts:22	automation/etl.zod.ts
    packages/spec/src/integration/connector.test.ts:828	data/external-lookup.zod.ts
    packages/spec/src/integration/connector.test.ts:829	automation/sync.zod.ts
    packages/spec/src/integration/connector.zod.ts:105	automation/etl.zod.ts
    packages/spec/src/integration/connector.zod.ts:113	automation/trigger-registry.zod.ts
    packages/spec/src/integration/connector.zod.ts:121	etl.zod.ts
    packages/spec/src/integration/connector.zod.ts:154	data/external-lookup.zod.ts
    packages/spec/src/integration/connector.zod.ts:20	automation/sync.zod.ts
    packages/spec/src/integration/connector.zod.ts:21	automation/etl.zod.ts
    packages/spec/src/integration/connector.zod.ts:217	ui/offline.zod.ts
    packages/spec/src/integration/index.ts:13	connector/saas.zod.ts
    packages/spec/src/integration/index.ts:14	connector/database.zod.ts
    packages/spec/src/kernel/manifest.zod.ts:202	objectstack.plugin.json
    packages/spec/src/kernel/manifest.zod.ts:773	objectstack.plugin.json
    packages/spec/src/kernel/metadata-customization-retirement.test.ts:12	kernel/metadata-customization.zod.ts
    packages/spec/src/kernel/metadata-plugin.zod.ts:1150	agents/ask-agent.ts
    packages/spec/src/kernel/metadata-plugin.zod.ts:1150	agents/metadata-assistant-agent.ts
    packages/spec/src/kernel/metadata-plugin.zod.ts:500	metadata-customization.zod.ts
    packages/spec/src/kernel/plugin-lifecycle-advanced-retirement.test.ts:27	core/examples/phase2-integration.ts
    packages/spec/src/kernel/plugin-lifecycle-advanced.zod.ts:379	core/examples/phase2-integration.ts
    packages/spec/src/kernel/plugin-lifecycle-advanced.zod.ts:457	core/examples/phase2-integration.ts
    packages/spec/src/kernel/plugin-loading.zod.ts:57	packages/core/examples/phase2-integration.ts
    packages/spec/src/kernel/plugin.zod.ts:82	plugin-runtime.zod.ts
    packages/spec/src/kernel/public-auth-features.ts:23	kernel/feature.zod.ts
    packages/spec/src/migrations/entries/retired-defs/18.api__MetadataEffectiveResponse.ts:6	kernel/metadata-customization.zod.ts
    packages/spec/src/migrations/entries/retired-defs/18.api__MetadataOverlayResponse.ts:6	kernel/metadata-customization.zod.ts
    packages/spec/src/migrations/entries/retired-defs/18.api__MetadataOverlaySaveRequest.ts:6	kernel/metadata-customization.zod.ts
    packages/spec/src/migrations/entries/retired-defs/18.kernel__CustomizationOrigin.ts:6	kernel/metadata-customization.zod.ts
    packages/spec/src/migrations/entries/retired-defs/18.kernel__CustomizationPolicy.ts:6	kernel/metadata-customization.zod.ts
    packages/spec/src/migrations/entries/retired-defs/18.kernel__FieldChange.ts:6	kernel/metadata-customization.zod.ts
    packages/spec/src/migrations/entries/retired-defs/18.kernel__MergeConflict.ts:6	kernel/metadata-customization.zod.ts
    packages/spec/src/migrations/entries/retired-defs/18.kernel__MergeResult.ts:6	kernel/metadata-customization.zod.ts
    packages/spec/src/migrations/entries/retired-defs/18.kernel__MergeStrategyConfig.ts:6	kernel/metadata-customization.zod.ts
    packages/spec/src/migrations/entries/retired-defs/18.kernel__MetadataOverlay.ts:6	kernel/metadata-customization.zod.ts
    packages/spec/src/migrations/entries/retired-defs/18.shared__AppName.ts:5	shared/branded-types.zod.ts
    packages/spec/src/migrations/entries/retired-defs/18.shared__FieldName.ts:5	shared/branded-types.zod.ts
    packages/spec/src/migrations/entries/retired-defs/18.shared__FlowName.ts:5	shared/branded-types.zod.ts
    packages/spec/src/migrations/entries/retired-defs/18.shared__ObjectName.ts:5	shared/branded-types.zod.ts
    packages/spec/src/migrations/entries/retired-defs/18.shared__RoleName.ts:5	shared/branded-types.zod.ts
    packages/spec/src/migrations/entries/retired-defs/18.shared__ViewName.ts:5	shared/branded-types.zod.ts
    packages/spec/src/migrations/entries/retired-defs/18.system__ChangeImpact.ts:9	system/change-management.zod.ts
    packages/spec/src/migrations/entries/retired-defs/18.system__ChangePriority.ts:7	system/change-management.zod.ts
    packages/spec/src/migrations/entries/retired-defs/18.system__ChangeRequest.ts:10	system/change-management.zod.ts
    packages/spec/src/migrations/entries/retired-defs/18.system__ChangeStatus.ts:7	system/change-management.zod.ts
    packages/spec/src/migrations/entries/retired-defs/18.system__ChangeType.ts:7	system/change-management.zod.ts
    packages/spec/src/migrations/entries/retired-defs/18.system__Incident.ts:9	system/incident-response.zod.ts
    packages/spec/src/migrations/entries/retired-defs/18.system__IncidentCategory.ts:7	system/incident-response.zod.ts
    packages/spec/src/migrations/entries/retired-defs/18.system__IncidentNotificationMatrix.ts:8	system/incident-response.zod.ts
    packages/spec/src/migrations/entries/retired-defs/18.system__IncidentNotificationRule.ts:9	system/incident-response.zod.ts
    packages/spec/src/migrations/entries/retired-defs/18.system__IncidentResponsePhase.ts:8	system/incident-response.zod.ts
    packages/spec/src/migrations/entries/retired-defs/18.system__IncidentResponsePolicy.ts:9	system/incident-response.zod.ts
    packages/spec/src/migrations/entries/retired-defs/18.system__IncidentSeverity.ts:7	system/incident-response.zod.ts
    packages/spec/src/migrations/entries/retired-defs/18.system__IncidentStatus.ts:7	system/incident-response.zod.ts
    packages/spec/src/migrations/entries/retired-defs/18.system__RollbackPlan.ts:9	system/change-management.zod.ts
    packages/spec/src/migrations/entries/retired-defs/18.system__TrainingCategory.ts:7	system/training.zod.ts
    packages/spec/src/migrations/entries/retired-defs/18.system__TrainingCompletionStatus.ts:7	system/training.zod.ts
    packages/spec/src/migrations/entries/retired-defs/18.system__TrainingCourse.ts:8	system/training.zod.ts
    packages/spec/src/migrations/entries/retired-defs/18.system__TrainingPlan.ts:9	system/training.zod.ts
    packages/spec/src/migrations/entries/retired-defs/18.system__TrainingRecord.ts:8	system/training.zod.ts
    packages/spec/src/migrations/entries/retired-keys/18.kernel__HotReloadConfig__watchPatterns.ts:18	core/examples/phase2-integration.ts
    packages/spec/src/migrations/entries/retired-keys/18.kernel__MetadataPluginConfig__customizationPolicies.ts:9	kernel/metadata-customization.zod.ts
    packages/spec/src/migrations/entries/retired-keys/18.kernel__MetadataPluginConfig__mergeStrategy.ts:11	kernel/metadata-customization.zod.ts
    packages/spec/src/migrations/migrations.test.ts:125	NotificationProtocol.ts
    packages/spec/src/migrations/registry.ts:10687	packages/spec/authorable-surface.json
    packages/spec/src/migrations/registry.ts:10736	authorable-surface.json
    packages/spec/src/migrations/registry.ts:10751	authorable-surface.json
    packages/spec/src/migrations/registry.ts:10765	authorable-surface.json
    packages/spec/src/migrations/registry.ts:11719	core/examples/phase2-integration.ts
    packages/spec/src/migrations/registry.ts:12136	kernel/metadata-customization.zod.ts
    packages/spec/src/migrations/registry.ts:12166	kernel/metadata-customization.zod.ts
    packages/spec/src/migrations/registry.ts:13476	packages/spec/json-schema.manifest.json
    packages/spec/src/migrations/registry.ts:13484	json-schema.manifest.json
    packages/spec/src/migrations/registry.ts:13746	kernel/metadata-customization.zod.ts
    packages/spec/src/migrations/registry.ts:13770	kernel/metadata-customization.zod.ts
    packages/spec/src/migrations/registry.ts:13793	kernel/metadata-customization.zod.ts
    packages/spec/src/migrations/registry.ts:14280	kernel/metadata-customization.zod.ts
    packages/spec/src/migrations/registry.ts:14302	kernel/metadata-customization.zod.ts
    packages/spec/src/migrations/registry.ts:14362	kernel/metadata-customization.zod.ts
    packages/spec/src/migrations/registry.ts:14403	kernel/metadata-customization.zod.ts
    packages/spec/src/migrations/registry.ts:14425	kernel/metadata-customization.zod.ts
    packages/spec/src/migrations/registry.ts:14447	kernel/metadata-customization.zod.ts
    packages/spec/src/migrations/registry.ts:14528	kernel/metadata-customization.zod.ts
    packages/spec/src/migrations/registry.ts:14587	shared/branded-types.zod.ts
    packages/spec/src/migrations/registry.ts:14611	shared/branded-types.zod.ts
    packages/spec/src/migrations/registry.ts:14622	shared/branded-types.zod.ts
    packages/spec/src/migrations/registry.ts:14633	shared/branded-types.zod.ts
    packages/spec/src/migrations/registry.ts:14647	shared/branded-types.zod.ts
    packages/spec/src/migrations/registry.ts:14658	shared/branded-types.zod.ts
    packages/spec/src/migrations/registry.ts:14672	system/change-management.zod.ts
    packages/spec/src/migrations/registry.ts:14696	system/change-management.zod.ts
    packages/spec/src/migrations/registry.ts:14723	system/change-management.zod.ts
    packages/spec/src/migrations/registry.ts:14747	system/change-management.zod.ts
    packages/spec/src/migrations/registry.ts:14771	system/change-management.zod.ts
    packages/spec/src/migrations/registry.ts:14797	system/incident-response.zod.ts
    packages/spec/src/migrations/registry.ts:14820	system/incident-response.zod.ts
    packages/spec/src/migrations/registry.ts:14845	system/incident-response.zod.ts
    packages/spec/src/migrations/registry.ts:14871	system/incident-response.zod.ts
    packages/spec/src/migrations/registry.ts:14895	system/incident-response.zod.ts
    packages/spec/src/migrations/registry.ts:14921	system/incident-response.zod.ts
    packages/spec/src/migrations/registry.ts:14945	system/incident-response.zod.ts
    packages/spec/src/migrations/registry.ts:14969	system/incident-response.zod.ts
    packages/spec/src/migrations/registry.ts:14995	system/change-management.zod.ts
    packages/spec/src/migrations/registry.ts:15019	system/training.zod.ts
    packages/spec/src/migrations/registry.ts:15042	system/training.zod.ts
    packages/spec/src/migrations/registry.ts:15066	system/training.zod.ts
    packages/spec/src/migrations/registry.ts:15091	system/training.zod.ts
    packages/spec/src/migrations/registry.ts:15115	system/training.zod.ts
    packages/spec/src/security/explain.test.ts:11	api-surface.json
    packages/spec/src/shared/alias-integrity.test.ts:36	automation/etl.zod.ts
    packages/spec/src/shared/alias-integrity.test.ts:531	api-surface.json
    packages/spec/src/shared/error-map.test.ts:379	v4/core/schemas.js
    packages/spec/src/shared/mapping.zod.ts:18	data/external-lookup.zod.ts
    packages/spec/src/shared/retry-policy.test.ts:212	authorable-surface.json
    packages/spec/src/shared/retry-policy.test.ts:48	authorable-surface.json
    packages/spec/src/shared/retry-policy.zod.ts:156	etl.zod.ts
    packages/spec/src/shared/retry-policy.zod.ts:31	automation/etl.zod.ts
    packages/spec/src/shared/retry-policy.zod.ts:62	authorable-surface.json
    packages/spec/src/system/compliance-families-retirement.test.ts:21	system/incident-response.zod.ts
    packages/spec/src/system/compliance-families-retirement.test.ts:21	system/training.zod.ts
    packages/spec/src/system/compliance-families-retirement.test.ts:22	system/change-management.zod.ts
    packages/spec/src/system/compliance-families-retirement.test.ts:59	deadline-keys-retirement.test.ts
    packages/spec/src/system/constants/platform-object-names.test.ts:159	packages/service-tenant/src/objects/sys-license.object.ts
    packages/spec/src/system/constants/platform-object-names.test.ts:75	packages/plugins/plugin-audit/src/x.object.ts
    packages/spec/src/system/http-server.test.ts:36	api-surface.json
    packages/spec/src/system/http-server.zod.ts:34	config-schema.json
    packages/spec/src/system/http-server.zod.ts:35	authorable-surface.json
    packages/spec/src/system/message-queue-retirement.test.ts:14	system/message-queue.zod.ts
    packages/spec/src/system/notification.test.ts:130	packages/core/src/protocols/NotificationProtocol.ts
    packages/spec/src/system/tenant-provisioning-family-retired.test.ts:16	system/provisioning.zod.ts
    packages/spec/src/type-alias-convention.pin.test.ts:1846	data/external-lookup.zod.ts
    packages/spec/src/type-alias-convention.pin.test.ts:1847	system/message-queue.zod.ts
    packages/spec/src/type-alias-convention.pin.test.ts:1995	kernel/metadata-customization.zod.ts
    packages/spec/src/type-alias-convention.pin.test.ts:2172	schedule-organization.ts
    packages/spec/src/ui/component.zod.ts:1179	component-props-union-arm.test.ts
    packages/spec/src/ui/interaction-config-retirement.test.ts:12	ui/touch.zod.ts
    packages/spec/src/ui/interaction-config-retirement.test.ts:13	ui/animation.zod.ts
    packages/spec/src/ui/interaction-config-retirement.test.ts:13	ui/dnd.zod.ts
    packages/spec/src/ui/interaction-config-retirement.test.ts:13	ui/keyboard.zod.ts
    packages/spec/src/ui/interaction-config-retirement.test.ts:14	ui/offline.zod.ts
    packages/spec/src/ui/interaction-config-retirement.test.ts:205	ui/offline.zod.ts
    packages/spec/src/ui/interaction-config-retirement.test.ts:44	api-surface.json
    packages/spec/src/ui/notification.test.ts:97	packages/core/src/protocols/NotificationProtocol.ts
    packages/spec/src/ui/notification.zod.ts:111	packages/core/src/protocols/NotificationProtocol.ts
    packages/spec/src/ui/page.zod.ts:710	react/src/spec-bridge/bridges/page.ts
    packages/spec/src/ui/view.test.ts:1602	form-view.ts
    packages/spec/src/ui/view.zod.ts:2458	form-view.ts
    packages/spec/src/ui/view.zod.ts:2909	spec-bridge/bridges/form-view.ts
    packages/spec/src/ui/view.zod.ts:2926	spec-bridge/bridges/form-view.ts
    

    Full 482-site list and the driver scripts (census.mjs, overlap.mjs, wrap.mjs, instrument-control.mjs) were produced in the round's scratchpad; every number above is regenerable from the four commands named in §1 and §5 against 6465cc0a7c83ba60503bfd4ddd907d35220e4244.


    Generated by Claude Code

  5. os-bill commented on Sep 11, 2026

    @os-bill
    Collaborator

    os-dev-report

    {
      "issue": 17591,
      "status": "done",
      "branch": "claude/issue-17591-bare-path-citation-census",
      "pr": null,
      "premise_still_valid": true,
      "summary": "Census-and-report round: no PR, no source edit, no gate, per dispatch. Measured on origin/main = 6465cc0a7c83ba60503bfd4ddd907d35220e4244. Population = bare-path code spans (a code span holding a path with no line number and no #symbol) in packages/spec/src/** comment prose, extracted with the gate's OWN grammar (commentProse + extractAnchors imported from scripts/symbol-anchors.mjs, never reimplemented) over rev-scoped bytes (git cat-file), across the 1,387 .ts files the corpus declares. Spans examined 2,877; basename-resolvable against git ls-tree -r --name-only 2,395; basename-resolves-nowhere 482 (183 distinct paths, 205 citing files); arithmetic 2395+482==2877 asserted in-run. #17578 verified still live and still dead at packages/spec/src/ui/component.zod.ts:1179. 482 answers the card's question as asked but is NOT 482 instances of the #17578 defect: mechanical decomposition gives T1 relative-import-specifier 5, T2 extension-only-remnant 3, T3 gitignored-build-output 21, T4 resolves-in-objectui-sibling 162, T5 cloud/-prefixed 107 (UNVERIFIED, no cloud checkout in this container), T6 residual 184. Orthogonal cross-cut: packages/spec/src/migrations/registry.ts, the permanent ADR-0087 migration chain, carries 100 of the 482, where naming a removed file may be correct by design. Full distinct-path table (183 rows) and full T6 site list (184 rows) are attached to the card comment. No fix recommended and none made; disposition left to the seat and triage in one sentence.",
      "tests": "No build, no test suite, no gate: a census round touches no source. Instrument evidence instead. (1) REPRODUCTION CONTROL, the strongest available: run at 08e38c63771849c4e50fce9bac8e079c45e37b6a (CENSUS_17065.measuredOn) my driver reproduces five independently pinned gate constants exactly - tsFilesTotal 1317/1317, barePathSpans 2635/2635, barePathsTrackedAtRepoRoot 346/346, barePathsResolvingOnlySpecRelative 610/610, barePathsBindingNeitherBase 1679/1679 - and on the same run reproduces #17242's two, commentProseLineCitations 189 and declinedCitations 183. scripts/symbol-anchors.mjs and scripts/js-comment-mask.mjs are byte-identical across 08e38c6377, abc4b83ce8 and 6465cc0a7c (same blob sha), so that is a clean historical rerun rather than a comparison across two grammars. (2) END-TO-END CONTROL on one synthetic TS source through the same commentProse+extractAnchors: positive controls packages/spec/src/automation/state-machine.test.ts and view-union-diagnostics.test.ts both resolve (full-path and bare-basename form) - the resolver finds things; negative control component-props-union-arm.test.ts reported dead - it can report a miss; fabricated token zzz-fabricated-token-17591.ts 0 resolutions and 0 occurrences corpus-wide; a code span written inside CODE was NOT seen, proving the commentProse projection is live; the line-anchored citation landed on the other axis and contributed 0 bare-path spans. Output: bareSpans=4 lineCitations=1 resolved=2 dead=2. (3) OVERLAP MEASUREMENT vs #17242: half-open character ranges [index, index+raw.length) of all 2,877 bare-path spans intersected pairwise against all 223 line citations on the same projected text and same line gives charRangeOverlapBetweenPopulations: 0, overlapExamples: []. Verdict DISJOINT at span level; at basename level 17 of my 152 distinct dead basenames also appear among #17242's 64 declined basenames, so the two axes cite some of the same files but share no span. Neither population contains the other. (4) WRAP BLIND-SPOT MEASURED, not assumed: 954 lines of projected prose carry an odd backtick count so spans really do wrap here, yet stripping the leading * per line, flattening each file's prose and re-running the span grammar yields barePathSpans_flattened 2877 == barePathSpans_perLine 2877, spansVisibleOnlyWhenFlattened 0, ofWhichBasenameResolvesNowhere 0. That flattened pass doubles as an independent re-implementation of ANCHOR_SPAN agreeing at 2,877. (5) Every count is an array length, never grep -c. Resolution used git ls-tree path listings only, never a content grep. (6) TWO DISCARDED RUNS REPORTED, not silently retried: overlap.mjs died ERR_INVALID_ARG_TYPE from Array.map(basename) passing the index as basename's second argument, fixed and rerun; the first git check-ignore leg aborted exit 128 on ../data/filter-subtree-provenance.js as outside repository, rerun with relative specifiers excluded. Neither produced a used reading. (7) Comment read back from the API after posting: byte-diff against the source is exactly one inserted blank line, Appendix A still 183 rows, Appendix B still 184 rows, signature footer block intact.",
      "mcp_calls": "0 - every GitHub read and the two comment writes went through repo-scoped REST, probed first (authprobe=200); no MCP GitHub tool was invoked",
      "open_questions": [],
      "out_of_scope_findings": [
        "noted, not filed: #17242's own reading has drifted. Its 189 line citations / 183 declined were taken at 08e38c6377; the same instrument at 6465cc0a7c returns 223 / 217, a residual that GREW by 34. Carrier: #17242 itself, which is open, is the nameable successor and already carries a pointer comment to this card; the drift is recorded in the census comment that pointer leads to.",
        "noted, not filed: the biggest hole in this census is that no `cloud` sibling checkout exists in this container, so T5 (107 spans across 5 cloud/-prefixed paths, 22% of the headline) is unverified in either direction. Carrier: this card's own comment, which states it as an unmeasured leg rather than folding it into either side.",
        "noted, not filed: three cited stems (authorable-surface.json, json-schema.manifest.json, api-surface.json, plus their packages/spec/-prefixed spellings, 17 spans) are dead because the file was SPLIT into a directory of the same stem - packages/spec/authorable-surface/*.json plus authorable-surface.base.json now exist. Real staleness of a different cause from #17578, recorded in the comment's decomposition. Carrier: triage's grading pass on bucket T6.",
        "noted, not filed: 8 spans (buckets T1 and T2) are grammar false positives - the gate's PATHISH cannot tell a relative import specifier (./x.js) or a glob tail (*.d.ts) from a repo path. They are in the population because the gate's grammar puts them there. Carrier: none; stated in the comment so no reader mistakes them for citations."
      ]
    }
    

    Generated by Claude Code

  6. os-bill commented on Sep 11, 2026

    @os-bill
    Collaborator

    结卡 — 普查已交付,数字带一段声明过的不确定性

    domain:spec 执行席,2026-09-11T14:2xZ。这张卡问的是一个数,答案已在 https://github.com/objectstack-ai/objectstack/issues/17591#issuecomment-5635840818。⛔ 无 PR、⛔ 未修任何引用、⛔ 未提门禁 —— 与卡的范围一致。

    答案

    在 origin/main = 6465cc0a7c 上:482 个 bare-path 引用解析不到任何文件(183 个不同路径,205 个引用文件),2395 + 482 == 2877 在运行中断言过。#17578 复核仍然活着、仍然是死引用。

    人口用的是门禁自己的语法(从 scripts/symbol-anchors.mjs 导入 commentProse / extractAnchors,取 repo === null && symbol === null),⛔ 不是另造一套;字节按 rev 读(git cat-file blob REV:PATH),⛔ 不读工作树;解析用 git ls-tree,⛔ 不用内容 grep 去找文件名。

    ⭐ 这一轮最硬的是它的控制项

    在 08e38c6377 上重跑,它的驱动逐字复现了五个被 pin 住的 CENSUS_17065 常量(1317 / 2635 / 346 / 610 / 1679)以及 #17242 的两个(189 / 183),而 symbol-anchors.mjs 与 js-comment-mask.mjs 在三个 sha 上字节一致 —— 这是一次干净的历史重跑,不是"我的脚本跑出了我想要的数"。另有端到端合成控制项(2 解析成功 / 2 死 / 捏造 token 0 / 代码区不计 / 行锚点排除),换行盲区实测为 0(954 行奇数反引号散文,压缩后仍是同样 2,877 个 span)。

    ⚠️ 它自己说出来而不是抹平的部分 —— 这才是该带走的

    482 回答了字面问的问题,但过度回答了想问的问题。机械分解:

    类 数 说明
    T4 162 在 objectui 里解析得到
    T5 107 cloud/ 前缀 —— 两个方向都未验证,本容器没有 cloud 检出。占标题数的 22%
    T3 21 gitignore 掉的构建产物
    T1/T2 8 相对说明符 / 只剩扩展名
    T6 184 残余

    另有一条正交事实:packages/spec/src/migrations/registry.ts(ADR-0087 永久链,专门记录已被移除的面)一家就占了 482 中的 100。⇒ 在那个文件里引用一个已不存在的文件,很可能恰恰是对的。

    ⭐ 而且 basename 解析是宽松的,所以 482 是"误导性引用"的下界,不是上界。

    跨仓那 107 条 ⛔ 不算查过了

    cloud 不在本会话的仓范围内。按纪律,仓不可达 ⛔ 不得当作已查干净。给有 cloud 检出的座位一条现成命令,回贴读数后这一格才算填上:

    # 在 cloud 检出里,对本卡 §T5 列出的 107 条 cloud/ 前缀路径逐条:
    git -C <cloud-checkout> ls-tree -r --name-only HEAD | sort > /tmp/cloud-paths.txt
    # 然后对每条 candidate 取 basename 比对,并给出两个控制项:
    #   一条已知存在的 cloud 路径(必须命中)、一条捏造路径(必须 0)
    

    处置

    ⛔ 我不提门禁、不做清理 —— 那是卡明确排除的,也是分诊的判断。本卡的问题已答,关卡。 真要据此动手的人需要先回答两件事:(a) T5 那 107 条的真实状态;(b) registry.ts 那 100 条是否按设计就该引用已移除的面。两者都写在上面的普查评论里。

    ⛔ 同一笔摘 pm:* 与 assignee;domain:spec / priority:p3 保留。


    Generated by Claude Code

  7. removed their assignment
    on Sep 11, 2026
  8. os-bill commented on Sep 12, 2026

    @os-bill
    Collaborator

    ⭐ T5 is closed — and it did NOT need a cloud checkout. The 107-span hole is one stale line.

    Follow-up by the same seat, 2026-09-12T00:52Z, on origin/main @ 431c757120. This corrects a limitation I declared myself on this card: 「T5 是 107 条我两个方向都没法测的 span…占标题数的 22%」, carried forward since as the census's biggest unmeasured leg.

    ⛔ That limitation was wrong — not in its arithmetic, but in its question. I had framed T5 as "does this cloud/-prefixed file exist?", which needs a repo I cannot reach. The answerable question is "is the citation historical or live-tense?", and that is decidable entirely in this tree.

    What I did instead of asking the cloud seat

    I had drafted a [seam → cloud] card requesting the reading. ⛔ I did not file it: measuring first showed its premise was gone.

    58 files in packages/spec/src/** cite one of the five cloud/ paths
     ├─ 54  packages/spec/src/migrations/**  (retired-defs/18.cloud__*.ts, registry.ts)
     └─  4  everything else
    

    The 54 are correct by construction. Sampled verbatim — migrations/entries/retired-defs/18.cloud__AppSubscription.ts:3:

    // #16325 — \cloud/app-store.zod.ts` left `@objectstack/spec` with the `./cloud` subpath (maintainer ruling, option B "cut by owner")`

    ⇒ an ADR-0087 retirement entry naming a removed file is the record doing its job. ⭐ This is the same cross-cut this census already found for migrations/registry.ts (100 of 482) — 「在那个文件里引用一个已不存在的文件,很可能恰恰是对的」 — and it turns out to cover T5 almost entirely.

    Of the remaining 4, three are past-tense and correct:

    file line wording verdict
    api/discovery.zod.ts :413 「Until #16325 this enum was declared by cloud/environment.zod.ts … they left @objectstack/spec」 ✅ correct
    identity/api-key-retirement.test.ts :25 「one prose mention in cloud/developer-portal.zod.ts (corrected in the same PR)」 ✅ correct
    type-alias-convention.pin.test.ts :387, :2156 「moved here from cloud/environment.zod.ts」 / 「the six control-plane modules … left」 ✅ correct

    The fourth is live-tense and wrong — api/discovery-environment-subset.pin.test.ts:12 states EnvironmentTypeSchema is declared by cloud/environment.zod.ts, while the same file's import at :39 reads from './discovery.zod'. ⇒ filed as #17730.

    Readings, with controls

    git ls-tree -d origin/main packages/spec/src/cloud   → (absent)
    git ls-tree -d origin/main packages/spec/src/api     → 040000 tree da77605…        ← lit control
    git grep -n 'EnvironmentTypeSchema *=' origin/main -- 'packages/spec/src/**'
         → packages/spec/src/api/discovery.zod.ts:434                                   ← one declaration
    git grep -o -F 'cloud/zzqq-not-a-real-file.zod.ts' … → 0                            ← dark control
    

    ⚠️ Span-count drift, declared rather than explained away: my raw substring count over the five paths is 110, the census's T5 figure is 107. Different populations — the census counted bare-path code spans (a code span carrying a path with no line number and no #symbol), which is narrower than a raw substring match. ⛔ Not a discrepancy in either reading; I did not re-derive the census's population and do not claim to.

    What this changes for anyone taking this card

    ⛔ 「22% of the headline is unmeasurable here」 is retired as a blocker. T5 resolves to 1 defect in 1 file, already carded. ⭐ And the generalisable lesson is the one this census kept re-learning: a citation to a file that does not exist is only a defect if the sentence around it is in the present tense — in a retirement ledger it is the point. Whatever gate anyone proposes off the back of this card must be able to tell those apart, or it will report 54 false positives on the ADR-0087 chain alone.

    domain:spec execution seat · session_01MkQhmuuJAVDjmeWNixwDDH · readings taken 2026-09-12T00:52Z on origin/main @ 431c757120


    Generated by Claude Code

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions