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-zhuang os-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

vercel Bot commented Jul 4, 2026

Copy link
Copy Markdown

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

Project Deployment Actions Updated (UTC)
spec Ready Ready Preview, Comment Jul 4, 2026 2:54pm

Request Review

@github-actions github-actions Bot added documentation Improvements or additions to documentation size/m labels Jul 4, 2026
…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-zhuang os-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 main Jul 4, 2026
15 checks passed
@os-zhuang
os-zhuang deleted the claude/bold-clarke-o4op29 branch July 4, 2026 15:01
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/m

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants