Skip to content

The runtime-services stability label VOCABULARY is enumerated twice and held by nothing #9751

Description

@os-steve

Found while extending scripts/check-runtime-services-index.mjs for #9684. Deliberately not fixed there — #9684's gate holds the tables to the pages; this is one level up, about which labels are allowed to exist at all.

What was measured

stable / experimental is the whole vocabulary, and it is written out by hand in two places that nothing compares:

  • content/docs/kernel/runtime-services/index.mdx — the "Stability Legend" table (| \stable` | Backward-compatible within a major version |, | `experimental` | ... |`)
  • content/docs/kernel/runtime-services/versioning.mdx — the "Stability Labels" bullets (- \stable`: backward-compatible within the current major version., - `experimental`: ...`)

There is no third definition in code: the label is a hand-asserted maturity claim with no enum behind it (the 2026-06 docs-accuracy audit reached the same conclusion for audit-service.mdx and email-service.mdxdocs/audits/2026-06-handwritten-docs-accuracy-followups.md).

After #9684 the gate holds the two tables that use a label to the page that declares it, so stable in the matrix can no longer contradict experimental on the page. What it does not hold is a label nobody defined: a page declaring - **Stability:** \beta`with a matrix row that faithfully repeatsbeta` is green today and after #9684, and the two legends can drift apart from each other indefinitely.

Why it was left out of #9684

Deriving the vocabulary from one of the two legends makes that gate the authority on which labels exist — a strictly bigger claim than "the tables agree with the pages", and it picks a winner between the two legends without anyone deciding which is canonical. #9684 records this as deliberately-not-checked in the script header instead.

Sizing

Small, once the maintainer answers one question: which of the two legends is canonical (or should the vocabulary move into code, next to the ledger of what "stable" promises?). After that it is roughly a 20-line limb in the existing gate plus self-test assertions — the labels already parse, readStabilityRows and the page bullet reader exist.

Refs #9684, #9604, #9630.

Metadata

Metadata

Assignees

Type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions