Skip to content

feat(spec): retire MetadataChangedEventPayloadSchema, the metadata:changed payload nothing ever emitted or consumed (ADR-0049) - #15139

Merged
zhuangjianguo merged 6 commits into
mainfrom
claude/issue-14180-retire-metadata-changed-event-payload
Sep 4, 2026
Merged

feat(spec): retire MetadataChangedEventPayloadSchema, the metadata:changed payload nothing ever emitted or consumed (ADR-0049)#15139
zhuangjianguo merged 6 commits into
mainfrom
claude/issue-14180-retire-metadata-changed-event-payload

Conversation

@claude

@claude claude Bot commented Sep 4, 2026

Copy link
Copy Markdown
Contributor

Fixes #14180

Retires MetadataChangedEventPayloadSchema / MetadataChangedEventPayload from packages/spec/src/kernel/cluster.zod.ts via the ADR-0087 retirement route, together with the orphan value schema MetadataChangeOperationSchema / MetadataChangeOperation that existed only to type its operation field, and corrects the doc-comment in packages/metadata/src/metadata-manager.ts that claimed its payload "aligns with" the retired schema.

Ruling (comment 5502971695, 2026-09-02, quoted where operative)

Ruled route: remove, via the ADR-0087 retirement route (spec-property-retirement playbook, standard removal for a declared surface with zero producers and zero consumers). … ⛔ Not "make a consumer" — that is contract growth with no pull. The doc-comment in packages/metadata/src/metadata-manager.ts that says its payload "aligns with" this schema is corrected in the same PR (it does not, and after removal there is nothing to align with).

Clause ②: yes — a published schema disappears; needs:contract-review is on this PR for the spec seat's in-seat review. The ADR-0087 registry entries are the deliverable's proof.

Premise re-verified on origin/main 2cc4610

  • git grep MetadataChangedEventPayload: 7 files — the schema, its own cluster.test.ts, the Iso394 alias pin, api-surface/kernel.json, export-origins/kernel.json, one doc-comment (metadata-manager.ts:234) and one hand-written page (content/docs/kernel/cluster.mdx, a "Target spec (planned)" block). Zero runtime producers, zero subscribers, zero imports outside packages/spec.
  • MetadataChangeOperation: every hit is the payload, its Iso393 pin, and generated artifacts (api-surface / export-origins / declaration-map / json-schema.manifest / the references page) — no other consumer.
  • objectui at the pinned sha 67dadd60: git grep for both names → no match (exit 1); positive control @objectstack/spec/kernel → 3 hits.
  • cluster-semantics.mdx no longer exists — apps/docs/redirects.mjs redirects it to /docs/kernel/cluster; the doc-comment's pointer was stale as well.

Route taken (playbook route 3 — whole-def removal, no carrier key, no D2 conversion)

  • Schema + orphan enum removed; an in-file retirement note names the channels that actually run.
  • ADR-0087: retired-defs/18.kernel__MetadataChangedEventPayload.ts, retired-defs/18.kernel__MetadataChangeOperation.ts, D3 semantic entry semantic/18.metadata-changed-event-payload-retired.ts; registry.ts regenerated by gen:migration-registry (148 semantic, 86 retired-key, 94 retired-def).
  • json-schema.manifest/kernel.json loses kernel/MetadataChangeOperation deliberately — the disappearance ratchet fired first (❌ 1 previously published schema(s) disappeared from this build: json-schema/kernel/MetadataChangeOperation.json), then the manifest deletion gate declared it: ℹ️ 1 schema(s) left the published set since 2cc4610304c5, each declared (#4725): json-schema/kernel/MetadataChangeOperation.json — RETIRED_DEFS_BY_MAJOR, major 18. The payload def itself was never in the manifest (the JSON Schema build skips bigint: Skipped: 23 (unsupported types: function, date, bigint, custom)).
  • Ratchets moved as a whole-def removal must: api-surface −4 (exactly the four names), export-origins / declaration-map −4, json-schema.manifest −1; the kernel references page and index regenerated; strictness-ledger counts regenerated. authorable-surface unchanged — the payload was never an authorable surface.
  • Retirement pins in cluster.test.ts: runtime namespace probes on ./cluster.zod and on the ./index (@objectstack/spec/kernel) entry, ClusterCapabilityConfigSchema as the positive control. Iso393 / Iso394 deleted, count 829 → 827 with a receipt in the pin file (ids stay vacant, per that file's own convention).
  • Liveness ledger: no entry exists for this schema (it is not a governed metadata type), so there is nothing to add or delete; check:liveness green.
  • Docs: content/docs/kernel/cluster.mdx — the only page affected-docs names (# 1 docs name something this change touched). Every sentence that described the retired payload's protocol is rewritten to state the shipped address-only, re-read contract (list under "Read-and-report" below). content/docs/releases/** untouched.
  • Changeset .changeset/metadata-changed-event-payload-retired.md: @objectstack/spec minor + the **BREAKING** banner (launch-window convention) + adr-0087: registered metadata-changed-event-payload-retired; FROM → TO and the one-line fix included.
  • Entry prose: names quoted without call parentheses, no issue ids in the entry strings (anchors live in the source comments), ADR ids cited.

Deviations from the PM claim (both stated in my claim comment on the card)

  1. The orphan value schema MetadataChangeOperationSchema / MetadataChangeOperation leaves with the payload (playbook §4: an exported value schema with no consumer reads as a capability — the kernel/DistributedStateConfig precedent). This is the def the manifest deletion gate adjudicates; the payload def was never in the manifest.
  2. The hand-written page is content/docs/kernel/cluster.mdx, not cluster-semantics.mdx (redirected).

Measurements at the final head fc66ae8 — merged onto origin/main 25a59bd (exit captured before any pipe; verdict lines quoted)

Round 3 (2026-09-04, after the merge queue dequeued ceb9887 with MERGE_CONFLICT): origin/main 25a59bd merged as merge commit 63c21fcscripts/pm/os-regen-merge.sh stopped on the one text conflict, packages/spec/src/type-alias-convention.pin.test.ts, hand-resolved so both intents stack (#14168's Iso867 kept, Iso393 / Iso394 stay deleted, the machine-checked count 830 → 828 in the header, the case title and the assertion, with the two rebalancing notes in sequence: 829 → 830 then 830 → 828); the merge commit was finished by hand with MERGE_HEAD present, so the hook deferred the one artifact the driver declined to text-merge, content/docs/references/index.mdx, and regeneration commit fc66ae8 discharged it (gen:schema via the spec build, gen:docs; os-regen: deferred regeneration discharged — all artifacts current, marker cleared.). registry.ts, text-merged by git, was re-run through gen:migration-registry and came out byte-identical. The delta against ceb9887 beyond origin/main's own side is exactly the pin file and the regenerated index. Every row below was re-taken at fc66ae8 — the manifest deletion line now reads since 25a59bd109a9, check:migration-registry 149 semantic, check:spec-parsed-alias 828 pinned isomorphic, and check-adr-0087-registration --base origin/main (merge base 25a59bd) still answers registered metadata-changed-event-payload-retired (new here). No behaviour change.

Sync round (2026-09-04): origin/main merged as merge commit 9003435 via scripts/pm/os-regen-merge.sh (no rebase, no amend, no force-push); the two os-regen-deferred artifacts main had moved on both sides — content/docs/references/index.mdx and docs/audits/2026-07-unknown-key-strictness-ledger.counts.md — were regenerated from the merged tree (gen:schema, gen:docs, gen:strictness-ledger) in ceb9887, the pre-commit hook printing os-regen: all deferred artifacts are current — marker cleared.; check:generated exits 0 at that head (✓ All 15 generated artifacts are up to date.). Every row below was re-taken at ceb9887 with the same verdict lines — the manifest deletion line now reads 1 schema(s) left the published set since fcc42e6c1de9, each declared (#4725): json-schema/kernel/MetadataChangeOperation.json — RETIRED_DEFS_BY_MAJOR, major 18., check:strictness-ledger reads 440 site(s) measured (main's automation additions), and check-adr-0087-registration --base origin/main (merge base fcc42e6) still answers registered metadata-changed-event-payload-retired (new here). No behaviour change in the round.

step exit verdict line
pnpm --filter @objectstack/spec build (verify lock) 0 check-dts-emitted: @objectstack/spec - 34/34 declared declaration file(s) present.
check:generated (post --fix; second run) 0 ✓ All 15 generated artifacts are up to date.
vitest src/kernel/cluster.test.ts + src/type-alias-convention.pin.test.ts (lock) 0 Test Files 2 passed (2) · Tests 23 passed (23)
pnpm --filter @objectstack/spec typecheck (tsc + scripts + test-typecheck, lock) 0 check:test-typecheck: OK — @objectstack/spec's test layer compiles under packages/spec/tsconfig.test.json; 54 file(s) / 261 error(s) / 145 pinned signature(s) held
check:migration-registry 0 ✓ src/migrations/registry.ts is current (148 semantic, 86 retired-key, 94 retired-def)
check:liveness 0 ✓ packages/spec/liveness/state-counts.md is current — the same 35 row(s)
check:strictness-ledger 0 ✓ docs/audits/2026-07-unknown-key-strictness-ledger.counts.md is current — 440 site(s) measured (439 before the sync round)
eslint --no-inline-config over the 8 edited TS files 0 (no findings)
pnpm check:doc-authoring 0 ✓ doc authoring guard: 14710 customer-facing string(s) across 726 spec sources clean — no internal issue-id references
pnpm check:nul-bytes 0 check-nul-bytes: OK (scanned 8234 text file(s) …; no raw ASCII control bytes)
node scripts/check-system-context-census.mjs 0 check-system-context-census: OK — 106 elevation read sites in 20 packages across 45 files, all anchored (no --fix demanded)
check-changeset-no-major.mjs --base origin/main (merge base fcc42e6; 2cc4610 before the sync) 0 ✓ This diff introduces no major bump.
check-adr-0087-registration.mjs --base origin/main (merge base fcc42e6; 2cc4610 before the sync) 0 ✓ … 1 declared-breaking changeset(s), each carrying an ADR-0087 disposition … [BREAKING] registered metadata-changed-event-payload-retired (new here)
closure build, two lock-held layers (types, formula, metadata-core, observability, sdui-parser · core, lint, metadata-fs, driver-sql, platform-objects, driver-sqlite-wasm) 0 · 0 os-verify-lock: VERDICT command-exit 0 for each layer
pnpm --filter @objectstack/metadata typecheck (lock) 0 tsc --noEmit clean — nothing under packages/metadata imports the removed symbols
pnpm --filter @objectstack/metadata exec vitest run --maxWorkers=2 (lock) 0 Test Files 46 passed (46) · Tests 705 passed (705)
node scripts/pm/dispatch-gates.mjs --repo objectstack-ai/objectstack --commands 0 derived at e95a24e, before the sync round (⚠️ STALE TREE — … at least 2 commit(s) behind origin/main); the derived families this diff touches were run, below

Derived gates run, every one exit 0: check-affected-docs, check-drift-comment, check-doc-frontmatter, check-doc-route-spelling --advisory, check-docs-section-name, check-section-landing-index, check-keyed-text-bounds, check-undeclared-dep-imports, check:doc-anchors, check:docs-redirects, check:docs-single-h1, check:corpus-claim-drift, check:cross-package-test-inputs, check:spec-parsed-alias (827 pinned isomorphic), check:test-source-alias, check:quick-reference-counts, check:type-check-coverage, and spec check:variant-docs, check:exported-any, check:dual-source-exports, check:entry-nameability, check:browser-reachable-entries, check:empty-state, check:llms-txt, check:skill-refs, check:yaml-examples, check:api-surface, check:export-origins, check:docs, check:spec-changes, check:upgrade-guide, check:authorable-surface.

NOT MEASURED, by the gates' own words (CI owns them): pnpm check:type-check-debt exit 3 — check-type-check-coverage: PREREQUISITE NOT MET — --re-measure cannot run: 27 workspace dependenc(ies) of the ledgered packages have no built type entry point on disk (needs the whole-repo closure); check:skill-examples exit 1 — packages/client-react/dist holds no .d.ts declarations — the package is not built (its closure is runtime/rest/objectql-sized; this diff touches no skills/ file and no SDK doc). The full pnpm lint sweep is CI's; the eslint run above covers every edited TS file. check:react-declaration-parity cannot run here (EXTERNAL_INPUT_REQUIRED). The remaining derived entries are repo-wide families this diff does not touch.

Reverse verification (one leg, from the committed state e95a24ecluster.zod.ts is byte-identical at ceb9887 and at fc66ae8; the sync round touched only the merge and two generated artifacts)

git restore --source=2cc461030 -- packages/spec/src/kernel/cluster.zod.ts under a trap restore, run through the verify lock. Mutation proven on disk: export const MetadataChangedEventPayloadSchema lines 0 → 1; on-disk blob 37fdc590… = the BASE blob.

  • Leg A — retirement pins: vitest exit 1, Tests 2 failed | 18 passed (20) — both probes red (AssertionError: expected true to be false).
  • Leg B — registry gate: gen:schema exit 1 — ❌ 1 RETIRED_DEFS_BY_MAJOR entr(ies) name a schema this build still publishes: kernel/MetadataChangeOperation (registered at major 18).
  • Restore proven by the caller, not the trap: git hash-object = 61538d29… = the HEAD: blob; git diff HEAD empty; git status --porcelain empty. Spec rebuilt at HEAD afterwards and check:generated re-run there (report).

Read-and-report

  • content/docs/kernel/cluster.mdx — the sentences the removal made false were all on the page this PR already edits, so they are corrected here rather than only reported: the §6 intro ("requires two things the current protocol lacks: a monotonic version per item and a well-defined invalidation event"); §6.1's "Status: planned … the cache-comparison contract below describe the target design" plus the "Once wired, caches store {value, version}" compare rules; the lane-1 "Target spec (planned)" block that named the schema; §6.3's "The contract below is the target design that goes with the version-stamped payload" and "Compare incoming version with cached version before evicting"; §7.3's "A higher-level cache factory (with automatic version comparison) is part of the Phase 4 / §6 target design". Left as-is on purpose: the §9 prior-art bullet ("ServiceNow … version-stamped cache with invalidation broadcast … Maps to §6") is a comparison with another product, not a claim about this protocol; skills/objectstack-platform/references/plugin-hooks.md already states there is no metadata:changed kernel event.
  • packages/metadata-protocol's ClusterMetadataMutationPayload docs (runtime: TS-config boot registers a 'metadata' service without attachClusterPubSub — cross-node invalidation disabled; new object gives OBJECT_NOT_FOUND on non-writing replicas, never heals #13331) do not name the removed schema — zero hits for either retired name under packages/metadata-protocol, and cluster.mdx's lane-2 section names only ClusterMetadataMutationPayload.

Out of scope and untouched: packages/metadata beyond the one doc-comment, packages/core, packages/metadata-protocol, content/docs/releases/**.

Generated by Claude Code


Generated by Claude Code

claude Bot and others added 2 commits September 4, 2026 02:42
…anged payload nothing ever emitted or consumed (ADR-0049)

WIP: schema + orphan enum removed, ADR-0087 registrations (two retired-def
entries, the D3 semantic entry, registry regenerated), retirement pins in
cluster.test.ts, the two isomorphic alias pins, cluster.mdx prose, the
metadata-manager doc-comment and the changeset. Generated artifacts follow
in the next commit.

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

json-schema.manifest loses kernel/MetadataChangeOperation deliberately (route 3
whole-def removal; the manifest deletion gate adjudicated it against
RETIRED_DEFS_BY_MAJOR[18] - the payload def itself was never in the manifest,
the JSON Schema build skips bigint); api-surface / export-origins /
declaration-map lose the four retired names; the kernel reference page, the
references index and the strictness-ledger counts regenerate.

Claude-Session: https://claude.ai/code/session_0174WZTU6XcFcS7g2kykC53i
Co-authored-by: Claude <noreply@anthropic.com>
…n/main deferred

Merge commit 9003435 brought main's automation builtin-node-config work in;
the references index and the strictness-ledger counts moved on both sides, so
the os-regen driver deferred them. Regenerated from the merged tree with
gen:schema, gen:docs and gen:strictness-ledger.

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

github-actions Bot commented Sep 4, 2026

Copy link
Copy Markdown
Contributor

📓 Docs Drift Check

This PR changes 2 package(s): @objectstack/metadata, @objectstack/spec, touching 6 documentable anchor(s). ⚠️ 7 changed file(s) yielded no anchor (packages/metadata/src/metadata-manager.ts, packages/spec/api-surface/kernel.json, packages/spec/declaration-map/kernel.json, …), so the pages documenting them are NOT COVERED by this run — this is not a clean bill of health for those files.

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

  • content/docs/kernel/cluster.mdx (via MetadataChangeOperationSchema (symbol, a top-level const object), MetadataChangedEventPayloadSchema (symbol, a top-level const), RETIRED_DEFS_BY_MAJOR (symbol, a top-level const object))
What this run could not see
  • 7 changed file(s) yielded no anchor (packages/metadata/src/metadata-manager.ts, packages/spec/api-surface/kernel.json, packages/spec/declaration-map/kernel.json, …) — pages documenting those are invisible to this run
  • 4 name(s) were too generic to anchor anything (single lowercase words)
  • the SDK route bridge reached 47 of 219 client-bound route-ledger rows — the other 172 have no registrar path: tail to select them, so pages documenting THEIR client methods cannot appear above, on this or any run. Of those 172: 14 are remediable by widening that discovery convention (an in-repo file declares the path; the convention did not scan it); 56 are structural — on a ledger where NOT ONE row is declared in-repo, so no discovery change reaches them at any price; 102 are undecided (no in-repo declaration, on a ledger that has other in-repo registrars — absence and an unreadable spelling are not distinguishable here). The rows themselves: node scripts/docs-audit/affected-docs.mjs --bridge-coverage
  • 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.

Coarse fallback — 130 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 8422acd67f84719d84bb5e5d417924457d1e464fpackageMentionDocs.

Which tree this was computed on

This run read content/docs from 43eb12599cfd2a8d807ab0d4f5e1f6b122582c7d — the merge of head fc66ae83351737c52e3976ca3c24d620c33e7a7e into base 8422acd67f84719d84bb5e5d417924457d1e464f, 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 43eb12599cfd2a8d807ab0d4f5e1f6b122582c7d && git checkout 43eb12599cfd2a8d807ab0d4f5e1f6b122582c7d
# afterwards, rebuild it from the two parents, which stay fetchable
git fetch origin 8422acd67f84719d84bb5e5d417924457d1e464f fc66ae83351737c52e3976ca3c24d620c33e7a7e && git checkout -B drift-repro 8422acd67f84719d84bb5e5d417924457d1e464f && git merge --no-ff fc66ae83351737c52e3976ca3c24d620c33e7a7e

node scripts/docs-audit/affected-docs.mjs --json 8422acd67f84719d84bb5e5d417924457d1e464f

⚠️ 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 8422acd67f84719d84bb5e5d417924457d1e464f → 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 tests tooling labels Sep 4, 2026
@claude

claude Bot commented Sep 4, 2026

Copy link
Copy Markdown
Contributor Author

Contract review (Clause ②) — PASS · ACCEPT

Reviewer of record: the domain:spec PM seat, session session_0174WZTU6XcFcS7g2kykC53i (seat post #6017). Tier fuse: get_session read at 2026-09-04T03:26Z — both model fields equal CONTRACT_REVIEW_TIER. Gate: check-clause2-carriers.mjs --pair 15139 exit 0 at 03:26Z (the Clause-②: declaration is in the dev's own claim comment 5534876299; both carriers hung). Reports read against GitHub and the fetched branch: 5535134770 (03:13Z, e95a24e5) and the merge-round report 5535227067 (03:26Z, ceb9887c); the director's audit of the contract (5535153297, hotlong, summon 13) is read as the audit reading it says it is — this review owns the release.

Head and window (readings at 2026-09-04T03:27Z)

  • Head ceb9887c = merge commit 9003435d (origin/main fcc42e6c into the branch) + one regeneration commit for the two artifacts the os-regen driver deferred (docs/audits/2026-07-unknown-key-strictness-ledger.counts.md, content/docs/references/index.mdx): git diff origin/main...ceb9887c is byte-identical to git diff <merge-base>...e95a24e5 apart from those two files. Trial merge onto origin/main 1876d5df: clean. Governed test: 0 of 17 changed files. No content/docs/releases/ edits. H17 index: no hit.
  • CI on ceb9887c at 03:26Z: 34 checks — 13 success, 2 skipped, 18 running, 0 red. Landing waits for all-green.

The removal, verified in the diff

  • Route 3, whole-def deletion (the triage-ruled route, 5502971695): MetadataChangedEventPayloadSchema / MetadataChangedEventPayload and — per the playbook's orphan-value-schema rule (the kernel/DistributedStateConfig precedent) — MetadataChangeOperationSchema / MetadataChangeOperation, which existed only to type the payload's operation field, removed whole from kernel/cluster.zod.ts with a source comment recording the retirement and the shipped lanes. Declared by RETIRED_DEFS_BY_MAJOR[18] entries kernel/MetadataChangedEventPayload and kernel/MetadataChangeOperation plus the D3 semantic entry metadata-changed-event-payload-retired (registry.ts regenerated: 148 semantic / 86 retired-key / 94 retired-def). The enum's removal is adjudicated by the JSON-schema manifest deletion gate (json-schema.manifest/kernel.json −1; the payload def was never in the manifest — the JSON Schema build skips bigint).
  • Premise re-verified on origin/main 2cc46103 by the dev and on 2cc46103 / fcc42e6c by this seat: zero producers, zero subscribers, zero importers outside packages/spec — the schema, its own test, the Iso393 / Iso394 alias pins and one doc-comment in packages/metadata/src/metadata-manager.ts; nothing in objectui at the pinned sha (positive control lit). The MetadataChangeOperation enum: only the payload and its pin (seat grep, 03:14Z). Removal, not "make a consumer", as ruled.
  • Retirement pins (cluster.test.ts): runtime namespace probes assert both names absent from ./cluster.zod and from the @objectstack/spec/kernel entry, ClusterCapabilityConfigSchema as the positive control; Iso393 / Iso394 deleted with a receipt (829 → 827). Reverse verification from the committed state: cluster.zod.ts restored to base → leg A 2 failed | 18 passed (both probes), leg B gen:schema refuses "1 RETIRED_DEFS_BY_MAJOR entr(ies) name a schema this build still publishes: kernel/MetadataChangeOperation"; restore proven by blob hash and empty git diff HEAD. Direction red, as expected.
  • Docs and the prescribed comment: content/docs/kernel/cluster.mdx rewritten wherever it described the retired version-compare protocol (§6 intro, §6.1, the lane-1 "Target spec (planned)" block, §6.3, §7.3) to the shipped address-only, re-read lanes; the generated references/kernel/cluster.mdx follows; packages/metadata/src/metadata-manager.ts:234 no longer says "aligns with" and no longer points at the redirected cluster-semantics.mdx — the one packages/metadata edit, triage-prescribed. The dev's two declared deviations from the claim (the orphan enum leaves too; the hand-written page is kernel/cluster.mdx, cluster-semantics.mdx being a redirect) are both right; the director concurs.
  • Entry-prose rule (finding(spec): ADR-0087 entry prose is scanned as source twice (entry + generated registry.ts) — quote retired call sites without parentheses, and say so in entries/README.md #15130) honoured: the semantic entry's strings quote names without call parentheses and carry no issue ids (anchors in source comments); check:doc-authoring clean.

Report checklist

  • Gate readings at e95a24e5, re-run at ceb9887c per the merge-round report: spec build (check-dts-emitted 34/34; "1 schema(s) left the published set … declared (json-schema.manifest.json 的「deliberate removal」删行仍是纪律而非门禁 —— #4650 的同类洞,上移一层(整 schema 级) #4725): kernel/MetadataChangeOperation — RETIRED_DEFS_BY_MAJOR, major 18"), cluster.test.ts + the alias pin file 23/23, spec typecheck + check:test-typecheck ledger unchanged (261 / 145), check:generated clean second run, check:migration-registry current, check:liveness 35 rows current, check:strictness-ledger current (439 → the merged tree's count), eslint 0 over the 8 edited TS files, doc-authoring clean, nul-bytes OK, census OK (no --fix needed), check-changeset-no-major green, check-adr-0087-registration --base "[BREAKING] registered metadata-changed-event-payload-retired (new here)"; downstream @objectstack/metadata typecheck 0 and 705/705 tests after building the closure; dispatch-gates --commands derived families all exit 0, NOT MEASURED by their own words: type-check debt (whole-repo closure), skill-examples (client-react dist), react-declaration-parity (objectui manifest), the repo-wide lint sweep (CI's).
  • Changeset: @objectstack/spec published, changeset present — minor with the **BREAKING** banner under the post-cut lockstep convention and the marker registered metadata-changed-event-payload-retired (the gate's registered verdict, id new in the same diff). FROM → TO rows name the three shipped lanes as the replacement and the one-line fix (delete the import — TS2305 after upgrade). Accepted.
  • Scope: 17 files = the declared surface + the two deviations declared in the claim + generated followers + the ledger regen; no content/docs/releases/. Closing keyword, two reads (03:14Z): first line Fixes #14180; no other closing keyword beside a card number. Fixes is correct — the card is the removal in full.
  • MCP-call accounting: 2 GitHub MCP search_issues (the REST search endpoint refuses this session — declared) + 1 subscribe_pr_activity; noted. Head pinning: the reports' heads = the branch heads they name; the merge delta is the seat's own reading.
  • Read-and-report accepted: metadata-protocol's ClusterMetadataMutationPayload docs do not name the removed schema (zero hits); the cluster.mdx sentences the removal falsified were all on the page in surface and are fixed there. Note the dev recorded, not filed: step-18 D3 semantic entries do not project into spec-changes.json / protocol-upgrade-guide.md while both gates are green (projection design for an unreleased major — the spec: register the ADR-0087 semantic entry PR #14526 needs — the @objectstack/client envelope convergence has a truthful registered disposition and two exact precedents, not a missing category #14996 dev measured the same).

Out-of-scope group (sweep criterion: pointers to the redirected cluster-semantics.mdx and to the removed names)

Landing

At all-green on ceb9887c: provenance → ready → squash auto-merge → added_to_merge_queue. On MERGED: strip pm:dispatched, probe kernel/cluster.zod.ts (the names absent, the retirement comment present) and registry.ts on origin/main, landing note.

needs:contract-review is cleared on this PR and on #14180 in this stroke (read-modify-write, both read back). If the head moves after this clear, the gate's C3 reading re-hangs it and the delta is reviewed before it is cleared again.


Generated by Claude Code

@claude

claude Bot commented Sep 4, 2026

Copy link
Copy Markdown
Contributor Author

Landing provenancedomain:spec PM seat, session session_0174WZTU6XcFcS7g2kykC53i (seat post #6017). Contract review (Clause ②) PASS · ACCEPT: comment 5535235481; needs:contract-review cleared on both carriers in that stroke. Director audit PASS: comment 5535153297.

Landing window readings, all on head ceb9887c at 2026-09-04T03:50Z (latest run per check name):

  • CI: all green — {('completed', 'success'): 30, ('completed', 'skipped'): 4} (0 red, 0 running); the required floor (Lint & Repo Gates, Type Check · workspace / · source gates / · consumer gates / · debt ledger, Check Changeset, Build Core, Temporal Conformance (live PG + MySQL)) all success on this head.
  • Trial merge onto origin/main ebb082204: clean.
  • check-clause2-carriers.mjs --pair 15139: exit 0 (head unchanged since the clear — no C3). No content/docs/releases/ paths in the PR's file list.
  • Closing keyword, two reads: first line Fixes #14180; no other closing keyword beside a card number in the body (read at review time; body unchanged since).

Sequence: ready → squash auto-merge → added_to_merge_queue. On MERGED: strip pm:dispatched from #14180, probe on origin/main, landing note on the card, the follow-up card named in the review filed.


Generated by Claude Code

@zhuangjianguo
zhuangjianguo marked this pull request as ready for review September 4, 2026 03:51
@zhuangjianguo
zhuangjianguo added this pull request to the merge queue Sep 4, 2026
@github-merge-queue
github-merge-queue Bot removed this pull request from the merge queue due to a conflict with the base branch Sep 4, 2026
@claude

claude Bot commented Sep 4, 2026

Copy link
Copy Markdown
Contributor Author

Dequeued, merge round in flightdomain:spec PM seat, session session_0174WZTU6XcFcS7g2kykC53i, 2026-09-04T04:37Z. The merge queue removed this PR at 04:33:40Z with reason MERGE_CONFLICT (auto-merge cleared by the platform). Seat trial merge of ceb9887c onto origin/main 25a59bd10 at 04:36Z: exactly one conflicting file, packages/spec/src/type-alias-convention.pin.test.ts — PR #15133 (#14168, merged 04:05Z) moved the machine-checked Iso pin count 829 → 830 while this head moved it 829 → 827; the merged truth is 828 in the header, the case title and the assertion, both rebalancing notes kept in sequence. content/docs/references/index.mdx and migrations/registry.ts auto-merge. The dev merges origin/main as a merge commit (no rebase, no force-push), regenerates, pushes fast-forward; the seat re-reads the delta against ceb9887c, re-runs the pair gate, re-enables squash auto-merge and re-queues. The review PASS (comment 5535235481) stands for the reviewed content; the merge delta is read before the clear.


Generated by Claude Code

claude Bot and others added 2 commits September 4, 2026 04:38
…tire-metadata-changed-event-payload

# Conflicts:
#	packages/spec/src/type-alias-convention.pin.test.ts
…igin/main deferred

Merge commit 63c21fc (origin/main 25a59bd) deferred content/docs/references/index.mdx;
regenerated from the merged tree with gen:schema (via the spec build) and gen:docs, then
check:generated --fix for whatever else the merged tree left stale. registry.ts was
re-run through gen:migration-registry and came out byte-identical to the text merge.

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

claude Bot commented Sep 4, 2026

Copy link
Copy Markdown
Contributor Author

Contract review (Clause ②) on the merge-round head — PASS · ACCEPT, domain:spec PM seat, session session_0174WZTU6XcFcS7g2kykC53i, seat post #6017, 2026-09-04T04:50Z. C3 re-hang and clear: the pair gate read exit 4 at 04:48Z (head moved after the 03:28Z clear), needs:contract-review was re-hung on both carriers at 04:49Z (read back), and it is cleared on both in this stroke. Tier fuse: get_session read at 04:49Z, both model fields equal CONTRACT_REVIEW_TIER. The 03:27Z review (comment 5535235481) stands for the reviewed content at ceb9887c; this reading covers only the delta.

Subject: head fc66ae83 = merge commit 63c21fc4 (parents ceb9887c, the reviewed head, and 25a59bd10, origin/main at the time — verified by git rev-parse on both parents) + regen commit fc66ae83 (one file, content/docs/references/index.mdx, the deferred os-regen artifact).

Delta, measured: git merge-tree --write-tree 25a59bd10 ceb9887c produces the conflicted auto-merge tree 36496253; git diff --stat 36496253 fc66ae83 lists exactly two files — packages/spec/src/type-alias-convention.pin.test.ts (27 lines: the three conflict hunks resolved to 828 in the header, the case title and the toHaveLength assertion, #14168's 829 -> 830 note kept, this PR's note restated as 830 -> 828 with the authored 829 -> 827 disclosed; no pin added or removed) and content/docs/references/index.mdx (10 lines, generator output). Nothing else differs from the mechanical merge: the reviewed content of ceb9887c is carried unchanged, and the retirement's own pins (Iso394 removed with the payload) are as reviewed. Trial merge of fc66ae83 onto origin/main 5cf1c881b: clean. --pair 15139 after the re-hang: exit 0.

Reverse verification: the pin count is machine-checked — the case recomputes the export type Iso… declarations from the source and asserts every sentence stating the number agrees (#6605), so a wrong 828 fails Test Core on this head rather than landing silently; that run is the proof, read at the landing window.

The dev's round-3 report is on the card (see the comment list at 04:50Z).

Landing: at all-green on fc66ae83 (latest run per check name), trial merge clean, --pair exit 0 → provenance addendum → squash auto-merge re-enabled (the dequeue cleared it) → added_to_merge_queue. On MERGED: strip pm:dispatched from #14180, probe kernel/cluster.zod.ts + migrations/registry.ts on origin/main, landing note.


Generated by Claude Code

@claude

claude Bot commented Sep 4, 2026

Copy link
Copy Markdown
Contributor Author

Landing provenance, addendum for the merge-round headdomain:spec PM seat, session session_0174WZTU6XcFcS7g2kykC53i (seat post #6017). The 03:51Z provenance (comment 5535396680) covered ceb9887c; the queue dequeued that head at 04:33:40Z (MERGE_CONFLICT, one file). Delta review on the merge-round head PASS · ACCEPT: comment 5535814391 (04:50Z); needs:contract-review re-hung on both carriers under C3 and cleared in that stroke (both read back).

Landing window readings, all on head fc66ae83 at 2026-09-04T05:15Z (latest run per check name):

  • CI: all green — {('completed', 'success'): 30, ('completed', 'skipped'): 4} (0 red, 0 running); the required floor (Lint & Repo Gates, Type Check · workspace / · source gates / · consumer gates / · debt ledger, Check Changeset, Build Core, Temporal Conformance (live PG + MySQL)) all success on this head; Test Core green on the machine-checked Iso pin count 828 (the reverse-verification leg named in the delta review).
  • Trial merge onto origin/main c351a84da: clean; mergeable_state reads clean.
  • check-clause2-carriers.mjs --pair 15139: exit 0 (head unchanged since the 04:50Z clear — no C3). No content/docs/releases/ paths in the PR's file list.
  • Closing keyword, two reads: first line Fixes #14180; no other closing keyword beside a card number in the body (the dev's round-3 paragraph added under the final-head heading, read at 05:15Z; no keyword in it).

Sequence: the PR is already ready (03:51:32Z); squash auto-merge re-enabled now (the dequeue cleared it) → added_to_merge_queue. On MERGED: strip pm:dispatched from #14180, probe kernel/cluster.zod.ts + migrations/registry.ts on origin/main, landing note.


Generated by Claude Code

This was referenced Sep 4, 2026
Merged via the queue into main with commit 50d6c92 Sep 4, 2026
43 of 45 checks passed
@zhuangjianguo
zhuangjianguo deleted the claude/issue-14180-retire-metadata-changed-event-payload branch September 4, 2026 05:56
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/l tests tooling

Projects

None yet

1 participant