Skip to content

Commit 789b2ae

Browse files
objectstack-fleet[bot]os-steveclaude
authored
docs(skills): platform skill describes the blank starter as shipped — requires automation+triggers, seven barrels via exportsOf (#20410)
Fixes #20385 Clause-②: no ## What was false, and what the skill now says `skills/objectstack-platform/SKILL.md` 〈The Template〉 said the blank starter declares `requires: ['automation']` and said nothing about the barrel wiring. Read on the branch base `df3ba164` (`origin/main` at claim time), `packages/create-objectstack/src/templates/blank/objectstack.config.ts` declares `requires: ['automation', 'triggers']` (line 51), keeps the three generic connector executors in `plugins:` (lines 61–65: `ConnectorRestPlugin`, `ConnectorOpenApiPlugin`, `ConnectorMcpPlugin`), and hands all seven generator barrels (`objects`, `views`, `actions`, `flows`, `dashboards`, `apps`, `skills`) to the stack key of the same name through `exportsOf` (lines 73–79; six of the barrels are `export {};`). #20363 landed the template change; the card behind it, #20333, is not addressed here. The bullet now states those facts and points at the scaffolded `AGENTS.md` for how to add to the barrels — one pointer, not a second spelling of its rule (the claim's judgement). The pointer names the file without a rule number so a later renumbering of that list cannot make the skill stale again. ## Sentence-by-sentence audit of the starter's description (the execution note) | Where (line on the base) | Sentence | Verdict | |:--|:--|:--| | 192–194, 〈The Template〉 | `requires: ['automation']` plus the three connector executors | FALSE on `requires` (no `triggers`) and SILENT on the seven barrels → rewritten | | same bullet | "the three generic connector executors in `plugins:`" | TRUE (lines 61–65 of the template) → kept | | same bullet | "The memory driver and the Hono server are NOT in the file — the CLI auto-registers both at boot" | TRUE (no driver or server plugin in the file) → kept | | 357–366, `requires:` table | `triggers` row | already present (`@objectstack/trigger-record-change`, plus `trigger-schedule` and `trigger-api`) → no row added; its bold "Pair it with `job`" clause restated rule 5 under the same table → dropped from the row, rule 5 keeps it in full | | 399, the five rules | "Keep `automation` whenever `plugins:` lists a connector" | TRUE for the starter → unchanged | | 401, the five rules | "Pair `triggers` with `job`" | TRUE → unchanged, now the one spelling | | 225, the directory tree | `flows/ # Optional: automation flows` | a project convention, not the starter → unchanged | | 245, naming table | `Object.values(imported)` | still true — `exportsOf` is a typed `Object.values` → unchanged | | `references/bootstrap.md` § Scaffolding Command | "blank is the default, and the only, template" | TRUE → unchanged | ## Paying the skills token ratchet (headroom 2 → 4) Net content added by the rewritten bullet is paid by deleting redundancy in the same file, nothing moved elsewhere and the ceiling untouched: - The retired-templates paragraph (four lines) is one sentence. The CLI already prints `Template "NAME" has been retired and is no longer available.` when one is asked for by name (`packages/create-objectstack/src/index.ts`, line 414), so the skill needs the fact, not the marketplace history. - The `triggers` table row drops the "Pair it with `job` — schedule and time-relative triggers run on the job service" clause; rule 5 directly under the table says the same thing with its consequence, and every other row in that table lists providers only. - "works offline, no network fetch" → "no network fetch" (one claim, said once). ## Readings ### line_budget | Scope | before | after | |:--|--:|--:| | file lines (`skills/objectstack-platform/SKILL.md`) | 487 | 489 | | file bytes | 23321 | 23313 | | file tokens (ratchet, ceil bytes/4) — ceiling 5833 | 5831 (headroom 2) | 5829 (headroom 4) | | package: lines over every `skills/**/SKILL.md` (10 files) | 4402 | 4404 | | package: authored bundle tokens (ratchet total / ceiling) | 143456 / 154938 | 143454 / 154938 | | package: bundle total tokens (whole shipped tree) | 153970 | 153968 | ### gates Derived with `node scripts/pm/dispatch-gates.mjs --repo objectstack-ai/objectstack --commands` at `7ac5e9f4` (1 path vs merge base `df3ba164`; 25 commands). Every exit code captured before any pipe (`cmd > log 2>&1; EXIT=$?`). `--ran` reconciliation with exit codes: 25 derived, 25 run, 0 NOT-MEASURED, 0 UNRUN. | Command | exit | verdict line | |:--|--:|:--| | `node scripts/check-ci-filter-parity.mjs` | 0 | pass | | `node scripts/check-closing-keyword-parity.mjs` | 0 | pass | | `node scripts/check-closing-keyword-parity.mjs --self-test` | 0 | pass | | `node scripts/check-comment-mask-corpus.mjs` | 0 | pass | | `node scripts/check-doc-route-spelling.mjs --advisory` | 0 | pass | | `node scripts/check-doc-route-spelling.mjs --self-test` | 0 | pass | | `node scripts/check-skills-token-ratchet.mjs` | 0 | `skills/objectstack-platform/SKILL.md is 5829 tokens (ceiling 5833; headroom 4)` · `54 authored bundle file(s) within their ceilings` | | `node scripts/check-skills-token-ratchet.mjs --self-test` | 0 | pass | | `pnpm --filter @objectstack/lint run check:doc-formula-expressions` | 3 then 0 | first run: PREREQUISITE NOT MET (`@objectstack/formula` and `@objectstack/lint` not built — nothing measured); built both under the verify lock (`turbo run build --filter=@objectstack/formula --filter=@objectstack/lint --concurrency=2`, VERDICT command-exit 0); re-run: `22 record-scoped formula example(s) across 456 files / 1383 TS blocks judged clean` | | `pnpm --filter @objectstack/spec run check:skill-docs` | 0 | `Skill docs in sync` | | `pnpm check:agent-test-spelling` | 0 | pass | | `pnpm check:corpus-claim-drift` | 0 | pass | | `pnpm check:cross-package-test-inputs` | 0 | pass | | `pnpm check:doc-authoring` | 0 | `53 published skill files clean — no internal issue-id references` | | `pnpm check:driver-memory-census` | 0 | pass | | `pnpm check:gitlink-declared` | 0 | pass | | `pnpm check:nul-bytes` | 0 | `OK (scanned 9892 text file(s) … no raw ASCII control bytes)` | | `pnpm check:pm-governed-merges` | 0 | self-test, 454 assertions (what CI runs for this family) | | `pnpm check:refd-timer-probe` | 0 | pass | | `pnpm check:role-word` | 0 | pass | | `pnpm check:skill-compatibility` | 0 | pass | | `pnpm check:skill-frame-sync` | 0 | pass | | `pnpm check:skill-identifier-liveness` | 0 | pass | | `pnpm check:skill-top-level-keys` | 0 | pass | | `pnpm check:watch-hint-literal` | 0 | pass | Also run outside the derivation: `grep -naP '[\x00-\x08\x0b\x0c\x0e-\x1f\x7f]' skills/objectstack-platform/SKILL.md` → no match. ### tests `Test Core` is path-scheduled by `skills/**`. The diff touches no package, so no dependency closure (①) and no package suite (②) is owed; run locally instead are the test files whose code reads the `skills/` root (the only tests a prose change here can move), under the verify lock (VERDICT command-exit 0, held 33s, waited 0s), each invocation checked for a non-zero file count: | Command | exit | result | |:--|--:|:--| | `pnpm --filter create-objectstack exec vitest run --maxWorkers=2 src/template-consistency.test.ts` | 0 | 1 file, 37 tests passed | | `pnpm --filter @objectstack/formula exec vitest run --maxWorkers=2 src/skill-catalog-sync.test.ts` | 0 | 1 file, 1 test passed | | `pnpm --filter @objectstack/rest exec vitest run --maxWorkers=2 src/meta-state-route-doc-spelling.test.ts` | 0 | 1 file, 8 tests passed | | `pnpm --filter @objectstack/spec exec vitest run --maxWorkers=2 scripts/dist-freshness-adoption.test.ts scripts/export-list.test.ts scripts/query-pointer-row.test.ts scripts/solution-blueprint-header-row.test.ts` | 0 | 4 files, 26 tests passed | NOT MEASURED, declared to CI: the full `Test Core` shards; `packages/cli/test/generate-skill.e2e.test.ts` (integration tier — it spawns the CLI; the diff touches no spawn entry); the four type-check lanes (no TypeScript touched); shard attestation and test-completeness (values exist only in a CI run); the 55 artifact-roster, 11 wide-population and 14 pending-changeset families the derivation lists outside its runnable total. ### changeset `skip-changeset`. No published package's `files[]` names `skills/**` (read over every `packages/**/package.json`: zero); the catalog reaches customers by `npx skills add objectstack-ai/objectstack/skills` from this repository (`packages/create-objectstack/src/skills-install.ts`, line 62), not from an npm tarball. Measured after building `create-objectstack` (the only package that names the catalog at all): the edited sentence's phrase `generic connector executors in` hits 0 files across its `files[]` paths (`dist`, `README.md`, `CHANGELOG.md`) and 0 files across the 5 `dist/` trees present on disk; positive control `exportsOf` hits 2 files in that same `dist`. ### deviations - None of the derived families was narrowed or skipped. The one exit 3 (`check:doc-formula-expressions`) was a declared prerequisite, cleared by building and re-running; recorded above as 3 then 0. - The commit's attribution trailer is the model-free pair AGENTS.md prescribes (`Claude-Session:` + `Co-authored-by: Claude`), not the harness-suggested model-named form. ### files_changed - `skills/objectstack-platform/SKILL.md` (+11 / −9) ## Acceptance notes (observed, not filed) - `## Project Structure Conventions` (lines 209–232) lists no `src/skills/` directory, while the starter now ships one with its own barrel. That section describes a project convention, not the starter; class: none of a/b/c; carrier: none. - Line 245's naming row spells the barrel hand-off as `Object.values(imported)`; the starter spells it `exportsOf(barrel)`, a typed `Object.values`. Both true; carrier: none. - "Bundled with `create-objectstack` — no network fetch" describes the template itself; the scaffold's separate skills-install step (`npx -y skills add …`) does fetch. Pre-existing claim, shortened here without changing its substance; carrier: none. ## 维护者速读(草稿) **改了什么**:平台技能(`skills/objectstack-platform/SKILL.md`)里描述 `blank` 起步模板的那一段,改成与实际发出的模板一致:`requires` 现在是 `['automation', 'triggers']`,并说明七个目录 barrel(objects/views/actions/flows/dashboards/apps/skills)都已经通过 `exportsOf` 接到同名 stack 键,加一句指向脚手架生成的 `AGENTS.md` 说明怎么往里加东西。为了不超过技能包的 token 上限,同一文件里删了三处重复表述(退役模板段落压成一句、`triggers` 表格行不再重复规则 5、"works offline / no network fetch" 只说一次)。 **为什么改**:技能是 AI 写应用时读的说明书;这句话过时后,AI 按它描述起步项目会漏掉 `triggers`(`objectstack generate flow` 生成的 flow 装不上),也不知道 barrel 已经接好,可能手加 stack 键而不是从 barrel 导出。 **风险与代价(含回滚)**:纯文档改动,不动代码、不动发布包(`skills/**` 不在任何已发布包的 `files[]` 里,已实测);风险只在措辞被误读,已逐句对照模板文件核过并列在上表。回滚:revert 本 PR 的一个 commit 即可,无其它依赖。 **席位意见**: **你要做的**:审阅并 APPROVE 本 PR(`skills/**` 属 Tier H,需要维护者的批准),之后由席位落地。 --- _Generated by [Claude Code](https://claude.ai/code/session_01MjvgiFAmjHqsxy1XLiVYfH)_ Co-authored-by: os-steve <steve@objectstack.ai> Co-authored-by: Claude <noreply@anthropic.com>
1 parent 34ec30d commit 789b2ae

1 file changed

Lines changed: 11 additions & 9 deletions

File tree

‎skills/objectstack-platform/SKILL.md‎

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -188,16 +188,18 @@ what the platform owns.
188188

189189
`blank` is the only template `create-objectstack` offers, and it is the default:
190190

191-
- Bundled with `create-objectstack` — works offline, no network fetch
192-
- One example object, and `requires: ['automation']` plus the three generic
193-
connector executors in `plugins:`. The memory driver and the Hono server are
194-
NOT in the file — the CLI auto-registers both at boot
191+
- Bundled with `create-objectstack` — no network fetch
192+
- One example object; `requires: ['automation', 'triggers']` plus the three
193+
generic connector executors in `plugins:`; and the seven generator barrels
194+
(`objects`, `views`, `actions`, `flows`, `dashboards`, `apps`, `skills`),
195+
each `src/*/index.ts` handed to the stack key of its name through
196+
`exportsOf` — the scaffolded `AGENTS.md` says how to add to them. The
197+
memory driver and the Hono server are NOT in the file — the CLI
198+
auto-registers both at boot
195199
- A clean slate to extend with the metadata this skill describes
196200

197-
The five remote content templates (`todo`, `compliance`, `content`,
198-
`contracts`, `procurement`) are **retired** — delisted from the marketplace and
199-
no longer maintained. Do not recommend them; asking for one by name is refused.
200-
Build domain metadata on top of `blank` instead.
201+
The five retired remote templates (`todo`, `compliance`, `content`,
202+
`contracts`, `procurement`) are refused by name.
201203

202204
→ Moved verbatim to [references/bootstrap.md](./references/bootstrap.md) § Scaffolding Command.
203205

@@ -369,7 +371,7 @@ token through the `CAPABILITY_PROVIDERS` registry in
369371
| `audit` `email` `sharing` `approvals` `webhooks` | `@objectstack/plugin-` + the token |
370372
| `pinyin-search` | `@objectstack/plugin-pinyin-search` |
371373
| `mcp` | `@objectstack/mcp` |
372-
| `triggers` | `@objectstack/trigger-record-change`, plus `trigger-schedule` and `trigger-api`. **Pair it with `job`** — schedule and time-relative triggers run on the job service |
374+
| `triggers` | `@objectstack/trigger-record-change`, plus `trigger-schedule` and `trigger-api` |
373375

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

0 commit comments

Comments
 (0)