Skip to content

Commit 7a08cbf

Browse files
committed
docs(kernel): drop the Security row from the runtime-services Source-of-Truth list, and gate that list
`services.security` is ruled an internal accessor, not a publicly documented runtime accessor (maintainer ruling, 2026-08-18). The chapter's Source-of-Truth list carried `Security: packages/spec/src/contracts/security-service.ts` while `services.security` was documented nowhere under `content/docs/`, so the list's own sentence -- "Each page links the canonical TypeScript source used to derive signatures" -- was false for exactly that row: a reader following it landed on a contract file with nothing explaining the accessor. The row is dropped. No page is created and the accessor is not relocated. A short note in its place says where security really lives for a reader who needs it: the permissions chapter for access decisions, `permissions/explain` for the one in-process call, and `ISecurityService` in kernel contracts for the interface an implementation must provide. Five of the chapter's six enumerations already omitted Security (meta.json "pages", the chapter list, the kernel/index.mdx table, versioning.mdx's Current Matrix, the Stability Legend), so this is the whole edit -- nothing else in the chapter names it. check-runtime-services-index gains a sixth claim rather than losing one. That list was left unheld on purpose while this was an open product question: any rule written over it -- an allowlist entry included -- would have answered the question in a gate, and #9684 pinned that restraint with two self-test assertions. Now that it is ruled, "one row per page" is decidable, so the limb is built and those two pins are re-aimed at the answer: the page-less row is CAUGHT, and caught as a canonical-source row rather than misread as a stability claim. Membership runs both ways, duplicates are rejected, and each row's path must be a file that exists. Row ORDER is deliberately not held -- unlike the chapter list and the matrix, this list has never followed meta.json nav order, and enforcing it would re-sort a published list to a convention it never had. The existing six checks are untouched. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01XqDQYVU5smx29ts9pAErja
1 parent 55d2993 commit 7a08cbf

3 files changed

Lines changed: 238 additions & 37 deletions

File tree

‎.github/workflows/lint.yml‎

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -557,6 +557,17 @@ jobs:
557557
# too, and holds every stability LABEL it and the kernel/index.mdx table
558558
# publish to the page's own Stability bullet. That second half catches a
559559
# WRONG row, which membership checking passes silently.
560+
#
561+
# #9629 closed the last gap. The chapter's "Source of Truth" canonical-source
562+
# list -- a SIXTH enumeration -- was deliberately left unheld while
563+
# `services.security` was an open product question: it carried a row for a
564+
# service with no page, and any rule written over the list would have
565+
# answered that question in a gate rather than by ruling. The 2026-08-18
566+
# maintainer ruling made the accessor internal, the row is dropped, and the
567+
# list is now held to the pages too -- one row per page, labelled with the
568+
# accessor, each path a file that exists. Row ORDER is deliberately still
569+
# not held: unlike the chapter list and the matrix, this list has never
570+
# followed meta.json nav order.
560571
- name: Runtime-services indexes enumerate the chapter's real pages
561572
run: pnpm check:runtime-services-index
562573

‎content/docs/kernel/runtime-services/index.mdx‎

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,6 @@ This chapter documents the runtime `services.*` APIs used in hook/action/flow/pl
4646
Each page links the canonical TypeScript source used to derive signatures.
4747

4848
- Data: `packages/client/src/index.ts`
49-
- Security: `packages/spec/src/contracts/security-service.ts`
5049
- Sharing: `packages/spec/src/contracts/sharing-service.ts`
5150
- Queue: `packages/spec/src/contracts/queue-service.ts`
5251
- Email: `packages/spec/src/contracts/email-service.ts`
@@ -55,6 +54,14 @@ Each page links the canonical TypeScript source used to derive signatures.
5554
- Settings: `packages/services/service-settings/src/settings-service.ts`
5655
- Audit: `packages/plugins/plugin-audit/src/auth-event-audit.ts`
5756

57+
`services.security` is **not** on this list. The kernel registers a `security` service,
58+
but it is an internal accessor rather than a documented runtime service, so this chapter
59+
has no page for it. For access decisions read the
60+
[permissions guide](/docs/permissions) — the one in-process call most readers need is
61+
shown in [Explain Access](/docs/permissions/explain) — and the interface an
62+
implementation must provide, `ISecurityService`, is listed with the other
63+
[kernel contracts](/docs/kernel/contracts).
64+
5865
<Callout type="warn" title="Not this: the settings audit sink">
5966
A second audit shape shares the word and is easy to reach for by mistake.
6067
`SettingsAuditSink` — canonical source

0 commit comments

Comments
 (0)