Skip to content

docs(cli): re-anchor the dead tracker citations in lane files outside stage 14's list to the commits that decided them - #20947

Merged
objectstack-fleet[bot] merged 2 commits into
mainfrom
claude/issue-20594-off-list-files
Sep 30, 2026
Merged

objectstack-fleet[bot] merged 2 commits into
mainfrom
claude/issue-20594-off-list-files

Conversation

@objectstack-fleet

Copy link
Copy Markdown
Contributor

Part of #20594
Clause-②: no

What changed

This is stage 17 of the domain:cli lane's dead-citation sweep: the comment sites in lane files outside stage 14's file list (claim 5918748154; the list on stage 16's landing 5918606717 and stage 14's report 5914100460). The claim names six files:

  • packages/cli/bin/run.js and packages/cli/bin/run-dev.js;
  • packages/cli/scripts/check-app-nav-i18n.mjs;
  • packages/cli/vitest-tiers.ts and packages/cli/vitest-tiers.fixtures.ts;
  • packages/plugins/plugin-hono-server/objectstack.config.ts.

Every comment site in those files whose tracker number answers 404 now cites the commit that decided what the line describes, in ruling C+D's form C (comment 5749154545 on #19123), except one site with no deciding commit. Stages 1 to 16 of this card are the precedents; the latest are PR #20883, PR #20898 and PR #20923.

Census

Instrument. The card's gate does not read these files (its declared surface is packages/**/src/**), so the census is taken by hand with the gate's own grammar, as stages 14 to 16 took it:

  • Files: every tracked file of the 19 lane packages outside src/**, with CHANGELOG.md left out: 538 files. Each is classed as one of the claim's six files, as ON stage 14's file list (README.md, tsconfig*.json, vitest.config.*, tsup.config.*, test/**), or as neither.
  • Extraction: extractCitations from scripts/check-issue-citations.mjs, with its comment-prose projection for code and JSON files and the whole file for prose files. The whole-file extraction minus the comment projection gives the string sites.
  • Numbers kept: only those naming this repository (namesThisRepository).
  • Probe: each distinct number, GET /repos/objectstack-ai/objectstack/issues/N; 404 means dead.
tree probe window (UTC) numbers 200 404 dead comment sites, the six files dead comment sites, whole lane surface dead string sites, whole lane surface
before base aaad682dbc 2026-09-30 20:09:40 to 20:15:09 852 798 54 28 (9 numbers) 33 97
after head 89264b0c1e 2026-09-30 20:23:18 to 20:28:44 848 798 50 1 6 97

Per file, dead comment sites, before to after:

file before after
packages/cli/bin/run-dev.js 6 0
packages/cli/bin/run.js 4 1
packages/cli/scripts/check-app-nav-i18n.mjs 13 0
packages/cli/vitest-tiers.ts 2 0
packages/cli/vitest-tiers.fixtures.ts 1 0
packages/plugins/plugin-hono-server/objectstack.config.ts 2 0
total 28 1

What the lane surface outside src/** still holds after this stage: 6 dead comment sites, all without a deciding commit (bin/run.js:225 and the five stage 14 kept), and 97 dead string sites (#20752's form D).

Per-number anchors

Each anchor was checked by blame on the site and in the anchor's own message or diff. "Reused" names the earlier stage that gave the number the same anchor.

number sites anchor what it decided
#12964 3: run-dev.js:71, :152, :466 e6fd1caf7 bin/run-dev.js collects oclif's module-load warnings and names the missing build output instead of "command not found"; its changeset names the number, and it wrote :152 and :466 itself reused (stage 14, cli tests)
#14715 2: run-dev.js:362, :400 accb9231c the squash of that number's PR (its subject names it): the never-read reader's case keeps its product assertions, "the child exits on its own, with code 2" reused (stage 14)
#14858 4: run-dev.js:377; run.js:163, :168, :220 0c5e97368 a closed stderr read end exits 2 instead of dying of an uncaught EPIPE; its subject names the number, and it added the run-dev.js listener and docblock that :377 heads reused (stage 14, cli tests)
#17891 9 in check-app-nav-i18n.mjs (:112, :221, :237, :261, :289, :302, :502, :552, :706) ca9d9d361 widens check:app-nav-i18n from one app to the declared platform-app population (the Account shell in the roster, one build probe per shell, per-app counts in the pass line); its message names the card it lands new
#17759 4 in check-app-nav-i18n.mjs (:148, :238, :259, :537) c744c0af3 translates the Account app's contributed nav_connect_agent in all four locales, one namespace per app; its message names the card it lands new
#13504 3: vitest-tiers.ts:5, :67; vitest-tiers.fixtures.ts:194 44813ba57 the tier half of that card: the named unit / integration tiers and the behavioural predicate that replaced the text-match census reused (stage 14, vitest.config.ts)
#11332 1: objectstack.config.ts:19 dce5cd4f0 retires the manifest's capabilities / configuration / extensions containers (ADR-0049); it wrote this comment reused (stage 16)
#10724 1: objectstack.config.ts:26 be21955ba retires the nine dead contributes members (ADR-0049); its subject names the number, and it wrote this comment reused (stage 16)

ADR and ruling records. A grep of docs/adr and scripts/adr-anchors for the 8 numbers (and #14874) finds one hit: ADR-0088 names #10724 in a correction note (history, not the ruling), so that number stays on the commit stage 16 anchored it to. The sentence it sits in already names ADR-0049. The control number 7329 finds 1 file in the same tree.

Anchor checks:

  • Each sha is unambiguous: git rev-parse --disambiguate gives count 1 for each of the 8.
  • Each is a plain commit with one parent.
  • Each is on the base: merge-base --is-ancestor against aaad682dbc exits 0 for all 8.
  • The history is complete: the checkout is not shallow, and an exit 0 from --is-ancestor proves itself. Negative control: the base as an ancestor of the oldest anchor be21955ba (2026-08-25) exits 1.

Kept: no deciding commit found

bin/run.js:225 keeps #14874 ("npm packs a bin target regardless" of files). The history search this stage ran:

The five cli sites stage 14 kept (#10149, #11048, #14874 ×2 in test/published-entry-stderr-error-listener.test.ts and 1 in test/published-subpath-hook-body.pin.test.ts) were searched again the same way. For #10149, cc21aad8ed is "Part of" it and leaves the decision to the maintainer, and d18bc32770 applies its reasoning. For #11048, 568de194ec files it unassigned as an open support decision. So no deciding commit was found, and they stay as they are.

Verification

All at head 89264b0c1e. Heavy runs went through scripts/pm/os-verify-lock.sh with OS_VERIFY_LOCK_SLOT=issue-20594-offlist.

  • Build (whole workspace): pnpm exec turbo run build --filter='./packages/*' --filter='./packages/*/*' --concurrency=2 → 71 successful, 71 total (7 cached), lock verdict command-exit 0.
  • Typecheck: pnpm --workspace-concurrency=2 --filter @objectstack/cli --filter @objectstack/plugin-hono-server run typecheck → both Done, 0 error TS, lock verdict command-exit 0. check:test-typecheck holds both ledgers where they were: cli 3 files / 28 errors / 6 pinned signatures, plugin-hono-server 0. --listFilesOnly shows cli's tsconfig.test.json program holds vitest-tiers.ts and vitest-tiers.fixtures.ts, and plugin-hono-server's tsconfig.typecheck.json holds objectstack.config.ts.
  • cli unit tier: pnpm --filter @objectstack/cli exec vitest run --project unit --maxWorkers=2 → 239 files, 3391 tests passed, lock verdict command-exit 0. It holds test/vitest-tiers-partition.test.ts, which imports both vitest-tiers*.ts files, and every run loads vitest.config.ts, which imports vitest-tiers.ts.
  • cli integration tier, run locally because the diff touches bin/ (the spawn entries): --project integration --maxWorkers=2 → 67 files, 572 passed and 1 skipped (a data-conditional skipIf in test/migrate-meta-default-range.test.ts), lock verdict command-exit 0. It holds test/published-entry-stderr-error-listener.test.ts, which spawns bin/run.js.
  • Nightly-tier files that spawn the two entries, by name under OS_TEST_TIERS=nightly: test/run-dev-unbuilt-workspace.e2e.test.ts, test/published-entry-stderr-nonblocking.e2e.test.ts and test/run-dev-stderr-nonblocking.e2e.test.ts → 3 files, 21 tests passed, lock verdict command-exit 0.
  • The script, the way CI calls it: pnpm check:app-nav-i18n (--self-test, then the real run; lint.yml runs this) → exit 0. The self-test passes, and the pass line reads OK (11 contributor(s), 4 locale(s), 2 app(s) — setup: 55 merged nav id(s), account: 12 merged nav id(s) — every id labelled in every locale).
  • The entries, smoke: node packages/cli/bin/run.js --help exit 0 (66 lines); node packages/cli/bin/run-dev.js --help exit 0 (66 lines); node packages/cli/bin/run.js --version exit 0; node packages/cli/bin/run.js no-such-command-xyz exit 2 with oclif's command … not found.
  • Token guard, base aaad682dbc against head, 6 files, 6,224 base tokens: 0 files differ. Leaf tokens come from the TypeScript parser (getChildren, JSDoc nodes skipped; .js / .mjs parsed as JS). Controls, in memory only: a comment inserted into each file, 0 of 6 differ; a statement appended, 6 of 6; one character flipped inside each file's first StringLiteral, 6 of 6. The comment control's first form put its comment above the shebang in the three #! files and moved tokens in 3 of 6. It was corrected to insert below the shebang before it was used as a reading.
  • Control bytes: a scan of the 6 files and the changeset finds 0 (positive control, a scratch file holding U+0001: 1). pnpm check:nul-bytes exits 0.
  • Publish check: npm pack --dry-run in packages/cli packs bin/run.js (a bin target, packed regardless of files) beside dist/**, README.md, CHANGELOG.md, LICENSE and package.json. It packs none of bin/run-dev.js, scripts/ or vitest-tiers*.ts, so the patch changeset covers bin/run.js alone. plugin-hono-server packs no objectstack.config.ts, and its src/ never imports that file. After the build, the first 48 characters of each of the 27 added comment lines occur in 0 files of any package's dist/. Control: the src docblock phrase document" (commit 2b641ddd4). Both device-flow occurs in 1 file of packages/cli/dist. (plugin-hono-server's bundler keeps no comments, so its dist gives no reading either way: its own control phrase occurs in 0 files.)

Gates

All at head 89264b0c1e, exit codes captured before any pipe.

  • Derivation: node scripts/pm/dispatch-gates.mjs --repo objectstack-ai/objectstack --commands, no paths, derives 57 commands (7 paths against merge base aaad682db). Re-derived after fetching origin/main to 31c39964fc: the same 57. None of the 5 upstream commits touches a derivation input or a file here.
  • All 57 exit 0, each on its first run.
  • Reconciliation: dispatch-gates --ran over the recorded COMMAND :: exit CODE list → "57 derived, 57 run, 0 NOT-MEASURED, 0 UNRUN", exit 0.
  • Roster gates the derivation marks as keeping a roster under a touched directory: node scripts/check-changeset-fixed.mjs, pnpm check:authz-resolver, pnpm check:error-code-casing, pnpm check:filter-alias-parity and node scripts/release-pending-publish.mjs --self-test → exit 0 each.
  • pnpm lint (repo-wide eslint . --no-inline-config, the family the derivation does not name) → exit 0, 2026-09-30T21:33:42Z to 21:36:25Z.
  • node scripts/check-issue-citations.mjs (diff mode, in the 57) reads 0 files, because none of these paths is on its declared surface. The hand census above is the measurement for this surface.
  • The changeset gates in the 57: check-empty-changeset ("1 declaring changeset(s) added"), check-changeset-no-major ("no major bump"), check-adr-0087-registration ("no declared-breaking changeset").
  • A local git merge-tree --write-tree of this head against origin/main 3fbf3ca617 is clean.

The 57 derived commands: stage 16's 52, minus pnpm --filter @objectstack/spec run check:skill-examples, pnpm check:dispatcher-error-vocabulary, pnpm check:engine-double-contract, pnpm check:objectql-double-limit, pnpm check:query-options-erasure, pnpm check:type-check-coverage, pnpm check:type-check-debt and pnpm check:where-matcher, plus the changeset family (check-adr-0087-registration, check-changeset-no-major, check-empty-changeset, each with its --self-test; pnpm check:changeset-gate-self-tests, pnpm check:objectui-changeset, pnpm check:pm-changeset-deadline-census), pnpm check:i18n, pnpm check:i18n-coverage, pnpm check:i18n-walk-parity and node scripts/pm/release-rehearsal-clone.mjs --self-test.

Acceptance notes


Generated by Claude Code

… stage 14's list to the commits that decided them

Comment prose only, in ruling C+D's form C: 27 comment sites on 27 lines in
bin/run.js, bin/run-dev.js, scripts/check-app-nav-i18n.mjs, vitest-tiers.ts,
vitest-tiers.fixtures.ts and plugin-hono-server's objectstack.config.ts now
cite the commit that decided what each line describes. One site with no
deciding commit stays as it was.

Claude-Session: https://claude.ai/code/session_01VvcEokUG1tvVxkceYfR5XB
Co-authored-by: Claude <noreply@anthropic.com>
…js comments

bin/run.js is a bin target, which npm packs regardless of files, so its
comment change reaches the published tarball.

Claude-Session: https://claude.ai/code/session_01VvcEokUG1tvVxkceYfR5XB
Co-authored-by: Claude <noreply@anthropic.com>
@github-actions

Copy link
Copy Markdown
Contributor

📓 Docs Drift Check

This PR changes 2 package(s): @objectstack/cli, @objectstack/plugin-hono-server, touching 2 documentable anchor(s). ⚠️ 3 changed file(s) yielded no anchor (packages/cli/bin/run-dev.js, packages/cli/bin/run.js, packages/cli/vitest-tiers.ts), so the pages documenting them are NOT COVERED by this run — this is not a clean bill of health for those files.

2 hand-written doc(s) NAME something this change touched and may need an implementation-accuracy re-verification:

  • content/docs/permissions/authentication.mdx (via HonoServerPlugin (symbol, a top-level const object))
  • content/docs/protocol/kernel/index.mdx (via HonoServerPlugin (symbol, a top-level const object))

⛔ 1 release-owned page(s) also name something this change touched. These are read-only:

  • content/docs/releases/v17/17-0.mdx (via HonoServerPlugin (symbol, a top-level const object))

content/docs/releases/ is RELEASE-OWNED (AGENTS.md "Documentation Guardrails"): release
notes are written centrally at release time, and a code PR that edits them is the exact PR
that guardrail exists to stop. They are still audited — read-only. If one of them is actually
wrong, file an issue or open a dedicated docs-only PR; do not edit it here.

What this run could not see
  • 3 changed file(s) yielded no anchor (packages/cli/bin/run-dev.js, packages/cli/bin/run.js, packages/cli/vitest-tiers.ts) — pages documenting those are invisible to this run
  • a page that states a rule by its inputs shares no identifier with the emitter that implements the rule, so an emitter-only diff cannot list it — not on this run and not on any run. Measured on fix(driver-sql): emit varchar(maxLength) for a text field a declared index keys on #11430: content/docs/protocol/objectql/types.mdx documents the text-family column mapping by the ObjectQL type names it maps FROM (text / textarea / html) while the diff changed createColumn; it went unlisted, and it was the page that diff falsified, in four places. No shared token exists to detect this on, so a rule your change carries has to be re-read by hand in the pages that restate it.
  • a key NAME is not a key, so the hand re-read the line above prescribes can land on the wrong schema. The same spelling is authorable on one governed type and a [REMOVED] tombstone on another for each of active, aria, joins, objects, template, tools and version (censused on [finding] tools is a key on BOTH AgentSchema (tombstoned, dead) and SkillSchema (live, cloud-attested), so a name-based search attributes skill examples to the agent key — it produced a false stop-the-line alarm on PR #19059 #19093 over the liveness ledger's governed types, top-level keys); nothing in a search result distinguishes the two, so a grep hit on a LIVE example reads as evidence about the DEAD key. Measured on fix(spec): the agent.tools liveness row says dead — it claimed live on a key the schema tombstoned #19059: content/docs/ai/agents.mdx was reported as contradicting the agent.tools tombstone over its tools: example at :161, which is inside the defineSkill({ block opened at :155 — the page was already correct. Settle ownership by PARSING the value against both schemas, never by the name: that literal PASSES SkillSchema, and as an AgentSchema it FAILS at tools with the tombstone prescription. ⛔ These names are not the whole class — a key retired through a .strict() guidance map leaves no tombstone in the walked shape and none of them here (tool.category, live as AIToolDefinition.category).

Coarse fallback — 26 page(s) merely mention a changed package (the pre-#9192 predicate, kept for the deliberately-wide backstop): node scripts/docs-audit/affected-docs.mjs --json f80e2a6dad85950d9ebde910f5123eae49c2781f → packageMentionDocs.

Which tree this was computed on

This run read content/docs from 242f01a2d4373a769fa3d2ca4e0a9d6f426b6ccf — the merge of head 89264b0c1ec63f52485b1c6c3b5b957f898e560d into base f80e2a6dad85950d9ebde910f5123eae49c2781f, which is what actions/checkout gives a pull_request run. Not the PR head.

A worktree cut from an older main holds a different content/docs, so re-deriving there can legitimately return a different list — that is a different tree, not a wrong row. To answer on the same tree:

# while this PR is open — GitHub drops the merge commit once it closes
git fetch origin 242f01a2d4373a769fa3d2ca4e0a9d6f426b6ccf && git checkout 242f01a2d4373a769fa3d2ca4e0a9d6f426b6ccf
# afterwards, rebuild it from the two parents, which stay fetchable
git fetch origin f80e2a6dad85950d9ebde910f5123eae49c2781f 89264b0c1ec63f52485b1c6c3b5b957f898e560d && git checkout -B drift-repro f80e2a6dad85950d9ebde910f5123eae49c2781f && git merge --no-ff 89264b0c1ec63f52485b1c6c3b5b957f898e560d

node scripts/docs-audit/affected-docs.mjs --json f80e2a6dad85950d9ebde910f5123eae49c2781f

⚠️ That checkout carried uncommitted changes, so the commit above does not fully identify what was read.

Advisory only, and a precision-first one (#9192): a page is listed because it names a
symbol, wire route or SDK method this diff touched — not because it mentions a changed
package. Each row says which anchor put it there, so a wrong row is reportable rather than
merely annoying. To re-verify, run the docs-accuracy-audit workflow scoped to these files:
node scripts/docs-audit/affected-docs.mjs f80e2a6dad85950d9ebde910f5123eae49c2781f → pass the list as
args.docs, on the commit named under Which tree this was computed on.

@github-actions github-actions Bot added documentation Improvements or additions to documentation tooling labels Sep 30, 2026
@objectstack-fleet

Copy link
Copy Markdown
Contributor Author

Contract review

Served-tier: CONTRACT_REVIEW_TIER
Head-sha: 89264b0c1ec63f52485b1c6c3b5b957f898e560d
Local-runs: none

① Derived judgments

(a) Comment-only — holds. Net diff aaad682dbc..89264b0c1e, read in the clone: 7 files, +39 / −27. One new file, .changeset/20594-cli-bin-provenance-anchors.md (+12), plus the claim's six files: bin/run-dev.js +6/−6, bin/run.js +3/−3, scripts/check-app-nav-i18n.mjs +13/−13, vitest-tiers.fixtures.ts +1/−1, vitest-tiers.ts +2/−2, plugin-hono-server/objectstack.config.ts +2/−2 — 27 lines out, 27 in, and the API file list agrees line for line. Every removed and every added line begins with // or * (each read); no string literal, code token, describe or it title moves, and the one fixture string adjacent to a change (name: 'a type-only driver import') is a context line. Each of the six files keeps its line count (490, 258, 942, 276, 245, 31). check-app-nav-i18n.mjs: occurrences of #17891 / #17759 read 27 at base and 14 at head; the 14 at head are lines 515, 520, 525, 530, 545, 547, 556, 557, 559, 569, 574, 579, 666 and 930 — all inside string literals (self-test expect titles and messages, the --self-test pass line, the twin-entry hint), byte-identical between base and head — and 0 non-string occurrences remain. Their routing to #20752 follows the fold 5911936313.

(b) The eight anchors — hold; every one is the deciding commit, not a restatement. Site count 6 + 3 + 13 + 2 + 1 + 2 = 27 matches the body's table. Each anchor's message and diff were read, and each rewritten line was blamed at the base:

(c) The changeset — owed, patch right, prose accurate. packages/cli/package.json at the head: bin maps objectstack and os to ./bin/run.js; files is dist, README.md, CHANGELOG.md. npm packs a bin target regardless of files, and the repository's own gate encodes exactly that: scripts/check-changeset-no-major.mjs:1122 (landed by d451409d20, #16988) reads a packed bin target as a published surface and names packages/cli's bin/run.js as the case. So this diff publishes bytes from a released package, which is the one thing AGENTS.md's changeset rule says skip-changeset is not for; patch is the level for a change that widens nothing. Two landed precedents take the same shape: 8c1515e847 (#16971), a comment-only bin/run.js change with a patch "rather than a skip-changeset", and #19123's PR #20226, a patch for a docblock citation (ACCEPT 5855952308). Prose: "Three docblock lines above bin/run.js's process.stderr error listener" — the docblock spans lines 161 to 238 and the listener is attached at 246; the rewritten lines are 163, 168 and 220. "the commit … that made a failed stderr write non-fatal on the dev shim" is 0c5e97368's first squashed title verbatim. "npm packs a bin target regardless of files" is the package manifest plus the gate above. "Comment only: no command, flag, exit code, error code, export or runtime behaviour changes" is what the diff shows. Nothing in it reads as a behaviour change. Check Changeset on the head: success.

② Semver level

Clause-②: no with @objectstack/cli: patch is right under AGENTS.md's rule. The declaration pairs yes with at least minor; no — no accept set, export or public face moves, which (a) verifies — pairs with patch, and patch rather than none because bin/run.js ships (①(c)). Not breaking, so no ADR-0087 marker is owed; the dev's check-adr-0087-registration reads "no declared-breaking changeset", and Lint & Repo Gates on the head is success.

③ Boundary flags

Check-runs on 89264b0c1e, collapsed to latest-per-name after convergence (last completion Lint & Repo Gates at 2026-09-30T21:58:18Z): 34 names — 31 success, 3 skipped (Build Docs, Console Pin Gate, Packed-tarball smoke (opt-in)), 0 failure, 0 pending. All seven required contexts success: Lint & Repo Gates, TypeScript Type Check, Test Core (and its six shards), Dogfood Regression Gate (and its three), Build Core, Temporal Conformance (live PG + MySQL), Governed Surface Queue Guard. PR form: draft, base main, first line Part of #20594, Clause-②: no, no closing keyword (Part-of PR must not also close its card success). Governed surfaces: 0 of 7 paths; 66 changed lines.

Deviations (8), each answered:

  1. origin/main moved past the base and the branch was not merged forward — answered: 7 commits lie between the base aaad682dbc and the PR's base-branch tip f80e2a6dad, and git log over the 7 changed paths in that range is empty; the merge-ref CI above ran on the head and the queue rebuilds on landing.
  2. Hand-built census because the gate reads only packages/**/src/** — answered by an independent reading: the 27-in / 27-out line count and the unmoved 14 string sites in (a) are this record's own, not the dev's instrument.
  3. A first probe run answering 401 was discarded — noted; nothing cited rests on it.
  4. The token-guard comment control was corrected (below the shebang) before use — noted; the line-by-line reading in (a) is independent of that guard.
  5. The integration tier and three nightly-tier spawn files were run locally, detached with recorded PIDs — noted; the gate is CI's Test Core, success.
  6. A patch changeset was added per the claim's rule — answered in ①(c): right.
  7. AGENTS.md's model-free trailer pair used over the harness reminder — answered: both PR commits (ff1a80235a, 89264b0c1e) carry Claude-Session plus Co-authored-by: Claude and no model identifier, which is the form AGENTS.md prescribes and the pre-push hook enforces.
  8. Worktree cleanup after the report post — outside this record; the diff carries only the seven named files and no scratch artefact.

Out-of-scope findings (3), each answered:

  1. 14 dead numbers in check-app-nav-i18n.mjs strings and 97 dead string sites lane-wide → runtime strings in the domain:cli packages carry tracker numbers (114 messages in 8 packages, 254 ledgered ids): this lane's share of the #20513 A/A burn-down #20752 under the fold 5911936313 (form D, strings): correctly routed, and verified untouched at the head in (a).
  2. Six dead comment sites without a deciding commit remain (bin/run.js:225 and stage 14's five): the five stay under stage 14's ACCEPT 5914299201 (option A, listed); bin/run.js:225 is the open question below.
  3. The stage-14 landing comment 5914615742 spells its heading sha 4edb614494, which resolves to nothing, while the full sha in its body resolves — verified in the clone; card bookkeeping outside this diff, no action owed here.

Open question — bin/run.js:225 keeps #14874. For this PR, keeping it is what the claim 5918748154 requires ("stay as they are, unless this stage's history search finds a deciding commit") and what stage 14's ACCEPT ruled for this number. The history was re-read here adversarially: git log -S '#14874' names 95d5cbb316 ("#14874 measured the other half of the same lesson"), b3ef687c04 (wrote the line, #16686), 8c1515e847 (its changeset cites the packing fact) and d451409d20 (applies it inside check-changeset-no-major.mjs); --grep adds only b3615f1a4c, where "14874" is a test count; 5023630b17 never names the number. Each of these restates or applies "npm packs a bin target regardless of files"; none decided it — so the dev's "no deciding commit" holds, including against the two commits the dev did not name. On the options, as the texts read:

Implemented-by: claude/issue-20594-off-list-files
Reviewed-by: session_01VvcEokUG1tvVxkceYfR5XB

VERDICT: PASS


Generated by Claude Code

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

Labels

documentation Improvements or additions to documentation size/s tooling

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants