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

@os-zhuang
os-zhuang marked this pull request as ready for review September 28, 2026 08:53
@os-zhuang
os-zhuang added this pull request to the merge queue Sep 28, 2026
Merged via the queue into main with commit 789b2ae Sep 28, 2026
44 checks passed
@os-zhuang
os-zhuang deleted the claude/issue-20385-platform-skill-blank-starter branch September 28, 2026 09:13
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