Commit 2f93d0f
docs(skills): clear the GraphQL residue from the published catalog and declare sharingModel on its four object examples (#11141)
* docs(skills): drop the five GraphQL residue sites and the stale /storage mount
`/graphql` is not mounted: `packages/runtime/src/http-dispatcher.ts:2069` is
`// /graphql removed — GraphQL is not in the product plan (#2462 follow-on)`,
there is no `createGraphQLDomain` among the registered domains (0 hits under
`packages/*/src`), and `handleGraphQL` survives only in CHANGELOGs. Five sites
in the published catalog still described it as a live ObjectStack surface —
the input that generates client code against a route which 404s.
- `objectstack-api` tags: drop `graphql` (the description one line above
already lists no GraphQL surface).
- `objectstack-data` `apiEnabled`: REST + MCP, the two surfaces the flag
actually gates (`packages/mcp/src/stdio-data-bridge.ts:260` reads
`enable.apiEnabled === false`).
- `objectstack-platform` mount line: `createHonoApp` mounts auth and
discovery only. `/storage` was stale on the same line and is corrected in
the same edit — `packages/adapters/hono/src/index.ts:423` is
`// --- Storage: deliberately NOT mounted (#4087) ---`, and the dispatcher
carries the matching "No `/storage` domain (#4087)" note.
- `objectstack-formula`: the `GraphQL.ComputedField` CEL-host row and the
`api/graphql` cache-key row are deleted rather than replaced — no real
surface fills either slot (the computed-field CEL host is already the
`Field` / `type: 'formula'` row above it, and no cache-key template surface
exists: `system/cache` takes plain key patterns, `api/http-cache` has none).
The mirror row in `content/docs/ai/skills-reference.mdx` moves in this same
commit, per the card's anti-drift requirement — never before or after the
skill it catalogs.
Bundle effect: -27 tokens on the published skills ratchet.
Fixes #10846
* fix(skills): declare sharingModel on the 4 catalog examples, then scan skills/ for it
The 4 `ObjectSchema.create()` examples inside os:check-marked blocks in the
published catalog omitted `sharingModel`. The omission type-checks clean
(`z.enum([...]).optional()`, no `.default()`) while `os validate` rejects it as
severity: 'error' (`SECURITY_OWD_UNSET`) — so a reader copying a canonical
example got a failing build with no hint from the page, multiplied by every AI
that copies the catalog verbatim.
Values, per the #10714 sweep's shape:
- `account`, `invoice`, `support_case` (objectstack-data) -> `'private'`, the
rule's own recommended default. DEFAULTED, not mirrored: `examples/` carries
no object of these names. The showcase app's `showcase_account` /
`showcase_invoice` are differently-named objects whose `public_read_write` is
an explicit ADR-0090 D1 grandfather stamp ("record isolation for this demo
object is RLS-owned / intentionally public") — a demo's stamp, not a value to
teach.
- `crm_lead` (objectstack-upgrade) -> `'public_read_write'`, MIRRORED:
`examples/app-crm/src/objects/lead.object.ts` is the same object name, and
the skill and the app disagreeing about one object's OWD is the drift this
mirrors away. Flagged for review in the PR body — the real object's value is
itself a demo grandfather stamp.
Only then the gate half. `check-doc-security-posture` grows the `skills/` root
its own header recorded as deferred, following `check-skill-examples`'
SOURCE_ROOTS two-root/two-marker shape: `.md` + `<!-- os:check -->` for skills,
`.mdx` + the MDX comment spelling for docs, since MDX has no HTML comments.
Sequencing is the point — extending the roots before the 4 fixes would have
made the gate born red.
Two holes the generalization could have opened, closed here:
- The anti-idle floor is now PER ROOT. A root scanned with the wrong marker
reads zero marked blocks, and a single whole-corpus counter would have stayed
green on the other root's census while a governed corpus went unjudged.
- An exemption entry belonging to no root would be dropped by the per-root
routing and never judged stale, silently ending the ledger's
self-invalidating discipline. It is now a loud refusal.
Self-test grows a skills leg proving the .md root judges its own marker, and
that neither spelling crosses into the other root.
No changeset: `packages/lint`'s published `files` is ["dist","README.md",
"CHANGELOG.md"] with no `bin` and dist-only `exports`, so `scripts/**` ships to
no consumer, and this commit touches no package `src/`. The PR declares that
with `skip-changeset`.
Fixes #10925
* chore(skills): raise the data/upgrade token ceilings per the 2026-08-23 maintainer ruling
The four sharingModel keys commit 2 adds are required by the gating-tier
SECURITY_OWD_UNSET rule and cost 30 tokens in two files whose ceilings sat at
exactly zero headroom. Maintainer ruling, 2026-08-23, on PR #11141 (option A of
the three put to them, verbatim): 「A:提天花板(推荐)」 — data 13797→13817,
upgrade 8325→8335, quoted in the PR body as this gate's own header requires.
The same ruling confirmed crm_lead keeps the mirrored 'public_read_write'
(「镜像 public_read_write(推荐)」), so no diff change accompanies the raise.
Bundle-level the PR still nets +3 tokens (commit 1 pays back 27 elsewhere);
gate and its 33-case self-test green at this commit.
Co-Authored-By: Claude <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01MsbKEG4LtERSLaDrbehM3e
---------
Co-authored-by: Claude <noreply@anthropic.com>1 parent 584fe2e commit 2f93d0f
8 files changed
Lines changed: 214 additions & 73 deletions
File tree
- content/docs/ai
- packages/lint/scripts
- scripts
- skills
- objectstack-api
- objectstack-data
- objectstack-formula
- objectstack-platform
- objectstack-upgrade
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
153 | 153 | | |
154 | 154 | | |
155 | 155 | | |
156 | | - | |
| 156 | + | |
157 | 157 | | |
158 | 158 | | |
159 | 159 | | |
| |||
Large diffs are not rendered by default.
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
145 | 145 | | |
146 | 146 | | |
147 | 147 | | |
148 | | - | |
| 148 | + | |
| 149 | + | |
| 150 | + | |
149 | 151 | | |
150 | 152 | | |
151 | 153 | | |
152 | 154 | | |
153 | 155 | | |
154 | 156 | | |
155 | 157 | | |
156 | | - | |
| 158 | + | |
| 159 | + | |
| 160 | + | |
157 | 161 | | |
158 | 162 | | |
159 | 163 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
16 | 16 | | |
17 | 17 | | |
18 | 18 | | |
19 | | - | |
| 19 | + | |
20 | 20 | | |
21 | 21 | | |
22 | 22 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
91 | 91 | | |
92 | 92 | | |
93 | 93 | | |
94 | | - | |
| 94 | + | |
95 | 95 | | |
96 | 96 | | |
97 | 97 | | |
| |||
214 | 214 | | |
215 | 215 | | |
216 | 216 | | |
| 217 | + | |
217 | 218 | | |
218 | 219 | | |
219 | 220 | | |
| |||
253 | 254 | | |
254 | 255 | | |
255 | 256 | | |
| 257 | + | |
256 | 258 | | |
257 | 259 | | |
258 | 260 | | |
| |||
321 | 323 | | |
322 | 324 | | |
323 | 325 | | |
| 326 | + | |
324 | 327 | | |
325 | 328 | | |
326 | 329 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
425 | 425 | | |
426 | 426 | | |
427 | 427 | | |
428 | | - | |
429 | 428 | | |
430 | 429 | | |
431 | 430 | | |
| |||
476 | 475 | | |
477 | 476 | | |
478 | 477 | | |
479 | | - | |
480 | 478 | | |
481 | 479 | | |
482 | 480 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
392 | 392 | | |
393 | 393 | | |
394 | 394 | | |
395 | | - | |
| 395 | + | |
396 | 396 | | |
397 | 397 | | |
398 | 398 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
634 | 634 | | |
635 | 635 | | |
636 | 636 | | |
| 637 | + | |
637 | 638 | | |
638 | 639 | | |
639 | 640 | | |
| |||
0 commit comments