diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index 26cfcaa742..63ad934b4b 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -530,6 +530,14 @@ jobs: # order) to them. It lives in this job with the other docs guards: the edit # that breaks it is a docs edit, so a packages/** paths filter would blind # it to its own failure mode. + # + # #9630 added a fourth claim: each page names the registry slot + # ctx.getService() really resolves it by. #9684 added a FIFTH enumeration + # of the same chapter -- versioning.mdx's "Current Matrix" shipped seven + # rows for eight pages -- so the gate now holds that matrix to the pages + # too, and holds every stability LABEL it and the kernel/index.mdx table + # publish to the page's own Stability bullet. That second half catches a + # WRONG row, which membership checking passes silently. - name: Runtime-services indexes enumerate the chapter's real pages run: pnpm check:runtime-services-index diff --git a/content/docs/kernel/runtime-services/versioning.mdx b/content/docs/kernel/runtime-services/versioning.mdx index e4f77192c4..46337c4a28 100644 --- a/content/docs/kernel/runtime-services/versioning.mdx +++ b/content/docs/kernel/runtime-services/versioning.mdx @@ -27,5 +27,6 @@ When a runtime service API changes in a breaking way: | `services.audit` | `experimental` | | `services.queue` | `stable` | | `services.email` | `stable` | +| `services.sms` | `stable` | | `services.settings` | `stable` | | `services.storage` | `stable` | diff --git a/scripts/check-runtime-services-index.mjs b/scripts/check-runtime-services-index.mjs index facfee0243..06685fbbe5 100644 --- a/scripts/check-runtime-services-index.mjs +++ b/scripts/check-runtime-services-index.mjs @@ -1,9 +1,10 @@ #!/usr/bin/env node // Copyright (c) 2026 ObjectStack. Licensed under the Apache-2.0 license. // -// check-runtime-services-index (#9604, #9630) -- hold the runtime-services -// chapter's two INDEX lists to the pages that actually exist, and each page's -// documented registry slot to a real `registerService` call. +// check-runtime-services-index (#9604, #9630, #9684) -- hold the runtime-services +// chapter's INDEX lists to the pages that actually exist, each page's documented +// registry slot to a real `registerService` call, and every published stability +// label to the page that declares it. // // node scripts/check-runtime-services-index.mjs // node scripts/check-runtime-services-index.mjs --self-test # verify the checker itself @@ -19,7 +20,9 @@ // 3. `kernel/index.mdx` -> the `services.*` table // // and each page additionally claims the registry slot it is resolved by (see -// "The fourth claim" below). +// "The fourth claim" below) and the stability label it ships under, which +// `versioning.mdx`'s "Current Matrix" repeats for the whole chapter (see "The +// fifth claim" below). // // None of the three is generated, so each drifts from the tree one edit at a // time, and nothing reads them: `check:docs-audit-scope` derives WHICH pages the @@ -69,6 +72,37 @@ // `(` -- a line-at-a-time grep reports a confident zero for it, and a wrongly // measured absence is precisely the failure this check exists to rule out. // +// ## The fifth claim: the stability LABEL each surface publishes (#9684) +// +// Checks 1-4 hold page EXISTENCE and ORDER; check 5 holds the registry slot. +// Nothing held the two tables that publish a page's STABILITY, and the same +// class of drift landed a third time on this one chapter in a day: +// `versioning.mdx`'s "Current Matrix" shipped SEVEN rows for EIGHT pages -- +// `services.sms` missing again, from a fifth enumeration of the same chapter, +// found by a human re-reading it rather than by anything mechanical. +// +// So the matrix is now held to the pages on disk (membership and order, like +// the chapter list), and both tables that repeat a label -- the matrix and the +// `services.*` table in `kernel/index.mdx` -- are held to the page's own +// `- **Stability:** \`