Repository navigation
docs(agents): stored rows replay only what the installed release still carries - #29011
Conversation
Prime Directive #12 and the headers of stored.ts and stored-migration.ts still said every stored conversion replays forever. Under ADR-0087 as amended (ruling 6434038284) a retirement kit ages out one major after it retires, so the chain replays what the installed release carries, and `os migrate meta --stored --apply` must run on a release that still carries a row's conversions, before moving to the release that drops them. Comment and rules text only; no code or behaviour change. Claude-Session: https://claude.ai/code/session_01J8VVAmLfc58Ea3cCpbSx7C Co-authored-by: Claude <noreply@anthropic.com>
📓 Docs Drift Check1 anchor(s) derived from 2 changed package(s); no hand-written page names any of them. What this run could not see
Coarse fallback — 169 page(s) merely mention a changed package (the pre-#9192 predicate, kept for the deliberately-wide backstop): Which tree this was computed onThis run read A worktree cut from an older # while this PR is open — GitHub drops the merge commit once it closes
git fetch origin 11c7d86228e8bba20f3b9ccbe40e1282df0bd6a4 && git checkout 11c7d86228e8bba20f3b9ccbe40e1282df0bd6a4
# afterwards, rebuild it from the two parents, which stay fetchable
git fetch origin ab085a048241b0bf1fde06696fc6cbf659a6707f cbdd0231ac500647fbb014dda9f2c0aee3d4c746 && git checkout -B drift-repro ab085a048241b0bf1fde06696fc6cbf659a6707f && git merge --no-ff cbdd0231ac500647fbb014dda9f2c0aee3d4c746
node scripts/docs-audit/affected-docs.mjs --json ab085a048241b0bf1fde06696fc6cbf659a6707f |
|
domain:skills#1 · huangyiirene · session_01J8VVAnMUWA9rufXzFaEh4J Contract-review-claim: session_01J8VVAnMUWA9rufXzFaEh4J · head 6bb390a · 2026-11-02T06:10Z The seat review runs at CONTRACT_REVIEW_TIER in an isolated subagent (the seat session is not at that tier). |
|
domain:skills#1 · huangyiirene · session_01J8VVAnMUWA9rufXzFaEh4J Contract reviewServed-tier: Reviewer: an isolated seat-side review at the governed rules face and the published-schema face, reading the card (#28924 body, triage 6569561415, claim 6570062681, dev report 6570394535 as input), the PR body, the net diff of head 6bb390a against origin/main ab085a0 (merge base 00d0668; no base drift on the three paths) and the cited code on main, with no write to GitHub. ① Derived judgments
② Semver level
③ Boundary flags
④ Design judgment
Check-runs at record time: read 2026-11-02T06:19Z on head 6bb390a, 66 check-runs: 25 success, 14 skipped, 27 in_progress, 0 failure. Green: Build Core (carries dual-build-cjs-loads, sourcemap-no-sources-content, lean-entry-closure, dts-closure), Lint & Repo Gates and all seven Lint lanes (repo & tooling gates, CI release & engine gates, docs & code guards, PM dispatch-gates, ESLint, three scoped), Governed Surface Queue Guard, Check Changeset, Type Check · debt ledger (dts-closure), Type Check · source gates, Spec property liveness, Dogfood Regression Gate, Build & E2E UI, Live E2E UI, Build UI Deps, PR-body guards. Still running: Test Core 1-8, Test UI 1-16, Type Check UI, Type Check · workspace, Type Check · consumer gates (carries the second dts-closure and doc-formula-expressions). Landing waits for every check to complete green and for the Tier H approval; this record does not claim the in_progress ones. Implemented-by: VERDICT: PASS Generated by Claude Code |
…fix apply.ts "forever" Review patch round on the stored-conversion prose fix: - stored-migration.ts: past the release that drops a row's conversions, the seams still serve its legacy bytes; what no conversion recognizes is its shape, and the stored pass then counts it canonical (a false clean). - AGENTS.md Prime Directive #12: name `applyConversionsToStoredItem` again, still 3 lines and within the file's existing widths. - apply.ts: graduated transforms stay covered while the installed release carries them, not forever (ADR-0087 as amended, ruling 6434038284). Comment and rules text only. Claude-Session: https://claude.ai/code/session_01J8VVAmLfc58Ea3cCpbSx7C Co-authored-by: Claude <noreply@anthropic.com>
|
domain:skills#1 · huangyiirene · session_01J8VVAnMUWA9rufXzFaEh4J Contract reviewServed-tier: Reviewer: the same isolated seat-side review that rendered the PASS record on 6bb390a (comment 6570567293), now a delta review of the one commit on top of it, reading the dev's delta report (#28924 comment 6570819759) as input, the seat's surface widening (card comment 6570576334), the PR body, and Delta over record 6570567293: head cbdd023 is one commit on 6bb390a with no force-push (6bb390a is its ancestor). The commit touches three files, all inside comments or rules prose: AGENTS.md (+3/-3), packages/metadata-protocol/src/stored-migration.ts (+3/-1) and packages/spec/src/conversions/apply.ts (+3/-1, the surface the seat widened to in comment 6570576334). It answers the three should-fixes of the PASS record and nothing else. The judgments of record 6570567293 on the stored.ts header and on the first stored-migration.ts rewrite stand unchanged; the whole PR against origin/main is now 4 files, +31/-15. ① Derived judgments
② Semver level
③ Boundary flags
④ Design judgment
Check-runs at record time: read 2026-11-02T06:40Z on head cbdd023, 62 check-runs: 30 success, 10 skipped, 22 in_progress, 0 failure, 0 cancelled. Green: Build Core, Lint & Repo Gates and all seven Lint lanes, TypeScript Type Check with its four lanes (workspace, source gates, consumer gates, debt ledger), Governed Surface Queue Guard, Check Changeset (skipped on the label fast path), Check PR Size, Spec property liveness, Dogfood Regression Gate, Build UI Deps, Build & E2E UI, Live E2E UI, PR-body guards, Plan Test Core shards, Test Core 5/8, Test UI 2/16 and 11/16. Still running: Test Core 1-4 and 6-8, Test UI 1, 3-10 and 12-16, Type Check UI. Landing waits for every check to complete green and for the Tier H approval; this record does not claim the in_progress ones. Implemented-by: VERDICT: PASS Generated by Claude Code |
|
domain:skills#1 · huangyiirene · session_01J8VVAnMUWA9rufXzFaEh4J 维护者速读
席位核对 — ACCEPT · domain:skills#1 · head
|
Requested by Irene · project thread
Fixes #28924
Clause-②: no
Metadata-protocol: none
维护者速读
stored.ts、stored-migration.ts两个文件头注释)不再说"存储的转换永远重放";代码和行为零改动。.changeset/25767-retire-16x-retirement-kits.md的 Stored rows 条目矛盾。AGENTS.md第 253-255 行(Tier H,行数保持 3 行不变);②packages/metadata-protocol/src/stored-migration.ts头注释(含对 "Not load-bearing" 段的收窄);③packages/spec/src/conversions/stored.ts头注释。git diff origin/main -- AGENTS.md,预期只见 3 行删、3 行增,第 12 条总行数不变。What changes
Three texts that still stated the pre-18.3 policy, that every stored conversion replays forever, now say what ADR-0087 as amended (ruling 6434038284) says: rehydration replays the chain the installed release carries, retirement kits age out one major after their retirement, and the stored pass (
os migrate meta --stored --apply) must run on a release that still carries a row's conversions, before the deployment moves to the release that drops them.AGENTS.mdPrime Directive Add comprehensive test suite for Zod schema validation #12, lines 253-255. Governed Tier H text. The rewrite keeps the directive at exactly its line count (3 lines removed, 3 added; the directive still spans lines 245-255), every line stays at or under 116 characters, and the sentence keeps its shape: "Stored rows: [mechanism]; [limit], so [action]. Strengthens [WIP] Fix error in step four of the action run #5." The old consequence clause ("so a consumer never needs its own accommodation for a legacy stored shape either") was dropped because it is no longer unconditionally true, and the three facts the card requires could not fit beside it in three lines.packages/spec/src/conversions/stored.tsheader, the first policy bullet. "D3 keeps every conversion forever precisely so any past major can replay forward" is replaced by the kit age-out rule and the stored-pass instruction; the bullet's heading now reads "The chain the installed release carries replays".packages/metadata-protocol/src/stored-migration.tsheader. "a row written under any past protocol is served canonical forever" is replaced. The same header's Not load-bearing paragraph, two paragraphs below, said "the read path stays the guarantee and nothing gates on this having run"; left alone it would have contradicted the corrected sentence, so it is narrowed to the window in which the release still carries a row's conversions, matching the ADR's 2026-10-26 amendment ("for those rows it is the required one, not an optional one"). This stays inside the claimed file surface (header comment only).The wording was cross-checked against
skills/objectstack-upgrade/SKILL.md§ Stored rows: rehydration replays what the release carries and the Stored rows bullet of.changeset/25767-retire-16x-retirement-kits.md.Why
Agents read AGENTS.md as binding. After 18.3 a stored row still in a ≤16.x shape is not rewritten by any seam, so a rule saying every seam replays the full chain forever would lead an agent to tell a user their 16-era rows are safe.
Tests
No test was added or changed: the diff is comment and rules prose only, with no behaviour to pin and no ablation owed.
pnpm --filter @objectstack/spec build, exit 0 (os-verify-lock VERDICT command-exit 0).pnpm --filter @objectstack/spec typecheck, exit 0 (os-verify-lock VERDICT command-exit 0).@objectstack/metadata-protocoltypecheck and tests were not run locally: the edit is inside a block comment and cannot change a type or a test result. CI'sTypeScript Type CheckandTest Corecarry them.Acceptance notes
packages/metadata-core/src/artifact-forward-conversion.ts,packages/core/src/fallbacks/authored-translation-sync.tsandpackages/metadata-protocol/src/protocol.ts. Those describe what replays (every entry the release carries, retired ones too), which is still true, and none says "forever". They were left alone as outside this card. Carrier: none.AGENTS.md, so nothing that ships changes in behaviour or API. The PR carriesskip-changesetfor that reason.Verification
Gate derivation
node scripts/pm/dispatch-gates.mjs --commandson head6bb390a5f(objectstack-ai/objectstack): 73 commands. The reconciliation--ranreports 73 accounted for: 68 run with exit 0, 5 NOT MEASURED (exit 3, prerequisite not met), 0 unrun.Local gate readings (head 6bb390a)
check:pm-governed-prose,check:pm-skill-id-lint(106 files clean),check:pm-skill-ratchet,check:doc-authoring,check:issue-citations,check:nul-bytes,check:published-files,check-adr-0087-registration --base origin/main, and the spec gatescheck:api-surface(unchanged) andcheck:docs(235 generated files in sync).check-plugin-teardown-shape --self-testfirst exited 3 on a shallow fixture commit; it passed (48 cases) after fetching that commit.check:dts-closure,check:dual-build-cjs-loads,check:lean-entry-closure,check:sourcemap-no-sources-content, and@objectstack/lint check:doc-formula-expressions.Human Minimum
packages/specholds no runtime logic. (No schema touched.)pnpm lintpasses. (No formatter ran;pnpm lintwas not run locally, CI owns that repo-wide run.)main, one pull request.skip-changeset.)packages/spectouched: its generated artifacts are regenerated and committed. (check:docsandcheck:api-surfacegreen; nothing to regenerate.)content/docs/references/,packages/*/CHANGELOG.mdorcontent/docs/releases/.Generated by Claude Code