docs(skills): platform skill describes the blank starter as shipped — requires automation+triggers, seven barrels via exportsOf - #20410
Conversation
… requires automation+triggers, seven barrels via exportsOf The Template section said the blank starter declares `requires: ['automation']` and did not mention the barrel wiring. The shipped template declares `['automation', 'triggers']` and hands all seven generator barrels to their stack keys through `exportsOf`; the sentence now states both and points at the scaffolded AGENTS.md for how to add to them. Paid the skills token ratchet in the same file: the retired-templates paragraph is one sentence, the `triggers` table row no longer restates rule 5's "pair with job", and "works offline" / "no network fetch" is said once. Claude-Session: https://claude.ai/code/session_01MjvgiFAmjHqsxy1XLiVYfH Co-authored-by: Claude <noreply@anthropic.com>
Contract reviewServed-tier: Face: ① Derived judgments
② Semver level
③ Boundary flagsNo Implemented-by: VERDICT: PASS Generated by Claude Code |
维护者速读(终稿)— PR #20410改了什么: 为什么改:PR #20363 落地后 blank 模板变了,而 published skill 还在教旧样子——照它写 starter 会漏掉 风险与代价(含回滚):纯文本,不改模板与代码;token 上限 5833、余量从 2 变 4,没抬上限、没挪内容;回滚 = revert 本 PR。25 个派生门禁全绿,读 skills 目录的那几组测试(模板一致性、skill 目录同步等)在锁下跑过全过。 席位意见:已对照 你要做的:在本 PR 上 Approve。之后由本席清标、翻 ready、挂 auto-merge 走队列落地。 Generated by Claude Code |
Fixes #20385
Clause-②: no
What was false, and what the skill now says
skills/objectstack-platform/SKILL.md〈The Template〉 said the blank starter declaresrequires: ['automation']and said nothing about the barrel wiring. Read on the branch basedf3ba164(origin/mainat claim time),packages/create-objectstack/src/templates/blank/objectstack.config.tsdeclaresrequires: ['automation', 'triggers'](line 51), keeps the three generic connector executors inplugins:(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 throughexportsOf(lines 73–79; six of the barrels areexport {};). #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.mdfor 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)
requires: ['automation']plus the three connector executorsrequires(notriggers) and SILENT on the seven barrels → rewrittenplugins:"requires:tabletriggersrow@objectstack/trigger-record-change, plustrigger-scheduleandtrigger-api) → no row added; its bold "Pair it withjob" clause restated rule 5 under the same table → dropped from the row, rule 5 keeps it in fullautomationwheneverplugins:lists a connector"triggerswithjob"flows/ # Optional: automation flowsObject.values(imported)exportsOfis a typedObject.values→ unchangedreferences/bootstrap.md§ Scaffolding CommandPaying 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:
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.triggerstable row drops the "Pair it withjob— 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.Readings
line_budget
skills/objectstack-platform/SKILL.md)skills/**/SKILL.md(10 files)gates
Derived with
node scripts/pm/dispatch-gates.mjs --repo objectstack-ai/objectstack --commandsat7ac5e9f4(1 path vs merge basedf3ba164; 25 commands). Every exit code captured before any pipe (cmd > log 2>&1; EXIT=$?).--ranreconciliation with exit codes: 25 derived, 25 run, 0 NOT-MEASURED, 0 UNRUN.node scripts/check-ci-filter-parity.mjsnode scripts/check-closing-keyword-parity.mjsnode scripts/check-closing-keyword-parity.mjs --self-testnode scripts/check-comment-mask-corpus.mjsnode scripts/check-doc-route-spelling.mjs --advisorynode scripts/check-doc-route-spelling.mjs --self-testnode scripts/check-skills-token-ratchet.mjsskills/objectstack-platform/SKILL.md is 5829 tokens (ceiling 5833; headroom 4)·54 authored bundle file(s) within their ceilingsnode scripts/check-skills-token-ratchet.mjs --self-testpnpm --filter @objectstack/lint run check:doc-formula-expressions@objectstack/formulaand@objectstack/lintnot 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 cleanpnpm --filter @objectstack/spec run check:skill-docsSkill docs in syncpnpm check:agent-test-spellingpnpm check:corpus-claim-driftpnpm check:cross-package-test-inputspnpm check:doc-authoring53 published skill files clean — no internal issue-id referencespnpm check:driver-memory-censuspnpm check:gitlink-declaredpnpm check:nul-bytesOK (scanned 9892 text file(s) … no raw ASCII control bytes)pnpm check:pm-governed-mergespnpm check:refd-timer-probepnpm check:role-wordpnpm check:skill-compatibilitypnpm check:skill-frame-syncpnpm check:skill-identifier-livenesspnpm check:skill-top-level-keyspnpm check:watch-hint-literalAlso run outside the derivation:
grep -naP '[\x00-\x08\x0b\x0c\x0e-\x1f\x7f]' skills/objectstack-platform/SKILL.md→ no match.tests
Test Coreis path-scheduled byskills/**. 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 theskills/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:pnpm --filter create-objectstack exec vitest run --maxWorkers=2 src/template-consistency.test.tspnpm --filter @objectstack/formula exec vitest run --maxWorkers=2 src/skill-catalog-sync.test.tspnpm --filter @objectstack/rest exec vitest run --maxWorkers=2 src/meta-state-route-doc-spelling.test.tspnpm --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.tsNOT MEASURED, declared to CI: the full
Test Coreshards;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'sfiles[]namesskills/**(read over everypackages/**/package.json: zero); the catalog reaches customers bynpx skills add objectstack-ai/objectstack/skillsfrom this repository (packages/create-objectstack/src/skills-install.ts, line 62), not from an npm tarball. Measured after buildingcreate-objectstack(the only package that names the catalog at all): the edited sentence's phrasegeneric connector executors inhits 0 files across itsfiles[]paths (dist,README.md,CHANGELOG.md) and 0 files across the 5dist/trees present on disk; positive controlexportsOfhits 2 files in that samedist.deviations
check:doc-formula-expressions) was a declared prerequisite, cleared by building and re-running; recorded above as 3 then 0.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 nosrc/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.Object.values(imported); the starter spells itexportsOf(barrel), a typedObject.values. Both true; carrier: none.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