Repository navigation
tooling: root scripts/ is about 462k lines, 20 scripts are referenced from nowhere, 22 root check:* aliases are called by no workflow, hook or script, the same gate is spelled two ways, and 5 check-* scripts have no --self-test #26091
Description
Filing gate ③: a maintainer-directed task. Maintainer, 2026-10-26, verbatim: 「完整的评估本项目, 还有哪些可以优化的地方。包括 ci 和文档」 then 「使用 pm-dispatch 技能创建 issue,需要决策的立为决策卡。」 and 「低优先级的先不考虑」. Batch-of: 19 (repository evaluation 2026-10-26, session_019a9XCWsbMFp75REzthE6cs; 9 decision cards + 10 execution cards). ⛔ Filed bare: grading, domain:* and area:* are triage's. ⛔ Not a claim. Reader: the domain:devx execution seat (gate-class scripts route to domain:spec per the lane table; triage decides) — one os-dev, one or two PRs. Dedupe: REST list (439 issues), grep scripts/ |orphan|unreferenced|dead script → #25921 (open, ui dead modules — different tree); #25920 (open, dispatched, domain:devx: "tooling surface: 15 check:/census: scripts no workflow runs … 原则:删大于加") — that card's readings are the ui/ tree's scripts/ (135 files, 105k lines, 126 root scripts). This card is the root scripts/ (453 files). Same mechanism, different tree; the ruling direction on #25920 (删大于加) is carried here. New for the root tree.
谁付代价(业务筛): every seat that reads scripts/ to find the gate it tripped reads through one-off census and audit scripts that nothing runs; two spellings of the same gate (node scripts/x.mjs in CI, pnpm check:x in docs) mean a fix to one is not a fix to the other.
Measured (HEAD 0d83ee8; static reachability over package.json, .github, .githooks, turbo.json, configs and other scripts)
scripts/: 453 files (291.mjs, 120.json, 88 underadr-anchors/, 48 underpm/);wc -lover the 316 entry points → 461,961 lines. Largest:scripts/pm/check-half-states.mjs35,243,pm/dispatch-gates.mjs16,271,pm/dispatch-gates.self-test.mjs14,017,check-adr-0087-registration.mjs9,038,check-type-check-coverage.mjs8,351.- Reachability of the 316 entry points: 270 named by a package.json / workflow / hook / turbo / config; 26 reached only from other code; 20 referenced only in comments or docs, or nowhere:
scripts/ablation-replace.mjs,scripts/audits/14096-…census.mjs,scripts/audits/14423-*(4 files),scripts/audits/14744-*(2),scripts/bench/permission-bench.mts,scripts/bench/runtime-publish-gate.bench.mts,scripts/codemod/view-to-viewitem.mjs,scripts/measure-markdown-ts-blocks.mjs,scripts/measure-partial-retirement-annotation.mjs,scripts/measure-reserved-identity-name-census.mjs,scripts/measure-return-propagating-durability-seams.mjs,scripts/measure-self-test-floor.mjs,scripts/pm/fleet-git-credential.sh,scripts/pm/fleet-roster.mjs,scripts/pm/measurement-claim-triage.mjs,scripts/qa/qa-rollup.mjs. - Root
package.json: 198 scripts, 172check:*; all 172 are exercised by CI by name or by inlined command (see the sibling card on inlined commands), but 22 root scripts are invoked by no workflow, hook or other script, e.g.check:adr-0087-registration,check:undeclared-dep-imports,check:keyed-text-bounds,check:system-context-census,check:rest-log-declared(the dev re-derives the list; some are run by inlinednode scripts/…lines, which is the dual-spelling case, not an orphan). --self-test: 271 of 316 have it; of the 183check-*scripts, 5 do not:check-changeset-fixed.mjs,check-node-version.mjs,check-release-notes.mjs,check-service-providers.mjs,docs-audit/check-drift-comment.mjs.
Wanted
- For each of the 20: confirm zero references with a positive control, then delete (git keeps them) — ⛔ not an
archive/folder; a one-off audit script's reading already lives in itsdocs/audits/*.md. Any that adocs/auditsfile cites as "re-run with" keeps the citation pointing at the commit that held it. - One invocation spelling: CI calls
pnpm check:<name>(orpnpm run), nevernode scripts/<file>directly, sopackage.jsonis the one map; delete the root aliases nothing calls after that normalization, or wire them where the gate family that owns them runs. --self-testfor the 5check-*scripts, following AGENTS.md 「Writing a --self-test」.- ⛔ No gate weakened or removed on this card: a script that IS a gate stays; the card deletes only what nothing reaches.
Acceptance
- The reachability census re-run on the PR → 0 unreferenced entry points; 0 root
check:*with no caller;for f in scripts/check-*.mjs; do grep -q -- --self-test $f || echo $f; done→ empty. pnpm check:pm-skill-ratchetand the other repo-tooling lanes green.
Size: M. Clause-②: no. Metadata-protocol: none.
Related
#25920 (open, dispatched: the ui tree's version), #25921 (open), the inlined-commands card in this batch.
Activity
objectstack-fleet commentedon Oct 26, 2026
Triage: first grade —
tooling·tech-debt·priority:p2·domain:devx·area:devpath·pm:queue· triage seat ·session_01AavokzJ5DndAwitDXvKy4U· 2026-10-26T12:12Z⛔ Not a claim, ⛔ not a dispatch. On the maintainer's 「完整的评估本项目…」 / 「低优先级的先不考虑」 (repository evaluation, Batch-of 19). Low priorities were excluded at filing, so the execution cards grade p2.
package.json, docs). A gate-class script that turns out to be wired somewhere stays, and the PR lists it. Adding--self-testto the five scripts is in scope. ⛔ No gate is removed by this card: a check nobody runs is either wired up or retired with the maintainer's word.Generated by Claude Code
objectstack-fleet commentedon Oct 26, 2026
Claim: PM loop round 4 · items 1 and 3 · 2026-10-26T14:54Z
Session:
session_01Q4MDXRbEJCNdPAP4SiXwp9(devx seat 2) · card threadsession_01LbdJFR3AmcKLZKQafYE1tNAccount:
os-steveBranch:
claude/project-thread-wq49tp(the harness-pinned branch of the card thread; it names no issue, so this claim is the identity record; amended on spawn)Worktree:
objectstack-issue-26091Domain:
domain:devxSeat:
domain:devx#2(seat post #20163)File surface: Wanted 1 — delete, after a zero-reference proof with a positive control, the root
scripts/entry points the card lists as unreferenced (any that turns out referenced stays and is reported); Wanted 3 — add--self-testtoscripts/check-changeset-fixed.mjs,scripts/check-node-version.mjs,scripts/check-release-notes.mjs,scripts/check-service-providers.mjs,scripts/docs-audit/check-drift-comment.mjs; the three rootpackage.jsonaliasescheck:node-version,check:release-notes,check:service-providersrewritten to the repo'snode scripts/X.mjs --self-test && node scripts/X.mjsform socheck-self-test-wired.mjssees the new self-tests run (widened by the seat on the thread's measurement;check-changeset-fixed.mjsanddocs-audit/check-drift-comment.mjsare called straight from workflows, so their self-tests move to the Wanted 2 round);docs/audits/*.mdonly where a "re-run with" citation must point at the commit that held a deleted script. ⛔ Wanted 2 (one invocation spelling) is NOT in this claim: it edits.github/workflows/**/ci.ymland the rootpackage.jsonaliases, held whileci.ymlis in flight elsewhere; it stays on this card for a later round. ⛔ No gate removed or weakened (stop on breach; explain in the report)Container & model: M,
mode:thread,model: default tier (TIER_DEFAULT, from dispatch-gates --tier: no path-derived mandate),effort: highClause-②: no
Metadata-protocol: none
Responsibility: n/a — not a defect card
Thread-read: 6415695862
Premise: holds on
origin/main— all 30 listed paths exist;check-governed-merges.mjs --test <30 paths>→ governed false; threescripts/pm/*candidates still have one textual hit each (with-fleet.sh,gh-pages.mjs,dispatch-gates.mjs), so the dev proves each is a comment-only mention or keeps the fileSerial constraints cleared: 38 open PRs read, none touches the 30 paths or root
package.json; #25920 (seat 1) is theui/tree'sscripts/, disjointGenerated by Claude Code
objectstack-fleet commentedon Oct 26, 2026
os-dev-report
{ "issue": 26091, "status": "done", "branch": "claude/project-thread-wq49tp", "pr": "https://github.com/objectstack-ai/objectstack/pull/26235", "session": "session_01LbdJFR3AmcKLZKQafYE1tN", "premise_still_valid": true, "summary": "Wanted 1 and 3 only (Part of; Wanted 2 stays on the card). Wanted 1: zero-reference census over the whole tree at 7111e14ac9 (file stem, positive control scripts/check-nul-bytes.mjs, 32 files hit) -> 11 of the card's 20 deleted, their docs/audits re-run citations and one dispatch-gates.mjs docblock row repointed at commit 7111e14ac9; 9 kept because something reaches them (ablation-replace.mjs: os-dev.md + dogfood README procedure; 14744-...-census.mjs: COMPOUND_ANCHOR_LEDGER row; view-to-viewitem.mjs: ADR-0017; measure-return-propagating-durability-seams.mjs and measure-self-test-floor.mjs: AGENTS.md; fleet-git-credential.sh: with-fleet.sh executes it; fleet-roster.mjs: maintainer-ordered roster generator; qa-rollup.mjs: RUNNER.md; measure-partial-retirement-annotation.mjs: the dispatch-gates slow-tier seamCard, measured). Wanted 3: --self-test (roster floor + battery-count pin + verdict handshake, copied from check-agent-model-declared.mjs) for check-node-version, check-release-notes, check-service-providers, wired through their root aliases as the seat amended the claim; check-changeset-fixed and docs-audit/check-drift-comment deferred to the Wanted 2 round because only a .github/workflows edit can wire them.", "tests": "Old vs new copies of the three refactored scripts run on one fixture tree: baseline green and six red mutations (page missing+unlisted+section unreachable; provider typo+missing slot; one mismatched setup-node step; EOL, unknown and empty pins) -> stdout, stderr and exit identical in all 9 runs. Self-tests: check-release-notes 10 cases, check-service-providers 11, check-node-version 14, each exit 0 (a wrong line expectation in the node-version table first went red, then was corrected, so the floor is live). Slow tier of check:pm-dispatch-gates at 2e05d6c9a: 2182 cases pass, exit 0 (at 21ddadb5f it failed 16 seamCard cases, which is why measure-partial-retirement-annotation.mjs was restored). Scripts only: no ablation owed.", "gates": "Local, at 2e05d6c9a: dispatch-gates --commands derived 54 families; all 54 run, every exit 0 captured before any pipe; --ran -> 54 run, 0 NOT-MEASURED, 0 UNRUN. Card Acceptance: pnpm check:pm-skill-ratchet exit 0; card for-loop over scripts/check-*.mjs prints only scripts/check-changeset-fixed.mjs (deferred); census re-run: 11 deleted files have 0 callers. CI check-runs on PR 26235: in_progress at report time.", "dogfood_battery": "n/a — no ! in the PR title and no (narrowing) arm", "line_budget": "+838 / -4370 = 5208 changed lines over 19 files, OVER the 3000 human-merge threshold (AGENTS.md Multi-agent discipline 7 (c)): lands by an authorized approval or a human merge", "files_changed": 19, "deviations": [ "File surface widened by the seat (claim 6419156010 amended): root package.json aliases check:node-version, check:release-notes, check:service-providers now run --self-test first.", "Wanted 3 delivered for 3 of 5 scripts: check-self-test-wired reds an unwired --self-test and forbids a SELF_TEST_RUN_OTHERWISE row, and the other two are wired only by .github/workflows lines (forbidden this round).", "Census measured 9 kept, not the card's 0: each keeper's caller is named in the PR body." ], "mcp_calls": "0", "api_writes": "2 relay writes: POST /repos/objectstack-ai/objectstack/dispatches (pr_create, run 40359471541), and this os-dev-report comment through post-stamped. Plus 3 git pushes (not REST). Write budget 3 strokes: push, pr_create, report.", "open_questions": [], "out_of_scope_findings": [ "carrier: #26091 (Wanted 2 round) · --self-test for scripts/check-changeset-fixed.mjs and scripts/docs-audit/check-drift-comment.mjs, wired in cut-rc.yml, release.yml, validate-deps.yml and docs-drift-check.yml", "carrier: #26091 · 14744-before-update-per-row-value-census.mjs can go only with its COMPOUND_ANCHOR_LEDGER row and the docblock counts in scripts/pm/dispatch-gates.data.mjs; view-to-viewitem.mjs only with an ADR-0017 edit (Tier H)" ] }Generated by Claude Code
objectstack-fleet commentedon Oct 26, 2026
devx seat 2 · review: ACCEPT → PR #26235 (items 1 and 3,
Part of) comment 6421573282 on head9bc8449c06. A maintainer approval (os-zhuang) is on that head, and every check is green or skipped. Not governed. Landing: ready + auto-merge. The four larger deletions held back by9bc8449cfollow in a second PR on the same branch after this one merges.Generated by Claude Code
objectstack-fleet commentedon Oct 26, 2026
os-dev-report
{ "issue": 26091, "status": "done", "branch": "claude/project-thread-wq49tp", "pr": "https://github.com/objectstack-ai/objectstack/pull/26266", "session": "session_01LbdJFR3AmcKLZKQafYE1tN", "premise_still_valid": true, "summary": "PR 2 of the Wanted 1 split, opened after #26235 merged. It deletes the four held-back scripts: measure-markdown-ts-blocks.mjs, measure-reserved-identity-name-census.mjs, pm/measurement-claim-triage.mjs and bench/runtime-publish-gate.bench.mts. The one dispatch-gates.mjs docblock mention now names commit 7111e14ac9. The census was re-run on main at 81bba6c3f and the four have no callers. Correction to the first report: the body of #26235 still says 11 deleted / 5208 lines, but what landed is 7 deleted / 2264 lines (head 9bc8449c); this PR carries the other 4.", "tests": "dispatch-gates.self-test.mjs uses runtime-publish-gate.bench.mts only as a string for pure predicates. Fast tier at 77e4b93c5: 1917 cases pass. Both tiers: 2182 cases pass.", "gates": "Local, at 77e4b93c5: 33 derived families, all 33 run, every exit 0 captured before any pipe; --ran reports 33 run, 0 NOT-MEASURED. check:pm-dispatch-gates --slow exit 0 (2182 cases). check:type-check-debt exit 0 (26 errors, unchanged). CI on PR 26266: in_progress at report time.", "dogfood_battery": "n/a — no ! in the PR title and no (narrowing) arm", "line_budget": "+2 / -2942 = 2944 changed lines over 5 files, under the 3000 human-merge threshold", "files_changed": 5, "deviations": [ "The branch took origin/main by merge (3c78e2e59) rather than a reset plus force-push, because the branch name is not claude/issue-* and AGENTS.md section 3 criterion 1 then classes it as shared. The diff against main is the five files only." ], "mcp_calls": "0", "api_writes": "2 relay writes for this PR: POST /repos/objectstack-ai/objectstack/dispatches (pr_create, run 40374044814) and this os-dev-report comment through post-stamped. Plus 2 git pushes (not REST).", "open_questions": [], "out_of_scope_findings": [ "carrier: #26091 (Wanted 2 round) · --self-test for check-changeset-fixed.mjs and docs-audit/check-drift-comment.mjs, wired through the workflows" ] }Generated by Claude Code
objectstack-fleet commentedon Oct 26, 2026
devx seat 2 · review: ACCEPT → PR #26266 (PR 2 of the items 1 + 3 split,
Part of) comments 6423645921 + round 2 on headffcb44dda8. Every check is green or skipped. Not governed. Landing: ready + auto-merge.Generated by Claude Code
4 remaining items
objectstack-fleet commentedon Oct 27, 2026
os-dev-report
{ "issue": 26091, "status": "in_progress", "branch": "claude/project-thread-y83svr", "pr": "https://github.com/objectstack-ai/objectstack/pull/26409", "session": "session_01ADHkmQq9EYQdTQwmRutQTS", "premise_still_valid": false, "summary": "PR 2 of #26086, also carrying #26091 Wanted 2; Part of both. Step census on main e677770a: 9 workflow steps inline a command byte-identical to a root check:* alias (the card counted 16; the other partial matches are different invocations, where CI enforces the inline form). 7 lint.yml steps now run pnpm check:NAME; the 2 left (check-links ADR links, board-snapshot self-test) sit in jobs deliberately built without pnpm. check-system-context-census's self-test wiring pin now pins the alias. Root check:* aliases with no caller: 11 -> 4 (three symbol-anchor aliases, pm-closed-card-sweep; their steps are split on purpose). #26091 also still lacks a --self-test for check-changeset-fixed.mjs, so neither card is closed by this PR.", "tests": "7 aliases run locally via pnpm -s check:NAME: all exit 0. check-system-context-census --self-test: all cases passed; negative control (lint.yml line removed) -> 'FAIL WIRING: lint.yml invokes this gate through its root alias'. pnpm exit-code passthrough checked with a script exiting 3 -> exit 3.", "gates": "dispatch-gates --commands: 56 families, all 56 exit 0 captured before any pipe; --ran: '56 derived famil(ies) accounted for — 56 run, 0 NOT-MEASURED'. CI check-runs on the PR pending at report time.", "line_budget": "+27 / -23 over 2 files (.github/workflows/lint.yml, scripts/check-system-context-census.mjs)", "deviations": [ "7 replacements, not the card's 16: only 9 steps duplicate an alias exactly, and 2 of those are in no-pnpm jobs", "#26091 carried as Part of, not Fixes: 4 uncalled aliases remain (claim forbids removing or adding gates) and check-changeset-fixed.mjs --self-test is outside this claim", "two pointer comments ('Invoked as node rather than through a pnpm check:* alias') corrected because the touched steps made them false" ], "files_changed": [ ".github/workflows/lint.yml", "scripts/check-system-context-census.mjs" ], "dogfood_battery": "n/a — no `!` in the PR title and no (narrowing) arm", "write_budget": "git push (branch recreated after PR 1 merge); 1 relay pr_create (#26409, draft, assignee os-steve, label skip-changeset); 2 relay comments (this report on #26086 and #26091)", "mcp_calls": "read-only since PR 1 report: mcp__github__issue_read x3, mcp__github__pull_request_read x2; no write tool", "api_writes": "0 direct — all GitHub writes through the fleet-write relay", "open_questions": [ { "question": "How should #26091's last 4 uncalled aliases be settled?", "options": [ "A: leave them as the local one-command form and accept them as callerless", "B: delete them (CI runs every leg directly)", "C: call them from CI and drop the split steps" ], "recommendation": "A, because the split steps are deliberate and the claim forbids removing gates; B needs a ruling" } ], "out_of_scope_findings": [ "carrier: #26091 · --self-test for scripts/check-changeset-fixed.mjs still owed (deferred from Wanted 3)" ], "governed": "Tier H (.github/workflows/**): draft; waits for a GOVERNED_APPROVERS approval (os-zhuang, hotlong)" }Generated by Claude Code
objectstack-fleet commentedon Oct 27, 2026
devx seat 2 · released: PR #26409 (
Part of #26091) merged ase0d63174, and its +/- lines onmainmatch the reviewed head491624d2(2 files). Wanted 2 is partly done: 7lint.ymlsteps now run theirpnpm check:*alias.What remains on this card, for the next claim:
check:*aliases with no caller (three symbol-anchor aliases andpm-closed-card-sweep) sit in deliberately split steps; wire or delete each, with the reason.check-changeset-fixed.mjs --self-test.GATE INVOCATION IDIOMnote at the top oflint.yml(L109–150) states that directnode scripts/...is the house idiom, and three gates pinnode <self>in their self-tests. Wanted 2 reverses that, so the PR that finishes it rewrites the note and those pins in the same change.Back to
pm:queuewith no assignee.Generated by Claude Code
objectstack-fleet commentedon Oct 27, 2026
Claim: PM loop round 9 · 2026-10-27T03:21Z
Session:
session_01Q4MDXRbEJCNdPAP4SiXwp9(devx seat 2) · card threadcmsg_01FdL1XeUyvVNxLreh3F4Qi95YovdFSHTxz132KjPG4TAaAccount:
os-steveBranch:
claude/project-thread-y83svr(the card thread's harness-pinned branch, reset tomainafter PR #26409 merged; it names no issue, so this claim is the identity record)Worktree:
objectstack-issue-26091Domain:
domain:devxSeat:
domain:devx#2(seat post #20163)File surface: the rest of Wanted 2 and Wanted 3 as listed in the release comment 6432917865: (1) the 4 root
check:*aliases with no caller (three symbol-anchor aliases,pm-closed-card-sweep): wire each where its gate family runs, or delete it with the reason, rootpackage.jsonplus the workflow step that owns it; (2)scripts/check-changeset-fixed.mjs --self-testper AGENTS.md 「Writing a --self-test」, wired wherecheck:self-test-wiredexpects it; (3) rewrite theGATE INVOCATION IDIOMnote in.github/workflows/lint.yml(L109–150) and every step comment that points at it, plus thenode <self>wiring pins incheck-aggregator-roster,check-ci-filter-parityandcheck-doc-frontmatterself-tests, so the house rule reads "CI callspnpm check:<name>" with the pins asserting the alias. ⛔ No gate removed or weakened (a pin moves, it does not go). ⛔ Noci.yml, noui/path. ⛔ Tier H (.github/workflows/**): draft until a GOVERNED_APPROVERS approval; the dev neither readies nor arms auto-mergeContainer & model: M,
mode:thread,model: default tier (TIER_DEFAULT, from dispatch-gates --tier: no path-derived mandate),effort: mediumClause-②: no
Metadata-protocol: none
Responsibility: n/a — repository evaluation 2026-10-26; triaged p2
Thread-read: 6432917865
Premise: on
main(after #26409 ate0d63174) the 4 caller-less aliases, the missingcheck-changeset-fixedself-test and the IDIOM note are as the release comment lists (the dev re-reads each first)Serial constraints cleared: #26419 (#26083, this seat) edits the setup steps of
lint.yml, other lines; whichever lands second mergesmainGenerated by Claude Code
objectstack-fleet commentedon Oct 27, 2026
os-dev-report
{ "issue": 26091, "status": "pr_open_draft", "branch": "claude/project-thread-y83svr", "pr": 26482, "session": "https://claude.ai/code/session_01ADHkmQq9EYQdTQwmRutQTS", "premise_still_valid": true, "summary": "Final PR for #26091 (Fixes). Rewrote lint.yml GATE INVOCATION IDIOM note: a gate step runs its root check:* alias; direct node only for a different invocation, a job with no pnpm, or a legacy alias-less step (not swept, #25919). 7 self-test pins moved from node <self> to the alias (both lint.yml run line and package.json value asserted). 3 symbol-anchor aliases now called (collector step split into 4 steps; resolver got its own check:symbol-anchors alias); check:pm-closed-card-sweep removed (only CI caller is the no-pnpm half-state-patrol job, which keeps both legs inline). check-changeset-fixed.mjs got a 12-case --self-test, run via new check:changeset-fixed alias in validate-deps.yml and both release.yml lanes.", "tests": "Callerless root check:* keys 4 -> 0; scripts/check-*.mjs without --self-test 1 -> 0; all 9 touched aliases exit 0; negative controls red (alias leg removed, alias changed, judge rules disabled).", "gates": "dispatch-gates --commands: 77 derived on merged tree 44a3660e (main 67461403); 77/77 exit 0; --ran: 0 NOT-MEASURED, 0 UNRUN. First round red check:pm-dispatch-gates 2/1901 (resolver marker contradicting corpus paths; release.yml-only direct-node family) - both fixed.", "line_budget": "+334/-147 across 13 files", "deviations": [ "Pins moved on 7 gates, not 3 (census found check-docs-nav-label and the 3 symbol-anchor corpora pin the same way)", "release.yml touched (2 lines) so check-changeset-fixed keeps one pull_request-reached family", "Resolver self-test split into its own alias/step instead of prefixing the corpus aliases", "check:pm-closed-card-sweep deleted rather than wired (no-pnpm job)", "Rule scoped: ~60 direct node lines for 33 alias-less scripts left as-is (ci.yml out of bounds; #25919); their pointer comments stay accurate under the new note" ], "files_changed": [ ".github/workflows/lint.yml", ".github/workflows/release.yml", ".github/workflows/validate-deps.yml", ".github/workflows/half-state-patrol.yml", "package.json", "scripts/check-changeset-fixed.mjs", "scripts/check-aggregator-roster.mjs", "scripts/check-ci-filter-parity.mjs", "scripts/check-doc-frontmatter.mjs", "scripts/check-docs-nav-label.mjs", "scripts/check-adr-symbol-anchors.mjs", "scripts/check-scripts-symbol-anchors.mjs", "scripts/check-spec-docblock-symbol-anchors.mjs" ], "dogfood_battery": "n/a (repo tooling)", "write_budget": "2 relay writes this round (pr_create, this comment)", "mcp_calls": "0 GitHub MCP writes; reads only (PR read-back)", "api_writes": 0, "open_questions": [ "Tier H: needs a GOVERNED_APPROVERS approval (os-zhuang or hotlong) before ready" ], "out_of_scope_findings": [ "33 scripts still invoked by direct node in CI with no alias (incl. ci.yml); convert when each step is next rewired" ] }Generated by Claude Code
objectstack-fleet commentedon Oct 27, 2026
devx seat 2 · released: PR #26482 (
Fixes #26091) merged asc91544a4through the merge queue. Its +/- lines onmainmatch the reviewed head44a3660ein all 13 files. With #26409 (PR 2 of #26086) and this PR, Wanted 2 and 3 are done:lint.yml, andcheck:pm-closed-card-sweepis deleted (its only CI caller has no pnpm).check-changeset-fixed --self-testexists and runs viacheck:changeset-fixedin validate-deps and release.yml.GATE INVOCATION IDIOMnote now states that CI calls the root alias, and 7 self-tests pin that wiring.The card closed on
Fixes;pm:dispatchedcomes off.Generated by Claude Code