From 39da552e61a526f10a5951e3cf4d6d07ac78710a Mon Sep 17 00:00:00 2001 From: Claude Date: Thu, 3 Sep 2026 01:56:18 +0000 Subject: [PATCH] docs(skills): correct two false claims and add three routing bullets in skills/README.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Settle `skills/README.md`'s CEL conventions and cross-skill routing list against source. 1. `:87` — "Legacy `OLD` / `NEW` evaluate to `null` since M9.5" was false in both halves. `M9.5` is anchored nowhere in the repo, and `OLD` / `NEW` are not values that evaluate to `null`: they are undeclared identifiers. `SCOPE_ROOTS` (packages/formula/src/cel-engine.ts:95) is the published closed set of record-scope roots and contains neither, so `firstUndeclaredReference` (:186) reports them as bare undeclared references — the class `@objectstack/lint` raises as an error, not a silent null. Replaced with the true clause plus the migration objectstack- formula's own table prescribes (`OLD.x` -> `previous.x`, `NEW.x` -> `record.x`). 2. `:105` — "AI tool params" is not a CEL site. `packages/spec/src/ai/tool.zod.ts` carries no expression field of any kind, and the AI domain's only expression site is `model-registry.zod.ts:121-122`, which is `TemplateExpressionInputSchema` — the `template` dialect (`{{var}}` interpolation), not CEL. Dropped the item; no true replacement exists, because the AI domain has no CEL predicate. 3. `:94-110` — three routing bullets added for measured load-failure modes: labels to objectstack-i18n, protocol-major moves to objectstack-upgrade, and the consuming UI to the objectui skills catalog. Items 1-2 net exactly zero bytes; item 3 costs 75 tokens, at the size ruling. The generated region and the anatomy tree are untouched. Co-Authored-By: Claude Fable 5.1 Claude-Session: https://claude.ai/code/session_01LraLgQVGq8egUwfYZpbYt1 --- skills/README.md | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/skills/README.md b/skills/README.md index e4f9f45fd1..72afcf31b7 100644 --- a/skills/README.md +++ b/skills/README.md @@ -84,7 +84,8 @@ carries `SKILL.md` alone — `gen:skill-refs` only visits skills listed in its - **Short object names** (`account`, `task`); no `namespace`, no `tableName`. - **CEL for all expressions** — predicates, conditions, schedules. Use the `F\`\``, `P\`\``, `cel\`\``, `cron\`\``, `tmpl\`\`` tagged templates from - `@objectstack/spec`. Legacy `OLD` / `NEW` evaluate to `null` since M9.5. + `@objectstack/spec`. Legacy `OLD` / `NEW` are not CEL — use + `previous.` / `record.`. - **v5.0 vocabulary** — runtime workspace is `environment`, not `project`. - **Singular metadata type names** (`agent`, `view`, `flow`, …); REST resource collections are plural (`/api/v1/ai/agents`). @@ -102,10 +103,14 @@ A few common decision points where the right skill isn't obvious: **automation** (screen flows). Static record / list / dashboard surfaces are **ui**. - **Any CEL expression** — load **objectstack-formula** alongside the host - skill (data validations, automation guards, UI visibility, AI tool params). + skill (data validations, automation guards, UI visibility). - **Kernel / plugin events vs. data lifecycle** — `PluginContext` lifecycle and `EventBus` belong to **objectstack-platform**; record-level hooks belong to **objectstack-data**. +- **Labels vs. bundles** — a `label` you want translated is **objectstack-i18n**. +- **Upgrade vs. platform** — a protocol-major move is **objectstack-upgrade**. +- **Rendering this metadata** — the consuming UI is + [objectui `skills/objectui/`](https://github.com/objectstack-ai/objectui). ---