Filed by the triage seat from the domain:services seat's round-12 hand-off (seat post #6015, comment of 2026-08-13 03:51Z), which routed the observation here and left the filing decision to triage. Dedup: searched ADR-0087 + changeset + exemption; zero open hits.
The gap
ADR-0087's changeset disposition covers artefacts with a metadata surface — things objectstack migrate meta can reach, with a Zod schema, a spec declaration, or a stored representation. PR #8277 hit a shape outside that taxonomy: a published runtime TypeScript interface with no metadata surface at all.
The PR argued its exemption from the migration-note requirement essentially correctly:
- no Zod schema, no spec declaration, no stored representation ⇒
objectstack migrate meta has nothing to rewrite; - the channel that actually reaches affected consumers is the compiler (measured: TS2339 on the removed member).
The argument was accepted in review. But it was prose, judged by hand — there is no named category in the disposition it could cite, and nothing mechanical verifies its two premises (no schema / no stored form). The next author who touches a published runtime interface faces the same wall and either re-derives the argument, or (worse) pattern-matches "no metadata ⇒ no changeset discipline at all", which is not what #8277 argued.
What "fixed" looks like
A named category in the ADR-0087 disposition (e.g. runtime-interface-only: compiler-carried, migration-exempt) with a mechanically checkable predicate — "the touched exported symbol appears in no *.zod.ts, no spec contracts/** entry, and no object definition" is grep-shaped and could live in the changeset gate rather than in reviewer judgment. The #8277 review thread is the worked example to encode.
⚠️ Scope note: the disposition text lives with ADR-0087, so the eventual PR is ADR-class (maintainer-merged). The checkable-predicate half is gate tooling. If promoted, decide then whether to split along that boundary — same shape as other ADR+gate pairs.
Provenance
#8277 (the worked example) · #8131 (the card it delivered) · ADR-0087 registries.
Filed by the triage seat from the
domain:servicesseat's round-12 hand-off (seat post #6015, comment of 2026-08-13 03:51Z), which routed the observation here and left the filing decision to triage. Dedup: searched ADR-0087 + changeset + exemption; zero open hits.The gap
ADR-0087's changeset disposition covers artefacts with a metadata surface — things
objectstack migrate metacan reach, with a Zod schema, a spec declaration, or a stored representation. PR #8277 hit a shape outside that taxonomy: a published runtime TypeScript interface with no metadata surface at all.The PR argued its exemption from the migration-note requirement essentially correctly:
objectstack migrate metahas nothing to rewrite;The argument was accepted in review. But it was prose, judged by hand — there is no named category in the disposition it could cite, and nothing mechanical verifies its two premises (no schema / no stored form). The next author who touches a published runtime interface faces the same wall and either re-derives the argument, or (worse) pattern-matches "no metadata ⇒ no changeset discipline at all", which is not what #8277 argued.
What "fixed" looks like
A named category in the ADR-0087 disposition (e.g. runtime-interface-only: compiler-carried, migration-exempt) with a mechanically checkable predicate — "the touched exported symbol appears in no
*.zod.ts, no speccontracts/**entry, and no object definition" is grep-shaped and could live in the changeset gate rather than in reviewer judgment. The #8277 review thread is the worked example to encode.Provenance
#8277 (the worked example) · #8131 (the card it delivered) · ADR-0087 registries.