Skip to content

docs(adr): ADR-0087 — metadata protocol upgrades for AI consumers (conversion over notification, replayable migration chain) - #2582

Merged
os-zhuang merged 2 commits into
mainfrom
claude/bold-clarke-o4op29
Jul 4, 2026
Merged

docs(adr): ADR-0087 — metadata protocol upgrades for AI consumers (conversion over notification, replayable migration chain)#2582
os-zhuang merged 2 commits into
mainfrom
claude/bold-clarke-o4op29

Conversation

@os-zhuang

@os-zhuangos-zhuang commented Jul 4, 2026

Copy link
Copy Markdown
Contributor

Summary

Adds ADR-0087, the consumer-facing sequel to ADR-0059: how externally developed metadata apps upgrade stably across protocol majors — designed for the actual consumer population: AI-agent-maintained apps, arriving from any past major, not humans marching one release at a time.

The design ladder (best outcome first):

  • L0 — Don't break: ADR-0059's frozen gates, unchanged.
  • L1 — Break invisibly (D2): a versioned, declarative conversion layer in the spec converts N−1 shapes centrally at load for one major (fleet-compatibility window). The 11.0 calibration: http_request → http and the client-react alias removals were 100% convertible — most consumers would have needed zero action. Includes the explicit boundary argument for why a centralized, versioned, loud, tested, expiring conversion table does not violate Prime Directive Add comprehensive test suite for Zod schema validation #12 (it's the owned version history of one contract, not scattered consumer-side dialect fallbacks — and it gives the existing executor fallbacks a retirement path).
  • L2 — Break executably (D3): retired conversions graduate into a permanent, ordered, fixture-tested migration chain; objectstack migrate meta --from N replays any past major → current in one command, with per-hop verify checkpoints for bisection. Timeliness is never load-bearing: a consumer that slept through four majors replays four steps on arrival — no warning window to have missed.
  • L3 — Break loudly and structurally (D1): enforce the currently-inert engines.protocol handshake (PluginEnginesSchema, declared but checked nowhere — an ADR-0078 violation) so mismatch is a structured, machine-actionable load-time refusal naming the exact replay command, never a downstream crash.
  • D4: machine-readable-first release artifacts — composable per-major spec-changes.json + an MCP upgrade surface (spec_changes(from,to), spec_deprecations, spec_migrate(dryRun)); the prose guide becomes a generated projection of the registry.
  • D5/D6: the consumer's own validate && typecheck && test loop is the acceptance test of an autonomous upgrade; rehearsal inverts — consumer agents pull RCs from the next dist-tag and verify themselves (the blocking hotcrm smoke stays; a framework-side community smoke ring is rejected as the wrong direction).

Phased P0–P3, independently shippable, evidence-gated; nothing in ADR-0059 changes.

Revision history in this PR

  • v1: human-communication paradigm (deprecation warnings in consumer CI, N−1 warning window, prose guides as release gate).
  • v2 (current): two review corrections — (1) the consumer is an AI agent, so notification-oriented design optimizes the wrong scarce resource; (2) a one-major warning window is worthless to cross-major upgraders. Replaced by conversion-over-notification + the replayable chain above.

Verification

  • Doc-only change; node scripts/check-doc-authoring.mjs passes (172 files clean).
  • All cross-referenced ADR files (0025, 0033, 0049, 0054, 0059, 0078) verified present.
  • Claims grounded in source: PluginEnginesSchema in packages/spec/src/kernel/manifest.zod.ts is unenforced (repo-wide grep), api-surface.json diff is PR-gate-only, docs/upgrading-to-11.md exists by convention only.

🤖 Generated with Claude Code

https://claude.ai/code/session_01HjDghc79qFSJkJt2zvBxtU

…deprecation pipeline, change manifests)
Consumer-facing sequel to ADR-0059: how externally developed metadata apps
learn about protocol changes in time and upgrade stably across majors.
- D1: enforce the currently-inert engines.protocol handshake (ADR-0078 class)
so version mismatch fails fast at load instead of crashing downstream
- D2: N-1 deprecation rule + machine-readable deprecation registry surfaced
by objectstack validate/doctor in the consumer's own CI
- D3: per-release machine-readable spec-changes.json derived from the
api-surface snapshot diff
- D4: upgrading-to-N.md as a release gate + objectstack migrate meta codemods
- D5: RC window on the next dist-tag + advisory community smoke ring
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01HjDghc79qFSJkJt2zvBxtU
@vercel

vercelBot commented Jul 4, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

ProjectDeploymentActionsUpdated (UTC)
specReadyReadyPreview, CommentJul 4, 2026 2:54pm

Request Review

…otification, replayable cross-major migration chain
Two review corrections reshape the design:
1. The consumer's maintainer is an AI agent, so human attention is not the
scarce resource — machine executability and verifiability are. Notification
(CI warnings, prose guides) demoted; a load-time conversion layer (most
breaks need zero consumer action), executable migrations, structured
fail-fast diagnostics, and an MCP upgrade surface promoted. Framework-side
smoke ring dropped in favor of consumer agents pulling RCs and verifying
themselves. Includes the PD#12 boundary argument for why a centralized,
versioned, expiring conversion table is not a consumer-side dialect
fallback.
2. A one-major warning window is worthless to a consumer upgrading across
multiple majors. Timeliness is now explicitly non-load-bearing: retired
conversions graduate into a permanent, ordered, fixture-tested migration
chain; 'migrate meta --from N' replays any past major to current in one
command, with per-hop verify checkpoints; per-major change manifests
compose into a single from->to view.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01HjDghc79qFSJkJt2zvBxtU
@os-zhuangos-zhuang changed the title docs(adr): ADR-0087 — metadata protocol upgrade contract (handshake, deprecation pipeline, change manifests)docs(adr): ADR-0087 — metadata protocol upgrades for AI consumers (conversion over notification, replayable migration chain)Jul 4, 2026
@os-zhuang
os-zhuang marked this pull request as ready for review July 4, 2026 15:01
@os-zhuang
os-zhuang merged commit b165c9f into mainJul 4, 2026
15 checks passed
@os-zhuang
os-zhuang deleted the claude/bold-clarke-o4op29 branch July 4, 2026 15:01
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentationImprovements or additions to documentationsize/m

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@os-zhuang@claude