Skip to content

Commit cb38a8c

Browse files
docs(skills): the data skill's current_user table names a declared membership key (#25586)
<!-- claude-projects-attribution: {"github_login":"os-tesla"} --> _Requested by **Tesla** · [project thread](https://claude.ai/code/project/chan_01AXsQkLFKRdQCqQ3RTr6Jao?thread=cmsg_01AXsQkLFKRdQCqQ3RTr6JaoJLr1A7TYy1k6cGE23eo9VQ)_ Part of #25234 The Tier H follow-up to ruling A on #25234 (landing plan 6370632236). It is governed (`skills/**`), so a maintainer merges it. #25528 made a declared membership key (`ObjectSchema.membershipKeys`) live, and #25550 made its authoring refusals live. The data skill's `current_user.*` placeholder table still listed only the kernel's keys, so an author reading the bundle alone had no way to learn that a declared key resolves. ## The change - `skills/objectstack-data/rules/security.md` gains one row in the placeholder table: > | `current_user.KEY` | the set an object's `membershipKeys.KEY` declares (for `IN`) | - `scripts/check-skills-token-ratchet.mjs`: the file's ceiling goes from 2543 to 2563, with the ruling quoted in the row's comment. ## The maintainer ruling Tesla, 2026-10-24T01:28:57Z, project decision list item 9, verbatim and untranslated (the same message also approved item 8, whose line is elided here): > 9. 技能文档 security.md 的 token 上限 2543 → 2563 … 同意 ## Why the row is shorter than the one proposed with the ruling The ruling was asked for a 20-token raise with the shorter row from report 6374979058, measured at 2563 against the file as it stood then. #25429 (0949fe5) then landed on this file and brought it to 2541, leaving 2 tokens of headroom. The proposed row now measures 2602, which is 39 over the ruled ceiling. So the row is trimmed to fit the ruled 2563 exactly, rather than asking for a second raise. The trimmed row drops the resolution detail (the roster's `valueField` and `userField`, the caller's organisation, and the 1,000-value bound that fails closed). That detail is in `rls.zod.ts`'s "Where a membership key comes from" section, which the table's own Source line points to, and in the `membershipKeys` describe in `object.zod.ts`. ## Checks - `node scripts/check-skills-token-ratchet.mjs`: `security.md` is 2563 tokens, ceiling 2563, headroom 0, exit 0. `--self-test`: 79 cases pass. - `node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstack` derives 52 families on this head (11 changed lines). All 52 ran one at a time under `os-verify-lock.sh`, exit 0. --- 🤖 Generated with [Claude Code](https://claude.com/claude-code) https://claude.ai/code/session_01M4rJHRAZDFqLYQ9dHMH339 --------- Co-authored-by: Claude <noreply@anthropic.com>
1 parent 543b3d1 commit cb38a8c

3 files changed

Lines changed: 19 additions & 1 deletion

File tree

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
---
2+
'@objectstack/skills': patch
3+
---
4+
5+
docs(skills): the objectstack-data skill's `current_user` placeholder table names a declared membership key
6+
7+
Clause-②: no
8+
9+
The security rules' table of the `current_user.*` placeholders the RLS compiler resolves listed only the kernel's keys. It now has a row for `current_user.KEY`, the set an object's `membershipKeys.KEY` declares (for `IN`), so an author reading the catalog alone learns that a declared key resolves.

‎scripts/check-skills-token-ratchet.mjs‎

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -544,7 +544,15 @@ export const CEILINGS = new Map([
544544
// schema alone writes the refused shape. +63 tokens, zero headroom to absorb
545545
// any of it, ceiling +63. Maintainer ruling 2026-09-17 (recorded on #17359 as
546546
// comment 5710537499), verbatim and untranslated: 「security.md 允许增加到 2543」.
547-
['skills/objectstack-data/rules/security.md', 2543],
547+
// 2543 -> 2563 (#25234): the `current_user.*` placeholder table gains the
548+
// declared membership key row (`ObjectSchema.membershipKeys`, staged per
549+
// request since #25528), which the table did not teach, so an author reading
550+
// the bundle alone had no way to know a declared key resolves. +22 tokens on
551+
// a landed 2541, 2 absorbed by headroom, ceiling +20. Maintainer ruling
552+
// 2026-10-24 (project decision list item 9), verbatim and untranslated, the
553+
// line for item 8 of the same message elided:
554+
// 「9. 技能文档 security.md 的 token 上限 2543 → 2563 … 同意」.
555+
['skills/objectstack-data/rules/security.md', 2563],
548556
// 3024 -> 3109 (2026-08-31 app-repo-principles raise, see the block above).
549557
// Severity Levels listed the three values and left the CHOICE unstated: a
550558
// block rests on a judgement a person made, so a machine-inferred signal — a

‎skills/objectstack-data/rules/security.md‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,7 @@ bridge (warns). The compiler resolves these
106106
| `current_user.organization_id` | the caller's tenant |
107107
| `current_user.org_user_ids` | ids of users in the same org (for `IN`) |
108108
| `current_user.positions` | the caller's positions (for `IN`; ADR-0090 D3) |
109+
| `current_user.KEY` | the set an object's `membershipKeys.KEY` declares (for `IN`) |
109110

110111
- Source: `node_modules/@objectstack/spec/src/security/rls.zod.ts` (policy
111112
shape, predicate grammar, `check` composition).

0 commit comments

Comments
 (0)