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.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions