From 4ea43892e2cc5e573ffb79741ab9899e9ca2498a Mon Sep 17 00:00:00 2001 From: Claude Date: Wed, 16 Sep 2026 20:56:06 +0000 Subject: [PATCH 1/2] docs(skills): teach the isDefault everyone baseline and its app-capability rule in objectstack-data security One bullet in the permission-set key list of `skills/objectstack-data/rules/security.md`, inserted after the `Source:` line of "## Object-level permissions (RBAC)": `isDefault: true` is the `everyone` baseline (ADR-0090 D5); it may carry app capabilities declared under `capabilities:` (`defineCapability`) and granted via `systemPermissions`; lint and boot refuse a platform capability or an undeclared name there. No other line of the file moves; `skills/objectstack-platform/SKILL.md` is unchanged. Claude-Session: https://claude.ai/code/session_01Gqi43smmqjJ5sUrhfoPeKu Co-authored-by: Claude --- skills/objectstack-data/rules/security.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/skills/objectstack-data/rules/security.md b/skills/objectstack-data/rules/security.md index 62b7752c4a6..539db977799 100644 --- a/skills/objectstack-data/rules/security.md +++ b/skills/objectstack-data/rules/security.md @@ -32,6 +32,9 @@ export const salesUser = definePermissionSet({ `allowTransfer` (ownership change), `viewAllRecords` / `modifyAllRecords` (super-user, bypass sharing). - Source: `node_modules/@objectstack/spec/src/security/permission.zod.ts` +- **`isDefault: true` = the `everyone` baseline (ADR-0090 D5).** It may carry app + capabilities declared under `capabilities:` (`defineCapability`) and granted via + `systemPermissions`; lint and boot refuse a platform capability or undeclared name there. - Combine with `enable.apiMethods` to also restrict the HTTP surface. ## Assigning a permission set to a user From dfe355143c2e8debd21e886aa30c594d26e3be6e Mon Sep 17 00:00:00 2001 From: Claude Date: Thu, 17 Sep 2026 09:06:30 +0000 Subject: [PATCH 2/2] chore(scripts): raise the security.md skills token ceiling to 2543 under the maintainer ruling scripts/check-skills-token-ratchet.mjs row ['skills/objectstack-data/rules/security.md', 2480] -> 2543, in the file's own raise-ritual form: the ruling quoted verbatim and untranslated beside the row (recorded on #17359 as comment 5710537499) and the surface it authorizes named. The merged file measures 2543 tokens (ceil(utf8 bytes / 4)), so the raise is exactly the ruling. No other row moves. Claude-Session: https://claude.ai/code/session_01Gqi43smmqjJ5sUrhfoPeKu Co-authored-by: Claude --- scripts/check-skills-token-ratchet.mjs | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/scripts/check-skills-token-ratchet.mjs b/scripts/check-skills-token-ratchet.mjs index 62a4702b296..5b984866059 100644 --- a/scripts/check-skills-token-ratchet.mjs +++ b/scripts/check-skills-token-ratchet.mjs @@ -421,7 +421,16 @@ export const CEILINGS = new Map([ // NEW FILE (#14296 item 1 = A, condition (b)): the entry's Security & Access // Control block moved here whole. Pinned at its landed count — no headroom, // because a split that arrives with budget is a raise wearing a new path. - ['skills/objectstack-data/rules/security.md', 2480], + // 2480 -> 2543 (#17359, PR #18531): one three-line bullet after the RBAC + // section's `Source:` line — `isDefault: true` is the `everyone` baseline + // (ADR-0090 D5); it may carry app capabilities declared under `capabilities:` + // and granted via `systemPermissions`; lint and boot refuse a platform + // capability or an undeclared name there. The DECLARE/GRANT pair was taught + // nowhere in the bundle, so an author writing `systemPermissions` from the + // schema alone writes the refused shape. +63 tokens, zero headroom to absorb + // any of it, ceiling +63. Maintainer ruling 2026-09-17 (recorded on #17359 as + // comment 5710537499), verbatim and untranslated: 「security.md 允许增加到 2543」. + ['skills/objectstack-data/rules/security.md', 2543], // 3024 -> 3109 (2026-08-31 app-repo-principles raise, see the block above). // Severity Levels listed the three values and left the CHOICE unstated: a // block rests on a judgement a person made, so a machine-inferred signal — a