Skip to content

ADR-0087's changeset disposition has no category for published runtime TS interfaces with no metadata surface — the #8277 exemption argument is correct, unverifiable, and will be re-litigated #8299

Description

@hotlong

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.

Metadata

Metadata

Assignees

Type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions