Skip to content

docs(skills): cite PLATFORM_CAPABILITY_TOKENS instead of restating its count in objectstack-platform - #18839

Merged
os-zhuang merged 1 commit into
mainfrom
claude/issue-18705-platform-skill-cites-the-registry
Sep 18, 2026
Merged

os-zhuang merged 1 commit into
mainfrom
claude/issue-18705-platform-skill-cites-the-registry

Conversation

@os-justin

Copy link
Copy Markdown
Collaborator

Fixes #18705
Clause-②: no

The requires: section of the published skills/objectstack-platform/SKILL.md copied two numbers out of the platform capability vocabulary into prose — 「The other eight tokens in the vocabulary …」 and 「The authoritative list of all 28 is PLATFORM_CAPABILITY_TOKENS」 — and no gate reads either number against packages/spec/src/kernel/platform-capabilities.ts. PR #18694 (#18053) took the vocabulary 28 → 29 when it landed at 2026-09-17T16:10Z, so on origin/main both sentences were already false when this branch was cut. This PR is the card's option A in the shape of the #16853 precedent (a256f18962, PR #17259 「cite the platform-tool registry instead of restating it」): the two counts become citations, and nothing is left in those two sentences that a registry change can falsify. No other sentence in the file moves. The package-registry runtime half is #17676's and is not addressed here; #16767 (the example block's TypeScript range, same file) remains open and is not folded.

维护者速读(草稿)

改了什么 — 发布给客户项目的 skills/objectstack-platform/SKILL.md 里,requires: 一节原来写死了两个数字(「the other eight tokens」「the authoritative list of all 28」)。本 PR 把这两句改成引用常量 PLATFORM_CAPABILITY_TOKENS,不再写数字;其余 1221 行一字未动(diff 是 3 行增 / 3 行删)。

为什么改 — 这两个数字是从 packages/spec 的能力词汇表抄来的,没有任何门禁核对它们。#18694 落地后词汇表已是 29 个 token(新增 package-registry),这两句在 main 上已经是假话,而客户项目里的 AI 每次加载这份 skill 都会读到。同一类缺陷在 skills/objectstack-ai/SKILL.md 上已由 #16853 / PR #17259 用同样的办法修过一次:引用注册表,不复述它。

风险与代价(含回滚) — 纯文档改动,不发布代码,不改任何运行时行为;skill 的 token 计数 12980 → 12975,上限 12984 不动。回滚就是 revert 这一个提交。留下一处未动:同一节 :440 的「all 20 of its entries」仍是一个抄写的计数(今天为真,#17676 引擎侧落地时会变假),按派发令本卡不动其它句子——要不要顺手折进来由席位定,见下方 Acceptance notes。

席位意见 —

你要做的 — 这是受管面(skills/**),按 Prime Directive #14 需要你亲自确认并合并;PR 保持 draft。读一眼 diff 里那两句(6 行),没有别的。

Re-derived readings

All on origin/main 5941246b70 (the branch point); none copied from the card.

reading value how
PLATFORM_CAPABILITY_TOKENS size 29 parsed the frozen array literal in packages/spec/src/kernel/platform-capabilities.ts; PLATFORM_CAPABILITY_PROVIDERS has the same 29 keys
Serve.CAPABILITY_PROVIDERS size (the map the section describes) 20 top-level keys of the static at packages/cli/src/commands/serve.ts :1863–:2009; the skill's :442 table names the same 20 as a set
vocabulary tokens NOT in that map 9 ai ai-studio i18n ui auth hierarchy-security ai-seat governance — the eight the section lists — plus package-registry
「all 28」 on the tip false (29)
「the other eight」 on the tip false (nine)
「all 20 of its entries」 at :440 (same section; not named by the card) true today (20 = 20)

Gate reading — which gate surfaces read the constant name — with controls (git grep -l at 5941246b70):

The two sentences, before / after

:452–:453 before:

The other eight tokens in the vocabulary are **not** in that map and do not
resolve through it:

after:

The tokens in `PLATFORM_CAPABILITY_TOKENS` not in that map do not resolve
through it:

:463 before:

The authoritative list of all 28 is `PLATFORM_CAPABILITY_TOKENS`

after:

The authoritative list is `PLATFORM_CAPABILITY_TOKENS`

The diff is 3 insertions / 3 deletions in one file.

The enumeration under :452, re-read against the constant at the tip

Every name the two bullets carry — tier-gated ai, ai-studio, i18n, ui, auth (= the five keys of Serve.CAPABILITY_TO_TIER at :1577–:1585, verbatim); enterprise / cloud hierarchy-security, ai-seat, governance — is in PLATFORM_CAPABILITY_TOKENS at the tip, and none of the eight is a Serve.CAPABILITY_PROVIDERS key. So the list is kept as the list it is: no name dropped, no name added. The ninth not-in-map token, package-registry, is in the vocabulary and in PLATFORM_CAPABILITY_PROVIDERS (@objectstack/service-package, open edition) but has no Serve.CAPABILITY_PROVIDERS row yet — the constant's own comment says it is inert under objectstack serve until #17676's runtime half lands. Per the card this PR documents no new token; the Acceptance notes say who holds that.

The marketplace provider line (:444, @objectstack/service-package) was read against Serve.CAPABILITY_PROVIDERS.marketplace.pkg at :1958 (@objectstack/service-package): it matches the tip and is not touched — repointing it is #17676's engine lane.

Token ratchet

node scripts/check-skills-token-ratchet.mjs, convention ceil(utf8 bytes / 4):

bytes tokens ceiling headroom exit
before (5941246b70) 51918 12980 12984 4 0
after (bef0dc6dfa) 51898 12975 12984 9 0

No ceiling moves. The published-skill readings the os-dev definition asks for: this file 1223 → 1223 lines and 12980 → 12975 tokens; the package (all ten skills/*/SKILL.md) 6145 → 6145 lines and 70695 → 70690 tokens; the whole priced bundle 139987 → 139982 tokens. Lowering this file's ceiling to 12975 is the script's stated option, but it edits scripts/check-skills-token-ratchet.mjs, outside this card's one-file surface — left to the seat.

Gates

Derived with node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstack from the worktree (no hand-fed paths; change set read from the merge base 5941246b70); every exit code captured redirect-then-$?; all runs at bef0dc6dfa.

23 derived commands, every one exit 0:

node scripts/check-ci-filter-parity.mjs · node scripts/check-closing-keyword-parity.mjs · node scripts/check-closing-keyword-parity.mjs --self-test · node scripts/check-comment-mask-corpus.mjs · node scripts/check-doc-route-spelling.mjs --advisory · node scripts/check-doc-route-spelling.mjs --self-test · node scripts/check-skills-token-ratchet.mjs · node scripts/check-skills-token-ratchet.mjs --self-test · pnpm --filter @objectstack/spec run check:skill-docs · pnpm check:agent-test-spelling · pnpm check:corpus-claim-drift · pnpm check:cross-package-test-inputs · pnpm check:doc-authoring · pnpm check:driver-memory-census · pnpm check:nul-bytes · pnpm check:pm-governed-merges · pnpm check:refd-timer-probe · pnpm check:role-word · pnpm check:skill-compatibility · pnpm check:skill-frame-sync · pnpm check:skill-identifier-liveness · pnpm check:watch-hint-literal · pnpm --filter @objectstack/lint run check:doc-formula-expressions

  • check:doc-formula-expressions answered exit 3 (PREREQUISITE NOT MET) on its first run, before any build; then pnpm --workspace-concurrency=2 --filter '@objectstack/lint...' build under scripts/pm/os-verify-lock.sh (VERDICT command-exit 0, held 169s, waited 0s); the second run answered exit 0 — the 0 above is the second run.
  • Reconciliation: node scripts/pm/dispatch-gates.mjs --ran ran.list → ✓ dispatch-gates --ran: 23 derived famil(ies) accounted for — 23 run, 0 NOT-MEASURED (a DERIVED zero — all 23 recorded an exit code and none of them is 3), exit 0.
  • Named by the dispatch and run in addition (not in the derivation): pnpm check:pm-skill-id-lint exit 0.
  • Repo-wide pnpm lint (eslint . --no-inline-config) under the verify lock: VERDICT command-exit 0 (held 88s, waited 65s — shared-box seconds), at bef0dc6dfa.
  • Control-byte self-scan of the edited file (grep -naP over the C0/DEL range): 0 hits.

Not owed locally, because the diff touches no package: no dependency-closure build, no package test / typecheck. What stays CI's, as the derivation's stderr names it: 51 artifact-roster families, 11 wide-population families, 14 pending-changeset families, and the path-scheduled Test Core job.

Acceptance notes


Generated by Claude Code

…its count

The `requires:` section of `skills/objectstack-platform/SKILL.md` copied two
numbers out of the platform capability vocabulary into prose — "the other
eight tokens" and "the authoritative list of all 28" — and no gate reads
either against `packages/spec/src/kernel/platform-capabilities.ts`. The
vocabulary is 29 on `main` since `package-registry` landed, so both
sentences are already false.

Cite the constant instead. The tokens outside the CLI's `CAPABILITY_PROVIDERS`
map are named as "the tokens in `PLATFORM_CAPABILITY_TOKENS` not in that map",
and the authority sentence keeps the constant and drops the count. The
enumeration under it is unchanged: every name it lists is still in the
constant. Nothing in the tree read the removed numbers, so no gate or
generator follows.

Claude-Session: https://claude.ai/code/session_01Gqi43smmqjJ5sUrhfoPeKu

Co-authored-by: Claude <noreply@anthropic.com>

Copy link
Copy Markdown
Collaborator Author

维护者速读(终稿)

改了什么:发布给客户项目的 skills/objectstack-platform/SKILL.md 的 requires: 一节,原来写死两个数字(「the other eight tokens」「the authoritative list of all 28」)。本 PR 把这两句改成引用常量 PLATFORM_CAPABILITY_TOKENS、不再写数字;其余 1221 行一字未动(3 行增 / 3 行删)。token 计数 12980 → 12975,上限 12984 不动。

为什么改:这两个数字是从 packages/spec 的能力词汇表抄来的,没有任何门禁核对(引到常量的门禁面 0 个文件,亮控全树 18 个)。PR #18694 今天 16:10Z 落地后词汇表已是 29 个 token(席位在 head 上自数 29),这两句在 main 上已经是假话,而客户项目里的 AI 每次加载这份 skill 都会读到。同一类缺陷在 skills/objectstack-ai/SKILL.md 上由 #16853 / PR #17259 用同一办法修过:引用注册表,不复述它。列举的八个名字逐个对过常量,一个没丢、一个没加;#18694 新增的 package-registry 本 PR 不补写 —— 那是 #17676 引擎侧加 CLI 行时的事。

风险与代价(含回滚):纯文档、不发布代码、不改运行时;23 个派生门禁全 0,全仓 lint 0。回滚 = revert 这一个 commit。⚠️ 同一节 :440 的「all 20 of its entries」仍是一个抄写计数,今天为真、#17676 落地时会变假;按派发令本卡不动其它句子,席位决定不为一个词再开一轮 MANDATORY 档,留给必然要改那张表的 #17676 PR。

席位意见:通过,按 dev 交付的原样。

你要做的:批准本 PR(skills/** 在 GOVERNED_SURFACES 内,等您的字)。diff 只有那两句,6 行。合并后无后续动作。


Generated by Claude Code

@os-zhuang
os-zhuang marked this pull request as ready for review September 18, 2026 01:17
@os-zhuang
os-zhuang enabled auto-merge September 18, 2026 01:17
@os-zhuang
os-zhuang added this pull request to the merge queue Sep 18, 2026
Merged via the queue into main with commit 96fdac2 Sep 18, 2026
44 checks passed
@os-zhuang
os-zhuang deleted the claude/issue-18705-platform-skill-cites-the-registry branch September 18, 2026 02:19
akarma-synetal pushed a commit to akarma-synetal/framework that referenced this pull request Sep 28, 2026
…he objectui fixture shape (objectstack-ai#19721)

Fixes objectstack-ai#19714
Clause-②: no

Patch round 2026-09-22: commit 41844ce adds the 11 ratchet rows (one
per new evals json, pinned at its measured count, zero headroom) under
the maintainer's ruling 「天花板行按照你的意见就行」 — issue comment 5776586573, batch
objectstack-ai#213 item 2, letter A of the open question below;
`check-skills-token-ratchet.mjs` and its `--self-test` are green on that
head, so the «Token ratchet» section below describes the state before
this commit.

## What this does

Every one of the ten published skills under `skills/` now ships
`evals/*.json` fixtures in the objectui shape — `{ skill_name, evals: [{
id, prompt, expected_output, files, assertions: { must_contain,
must_not_contain } }] }` — copied verbatim from
`skills/objectui/evals/app-composition.json` in the sibling repo. 11 new
json files, 54 new evals (59 with the 5 pre-existing objectstack-ui
ones); every skill has at least 3, one per stated «use when» trigger
family in its description, and at least one anti-pattern case whose
`must_not_contain` names the wrong spelling the skill exists to prevent
(`conditionalRequired:`, `type: 'unique'`, `deleteBehavior: 'set_null'`,
`many_to_many`, `next:` on flow nodes, `{{` in flow values, `o: {`
translation shape, `cursor:` / `distinct: true` query keys,
`sourceView`, `data:beforeInsert` kernel hook, `defineAgent(` for third
parties, `??` alias on an upgrade, …).

Prompts are written as realistic authoring requests with business nouns;
`expected_output` states the shape an agent following the skill must
emit. Every `must_contain` string is something the skill's own text
tells the agent to write — the full token → file:line citation list is
at the bottom of this body (253 tokens, 0 untaught).

Two decisions the card left to the dev, stated here:

- **objectstack-automation's markdown case**
(`evals/approvals/test-revise-loop.md`): converted to json
(`flows-triggers-approvals.json` eval 3 is the same budget_approval
scenario, same required shape) and **kept beside it**, unchanged.
Reason: `SKILL.md` lines 954–955 link the markdown file by path (no
SKILL.md line may change in this PR), and the token ratchet carries a
`CEILINGS` row for that path — a missing file is RED there, so deleting
it would need a gate edit.
- **Changeset: none, label `skip-changeset`.** Measured against the last
three merged skills-only PRs found by `git log origin/main --oneline --
skills/` after deepening the shallow clone (objectstack-ai#19445, objectstack-ai#18839, objectstack-ai#18674):
each carried `skip-changeset` and no `.changeset/*.md`. `skills/**`
ships through `npx skills add`, not through any released package's
`files[]` (no `packages/**/package.json` lists it), so nothing published
from an npm package changes.

## Files

| skill | files | evals | trigger families → eval ids |
|:--|:--|--:|:--|
| objectstack-ai | `evals/skills-tools-knowledge.json` (new) | 5 |
`*.skill.ts` 1 · LLM provider 2 · tools a skill grants 1, 4 · knowledge
source / RAG 3 · anti: agent authoring 5 |
| objectstack-api | `evals/endpoints-auth-routes.json` (new) | 5 |
`*.endpoint.ts` 1, 2 · auth providers 4 · custom routes 3 · REST
generator 5 · anti: `transform:`, `'restore'` 1, 5 |
| objectstack-automation | `evals/flows-triggers-approvals.json` (new) +
`evals/approvals/test-revise-loop.md` (kept) | 5 | `*.flow.ts` 1, 5 ·
event-driven rule 2 · approval chain 3 · screen flow / wizard 4 · anti:
`next:`, `values:`, `{{` 1, 2 |
| objectstack-data | `evals/objects-fields-relationships.json`,
`evals/hooks-security-seeds-datasources.json` (new); `evals/README.md`
rewritten | 8 | `*.object.ts` / field types 1 · relationships 2 ·
validation 3 · `visibleWhen` rules 4 · hooks 5 · access control 6 ·
external database 7 · seeds / demo data 8 · anti: `type: 'password'`,
`many_to_many`, `type: 'unique'`, `conditionalRequired:` 1–4 |
| objectstack-formula | `evals/cel-predicates-formulas.json` (new) | 5 |
`F` / `P` / `cel` templates 1, 3, 4 · «how do I express X» 2, 5 · anti:
`{record.`, `ISCHANGED(`, `new Date(` 1–5 |
| objectstack-i18n | `evals/bundles-locales-coverage.json` (new) | 5 |
`*.translation.ts` 1 · `translation` item 3 · generated bundle from a
plugin 4 · new locale 2 · missing-translation warnings 5 · anti: `o: {`,
ICU plural 1, 3 |
| objectstack-platform | `evals/config-plugins-ops.json` (new) | 6 |
`objectstack.config.ts` 1 · plugin 2 · capability on 3 · Hono mount 4 ·
`os` CLI 5 · deployment 6 · anti: `workflows:`, `data:beforeInsert`,
`new DriverPlugin` 1, 2, 6 |
| objectstack-query | `evals/filters-pagination-search.json` (new) | 5 |
query DSL 1, 3, 4, 5 · pagination strategy 2 · anti: `cursor:`,
`distinct: true`, `fuzzy` 2–4 |
| objectstack-ui | `evals/views-apps-actions-pages.json` (new) +
`evals/analytics-inline-vs-dataset.json` (unchanged, 5);
`evals/README.md` lists both | 11 | `*.view.ts` 1 · `*.app.ts` 2 ·
`*.action.ts` 3 · `*.page.ts` + `src/docs/*.md` 4 · interface page +
`*.report.ts` 5 · wizard form 6 · `*.dashboard.ts` / `*.dataset.ts`
existing 1–5 · anti: `groupBy:`, `sourceView`, `{record.` 1, 3, 5 |
| objectstack-upgrade | `evals/protocol-major-upgrade.json` (new) | 4 |
older major must move / «升级到 v17» 1 · spec bumped, parsing broke 4 ·
`[REMOVED]` prescription 2 · residue decision 3 · anti: `sed -i`, `??`
1, 2 |

No `SKILL.md`, `rules/**` or `references/**` line changes (net 0 on
every `SKILL.md`, measured with `git diff --numstat a251aaa --
'skills/*/SKILL.md'` → empty).

## Verification

Run on 02b931d (`git rev-parse --short HEAD`), worktree
`objectstack-issue-19714`, base `a251aaa`.

- **Shape.** Parse over `skills/*/evals/*.json`: 12 files parse;
`skill_name` equals the frontmatter `name` in all 12; ids unique per
file; every eval carries `id` / `prompt` / `expected_output` / `files` /
`assertions.must_contain` / `must_not_contain`; no empty `must_contain`.
- **Counts.** 10 skills · 12 json files · 59 evals (see table).
- **Line budget.** `dispatch-gates` change-set reading: `changed lines:
630 (+613 / -17; 13 file(s))` → net **+596** across `skills/**/evals/**`
(budget ≤ +900); `SKILL.md` net 0.
- **Runner.** There is no eval runner in either repo (nothing executes a
prompt against an agent): `grep -rn evals` over `package.json` /
`scripts/` finds none here, and in objectui only the static oracle
`scripts/check-skill-eval-tokens.mjs` (`pnpm check:skill-eval-tokens`),
which checks that every `must_contain` token is taught as a whole token
somewhere in the bundle's markdown. I invoked its exported `analyze({
root })` against this tree (the CLI is pinned to objectui's own root):
`bundles: 10 · preconditions: [] · shapeFindings: [] · rows: 253 · rows
with zero whole-token hits (bundle-wide): 0`. Per the card, no runner
was built.
- **Token citations.** 253 `must_contain` tokens, each located as a
whole token in its own skill's hand-authored text (SKILL.md first, then
`rules/*.md`, then hand-authored `references/*.md`; generated
`_index.md` / `react-blocks.md` excluded); list at the bottom.
- **Control-character self-scan** over the 13 touched files: `grep -naP
'[\x00-\x08\x0b\x0c\x0e-\x1f\x7f]'` → no hits.

### Gates (derived by `node scripts/pm/dispatch-gates.mjs --repo
objectstack-ai/objectstack --commands`, 23 commands; `--ran`
reconciliation with exit codes: 23 derived, 23 run, 0 NOT-MEASURED, 0
unrun)

| command | exit | reading |
|:--|--:|:--|
| `node scripts/check-ci-filter-parity.mjs` | 0 | OK: all 185 declared
cross-package glob(s) covered |
| `node scripts/check-closing-keyword-parity.mjs` (+ `--self-test`) | 0
/ 0 | 40 assertions, 5 mutations driven to red |
| `node scripts/check-comment-mask-corpus.mjs` | 0 | 7006 files, 0
disagree |
| `node scripts/check-doc-route-spelling.mjs --advisory` (+
`--self-test`) | 0 / 0 | population clean |
| `node scripts/check-skills-token-ratchet.mjs` | **1** | `11 of 55
published bundle file(s) failed their check` — every one is a NEW file
«carrying no ceiling»; every pre-existing row is green (data README
142/143, ui README 287/289, analytics json 1102/1102, revise-loop md
550/1329). See «Token ratchet» below. |
| `node scripts/check-skills-token-ratchet.mjs --self-test` | **1** |
one failing case, the live-tree pin `every discovered AUTHORED file
carries a ceiling today`, listing exactly the same 11 files; 65/65 pass
on the pristine base tree (control run in the shared checkout at
a251aaa). Same cause, not a second finding. |
| `pnpm --filter @objectstack/lint run check:doc-formula-expressions` |
0 | first run exit 3 `PREREQUISITE NOT MET` (formula + lint not built —
identical on the pristine base tree); after `turbo run build
--filter=@objectstack/formula --filter=@objectstack/lint` under
`os-verify-lock.sh` (VERDICT command-exit 0, held 190s), the gate ran
and passed |
| `pnpm check:agent-test-spelling` | 0 | clean |
| `pnpm check:corpus-claim-drift` | 0 | 239 files scanned, skills 44 |
| `pnpm check:cross-package-test-inputs` | 0 | 255 self-test cases, all
declared |
| `pnpm check:doc-authoring` | 0 | 44 published skill files clean — no
internal issue-id references |
| `pnpm check:driver-memory-census` | 0 | OK |
| `pnpm check:gitlink-declared` | 0 | OK |
| `pnpm check:nul-bytes` | 0 | 9221 text files, no raw control bytes |
| `pnpm check:pm-governed-merges` | 0 | 441 assertions; live generator
certified this tree |
| `pnpm check:refd-timer-probe` | 0 | OK |
| `pnpm check:role-word` | 0 | 239 files, ledger unchanged |
| `pnpm check:skill-compatibility` | 0 | 10 SKILL.md reconciled |
| `pnpm check:skill-frame-sync` | 0 | coherent |
| `pnpm check:skill-identifier-liveness` | 0 | 456 citations over 44
files OK |
| `pnpm check:watch-hint-literal` | 0 | 71 declarations OK |

Not run locally (CI-owned): the repo-wide `pnpm lint` sweep, the
type-check lanes, the `Test Core` shards — this diff touches no package
source. Exit codes were captured before any pipe (`cmd log-redirect;
EXIT=$?`).

### Token ratchet — the one thing only the maintainer can lift

`scripts/check-skills-token-ratchet.mjs` enumerates every hand-authored
file under `skills/` and reds on a file with no `CEILINGS` row; its
remedy text carries the `⛔ MAINTAINER-ONLY` marker («adding a CEILINGS
row prices new text into the bundle that ships to every customer
project, which is the maintainer ruling this ratchet implements — not a
step an author takes while landing the file»). The card's ruled shape
forbids touching any gate script in this PR and the dispatch word says
«⛔ 不改门禁本身», so this PR does **not** edit the script; the `Lint & Repo
Gates` context will stay red on it until the rows land.

The authorisation the ratchet asks for exists — the maintainer's
decision-batch objectstack-ai#213 ruling, verbatim: 「1 2 4 同意」 on item 2 「objectstack
各 skill 先补 3 题 evals(复用 objectui 的 json 形状),先于第 1 项,好量化『切了没变差』」 — and
the rows are mechanical, measured on this head in the ratchet's own
`ceil(utf8 bytes / 4)` convention, each initialised AT its measurement
(zero headroom, the same terms as the objectstack-ai#12392 rows):

```
  ['skills/objectstack-ai/evals/skills-tools-knowledge.json', 1074],   // measured at 02b931d, zero headroom
  ['skills/objectstack-api/evals/endpoints-auth-routes.json', 1042],   // measured at 02b931d, zero headroom
  ['skills/objectstack-automation/evals/flows-triggers-approvals.json', 1255],   // measured at 02b931d, zero headroom
  ['skills/objectstack-data/evals/hooks-security-seeds-datasources.json', 894],   // measured at 02b931d, zero headroom
  ['skills/objectstack-data/evals/objects-fields-relationships.json', 946],   // measured at 02b931d, zero headroom
  ['skills/objectstack-formula/evals/cel-predicates-formulas.json', 1046],   // measured at 02b931d, zero headroom
  ['skills/objectstack-i18n/evals/bundles-locales-coverage.json', 1004],   // measured at 02b931d, zero headroom
  ['skills/objectstack-platform/evals/config-plugins-ops.json', 1211],   // measured at 02b931d, zero headroom
  ['skills/objectstack-query/evals/filters-pagination-search.json', 955],   // measured at 02b931d, zero headroom
  ['skills/objectstack-ui/evals/views-apps-actions-pages.json', 1505],   // measured at 02b931d, zero headroom
  ['skills/objectstack-upgrade/evals/protocol-major-upgrade.json', 1033],   // measured at 02b931d, zero headroom
```

Sum of the 11 rows: 11965 tokens. Bundle total on this head per the
ratchet's own price tag: 152338 (ratcheted authored 141361 vs 145656
ceilings). Whoever lands the rows (a maintainer-authorised follow-up, or
this PR if the seat is told to add them) also clears the self-test's
live-tree pin — no second edit needed.

## Acceptance notes

- Two pre-existing README ceilings had 0–2 tokens of headroom; both
rewrites were paid inside the same file (data README 143 → 142 tokens
with the placeholder sentence gone; ui README 289 → 287 with the new
file listed and a parenthetical example dropped from «Contributing»).
Not filed: no defect, a measurement.
- `must_not_contain` entries are spelled in their AUTHORED form
(`conditionalRequired:` with the colon, `type: 'unique'`,
`'project_id.name'` quoted) so a correct answer that merely names the
rule while following it is not flagged — the same convention objectui
adopted. A few (`ISBLANK(record.`, `??`, `sourceView`) can still trip an
otherwise-correct answer that quotes the anti-pattern; treat such a flag
as a review cue, as the pre-existing ui fixture's note says. Not filed:
fixture design, not a defect.
- objectui's `check-skill-eval-tokens.mjs` is pinned to its own repo
root on the CLI path but exports `analyze({ root })`, which is how the
reading above was taken. A gate of that shape for this repo is a
separate card, if ever — the ruled shape says no new gate here. Not
filed: out of scope, no defect.
- `scripts/pm/dispatch-gates.mjs --ran` asks for `command :: exit N`
rows to count NOT-MEASURED itself; my first record carried bare
commands, so its «0 NOT-MEASURED» was the runner's claim — re-recorded
with exit codes, it derives the same zero. Not filed: usage, not a
defect.

## 维护者速读(草稿)

**改了什么** — 十个已发布 skill 全部补上了 objectui 同款 json 形状的 evals(11 个新文件,54 题,每个
skill ≥ 3 题、每个「use when」触发族至少一题、每个 skill 至少一题反模式);objectstack-data 的「Not
yet implemented」占位 README 改成了真实 fixture 清单;automation 的 markdown 用例转成
json 并保留原 md。没有动任何 SKILL.md / rules / references 的一行。

**为什么改** — 批次 objectstack-ai#213 第 2 项:「objectstack 各 skill 先补 3 题 evals(复用 objectui 的
json 形状),先于第 1 项,好量化『切了没变差』」。这些题是接下来拆 SKILL.md(姊妹卡)前后各跑一次的量尺。

**风险与代价(含回滚)** — 发布面只多了 evals 文件(随 `npx skills add` 一起发运,约 11965
tokens)。唯一红着的门禁是 `check:skills-token-ratchet`:11 个新文件没有 CEILINGS
行,而加行是「MAINTAINER-ONLY」,本 PR 按裁决没碰门禁脚本。行的内容已在上面按实测列好。回滚 = revert 这一个
commit(02b931d),无数据、无 API 影响。

**席位意见** — (留空,由席位定稿)

**你要做的** — ① 决定 11 行 CEILINGS 落在哪里:让席位在本 PR 追加一个 commit,或另开一个引用本裁决的
follow-up;② 人合本 PR(Tier H)。

## Token citations (must_contain → first whole-token occurrence in the
skill's own text)

```
objectstack-ai/evals/skills-tools-knowledge.json  eval 1  defineSkill  →  skills/objectstack-ai/SKILL.md:94
objectstack-ai/evals/skills-tools-knowledge.json  eval 1  tools  →  skills/objectstack-ai/SKILL.md:4
objectstack-ai/evals/skills-tools-knowledge.json  eval 1  action_escalate_case  →  skills/objectstack-ai/SKILL.md:108
objectstack-ai/evals/skills-tools-knowledge.json  eval 1  triggerConditions  →  skills/objectstack-ai/SKILL.md:61
objectstack-ai/evals/skills-tools-knowledge.json  eval 2  provider  →  skills/objectstack-ai/SKILL.md:6
objectstack-ai/evals/skills-tools-knowledge.json  eval 2  anthropic  →  skills/objectstack-ai/SKILL.md:300
objectstack-ai/evals/skills-tools-knowledge.json  eval 2  temperature  →  skills/objectstack-ai/SKILL.md:295
objectstack-ai/evals/skills-tools-knowledge.json  eval 2  maxTokens  →  skills/objectstack-ai/SKILL.md:295
objectstack-ai/evals/skills-tools-knowledge.json  eval 3  KnowledgeSourceSchema  →  skills/objectstack-ai/SKILL.md:209
objectstack-ai/evals/skills-tools-knowledge.json  eval 3  contentFields  →  skills/objectstack-ai/SKILL.md:236
objectstack-ai/evals/skills-tools-knowledge.json  eval 3  metadataFields  →  skills/objectstack-ai/SKILL.md:236
objectstack-ai/evals/skills-tools-knowledge.json  eval 3  where  →  skills/objectstack-ai/SKILL.md:131
objectstack-ai/evals/skills-tools-knowledge.json  eval 3  KnowledgeServicePlugin  →  skills/objectstack-ai/SKILL.md:215
objectstack-ai/evals/skills-tools-knowledge.json  eval 4  exposed  →  skills/objectstack-ai/SKILL.md:81
objectstack-ai/evals/skills-tools-knowledge.json  eval 4  description  →  skills/objectstack-ai/SKILL.md:3
objectstack-ai/evals/skills-tools-knowledge.json  eval 4  action_  →  skills/objectstack-ai/SKILL.md:54
objectstack-ai/evals/skills-tools-knowledge.json  eval 4  tools  →  skills/objectstack-ai/SKILL.md:4
objectstack-ai/evals/skills-tools-knowledge.json  eval 5  defineSkill  →  skills/objectstack-ai/SKILL.md:94
objectstack-ai/evals/skills-tools-knowledge.json  eval 5  skills  →  skills/objectstack-ai/SKILL.md:4
objectstack-ai/evals/skills-tools-knowledge.json  eval 5  surface  →  skills/objectstack-ai/SKILL.md:5
objectstack-ai/evals/skills-tools-knowledge.json  eval 5  aiExposed  →  skills/objectstack-ai/SKILL.md:232
objectstack-api/evals/endpoints-auth-routes.json  eval 1  /api/v1/apps/  →  skills/objectstack-api/SKILL.md:126
objectstack-api/evals/endpoints-auth-routes.json  eval 1  object_operation  →  skills/objectstack-api/SKILL.md:103
objectstack-api/evals/endpoints-auth-routes.json  eval 1  objectParams  →  skills/objectstack-api/SKILL.md:130
objectstack-api/evals/endpoints-auth-routes.json  eval 1  cacheTtlSeconds  →  skills/objectstack-api/SKILL.md:132
objectstack-api/evals/endpoints-auth-routes.json  eval 2  authRequired  →  skills/objectstack-api/SKILL.md:131
objectstack-api/evals/endpoints-auth-routes.json  eval 2  rateLimit  →  skills/objectstack-api/SKILL.md:161
objectstack-api/evals/endpoints-auth-routes.json  eval 2  enabled: true  →  skills/objectstack-api/SKILL.md:161
objectstack-api/evals/endpoints-auth-routes.json  eval 2  maxRequests  →  skills/objectstack-api/SKILL.md:161
objectstack-api/evals/endpoints-auth-routes.json  eval 3  http.server  →  skills/objectstack-api/SKILL.md:113
objectstack-api/evals/endpoints-auth-routes.json  eval 3  kernel:ready  →  skills/objectstack-api/SKILL.md:207
objectstack-api/evals/endpoints-auth-routes.json  eval 3  getService  →  skills/objectstack-api/SKILL.md:202
objectstack-api/evals/endpoints-auth-routes.json  eval 4  AuthProvider  →  skills/objectstack-api/SKILL.md:337
objectstack-api/evals/endpoints-auth-routes.json  eval 4  auth.zod.ts  →  skills/objectstack-api/SKILL.md:337
objectstack-api/evals/endpoints-auth-routes.json  eval 4  google  →  skills/objectstack-api/SKILL.md:338
objectstack-api/evals/endpoints-auth-routes.json  eval 4  github  →  skills/objectstack-api/SKILL.md:338
objectstack-api/evals/endpoints-auth-routes.json  eval 4  LoginRequestSchema  →  skills/objectstack-api/SKILL.md:339
objectstack-api/evals/endpoints-auth-routes.json  eval 5  apiMethods  →  skills/objectstack-api/SKILL.md:58
objectstack-api/evals/endpoints-auth-routes.json  eval 5  /batch  →  skills/objectstack-api/SKILL.md:49
objectstack-api/evals/endpoints-auth-routes.json  eval 5  trackHistory  →  skills/objectstack-api/SKILL.md:267
objectstack-api/evals/endpoints-auth-routes.json  eval 5  lifecycle  →  skills/objectstack-api/SKILL.md:401
objectstack-automation/evals/flows-triggers-approvals.json  eval 1  defineFlow  →  skills/objectstack-automation/SKILL.md:156
objectstack-automation/evals/flows-triggers-approvals.json  eval 1  type: 'schedule'  →  skills/objectstack-automation/SKILL.md:161
objectstack-automation/evals/flows-triggers-approvals.json  eval 1  runAs: 'system'  →  skills/objectstack-automation/SKILL.md:163
objectstack-automation/evals/flows-triggers-approvals.json  eval 1  update_record  →  skills/objectstack-automation/SKILL.md:80
objectstack-automation/evals/flows-triggers-approvals.json  eval 1  edges  →  skills/objectstack-automation/SKILL.md:68
objectstack-automation/evals/flows-triggers-approvals.json  eval 2  triggerType  →  skills/objectstack-automation/SKILL.md:51
objectstack-automation/evals/flows-triggers-approvals.json  eval 2  record-after-update  →  skills/objectstack-automation/SKILL.md:466
objectstack-automation/evals/flows-triggers-approvals.json  eval 2  previous.  →  skills/objectstack-automation/SKILL.md:423
objectstack-automation/evals/flows-triggers-approvals.json  eval 2  notify  →  skills/objectstack-automation/SKILL.md:89
objectstack-automation/evals/flows-triggers-approvals.json  eval 2  recipients  →  skills/objectstack-automation/SKILL.md:108
objectstack-automation/evals/flows-triggers-approvals.json  eval 2  messaging  →  skills/objectstack-automation/SKILL.md:89
objectstack-automation/evals/flows-triggers-approvals.json  eval 3  type: 'approval'  →  skills/objectstack-automation/SKILL.md:437
objectstack-automation/evals/flows-triggers-approvals.json  eval 3  approval_revise  →  skills/objectstack-automation/SKILL.md:525
objectstack-automation/evals/flows-triggers-approvals.json  eval 3  type: 'back'  →  skills/objectstack-automation/SKILL.md:545
objectstack-automation/evals/flows-triggers-approvals.json  eval 3  maxRevisions  →  skills/objectstack-automation/SKILL.md:550
objectstack-automation/evals/flows-triggers-approvals.json  eval 3  revise  →  skills/objectstack-automation/SKILL.md:525
objectstack-automation/evals/flows-triggers-approvals.json  eval 4  screen  →  skills/objectstack-automation/SKILL.md:8
objectstack-automation/evals/flows-triggers-approvals.json  eval 4  decision  →  skills/objectstack-automation/SKILL.md:65
objectstack-automation/evals/flows-triggers-approvals.json  eval 4  condition  →  skills/objectstack-automation/SKILL.md:30
objectstack-automation/evals/flows-triggers-approvals.json  eval 4  create_record  →  skills/objectstack-automation/SKILL.md:79
objectstack-automation/evals/flows-triggers-approvals.json  eval 4  variables  →  skills/objectstack-automation/SKILL.md:122
objectstack-automation/evals/flows-triggers-approvals.json  eval 5  function:  →  skills/objectstack-automation/SKILL.md:336
objectstack-automation/evals/flows-triggers-approvals.json  eval 5  outputVariable  →  skills/objectstack-automation/SKILL.md:313
objectstack-automation/evals/flows-triggers-approvals.json  eval 5  type: 'fault'  →  skills/objectstack-automation/SKILL.md:213
objectstack-automation/evals/flows-triggers-approvals.json  eval 5  timeoutMs  →  skills/objectstack-automation/SKILL.md:198
objectstack-automation/evals/flows-triggers-approvals.json  eval 5  update_record  →  skills/objectstack-automation/SKILL.md:80
objectstack-data/evals/hooks-security-seeds-datasources.json  eval 1  searchableFields  →  skills/objectstack-data/SKILL.md:116
objectstack-data/evals/hooks-security-seeds-datasources.json  eval 1  project_name  →  skills/objectstack-data/SKILL.md:136
objectstack-data/evals/hooks-security-seeds-datasources.json  eval 1  beforeInsert  →  skills/objectstack-data/SKILL.md:11
objectstack-data/evals/hooks-security-seeds-datasources.json  eval 1  afterUpdate  →  skills/objectstack-data/SKILL.md:11
objectstack-data/evals/hooks-security-seeds-datasources.json  eval 2  sharingModel: 'private'  →  skills/objectstack-data/SKILL.md:208
objectstack-data/evals/hooks-security-seeds-datasources.json  eval 2  readScope  →  skills/objectstack-data/SKILL.md:77
objectstack-data/evals/hooks-security-seeds-datasources.json  eval 2  unit_and_below  →  skills/objectstack-data/SKILL.md:556
objectstack-data/evals/hooks-security-seeds-datasources.json  eval 2  public_read  →  skills/objectstack-data/SKILL.md:78
objectstack-data/evals/hooks-security-seeds-datasources.json  eval 2  hierarchy-security  →  skills/objectstack-data/SKILL.md:561
objectstack-data/evals/hooks-security-seeds-datasources.json  eval 3  defineDatasource  →  skills/objectstack-data/SKILL.md:8
objectstack-data/evals/hooks-security-seeds-datasources.json  eval 3  datasource  →  skills/objectstack-data/SKILL.md:91
objectstack-data/evals/hooks-security-seeds-datasources.json  eval 3  remoteName  →  skills/objectstack-data/SKILL.md:51
objectstack-data/evals/hooks-security-seeds-datasources.json  eval 3  columnMap  →  skills/objectstack-data/SKILL.md:51
objectstack-data/evals/hooks-security-seeds-datasources.json  eval 3  schemaMode  →  skills/objectstack-data/rules/datasources.md:10
objectstack-data/evals/hooks-security-seeds-datasources.json  eval 4  defineSeed  →  skills/objectstack-data/SKILL.md:8
objectstack-data/evals/hooks-security-seeds-datasources.json  eval 4  externalId  →  skills/objectstack-data/SKILL.md:650
objectstack-data/evals/hooks-security-seeds-datasources.json  eval 4  upsert  →  skills/objectstack-data/SKILL.md:108
objectstack-data/evals/hooks-security-seeds-datasources.json  eval 4  env:  →  skills/objectstack-data/SKILL.md:662
objectstack-data/evals/hooks-security-seeds-datasources.json  eval 4  daysFromNow  →  skills/objectstack-data/SKILL.md:742
objectstack-data/evals/objects-fields-relationships.json  eval 1  ObjectSchema.create  →  skills/objectstack-data/SKILL.md:90
objectstack-data/evals/objects-fields-relationships.json  eval 1  sharingModel  →  skills/objectstack-data/SKILL.md:69
objectstack-data/evals/objects-fields-relationships.json  eval 1  type: 'secret'  →  skills/objectstack-data/rules/security.md:125
objectstack-data/evals/objects-fields-relationships.json  eval 1  options  →  skills/objectstack-data/SKILL.md:251
objectstack-data/evals/objects-fields-relationships.json  eval 1  nameField  →  skills/objectstack-data/SKILL.md:92
objectstack-data/evals/objects-fields-relationships.json  eval 2  master_detail  →  skills/objectstack-data/SKILL.md:46
objectstack-data/evals/objects-fields-relationships.json  eval 2  deleteBehavior  →  skills/objectstack-data/SKILL.md:784
objectstack-data/evals/objects-fields-relationships.json  eval 2  inlineEdit  →  skills/objectstack-data/SKILL.md:785
objectstack-data/evals/objects-fields-relationships.json  eval 2  summary  →  skills/objectstack-data/SKILL.md:421
objectstack-data/evals/objects-fields-relationships.json  eval 2  lookup  →  skills/objectstack-data/SKILL.md:46
objectstack-data/evals/objects-fields-relationships.json  eval 3  unique: 'organization'  →  skills/objectstack-data/SKILL.md:465
objectstack-data/evals/objects-fields-relationships.json  eval 3  state_machine  →  skills/objectstack-data/SKILL.md:343
objectstack-data/evals/objects-fields-relationships.json  eval 3  transitions  →  skills/objectstack-data/SKILL.md:345
objectstack-data/evals/objects-fields-relationships.json  eval 3  record.  →  skills/objectstack-data/SKILL.md:157
objectstack-data/evals/objects-fields-relationships.json  eval 4  visibleWhen  →  skills/objectstack-data/SKILL.md:13
objectstack-data/evals/objects-fields-relationships.json  eval 4  requiredWhen  →  skills/objectstack-data/SKILL.md:13
objectstack-data/evals/objects-fields-relationships.json  eval 4  readonlyWhen  →  skills/objectstack-data/SKILL.md:13
objectstack-data/evals/objects-fields-relationships.json  eval 4  record.status  →  skills/objectstack-data/SKILL.md:259
objectstack-formula/evals/cel-predicates-formulas.json  eval 1  F`  →  skills/objectstack-formula/SKILL.md:9
objectstack-formula/evals/cel-predicates-formulas.json  eval 1  coalesce(  →  skills/objectstack-formula/SKILL.md:126
objectstack-formula/evals/cel-predicates-formulas.json  eval 1  record.  →  skills/objectstack-formula/SKILL.md:30
objectstack-formula/evals/cel-predicates-formulas.json  eval 2  isBlank(  →  skills/objectstack-formula/SKILL.md:86
objectstack-formula/evals/cel-predicates-formulas.json  eval 2  &&  →  skills/objectstack-formula/SKILL.md:81
objectstack-formula/evals/cel-predicates-formulas.json  eval 2  record.  →  skills/objectstack-formula/SKILL.md:30
objectstack-formula/evals/cel-predicates-formulas.json  eval 2  P`  →  skills/objectstack-formula/SKILL.md:9
objectstack-formula/evals/cel-predicates-formulas.json  eval 3  previous.status  →  skills/objectstack-formula/SKILL.md:75
objectstack-formula/evals/cel-predicates-formulas.json  eval 3  record.status  →  skills/objectstack-formula/SKILL.md:245
objectstack-formula/evals/cel-predicates-formulas.json  eval 3  !=  →  skills/objectstack-formula/SKILL.md:80
objectstack-formula/evals/cel-predicates-formulas.json  eval 4  cel`  →  skills/objectstack-formula/SKILL.md:9
objectstack-formula/evals/cel-predicates-formulas.json  eval 4  daysFromNow(  →  skills/objectstack-formula/SKILL.md:143
objectstack-formula/evals/cel-predicates-formulas.json  eval 4  daysBetween(  →  skills/objectstack-formula/SKILL.md:145
objectstack-formula/evals/cel-predicates-formulas.json  eval 5  visibleWhen  →  skills/objectstack-formula/SKILL.md:5
objectstack-formula/evals/cel-predicates-formulas.json  eval 5  != null  →  skills/objectstack-formula/SKILL.md:110
objectstack-formula/evals/cel-predicates-formulas.json  eval 5  record.end_date  →  skills/objectstack-formula/SKILL.md:107
objectstack-i18n/evals/bundles-locales-coverage.json  eval 1  defineTranslationBundle  →  skills/objectstack-i18n/SKILL.md:56
objectstack-i18n/evals/bundles-locales-coverage.json  eval 1  objects  →  skills/objectstack-i18n/SKILL.md:53
objectstack-i18n/evals/bundles-locales-coverage.json  eval 1  pluralLabel  →  skills/objectstack-i18n/SKILL.md:69
objectstack-i18n/evals/bundles-locales-coverage.json  eval 1  options  →  skills/objectstack-i18n/SKILL.md:74
objectstack-i18n/evals/bundles-locales-coverage.json  eval 1  _actions  →  skills/objectstack-i18n/SKILL.md:91
objectstack-i18n/evals/bundles-locales-coverage.json  eval 1  {{  →  skills/objectstack-i18n/SKILL.md:106
objectstack-i18n/evals/bundles-locales-coverage.json  eval 2  supportedLocales  →  skills/objectstack-i18n/SKILL.md:36
objectstack-i18n/evals/bundles-locales-coverage.json  eval 2  ja-JP  →  skills/objectstack-i18n/SKILL.md:36
objectstack-i18n/evals/bundles-locales-coverage.json  eval 2  os i18n extract  →  skills/objectstack-i18n/SKILL.md:285
objectstack-i18n/evals/bundles-locales-coverage.json  eval 2  fallbackLocale  →  skills/objectstack-i18n/SKILL.md:37
objectstack-i18n/evals/bundles-locales-coverage.json  eval 3  translation  →  skills/objectstack-i18n/SKILL.md:4
objectstack-i18n/evals/bundles-locales-coverage.json  eval 3  locale  →  skills/objectstack-i18n/SKILL.md:5
objectstack-i18n/evals/bundles-locales-coverage.json  eval 3  objects  →  skills/objectstack-i18n/SKILL.md:53
objectstack-i18n/evals/bundles-locales-coverage.json  eval 3  defineTranslation  →  skills/objectstack-i18n/SKILL.md:226
objectstack-i18n/evals/bundles-locales-coverage.json  eval 4  defineTranslationBundle  →  skills/objectstack-i18n/SKILL.md:56
objectstack-i18n/evals/bundles-locales-coverage.json  eval 4  withSourceFallback  →  skills/objectstack-i18n/SKILL.md:415
objectstack-i18n/evals/bundles-locales-coverage.json  eval 4  loadTranslations  →  skills/objectstack-i18n/SKILL.md:347
objectstack-i18n/evals/bundles-locales-coverage.json  eval 4  kernel:ready  →  skills/objectstack-i18n/SKILL.md:432
objectstack-i18n/evals/bundles-locales-coverage.json  eval 5  --no-objects-only  →  skills/objectstack-i18n/SKILL.md:388
objectstack-i18n/evals/bundles-locales-coverage.json  eval 5  os i18n check  →  skills/objectstack-i18n/SKILL.md:268
objectstack-i18n/evals/bundles-locales-coverage.json  eval 5  apps  →  skills/objectstack-i18n/SKILL.md:100
objectstack-i18n/evals/bundles-locales-coverage.json  eval 5  --strict  →  skills/objectstack-i18n/SKILL.md:275
objectstack-platform/evals/config-plugins-ops.json  eval 1  defineStack  →  skills/objectstack-platform/SKILL.md:5
objectstack-platform/evals/config-plugins-ops.json  eval 1  manifest  →  skills/objectstack-platform/SKILL.md:47
objectstack-platform/evals/config-plugins-ops.json  eval 1  engines  →  skills/objectstack-platform/SKILL.md:212
objectstack-platform/evals/config-plugins-ops.json  eval 1  Object.values(  →  skills/objectstack-platform/SKILL.md:152
objectstack-platform/evals/config-plugins-ops.json  eval 2  registerService  →  skills/objectstack-platform/SKILL.md:748
objectstack-platform/evals/config-plugins-ops.json  eval 2  ctx.hook(  →  skills/objectstack-platform/SKILL.md:766
objectstack-platform/evals/config-plugins-ops.json  eval 2  metadata:reloaded  →  skills/objectstack-platform/SKILL.md:771
objectstack-platform/evals/config-plugins-ops.json  eval 2  init(  →  skills/objectstack-platform/SKILL.md:728
objectstack-platform/evals/config-plugins-ops.json  eval 2  destroy  →  skills/objectstack-platform/SKILL.md:656
objectstack-platform/evals/config-plugins-ops.json  eval 3  requires  →  skills/objectstack-platform/SKILL.md:6
objectstack-platform/evals/config-plugins-ops.json  eval 3  job  →  skills/objectstack-platform/SKILL.md:445
objectstack-platform/evals/config-plugins-ops.json  eval 3  messaging  →  skills/objectstack-platform/SKILL.md:445
objectstack-platform/evals/config-plugins-ops.json  eval 3  triggers  →  skills/objectstack-platform/SKILL.md:450
objectstack-platform/evals/config-plugins-ops.json  eval 4  createHonoApp  →  skills/objectstack-platform/SKILL.md:366
objectstack-platform/evals/config-plugins-ops.json  eval 4  @objectstack/hono  →  skills/objectstack-platform/SKILL.md:366
objectstack-platform/evals/config-plugins-ops.json  eval 4  LiteKernel  →  skills/objectstack-platform/SKILL.md:9
objectstack-platform/evals/config-plugins-ops.json  eval 5  os migrate plan  →  skills/objectstack-platform/SKILL.md:578
objectstack-platform/evals/config-plugins-ops.json  eval 5  os migrate apply  →  skills/objectstack-platform/SKILL.md:579
objectstack-platform/evals/config-plugins-ops.json  eval 5  os validate  →  skills/objectstack-platform/SKILL.md:576
objectstack-platform/evals/config-plugins-ops.json  eval 5  os lint  →  skills/objectstack-platform/SKILL.md:225
objectstack-platform/evals/config-plugins-ops.json  eval 6  os start  →  skills/objectstack-platform/SKILL.md:341
objectstack-platform/evals/config-plugins-ops.json  eval 6  PORT  →  skills/objectstack-platform/SKILL.md:580
objectstack-platform/evals/config-plugins-ops.json  eval 6  OS_TRUSTED_ORIGINS  →  skills/objectstack-platform/SKILL.md:1095
objectstack-platform/evals/config-plugins-ops.json  eval 6  driver-sql  →  skills/objectstack-platform/SKILL.md:334
objectstack-query/evals/filters-pagination-search.json  eval 1  engine.find('account'  →  skills/objectstack-query/SKILL.md:349
objectstack-query/evals/filters-pagination-search.json  eval 1  $in  →  skills/objectstack-query/SKILL.md:121
objectstack-query/evals/filters-pagination-search.json  eval 1  $icontains  →  skills/objectstack-query/SKILL.md:138
objectstack-query/evals/filters-pagination-search.json  eval 1  orderBy  →  skills/objectstack-query/SKILL.md:25
objectstack-query/evals/filters-pagination-search.json  eval 2  orderBy  →  skills/objectstack-query/SKILL.md:25
objectstack-query/evals/filters-pagination-search.json  eval 2  limit  →  skills/objectstack-query/SKILL.md:25
objectstack-query/evals/filters-pagination-search.json  eval 2  $lt  →  skills/objectstack-query/SKILL.md:109
objectstack-query/evals/filters-pagination-search.json  eval 2  keyset  →  skills/objectstack-query/SKILL.md:73
objectstack-query/evals/filters-pagination-search.json  eval 3  engine.aggregate(  →  skills/objectstack-query/SKILL.md:26
objectstack-query/evals/filters-pagination-search.json  eval 3  groupBy  →  skills/objectstack-query/SKILL.md:26
objectstack-query/evals/filters-pagination-search.json  eval 3  aggregations  →  skills/objectstack-query/SKILL.md:26
objectstack-query/evals/filters-pagination-search.json  eval 3  count_distinct  →  skills/objectstack-query/SKILL.md:77
objectstack-query/evals/filters-pagination-search.json  eval 3  alias  →  skills/objectstack-query/SKILL.md:244
objectstack-query/evals/filters-pagination-search.json  eval 4  searchFields  →  skills/objectstack-query/SKILL.md:25
objectstack-query/evals/filters-pagination-search.json  eval 4  expand  →  skills/objectstack-query/SKILL.md:25
objectstack-query/evals/filters-pagination-search.json  eval 4  fields  →  skills/objectstack-query/SKILL.md:7
objectstack-query/evals/filters-pagination-search.json  eval 4  stored  →  skills/objectstack-query/SKILL.md:78
objectstack-query/evals/filters-pagination-search.json  eval 5  context  →  skills/objectstack-query/SKILL.md:25
objectstack-query/evals/filters-pagination-search.json  eval 5  isSystem: true  →  skills/objectstack-query/SKILL.md:59
objectstack-query/evals/filters-pagination-search.json  eval 5  limit: 1  →  skills/objectstack-query/SKILL.md:60
objectstack-ui/evals/analytics-inline-vs-dataset.json  eval 1  defineDataset  →  skills/objectstack-ui/rules/dashboards.md:99
objectstack-ui/evals/analytics-inline-vs-dataset.json  eval 1  dataset  →  skills/objectstack-ui/SKILL.md:9
objectstack-ui/evals/analytics-inline-vs-dataset.json  eval 1  dimensions  →  skills/objectstack-ui/SKILL.md:211
objectstack-ui/evals/analytics-inline-vs-dataset.json  eval 1  values  →  skills/objectstack-ui/SKILL.md:95
objectstack-ui/evals/analytics-inline-vs-dataset.json  eval 2  window  →  skills/objectstack-ui/rules/dashboards.md:67
objectstack-ui/evals/analytics-inline-vs-dataset.json  eval 2  Cube  →  skills/objectstack-ui/rules/dashboards.md:72
objectstack-ui/evals/analytics-inline-vs-dataset.json  eval 3  rollup  →  skills/objectstack-ui/rules/dashboards.md:62
objectstack-ui/evals/analytics-inline-vs-dataset.json  eval 3  to-many  →  skills/objectstack-ui/rules/dashboards.md:62
objectstack-ui/evals/analytics-inline-vs-dataset.json  eval 4  filterBindings  →  skills/objectstack-ui/rules/dashboards.md:92
objectstack-ui/evals/analytics-inline-vs-dataset.json  eval 5  ObjectChart  →  skills/objectstack-ui/rules/dashboards.md:101
objectstack-ui/evals/analytics-inline-vs-dataset.json  eval 5  aggregate  →  skills/objectstack-ui/rules/dashboards.md:34
objectstack-ui/evals/analytics-inline-vs-dataset.json  eval 5  groupBy  →  skills/objectstack-ui/rules/dashboards.md:110
objectstack-ui/evals/views-apps-actions-pages.json  eval 1  defineView  →  skills/objectstack-ui/SKILL.md:148
objectstack-ui/evals/views-apps-actions-pages.json  eval 1  provider: 'object'  →  skills/objectstack-ui/rules/list-views.md:15
objectstack-ui/evals/views-apps-actions-pages.json  eval 1  listViews  →  skills/objectstack-ui/SKILL.md:206
objectstack-ui/evals/views-apps-actions-pages.json  eval 1  groupByField  →  skills/objectstack-ui/rules/list-views.md:267
objectstack-ui/evals/views-apps-actions-pages.json  eval 1  link: true  →  skills/objectstack-ui/SKILL.md:266
objectstack-ui/evals/views-apps-actions-pages.json  eval 1  {current_user_id}  →  skills/objectstack-ui/SKILL.md:223
objectstack-ui/evals/views-apps-actions-pages.json  eval 2  App.create  →  skills/objectstack-ui/SKILL.md:149
objectstack-ui/evals/views-apps-actions-pages.json  eval 2  navigation  →  skills/objectstack-ui/SKILL.md:5
objectstack-ui/evals/views-apps-actions-pages.json  eval 2  objectName  →  skills/objectstack-ui/SKILL.md:171
objectstack-ui/evals/views-apps-actions-pages.json  eval 2  viewName  →  skills/objectstack-ui/SKILL.md:171
objectstack-ui/evals/views-apps-actions-pages.json  eval 2  filters  →  skills/objectstack-ui/SKILL.md:150
objectstack-ui/evals/views-apps-actions-pages.json  eval 2  requiresObject  →  skills/objectstack-ui/SKILL.md:180
objectstack-ui/evals/views-apps-actions-pages.json  eval 2  requiredPermissions  →  skills/objectstack-ui/SKILL.md:164
objectstack-ui/evals/views-apps-actions-pages.json  eval 3  defineAction  →  skills/objectstack-ui/rules/actions.md:31
objectstack-ui/evals/views-apps-actions-pages.json  eval 3  locations  →  skills/objectstack-ui/SKILL.md:152
objectstack-ui/evals/views-apps-actions-pages.json  eval 3  record_header  →  skills/objectstack-ui/rules/actions.md:9
objectstack-ui/evals/views-apps-actions-pages.json  eval 3  list_toolbar  →  skills/objectstack-ui/rules/actions.md:14
objectstack-ui/evals/views-apps-actions-pages.json  eval 3  visible  →  skills/objectstack-ui/SKILL.md:263
objectstack-ui/evals/views-apps-actions-pages.json  eval 3  successMessage  →  skills/objectstack-ui/rules/actions.md:21
objectstack-ui/evals/views-apps-actions-pages.json  eval 3  selectedIds  →  skills/objectstack-ui/rules/actions.md:14
objectstack-ui/evals/views-apps-actions-pages.json  eval 4  definePage  →  skills/objectstack-ui/rules/navigation.md:102
objectstack-ui/evals/views-apps-actions-pages.json  eval 4  type: 'record'  →  skills/objectstack-ui/rules/pages.md:25
objectstack-ui/evals/views-apps-actions-pages.json  eval 4  regions  →  skills/objectstack-ui/SKILL.md:151
objectstack-ui/evals/views-apps-actions-pages.json  eval 4  page:header  →  skills/objectstack-ui/SKILL.md:212
objectstack-ui/evals/views-apps-actions-pages.json  eval 4  record:path  →  skills/objectstack-ui/rules/pages.md:50
objectstack-ui/evals/views-apps-actions-pages.json  eval 4  src/docs/  →  skills/objectstack-ui/SKILL.md:7
objectstack-ui/evals/views-apps-actions-pages.json  eval 4  /docs/  →  skills/objectstack-ui/SKILL.md:7
objectstack-ui/evals/views-apps-actions-pages.json  eval 5  definePage  →  skills/objectstack-ui/rules/navigation.md:102
objectstack-ui/evals/views-apps-actions-pages.json  eval 5  interfaceConfig  →  skills/objectstack-ui/rules/list-views.md:146
objectstack-ui/evals/views-apps-actions-pages.json  eval 5  columns  →  skills/objectstack-ui/SKILL.md:41
objectstack-ui/evals/views-apps-actions-pages.json  eval 5  allowedVisualizations  →  skills/objectstack-ui/rules/list-views.md:127
objectstack-ui/evals/views-apps-actions-pages.json  eval 5  summary  →  skills/objectstack-ui/SKILL.md:95
objectstack-ui/evals/views-apps-actions-pages.json  eval 5  dataset  →  skills/objectstack-ui/SKILL.md:9
objectstack-ui/evals/views-apps-actions-pages.json  eval 6  type: 'wizard'  →  skills/objectstack-ui/SKILL.md:14
objectstack-ui/evals/views-apps-actions-pages.json  eval 6  inlineEdit  →  skills/objectstack-ui/SKILL.md:64
objectstack-ui/evals/views-apps-actions-pages.json  eval 6  formViews  →  skills/objectstack-ui/SKILL.md:14
objectstack-ui/evals/views-apps-actions-pages.json  eval 6  master_detail  →  skills/objectstack-ui/SKILL.md:65
objectstack-upgrade/evals/protocol-major-upgrade.json  eval 1  os migrate meta --from 16  →  skills/objectstack-upgrade/SKILL.md:64
objectstack-upgrade/evals/protocol-major-upgrade.json  eval 1  --out  →  skills/objectstack-upgrade/SKILL.md:62
objectstack-upgrade/evals/protocol-major-upgrade.json  eval 1  tsc --noEmit  →  skills/objectstack-upgrade/SKILL.md:73
objectstack-upgrade/evals/protocol-major-upgrade.json  eval 1  REPORT.md  →  skills/objectstack-upgrade/SKILL.md:75
objectstack-upgrade/evals/protocol-major-upgrade.json  eval 1  applied  →  skills/objectstack-upgrade/SKILL.md:74
objectstack-upgrade/evals/protocol-major-upgrade.json  eval 2  requiredWhen  →  skills/objectstack-upgrade/SKILL.md:551
objectstack-upgrade/evals/protocol-major-upgrade.json  eval 2  os migrate meta  →  skills/objectstack-upgrade/SKILL.md:64
objectstack-upgrade/evals/protocol-major-upgrade.json  eval 2  conversionId  →  skills/objectstack-upgrade/SKILL.md:50
objectstack-upgrade/evals/protocol-major-upgrade.json  eval 2  tsc --noEmit  →  skills/objectstack-upgrade/SKILL.md:73
objectstack-upgrade/evals/protocol-major-upgrade.json  eval 3  AWAITING DECISION  →  skills/objectstack-upgrade/SKILL.md:338
objectstack-upgrade/evals/protocol-major-upgrade.json  eval 3  owner  →  skills/objectstack-upgrade/SKILL.md:7
objectstack-upgrade/evals/protocol-major-upgrade.json  eval 3  never executed  →  skills/objectstack-upgrade/SKILL.md:298
objectstack-upgrade/evals/protocol-major-upgrade.json  eval 3  transform  →  skills/objectstack-upgrade/SKILL.md:239
objectstack-upgrade/evals/protocol-major-upgrade.json  eval 4  applied  →  skills/objectstack-upgrade/SKILL.md:74
objectstack-upgrade/evals/protocol-major-upgrade.json  eval 4  --stored  →  skills/objectstack-upgrade/SKILL.md:179
objectstack-upgrade/evals/protocol-major-upgrade.json  eval 4  --yes  →  skills/objectstack-upgrade/SKILL.md:181
objectstack-upgrade/evals/protocol-major-upgrade.json  eval 4  field-required-notnull-explicit  →  skills/objectstack-upgrade/SKILL.md:431
objectstack-upgrade/evals/protocol-major-upgrade.json  eval 4  applyConversionsToStoredItem  →  skills/objectstack-upgrade/SKILL.md:169
```

---
_Generated by [Claude
Code](https://claude.ai/code/session_0129ZpnaBcYZZ51rCvQiXg6C)_

---
_Generated by [Claude Code](https://claude.ai/code)_

---------

Co-authored-by: Claude <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentation Improvements or additions to documentation size/xs skip-changeset PR has no user-facing published change; bypasses the changeset gate

Projects

None yet

2 participants