Repository navigation
skills+docs: governed texts still describe the committed spec-changes.json, its os-regen route and its regeneration lap, which #22485 (PR #22638) retired #22667
Description
Activity
objectstack-fleet commented
on Oct 10, 2026 ContributorAuthorMore actionsCorrection to this card's dedupe line, from the filer (
domain:specseat 1, sessionsession_01VZqqwTj2wsihZEbfT6yyYN) · 2026-10-10T09:46Z. The grep over the 194 stored titles hit six cards, not three: #22485, #22449, #22554, #22484, #22482 and #22340.- docs(adr): revise ADR-0087 D4 and its P2 true-up for B′, so the per-major projections are generated at publish rather than committed (#22449, Tier H) #22484 (closed) is the ADR-0087 D4 revision for B′. It wrote the "until spec(changes): delete the committed spec-changes per-major projection and the upgrade guide copy, with their two merge=os-regen routes, once generation at publish has landed (#22449 B′) #22485 lands" notes this card asks to put in the past tense.
- [Decision] the migration registry
registry.tsis the last committed generated aggregate on the ADR-0087 D3 path: keep it and finish B′, or generate it at build #22554 (theregistry.tsdecision), spec(changes): generate the per-major spec-changes section and the protocol upgrade guide at publish; the pull request still generates both in memory and renders the diff (#22449 B′, condition 1) #22482 (closed, generation at publish) and spec: renameallowOrgOverrideto an environment-overlay key with an ADR-0087 load-time conversion (ADR-0131 C5's spec half, split from #15206 per #22007 ruling C) #22340 (an unrelated rename) do not carry these lines.
None duplicates this card.
objectstack-fleet commented
on Oct 10, 2026 ContributorAuthorMore actionsTriage: first grade,
documentation·priority:p2·domain:skills·area:devpath·pm:queue. One Tier H PRTriage seat (objectstack-wide, seat post #6015) ·
session_01AavokzJ5DndAwitDXvKy4U· 2026-10-10T09:58Z. ⛔ Not a claim, ⛔ not a dispatch.- Lane: every path is governed (
docs/adr/**,AGENTS.md,.claude/skills/**), sodomain:skills, landing with the maintainer's approval. - Why p2: agent-facing text sends the next author into a regeneration lap that no longer exists. Three devs this shift already regenerated and reverted a stale copy.
- Direction, as filed:
- ADR-0087's not-yet-landed sentences go to past tense.
- AGENTS.md's artifact count is re-measured, and its regenerate row becomes
check:migration-registry/gen:migration-registry. - The retirement skill's two
gen:spec-changes/gen:upgrade-guidesteps are corrected.
- Triage's call on the two open lines:
- ADR-0087
:219–:220is a verbatim ruling quote. ⛔ Not edited. - ADR-0120
:459–:460records what that PR did. It stays as history: it is a dated account, not an instruction.
- ADR-0087
- Lane: every path is governed (
- addedarea:devpathThe road — create, dev, verify, publish/install, connect an agent, iterateThe road — create, dev, verify, publish/install, connect an agent, iteratedocumentationImprovements or additions to documentationImprovements or additions to documentationpriority:p2Medium: important, M3Medium: important, M3
on Oct 10, 2026 objectstack-fleet commented
on Oct 10, 2026 ContributorAuthorMore actionsSame-family site, for this card's close-out ·
domain:specseat 1 (#6017) ·os-project-manager· sessionsession_01S3aAf11JjbW1mSGL1EhfFj· 2026-10-10T18:05Z. ⛔ Not a claim.PR #22706 (#22554, ruling B
6092692730) takespackages/spec/src/migrations/registry.tsout of git, the same program as #22485 forspec-changes.json. The registry's hand-written skeleton (the header,STEP18_RATIONALE,step18, the tables' doc comments) moves to a committedpackages/spec/src/migrations/registry.ts.template. The generator writesregistry.tswhole from it plusentries/, so a hand edit toregistry.tsis never committed.The governed site this makes false, once PR #22706 lands (until then the current text is true):
.claude/skills/spec-property-retirement/SKILL.md:213("一步 D3 链,在packages/spec/src/migrations/registry.ts"), with the step-18STEP18_RATIONALEfragment and an earlier step'sconversionIds/rationaleit says are added there. Those hand edits belong inregistry.ts.templateafter PR build(spec): the migration registry is generated at build and leaves git #22706.- The dev's proposed wording: 「一步 D3 链,在
packages/spec/src/migrations/registry.ts.template(registry.ts由gen:migration-registry从它与entries/整文件生成并被 git 忽略,在registry.ts里手改不会进提交)」. :183(add an entry file, then rungen:migration-registry) stays true.
Timing: this part should land right after PR #22706, and before a retirement card follows the old sentence. PR #22706 waits on the maintainer's APPROVED review (34,953 changed lines). This seat reports its merge on #22554.
objectstack-fleet commented
on Oct 10, 2026 ContributorAuthorMore actionsSame-family site: the trigger.
domain:specseat 1 (#6017) ·os-project-manager· sessionsession_01S3aAf11JjbW1mSGL1EhfFj· 2026-10-10T23:25Z. ⛔ Not a claim.PR #22706 (#22554) landed as
ed1de8c2dbat 2026-10-10T23:21Z. Note6100582202said its sentence would become false at that point, and it now has:packages/spec/src/migrations/registry.tsis git-ignored and generated whole bygen:migration-registry, fromregistry.ts.templateplusentries/..claude/skills/spec-property-retirement/SKILL.md:213still says the step-18 hand edits go "在packages/spec/src/migrations/registry.ts". A hand edit there is lost on the next build and is never committed. Those edits belong inregistry.ts.template.- The proposed wording and the
:183note in6100582202stand.
This card's fix is due now, before a retirement card follows the old sentence. The site is a governed file, so it stays with this card's lane. This seat edits nothing there.
objectstack-fleet commented
on Oct 11, 2026 ContributorAuthorMore actionsClaim: PM loop round 1
Session:session_011u73oxZ5X95qrARPTeoU6v
Account:zhuangjianguo(the seat's linked user asGET /useranswers it; always the card's assignee)
Branch:claude/issue-22667-governed-text-after-22485
Worktree:objectstack-issue-22667
Domain:domain:skills
Seat:domain:skills#2
File surface:docs/adr/0087-metadata-protocol-upgrade-contract.md(the not-yet-landed notes the card lists; ⛔ not the verbatim ruling quote at:219–:220) ·AGENTS.md(thepackages/specartifact count at:706and the regenerate-table row at:717) ·.claude/skills/spec-property-retirement/SKILL.md(:213,:260,:336–:337); ⛔docs/adr/0120-*stays as history (triage's call) (stop on breach; explain in the report)
Container & model:M,mode:subagent,model: opus(default judgment tier:dispatch-gates --tier --repo objectstack-ai/objectstackon the three paths ate84aeb3printed no path-derived mandate; governed prose corrections with one re-measure; the governed-rule-text contract review is in seat at tier)
Clause-②: no — governed instruction text; no published accept set or public surface changes.
Responsibility:the governed texts themselves (AGENTS.md, ADR-0087's progress notes, the retirement playbook), written by this repository's seats | none — no gate compares these sentences to the tree | every dev and seat that follows them before a packages/spec migration edit; three devs regenerated and reverted the stale copy this week (#22502, #22565, #22605 per the card)
Thread-read: 6103297978
Serial constraints cleared: seat 1's body r176 namesdocs/adr/0087-*.md·AGENTS.md·.claude/skills/spec-property-retirement/SKILL.mdas reserved by nobody and this card's surface; PR #22142 (#9591), the last to touch the retirement playbook, MERGED 2026-10-08T09:01Z; PR #22706 (#22554), the trigger for:213, MERGED ased1de8c2db; open PR #22707 (ADR-0139) is a different ADR file; ratchet:AGENTS.mdheadroom 8, the playbook at 337/337, so its edits are swaps.
Generated by Claude Code
objectstack-fleet commented
on Oct 11, 2026 ContributorAuthorMore actionsos-dev-report
{
"issue": 22667,
"status": "done",
"branch": "claude/issue-22667-governed-text-after-22485",
"pr": "#22796",
"session": "session_011u73oxZ5X95qrARPTeoU6v (subagent of the dispatching PM session; the harness gave no separate id)",
"premise_still_valid": true,
"summary": "Draft PR #22796 (head bd6337b, base a2e94c2) rewrites 11 sites in 3 governed files to describe main as it is now. In ADR-0087 the D4 note now records #22483 as landed at 514bf3c (PR #22556) and #22485 at 46064df (PR #22638). Its other not-yet-landed sentences are now in the past tense: Status, the 2026-08-06 note, the end-state block, the #6957 tail, the P2 bullet and the P2 amendment. The ruling quotation at :219-:220 and ADR-0120 are untouched. In AGENTS.md the count drops from eight to six checked-in artifacts (the six gates are listed in the PR), and the ADR-0087 row now names the gates that exist and says there is nothing to commit. In the retirement playbook :213 sends step edits to registry.ts.template (the 6100582202 wording), :260 drops the projection laps, and the summary trap now says no regeneration is owed. B1-B5 measured true, with one exception: check:migration-registry no longer exists. PR #22706 removed it after the card was filed, so the AGENTS row names check:spec-changes and check:upgrade-guide instead, which is the dispatch's stated fallback.",
"tests": "gates: node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstack, run with no paths, derived 31 commands at merge base a2e94c2 for 3 paths. All 31 exited 0 on head bd6337b (git rev-parse --short HEAD). The --ran reconciliation reads '31 derived famil(ies) accounted for — 31 run, 0 NOT-MEASURED (a DERIVED zero — all 31 recorded an exit code and none of them is 3)'. On its first run, pnpm --filter @objectstack/lint run check:doc-formula-expressions exited 3 (PREREQUISITE NOT MET: formula and lint unbuilt). I built both under os-verify-lock ('VERDICT command-exit 0 · held the lock 15s') and the rerun exited 0. Verdict lines: check-adr-0087-registration --base origin/main 'this PR adds no declared-breaking changeset', and its --self-test passes 463 assertions; check:adr-anchors 'OK (64 anchored file(s) ... 43489 citation(s) across 5721 file(s) resolve ...)'; check-adr-links '725 relative link destination(s) under docs/adr/ resolve'; check-adr-symbol-anchors '2309 anchors across 142 records resolve'; check:pm-governed-prose '2 instruction surface(s) name all 6 registered governed surfaces'; check:pm-skill-id-lint '34 file(s) clean'; check:nul-bytes 'OK (scanned 10817 text file(s) ... no raw ASCII control bytes)'; check:skill-frame-sync coherent; check:pm-prior-rulings 155 cases pass; check:doc-authoring clean; check:docs-audit-scope in sync; check-ci-filter-parity OK. The diff touches no package, so there is no package build or test (local scope items 1 and 2 are not owed); ablation does not apply. A separate grep -naP control-byte scan over the 3 files found nothing. line_budget: AGENTS.md 1108 lines before and after; ratchet line '✓ check-skill-line-ratchet: AGENTS.md is 1108 lines (ceiling 1116; headroom 8).'; widest table row 768 B (pin 768). .claude/skills/spec-property-retirement/SKILL.md 337 lines before and after; ratchet line '✓ check-skill-line-ratchet: .claude/skills/spec-property-retirement/SKILL.md is 337 lines (ceiling 337; headroom 0).' The :213 bullet grows by 2 lines (the template parenthetical), paid for by the :335-:337 trap shrinking 3 to 1 through deletion of the false instruction, not by a re-wrap. :260 swaps one line for one line. Every new line is at most 120 B (largest 119), with breaks only where the ratchet's own breakLegal allows. ADR-0087 has no ceiling (+27/-21). deviations: (1) The harness attribution asked for a model-named Co-Authored-By trailer. The pre-push check:commit-card-trailers hook refused that unpublished commit, so I amended it to the AGENTS.md model-free pair, 'Co-authored-by: Claude' plus Claude-Session. No force push was needed. The PR body carries only the AGENTS.md session-URL footer, not the harness's emoji block. (2) Card vs tree: the card's proposed row named check:migration-registry, which no longer exists, so the row names the two existing in-memory gates. (3) The B2 same-class sweep added two ADR-0087 sites the card does not list: the Status line (:3, found by reading) and the P2 bullet (:431-:432, found by the 22483 grep). (4) Re-wrapping the :213-:216 span with the ratchet's breakLegal joined one older soft break inside that span (after a Han character plus ASCII comma, which the #12081 rule says renders as a space). (5) No conflict between the dispatch and os-dev.md. files_changed: docs/adr/0087-metadata-protocol-upgrade-contract.md (+27/-21) · AGENTS.md (+2/-2) · .claude/skills/spec-property-retirement/SKILL.md (+8/-8); total +37/-31 across 3 files.",
"mcp_calls": "0 — no MCP GitHub tool was called",
"api_writes": "3 — each one repository_dispatch through scripts/pm fleet-write, landing as objectstack-fleet[bot]: (1) pr_create = POST /repos/objectstack-ai/objectstack/pulls (draft forced) + POST /repos//issues/22796/assignees, run 38120468418; the read-back is identical (11533 B) and the assignees the pull lists are zhuangjianguo; (2) label-write labels_add = POST /repos//issues/22796/labels skip-changeset, run 38120500356, read back as documentation, size/s, skip-changeset; (3) post-stamped comment = POST /repos//issues/22667/comments (this report). Also, outside the REST count: git push x2 accepted (the empty-branch probe, then bd6337b) and 1 refused locally by the pre-push hook.",
"open_questions": [],
"out_of_scope_findings": [
"class: same family as this card, so it is not filed separately · reach: AGENTS.md section 'Touched packages/spec?' says 'Two generators have no gate at all — gen:openapi and gen:sbom', but pnpm check:generated --reconcile-only on bd6337b prints '3 ungated generators', because gen:migration-registry joined UNGATED_GENERATORS in packages/spec/scripts/check-generated.ts at PR #22706 (ed1de8c) · evidence: that wrapper line and the UNGATED_GENERATORS list · carrier: PR #22796, as a patch round if the seat adds this line to the claim's AGENTS.md surface. It is outside the declared :706/:717 spans, so I left it unedited. Proposed after-text: 'Three generators have no gate at all — gen:openapi, gen:sbom and gen:migration-registry (its output is gitignored and regenerated by install, build and test). Nothing verifies the first two are current; the wrapper reports all three each run rather than staying silent.' Cost: +1 line, against AGENTS.md headroom 8 · dedupe words: AGENTS.md ungated generators gen:migration-registry · two generators have no gate · check:generated ungated count",
"carrier: 承接者:无 · noted, not filed — the same section's 'All of them live in one job — TypeScript Type Check ... runs its gates sequentially' predates this card. Of the six gates, check:docs, check:authorable-surface, check:skill-docs, check:skill-refs and check:react-blocks run in lint.yml job typecheck-source-gates ('Type Check · source gates'), and check:api-surface runs in typecheck-consumers ('Type Check · consumer gates'). Both lanes sit behind the required 'TypeScript Type Check' aggregate. The PR's Acceptance notes record this.",
"carrier: 承接者:无 · noted, not filed — ADR-0120 :459-:460 and :560 still name the gen:/check: projection laps as that PR's record. Triage ruled them history, so they are untouched."
]
}
Generated by Claude Code
objectstack-fleet commented
on Oct 11, 2026 ContributorAuthorMore actionsClaim extension (same claim 6106319581, same branch
claude/issue-22667-governed-text-after-22485, same sessionsession_011u73oxZ5X95qrARPTeoU6v) · 2026-10-11T07:16ZReport 6106463015's sibling on this card, the dev's
os-dev-reportfor PR #22796 (headbd6337b8b), is read against GitHub: 11 sites in 3 governed files, +37/−31, every checklist item holds (first lineFixes #22667,Clause-②: noat line start,## 维护者速读(草稿)present,skip-changeseton three unpublished faces, draft tomain, assignee set bypr_create— the first measuredassigneeson a relaypr_create). Verified onorigin/main:514bf3c101,46064dfa03anded1de8c2dbare ancestors (exit 0);docs/protocol-upgrade-guide.mdis a 15-line pointer stub;packages/spec/spec-changes.json,packages/spec/protocol-upgrade-guide.mdandcontent/docs/protocol-upgrade/are gitignored; ADR-0087's ruling quotation is unchanged on the head; every new playbook line is at most 119 bytes.Verdict: patch round 1 on the same claim, then the four-piece set. The dev's Acceptance note names one more stale sentence in the same AGENTS.md section ("Touched
packages/spec?",:761–:762on the base): "Two generators have no gate at all —gen:openapiandgen:sbom."packages/spec/scripts/check-generated.tslistsgen:migration-registryunderUNGATED_GENERATORSsince PR #22706 (ed1de8c2db), and the dev measuredpnpm --filter @objectstack/spec check:generated --reconcile-onlyprinting "3 ungated generators" onbd6337b8b. Same defect class as this card (a count in that section made false by the registry leaving git), mechanical, no other claim onAGENTS.md, same gate family (check:pm-skill-ratchet,check:pm-governed-prose). File surface widened in this act:AGENTS.mdfrom the two declared lines to the whole "### Touchedpackages/spec? Regenerate its artifacts BEFORE pushing" section (base:704–:770); nothing else widens. Net budget for the patch: at most +1 line inAGENTS.md(headroom 8), swap preferred.The PR body update for site 12 is the seat's write after the dev's patch report (the dev writes the body once). The contract review and the ACCEPT are recorded on the patched head.
Generated by Claude Code
objectstack-fleet commented
on Oct 11, 2026 ContributorAuthorMore actionsos-dev-report
{
"issue": 22667,
"status": "done",
"branch": "claude/issue-22667-governed-text-after-22485",
"pr": "#22796",
"session": "session_011u73oxZ5X95qrARPTeoU6v (subagent of the dispatching PM session; patch round 1 under claim 6106319581 as widened by 6106593221)",
"premise_still_valid": true,
"summary": "Patch round 1 adds site 12. In AGENTS.md section 'Touched packages/spec?' (base :761-:762, now :761-:763) the two-generator sentence becomes a three-generator statement, and the section changes in no other place. New head 6cb0d8e (6cb0d8e), pushed bd6337b..6cb0d8e; PR #22796 is still a draft with labels documentation, size/s and skip-changeset, and its body was not edited. Before: 'Two generators have no gate at all —gen:openapiandgen:sbom. Nothing verifies their output is current; the wrapper reports that each run rather than staying silent.' After: 'Three generators have no gate at all. Nothing verifiesgen:openapiandgen:sbomare current, andgen:migration-registrywrites gitignored output that install, build and test regenerate; the wrapper reports all three each run rather than staying silent.' The 2-line sentence becomes 3 lines (+1, within the budget). New line widths are 87/90/83 bytes against the paragraph's 89/86. The +1 is forced: every wording that kept the original clause order wrapped to 4 lines at 90 bytes, so the clauses were reordered. The original worktree had been removed after round 0, so this round re-created it from origin/claude/issue-22667-governed-text-after-22485 at bd6337b, with the same path and branch.",
"tests": "gates: (requested) node scripts/pm/check-skill-line-ratchet.mjs exit 0; pnpm check:pm-governed-prose exit 0, '✓ check-governed-prose: 2 instruction surface(s) name all 6 registered governed surfaces (docs/adr/** · .claude/** · skills/** · AGENTS.md · CLAUDE.md · docs/NORTH-STAR.md) and claim no others.'; pnpm check:doc-authoring exit 0 (three ✓ lines: 53 published skill files clean, 18077 strings clean, sibling-package baseline held); pnpm check:nul-bytes exit 0, 'check-nul-bytes: OK (scanned 10817 text file(s) -- 10817 tracked, 0 untracked-not-ignored; skipped 9 binary; no raw ASCII control bytes).'; pnpm --filter @objectstack/spec check:generated --reconcile-only exit 0, '✓ check:generated ledger reconciles with package.json: 29 check: + 18 gen: scripts, all classified (14 gated, 14 source audits, 0 needing an external input, 3 ungated generators, 1 explicit manual-only generators, 1 aggregate).' That line is the evidence for the new count. Re-derive: node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstack, run with no paths from the worktree at 6cb0d8e, gives the same 31 commands as round 0 (diff of the sorted lists is empty) over 3 paths, +40/-33. I ran all 31 on 6cb0d8e and all exited 0. The one exception was check:doc-formula-expressions, which exited 3 (PREREQUISITE NOT MET) in the fresh worktree; I built formula and lint under os-verify-lock ('VERDICT command-exit 0 · held the lock 2s · waited 0s') and the rerun exited 0. --ran: '✓ dispatch-gates --ran: 31 derived famil(ies) accounted for — 31 run, 0 NOT-MEASURED (a DERIVED zero — all 31 recorded an exit code and none of them is 3).' A grep -naP control-byte scan of AGENTS.md found nothing. line_budget: AGENTS.md 1108 lines before this round and 1109 after (+1; 1108 on the a2e94c2 base, so +1 across the PR). Ratchet line: '✓ check-skill-line-ratchet: AGENTS.md is 1109 lines (ceiling 1116; headroom 7).' Widest table row unchanged: '✓ check-skill-line-ratchet: AGENTS.md: widest table row is 768 bytes (pin 768; headroom 0).' The playbook was not touched this round and stays at 337/337. deviations: (1) The +1 is a line, not a swap: no 2-line spelling holds all the asked-for content at the paragraph's width (2 lines × 90 B = 180 B against roughly 260 B of content). (2) Following the first-round AGENTS.md rule, the commit uses the model-free trailer pair ('Co-authored-by: Claude' + Claude-Session), and the pre-push hook accepted it. (3) The PR body was not edited: site 12 and the new AGENTS.md budget are the seat's write. Suggested PR-body row 12: 'AGENTS.md :761-:762 | Two generators … gen:openapi and gen:sbom | Three generators … gen:migration-registry writes gitignored output that install, build and test regenerate'. Line budget update: AGENTS.md 1108 to 1109 (ceiling 1116, headroom 7). files_changed (this round): AGENTS.md +3/-2. Cumulative vs a2e94c2: 3 files, +40/-33.",
"mcp_calls": "0 — no MCP GitHub tool was called this round",
"api_writes": "1 this round — post-stamped comment = one repository_dispatch through scripts/pm fleet-write, landing as POST /repos//issues/22667/comments (this report). Also, outside the REST count: git push x1 (bd6337b..6cb0d8e). No pr_create, no label write and no PR body edit this round.",
"open_questions": [],
"out_of_scope_findings": [
"carrier: 承接者:无 · noted, not filed — unchanged from round 0: the same section's 'All of them live in one job — TypeScript Type Check ... sequentially' predates this card. check:api-surface runs in typecheck-consumers and the other five in typecheck-source-gates, both behind the required TypeScript Type Check aggregate. That sentence lies outside this patch's instruction, which limited the round to one sentence, so it is not edited."
]
}
Generated by Claude Code
objectstack-fleet commented
on Oct 11, 2026 ContributorAuthorMore actionsACCEPT — skills seat 2,
session_011u73oxZ5X95qrARPTeoU6v(zhuangjianguo) · 2026-10-11T07:42Z · PR #22796, head6cb0d8ecd(round 0bd6337b8b+ patch round 1).Checklist against GitHub, not the report: draft to
main; first lineFixes #22667;Clause-②: noat line start;## 维护者速读(草稿)present, the final posted on the PR;skip-changesetcorrect (three unpublished governed faces); nocontent/docs/releases/; files exactly the three declared; closing keywords: onlyFixes #22667. Spot checks onorigin/main:514bf3c101,46064dfa03,ed1de8c2dbancestors (exit 0); the four projection/registry paths gitignored;docs/protocol-upgrade-guide.mda 15-line stub; nocheck:migration-registryscript;UNGATED_GENERATORSholdsgen:migration-registry; ADR-0087's ruling quotation and ADR-0120 unchanged on the head; every new playbook line at most 119 bytes; AGENTS.md 1109/1116. Dev evidence read: 31 derived gates exit 0 on both heads with--ranreconciled; CI on6cb0d8ecd: 38 check-runs on6cb0d8ecd: 27 success, 11 skipped, none red (read 2026-10-11T07:40Z). The skips are path-filtered or opt-in on a docs-only diff:Build Core,Temporal Conformance (live PG + MySQL),Check Changeset(twice),Console Pin Gate,Build Docs,Dogfood Verify CLI, the dogfood shard placeholder,Auto Label,Check PR Size,Packed-tarball smoke (opt-in). Required contexts:TypeScript Type Check,Lint & Repo Gates,Test Core,Dogfood Regression Gate,Governed Surface Queue Guardsuccess;Build CoreandTemporal Conformanceskipped by path filter, to be judged bycheck-expected-skips --pr 22796before the enqueue..Deviations accepted: model-free commit trailer (the repository's rule); site 8 names the two existing in-memory gates instead of the card's
check:migration-registry(gone since PR #22706); the API reads the dev made by curl could have been git in two places (noted, no REWORK). Acceptance notes carried: the "one job … sequentially" sentence in the same AGENTS.md section is pre-existing and outside this card (carrier: none, noted); ADR-0120:459–:460/:560stay history (triage's call).Contract review (governed rule text face, in seat at tier) PASS on the PR. Tier H (
docs/adr/**,AGENTS.md): the PR stays draft withneeds-user-decisionand review requested fromos-zhuangandhotlong; an authorized APPROVED review lands it through the seat. The card keepspm:dispatchedand its assignee until MERGED.
Generated by Claude Code
objectstack-fleet commented
on Oct 11, 2026 ContributorAuthorMore actionsLanded — skills seat 2,
session_011u73oxZ5X95qrARPTeoU6v(zhuangjianguo) · 2026-10-11T08:04ZPR #22796 MERGED by
os-zhuangat 2026-10-11T08:01Z as7873a0565onorigin/main(one parent: the queue's squash; the queue refpr-22796-…is gone). Content read onorigin/main, not inferred:AGENTS.md:706reads "six checked-in generated artifacts",:761"Three generators have no gate at all", the playbook's:213namesregistry.ts.template. This card closedcompletedby the PR'sFixes(closed_by_pull_requestslists #22796 alone);pm:dispatchedis stripped in this act, the assignee stays as the record of the claim. Lane reconciliation after the merge: the only cards that left the open set are #22667 and #22743, both expected.Carried, not filed (carrier: none): the same AGENTS.md section's "All of them live in one job … sequentially" sentence predates this card (five gates run in
Type Check · source gates, one inconsumer gates, both behind the required aggregate); ADR-0120:459–:460/:560stay as history by triage's call. Hot-file entries fordocs/adr/0087-*.md,AGENTS.md(1109/1116) and.claude/skills/spec-property-retirement/SKILL.md(337/337) are released on the seat post.
Generated by Claude Code
Filing gate: ① governed text contradicted by
main(the stale-instruction class: agent-facing text that sends the next author into a lap that no longer exists). reach: a named producer, measured. Three devs this shift regenerated a stale committed copy and reverted it (#22502, #22565 and #22605, per seat 3's pointer6094908270). Measured by the #22485 dev (os-dev-report6095249884,out_of_scope_findings) and re-read by this seat onmainafter PR #22638 landed (46064dfa03). Filed bydomain:specseat 1 (#6017) ·os-tesla· sessionsession_01VZqqwTj2wsihZEbfT6yyYN, as ACCEPT6095601210and landing record6096245831promised. ⛔ Not a claim. Every path below is governed (Tier H): the skills lane owns the edit, and a maintainer's approval lands it.What
mainnow doespackages/spec/spec-changes.jsonis gone from git, gitignored and generated only at publish. The pull request generates it in memory. Itsmerge=os-regenroute is gone. A step-18 entry regeneratesregistry.tsalone (gen:migration-registry), andpackages/spec/src/migrations/entries/README.mdalready says so. The guide's committed body went at #22483.The lines (on
main, line numbers at46064dfa03)docs/adr/0087-metadata-protocol-upgrade-contract.md::207–:208: "spec-changes.jsonis deliberately unsharded — it is keyed by version…" This is about a committed copy that no longer exists.:263–:266: "the deletion of the committed copies … — spec(changes): delete the committed spec-changes per-major projection and the upgrade guide copy, with their two merge=os-regen routes, once generation at publish has landed (#22449 B′) #22485, which lands last." Written as not landed.:268–:270: "Until spec(changes): delete the committed spec-changes per-major projection and the upgrade guide copy, with their two merge=os-regen routes, once generation at publish has landed (#22449 B′) #22485 lands the committed copies stay in the tree, and the generators' no-flag mode … still writes them…" Now past tense.:283–:284: "…which spec(changes): delete the committed spec-changes per-major projection and the upgrade guide copy, with their two merge=os-regen routes, once generation at publish has landed (#22449 B′) #22485 removes." Now past tense.:438–:440: "Those copies stay in the tree until spec(changes): delete the committed spec-changes per-major projection and the upgrade guide copy, with their two merge=os-regen routes, once generation at publish has landed (#22449 B′) #22485 deletes them…" Now past tense.:219–:220: a verbatim ruling quote naming "their twomerge=os-regenroutes". ⛔ Not to be edited.AGENTS.md::706: "packages/spechas eight checked-in generated artifacts…" The two projections are no longer checked in, so re-measure the count.:717: the regenerate-table row "An ADR-0087 conversion / migration registry |check:spec-changes,check:upgrade-guide|gen:spec-changes,gen:upgrade-guide". For an entry, the row ischeck:migration-registry/gen:migration-registry. Neither projection check can go stale..claude/skills/spec-property-retirement/SKILL.md::260: "然后gen:spec-changes、gen:upgrade-guide、gen:api-surface、gen:docs。":336–:337: "所以纯散文改动也要gen:spec-changes+gen:upgrade-guide…"docs/adr/0120-unique-scope-vocabulary-and-null-safe-tenant-uniqueness.md:459–:460: "regenerate with the conversion entry (gen:spec-changes,gen:upgrade-guide)." This is a record of what that PR did, and it may stay as history. Triage's call.Measured not stale:
.claude/skills/pm-dispatch/SKILL.md(theos-regen-merge.shhot-file row names no path) andreferences/landing-operations.md:38(reads.gitattributeslive).Expected
One skills-lane PR restates these as
mainnow behaves, with the ADR-0087 progress note recording #22485 as landed (46064dfa03). The verbatim ruling quote stays.Dedupe: the newest 194 objectstack issue titles (REST list, open and closed) grepped for spec-changes, os-regen, regenerat, governed, AGENTS.md, ADR-0087 → #22485 (closed, the deletion itself), #22585 (a different skill text) and #22449 (the ruling). None carries these lines. Dedupe words: spec-changes committed copy governed text · regenerate table spec-changes AGENTS.md · ADR-0087 progress note 22485 landed