Repository navigation
docs(spec): the liveness README's authorWarn pointer names the lint's real home - #19659
Conversation
… real home `packages/spec/liveness/README.md` told the reader the author-warning lint lives at `packages/cli/src/utils/lint-liveness-properties.ts`. That path returns zero in a full tree listing; the module is at `packages/lint/src/lint-liveness-properties.ts`, which is also what the rule registration in `packages/lint/src/authoring-rules.ts` carries as data (`source:`). This grid has no mechanical reader — `check:liveness` resolves the `evidence` paths inside ledger entries, never a path in README prose — so the pointer survived the move with every gate green. Claude-Session: https://claude.ai/code/session_013RDBh5DqXd2xnLwvHLgLFr Co-authored-by: Claude <noreply@anthropic.com>
📓 Docs Drift Check
What this run could not see
Coarse fallback — 136 page(s) merely mention a changed package (the pre-#9192 predicate, kept for the deliberately-wide backstop): |
|
Bring the branch onto the current green main so CI re-measures against it. The previous run reddened on two failures in code this two-file docs diff does not touch. Co-Authored-By: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_013RDBh5DqXd2xnLwvHLgLFr
Why this PR sat red for seven hours — and what actually failedMeasured at 2026-09-22T12:55Z on run 35690079389, attempt 1, head The failing check is The failure is in a repo-scan step, not a test body:
Not this PR's. The diff is two files — Why it stayed red. Not CI — me. The seat recorded this PR as "watched" at 2026-09-22T05:51Z and did not come back to it. The seat's own patrol routine listed only the cards it was actively dispatching, so this PR was never re-read. The list was hand-written; that is the root cause, and the routine is being changed to query GitHub for every open PR under this identity instead of reading a list the seat wrote down. Writing a value into a note and then reading the note instead of the world is the same failure shape twice in one session. Why it was not simply re-run. The fleet App identity cannot mint a token through this container's proxy — What was done instead. Filed, not buried. The scan/ Generated by Claude Code |
Fixes #19269
Clause-②: no
packages/spec/liveness/README.mdtold the reader that the lint which emits author warnings lives atpackages/cli/src/utils/lint-liveness-properties.ts. That path does not exist. One line, repointed at the module's real home.Measured in this worktree, not carried from the card
Base
5ce3705. The card's line numbers were re-derived by text, because the file was touched by #19594 after the card was written:Both pointers still sit where the card and the dispatch put them —
:548(the stale full path) and:948(a bare filename) — so #19594 moved neither.Why
packages/lint/src/lint-liveness-properties.tsis the right referentA path that exists is not automatically the one the sentence means. Four readings say this one is:
:548describes: it reads theliveness/*.jsonledgers, opts in per entry viaauthorWarn, emits an advisory warning with a hint, and "NEVER fails the build".:948namesTYPE_COLLECTIONS; that constant is declared in this module, at:485.packages/lint/src/authoring-rules.tsregisters{ name: 'lintLivenessProperties', tier: 'advisory', source: 'packages/lint/src/lint-liveness-properties.ts' }. The repointed prose now agrees with a machine-readable field rather than with a second piece of prose.compilelint" stay true after the repoint:packages/cli/src/commands/compile.tsimportsrunAuthoringRules/authoringRulesForfrom@objectstack/lintand the rule declarescommands: ALL, soos compileis still a door this lint runs behind.Nothing else in the sentence changed, and no ledger entry, verdict, schema, export or runtime behaviour moved.
Why the second pointer is deliberately NOT changed
:948reads "see lint-liveness-properties.ts" — a bare filename with no directory. Leaving it is a decision, not an oversight:.test.ts), so a reader who follows it lands on the module.git grep. The durable form wins where the defect class is this one.:548, which is where a reader who needs the directory gets it.Changeset:
patch, measured rather than assumedliveness/is in@objectstack/spec'sfiles[], and the package is published (notprivate, currently17.4.0), so this README ships inside the npm tarball. Measured withnpm pack --dry-run --jsoninpackages/spec:liveness/README.mdpresent; 42liveness/*entriesscripts/entry, no*.test.tsentrySo the edited bytes are published bytes.
skip-changesetwould be false, and apatchchangeset is owed. Precedent on the same file: the#14640changeset states the same fact in the same words ("The ledgers ship inside this package (files[]includesliveness)").Verification
Gate families derived in this worktree with
node scripts/pm/dispatch-gates.mjs --repo objectstack-ai/objectstack --commandsover the real changed paths, then reconciled with--rancarrying each command's exit code captured before any pipe.5ac6291.PREREQUISITE NOT METline, which is "nothing was swept", not a finding:check:dts-closure,check:dual-build-cjs-loads,check:lean-entry-closure,check:sourcemap-no-sources-content. Each reads builtdist/across the workspace and needs a fullpnpm buildfirst. This diff contains no TypeScript and no published bytes outside one Markdown file, so it cannot move any of them; CI runs them on a built tree.check:plugin-teardown-shape --self-testfirst exited 3 on a shallow checkout ("cannot read the positive control at 621a487"). Aftergit fetch --unshallowit passes, 48 cases. Its PR-verdict run (no--self-test) was green both times.check-changeset-fixed,check:spec-changes,check:authz-resolver,check:error-code-casing,check:filter-alias-parity— all exit 0.packages/spec/scripts/liveness/check-liveness.test.ts: 64 tests pass.pnpm lintwas narrowed, and the narrowing is measured rather than claimed: eslint's own declared population is source extensions only (files: ['**/*.{ts,tsx,mts,cts,js,jsx,mjs,cjs}']and four TypeScript-only globs; no Markdown glob),--format jsonover both changed paths returns 2 entries, each "File ignored because no matching configuration was supplied" witherrorCount: 0, and the config enables no type-aware linting (noparserOptions.project), so this diff cannot move the verdict on any file it does not touch. Count of changed files inside eslint's population: 0. The repo-wide sweep is CI's.Acceptance notes
Noted, not filed, and deliberately not fixed here — the file surface for this card is
packages/spec/liveness/README.mdand this observation is larger than the repoint::548calls this "The CLIcompilelint", which is now narrower than the truth. The same rule is also dispatched at the runtime publish door:packages/lint/src/runtime-gate.tsbridgesemail_templateandmapping(group C of the ADR-0049 ruling) and, since [rebuild of #19389] [finding]datasourceis a 14thallowRuntimeCreate: truetype with zero liveruntimeTypesdeclarations — invisible to #19275's census because its registry entry is the only MULTI-LINE one #19568,datasource— the threeallowRuntimeCreate: truetypes whose only author-facing door had run no authoring rule at all. So anauthorWarnentry today reaches authors through Studio/REST/MCP writes as well as throughos compile, and this section still describes only the compile door. The repoint does not make that sentence false, so widening it is out of scope for this PR; the successor the card names — the next author of anauthorWarnentry — is the same reader who would be under-informed by it. Carrier: whoever next edits this section or adds aruntime-gate.tsbridge row.Generated by Claude Code