Found while sweeping every pointer on content/docs/kernel/runtime-services/index.mdx for #9588 (which fixes a different line on the same page — the Audit canonical source). Reported rather than ridden along: #9588's dispatch pinned the fix to the audit pointer, and both drifts below reach past this file.
What is wrong
The page carries two lists that disagree with each other, with meta.json, and with the pages on disk.
1. The chapter list omits services.sms. Lines 19-25 enumerate seven slots:
- `services.data`
- `services.sharing`
- `services.audit`
- `services.queue`
- `services.email`
- `services.settings`
- `services.storage`
services.sms is absent — yet content/docs/kernel/runtime-services/sms-service.mdx exists, meta.json lists sms-service in pages, the same page's own Source-of-Truth list (line 43) has SMS: packages/spec/src/contracts/sms-service.ts, and the slot is really registered: packages/services/service-sms/src/sms-plugin.ts:181 runs ctx.registerService('sms', this.service), with SmsService implements ISmsService (sms-service.ts:95). So the one list on the page that reads as "what this chapter documents" is the only place the service is missing.
content/docs/kernel/index.mdx:17-21 omits it too, which is why this is filed rather than patched into #9588: fixing only the runtime-services index would leave the two index pages newly disagreeing where they currently agree.
2. The Source-of-Truth list has a Security row the chapter does not document. Line 39 reads Security: packages/spec/src/contracts/security-service.ts, but services.security appears in neither the chapter list nor meta.json, and no security-service.mdx exists under runtime-services/. The slot itself is real (packages/plugins/plugin-security/src/security-plugin.ts:1157), and the contract file is the right one — it names its own registration in its header. The row simply points at a service this chapter never introduces, so the list's stated purpose ("Each page links the canonical TypeScript source used to derive signatures") does not hold for it: there is no page.
Why it is worth a card
Both are small, but they are the index — the one page whose job is to be a trustworthy map of the chapter. A reader looking for SMS concludes the chapter has no SMS page and goes hunting; a reader following the Security row lands on a contract with no page explaining the accessor. Nothing checks either direction: check:docs-audit-scope confirms which pages are in audit scope, not that an index enumerates them.
Directions, not a recommendation
- Add
services.sms to both index pages' lists in one change, so they stay in step. - For
Security: either give it a page in this chapter, or move the row to wherever services.security is actually documented, or drop it. Which one depends on whether services.security is meant to be a documented runtime accessor at all — worth a maintainer read rather than a guess.
Refs: #9588 · #9534 · PR #9587
Found while sweeping every pointer on
content/docs/kernel/runtime-services/index.mdxfor #9588 (which fixes a different line on the same page — the Audit canonical source). Reported rather than ridden along: #9588's dispatch pinned the fix to the audit pointer, and both drifts below reach past this file.What is wrong
The page carries two lists that disagree with each other, with
meta.json, and with the pages on disk.1. The chapter list omits
services.sms. Lines 19-25 enumerate seven slots:services.smsis absent — yetcontent/docs/kernel/runtime-services/sms-service.mdxexists,meta.jsonlistssms-serviceinpages, the same page's own Source-of-Truth list (line 43) hasSMS: packages/spec/src/contracts/sms-service.ts, and the slot is really registered:packages/services/service-sms/src/sms-plugin.ts:181runsctx.registerService('sms', this.service), withSmsService implements ISmsService(sms-service.ts:95). So the one list on the page that reads as "what this chapter documents" is the only place the service is missing.content/docs/kernel/index.mdx:17-21omits it too, which is why this is filed rather than patched into #9588: fixing only the runtime-services index would leave the two index pages newly disagreeing where they currently agree.2. The Source-of-Truth list has a
Securityrow the chapter does not document. Line 39 readsSecurity: packages/spec/src/contracts/security-service.ts, butservices.securityappears in neither the chapter list normeta.json, and nosecurity-service.mdxexists underruntime-services/. The slot itself is real (packages/plugins/plugin-security/src/security-plugin.ts:1157), and the contract file is the right one — it names its own registration in its header. The row simply points at a service this chapter never introduces, so the list's stated purpose ("Each page links the canonical TypeScript source used to derive signatures") does not hold for it: there is no page.Why it is worth a card
Both are small, but they are the index — the one page whose job is to be a trustworthy map of the chapter. A reader looking for SMS concludes the chapter has no SMS page and goes hunting; a reader following the Security row lands on a contract with no page explaining the accessor. Nothing checks either direction:
check:docs-audit-scopeconfirms which pages are in audit scope, not that an index enumerates them.Directions, not a recommendation
services.smsto both index pages' lists in one change, so they stay in step.Security: either give it a page in this chapter, or move the row to whereverservices.securityis actually documented, or drop it. Which one depends on whetherservices.securityis meant to be a documented runtime accessor at all — worth a maintainer read rather than a guess.Refs: #9588 · #9534 · PR #9587