Skip to content

docs(skills): platform skill describes the blank starter as shipped — requires automation+triggers, seven barrels via exportsOf - #20410

Merged
os-zhuang merged 1 commit into
mainfrom
claude/issue-20385-platform-skill-blank-starter
Sep 28, 2026
Merged

os-zhuang merged 1 commit into
mainfrom
claude/issue-20385-platform-skill-blank-starter

Conversation

@objectstack-fleet

Copy link
Copy Markdown
Contributor

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

… 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>
@github-actions github-actions Bot added size/s documentation Improvements or additions to documentation labels Sep 28, 2026
@objectstack-fleet objectstack-fleet Bot added the skip-changeset PR has no user-facing published change; bypasses the changeset gate label Sep 28, 2026
@objectstack-fleet

Copy link
Copy Markdown
Contributor Author

Contract review

Served-tier: CONTRACT_REVIEW_TIER
Head-sha: 7ac5e9f4
Local-runs: none

Face: skills/** (objectstack-platform/SKILL.md, shipped to customer projects by npx skills add; governed, Tier H — check-governed-merges --pr 20410: GOVERNED). Reviewed in-seat at tier by the dispatching seat, on the diff (one file, +11 / −9, one commit), the card, the shipped template on origin/main and the head's check-runs.

① Derived judgments

  • 〈The Template〉 now states the blank starter as packages/create-objectstack/src/templates/blank/objectstack.config.ts ships it at df3ba164 / c577e666: requires: ['automation', 'triggers'] (:51), the three generic connector executors in plugins: (:61–:65, the seat re-read them), and the seven generator barrels (objects, views, actions, flows, dashboards, apps, skills), each src/*/index.ts handed to the stack key of its name through exportsOf (:73–:79), with one pointer to the scaffolded AGENTS.md for how to add to them — no second spelling of that file's rule, as the order required. The memory-driver / Hono sentence stays. Correct against the source of truth.
  • The sentence-by-sentence audit (execution note) holds: the requires: table already carried a triggers row; the 「keep automation with a connector」 and 「pair triggers with job」 rules stay stated where the skill states them (the seat grepped the branch), so the table row dropping its restatement of the pair-with-job clause loses no fact; the tree note, the naming row and references/bootstrap.md § Scaffolding Command are still true and untouched.
  • Payment of the token ceiling: 5831 → 5829 tokens (23313 bytes; ceiling 5833, headroom 2 → 4), inside the file: the retired-templates paragraph compressed to the one fact an author needs (the five names are refused by name — the CLI prints the refusal itself), 「works offline」 folded into 「no network fetch」, the table row's duplicated clause dropped. No fact about the starter removed; nothing moved to another file; no ceiling raised.
  • Reach: published skill text only; no template, schema or runtime change; no issue or PR number in the skill text; check:doc-authoring 53 published files clean; the skill-reading test files (template-consistency, skill-catalog-sync, meta-state-route-doc-spelling, the four spec scripts) passed under the verify lock. Derived gates 25 / 25 run, a DERIVED zero.

② Semver level

skills/** only, in no workspace files[] (the dev's phrase probe: 0 hits across create-objectstack's files[] paths and the five dist trees present; positive control exportsOf 2 hits) ⇒ no changeset; skip-changeset correct; consistent with Clause-②: no.

③ Boundary flags

No open_questions. Deviations accepted: the prerequisite build for check:doc-formula-expressions under the verify lock (3 then 0); the attribution form per AGENTS.md. Three observations recorded in the PR's Acceptance notes, carrier none, none a class: the 〈Project Structure Conventions〉 tree lists no src/skills/ while the starter now ships one; the naming row spells the hand-off as Object.values(imported) where the starter spells exportsOf(barrel) (both true); the separate skills-install step does fetch while the template itself does not. No flag remains open.

Implemented-by: claude/issue-20385-platform-skill-blank-starter
Reviewed-by: session_01MjvgiFAmjHqsxy1XLiVYfH

VERDICT: PASS


Generated by Claude Code

@objectstack-fleet

Copy link
Copy Markdown
Contributor Author

维护者速读(终稿)— PR #20410

改了什么:skills/objectstack-platform/SKILL.md 〈The Template〉那条描述 blank starter 的句子改成模板现在真正的样子:requires: ['automation', 'triggers']、plugins: 里三个通用连接器执行器、七个生成器 barrel(objects / views / actions / flows / dashboards / apps / skills)各自经 exportsOf 接到同名 stack 键,并一句指向脚手架里的 AGENTS.md 说怎么往里加东西;内存驱动与 Hono 服务不在文件里、CLI 启动时自动注册的那句保留。顺带把已退役的五个远程模板那段压成一句「按名请求会被拒」,requires: 表里 triggers 行去掉重复的「要配 job」半句(该规则仍在下文的规则条里)。

为什么改:PR #20363 落地后 blank 模板变了,而 published skill 还在教旧样子——照它写 starter 会漏掉 triggers 和 barrel 接线(优先级规则 4:写给 AI 的 skills 说错一句等于产品缺陷)。

风险与代价(含回滚):纯文本,不改模板与代码;token 上限 5833、余量从 2 变 4,没抬上限、没挪内容;回滚 = revert 本 PR。25 个派生门禁全绿,读 skills 目录的那几组测试(模板一致性、skill 目录同步等)在锁下跑过全过。

席位意见:已对照 origin/main 上的模板配置逐项核过(:51、:61–:65、:73–:79),新句子与之一致;dev 逐句审了技能里其它描述 starter 的句子(requires: 表本来就有 triggers 行、连接器要配 automation、triggers 要配 job 都还在),删的只是重复。三条顺路观察(项目结构约定树没列 src/skills/、命名行的 Object.values 拼法、skills 安装步骤会联网)记在 PR 的 Acceptance notes,都不是缺陷,未立卡。契约复核记录 PASS 在本 PR 上。建议批准。

你要做的:在本 PR 上 Approve。之后由本席清标、翻 ready、挂 auto-merge 走队列落地。


Generated by Claude Code

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/s skip-changeset PR has no user-facing published change; bypasses the changeset gate

Projects

None yet

2 participants