Member card of the skills catalog optimization program #14292 (maintainer mandate 2026-09-02, verbatim: 「审核所有的 skills,进行全面的优化。」). Filed by the skills lane seat (session session_01LraLgQVGq8egUwfYZpbYt1). Read-only audit at objectstack origin/maina59f78d; 25 findings. Full findings table = audit record: the dev posts audit/objectstack-automation/findings.md (seat scratchpad) verbatim as the first comment at claim time.
Audit summary
SKILL.md 1,001 lines / 12,768 tok (headroom 0) · evals/approvals/test-revise-loop.md 1,329 · evals/README.md 414 · generated 835 — package 15,346; all three ratcheted files at zero headroom. Approvals :296-650 = 5,246 tok = 41% of the file; the highest-density block ("Valid-but-silently-wrong" pitfalls 6–10, :836-951) starts at 84% depth. Real usage: 4 *.flow.ts + the showcase's 24 flows + jobs + webhooks; zero *.trigger.ts. Node-type frequency: notify 20, approval 15, screen 9, update_record/get_record/decision 5, connector_action 4, loop 3, try_catch 2, parallel 2, approval_revise 1 — parallel_gateway/join_gateway/boundary_event0. 14 real patterns; 12 covered; 2 whole defineStack collections (jobs, webhooks) missing. Verdict RESTRUCTURE: wrong control-flow model taught; order inverts value; evals orphaned (grep evals SKILL.md → 0) and inverted (1,329 tok on the least-used node); the generated index misroutes to the ADR-0020-retired state-machine.zod.ts.
Top findings
| # | id | span | proposal | Δtok |
|---|
| 1 | AUTO-H-01 | evals/approvals/test-revise-loop.md:23-65 vs SKILL.md:382-442 | DELETE the eval's Expected-Output fence + restating Mistakes rows; keep Scenario + Criteria | −700 |
| 2 | AUTO-B-04 | evals/README.md:13-43 | planned-structure stub (DEFERRED, #14296 item 2) | −270 |
| 3 | AUTO-C-02 | SKILL.md:596, 600-606 | DELETE hook rows + "There is no ctx.record" — anchor objectstack-data/references/data-hooks.md | −208 |
| 4 | AUTO-B-07 | SKILL.md:971-983 | DELETE — third statement of pitfalls 6 and 10; keep the os validate block | −190 |
| 5 | AUTO-B-03 | SKILL.md:800-812 | DELETE 4 of 5 State-Machine BPs — verbatim restatement of Notes 277-294 | −150 |
| 6 | AUTO-D-01 | SKILL.md:152-164 | REWRITE-AS-CONSTRUCT: "routes / does-not-route" two-cell row | −150 |
| 7 | AUTO-D-06 | SKILL.md:787-798 | DELETE "Flow Design" BPs (generic; #5 dup of :228; #2 wrong) | −137 |
| 8 | AUTO-D-03 | SKILL.md:443-459 | DELETE "Re-homing the old process model" (upgrade-skill territory) | −225 |
| 9 | AUTO-D-05 | SKILL.md:926-941 | REWRITE-AS-CONSTRUCT: keep the functions fence, drop the rationale | −130 |
| 10 | AUTO-D-02 | SKILL.md:404-409 | DELETE ADR-0044 amendment history (stated 3× more) | −115 |
| 11 | AUTO-B-06 | SKILL.md:866-870 | MERGE-INTO 736-782 | −90 |
| 12 | AUTO-D-04 | SKILL.md:895-902 | DELETE spec-17 retirement narration; keep the prescription | −110 |
| 13 | AUTO-D-07 | SKILL.md:826-835 | DELETE pitfalls 1/2/5 (engine-implementer advice, BPMN, dup of :691) | −110 |
| 14 | AUTO-F-01 | :76-77, 79, 791-792, 828-829 | ADDparallel/try_catch/loop-container rows; mark the *_gateway/boundary_event trio as BPMN lowering, not author-facing (control-flow.zod.ts:42-46) | +120 |
| 15 | AUTO-F-02 | SKILL.md:661-676 | REWRITE-AS-CONSTRUCT capability→surface table adding approvals + messaging (notify returns success with skipped: true when messaging is absent — notify-node.ts:313-320) | +40 |
Incidental falsehoods (fix in this flight)
SKILL.md:24-25, :35 — "covers … ETL pipelines" / "designing an ETL pipeline": the L2 ETL layer was removed in spec 17 with no replacement (17.etl-pipeline-layer-retired.ts:7-20); the package declares 17.x and has zero ETL body content. Also the frontmatter/description (AUTO-A-01).SKILL.md:791-792 — "Always handle errors. Add boundary_event nodes": 0 authorings; the showcase's own waiver (coverage.ts:299-300) names try_catch and wait as the author-facing equivalents.
Three funded additions
- Capability → surface table (AUTO-F-02, +40, paid by AUTO-D-06).
- ADR-0031 structured control-flow rows (AUTO-F-01, +120, paid by AUTO-D-06 + AUTO-D-07).
notify config fence (AUTO-E-04, +140, paid by AUTO-D-03 + AUTO-D-05) — the 8 keys actually used (recipients 13, title 10, topic 9, message 8, severity 7, channels 7, sourceObject/sourceId 4, actionUrl), schema io-node-config.zod.ts:179-218, plus one "Valid-but-silently-wrong" line for the messaging-absent silent success.
Flight scope
IMPLEMENT (shrink-only): rows 1, 3–15 and the findings file at HIGH or MED; the three funded additions; falsehoods 1–2 incl. the description; AUTO-A-02/A-03 (add jobs/webhooks and screen-flow routing to the description — paid by same-file deletions); AUTO-B-01/B-02 reorder (free — bring the "Valid-but-silently-wrong" block up); link the eval from SKILL.md.
ANCHOR RULINGS: hooks → objectstack-data/references/data-hooks.md (AUTO-C-02: delete + pointer). The objectstack-query flight points at this package's :157-164 flow-filter rule — keep that section stable. Screen flows vs views: this package owns screen flows; objectstack-ui points here.
DEFER: AUTO-B-04 (eval stub, #14296 item 2); AUTO-B-05 (generator map build-skill-references.ts:120-129 → out-of-scope card for the spec lane: drop state-machine.zod.ts, add builtin-node-config.zod.ts / io-node-config.zod.ts).
Flight constraints (binding)
- ONE draft PR, first line
Fixes #<this card>; governed ⇒ stays draft; review requests are the seat's step. - Token ratchet: no ratcheted file may grow; additions paid by deletions in the SAME file; ⛔ re-wrap is not payment; ⛔ no ceiling raise; ⛔ no new files; ⛔ do not touch the ratchet script.
- ⛔ Never edit another package's files; follow-ups in the PR body. Generated files untouched. Regenerate the README index only if a drift gate requires it (report which).
- Live surface with zero measured usage ⇒ one row pointing at its schema; retired/tombstoned ⇒ delete. A false claim matching a spec
.describe() string ⇒ spec-side twin card. - Gates:
node scripts/check-skills-token-ratchet.mjs, pnpm --filter @objectstack/spec check:skill-examples, pnpm check:skill-compatibility, pnpm check:skill-identifier-liveness, plus node scripts/pm/dispatch-gates.mjs --commands <changed paths>; record the head sha. - PR body: per-item 落点 | before | after keyed by finding id; per-file token delta;
needs:contract-review on both carriers (the control-flow rows and the notify silent-success semantics are contract claims).
Refs: #14292 · #14296 · #13658.
Member card of the skills catalog optimization program #14292 (maintainer mandate 2026-09-02, verbatim: 「审核所有的 skills,进行全面的优化。」). Filed by the skills lane seat (session
session_01LraLgQVGq8egUwfYZpbYt1). Read-only audit at objectstackorigin/maina59f78d; 25 findings. Full findings table = audit record: the dev postsaudit/objectstack-automation/findings.md(seat scratchpad) verbatim as the first comment at claim time.Audit summary
SKILL.md1,001 lines / 12,768 tok (headroom 0) ·evals/approvals/test-revise-loop.md1,329 ·evals/README.md414 · generated 835 — package 15,346; all three ratcheted files at zero headroom. Approvals:296-650= 5,246 tok = 41% of the file; the highest-density block ("Valid-but-silently-wrong" pitfalls 6–10,:836-951) starts at 84% depth. Real usage: 4*.flow.ts+ the showcase's 24 flows + jobs + webhooks; zero*.trigger.ts. Node-type frequency:notify20,approval15,screen9,update_record/get_record/decision5,connector_action4,loop3,try_catch2,parallel2,approval_revise1 —parallel_gateway/join_gateway/boundary_event0. 14 real patterns; 12 covered; 2 wholedefineStackcollections (jobs,webhooks) missing. Verdict RESTRUCTURE: wrong control-flow model taught; order inverts value; evals orphaned (grep evals SKILL.md→ 0) and inverted (1,329 tok on the least-used node); the generated index misroutes to the ADR-0020-retiredstate-machine.zod.ts.Top findings
evals/approvals/test-revise-loop.md:23-65vsSKILL.md:382-442evals/README.md:13-43SKILL.md:596,600-606ctx.record" — anchorobjectstack-data/references/data-hooks.mdSKILL.md:971-983os validateblockSKILL.md:800-812277-294SKILL.md:152-164SKILL.md:787-798:228; #2 wrong)SKILL.md:443-459SKILL.md:926-941functionsfence, drop the rationaleSKILL.md:404-409SKILL.md:866-870736-782SKILL.md:895-902SKILL.md:826-835:691):76-77,79,791-792,828-829parallel/try_catch/loop-container rows; mark the*_gateway/boundary_eventtrio as BPMN lowering, not author-facing (control-flow.zod.ts:42-46)SKILL.md:661-676approvals+messaging(notifyreturns success withskipped: truewhen messaging is absent —notify-node.ts:313-320)Incidental falsehoods (fix in this flight)
SKILL.md:24-25,:35— "covers … ETL pipelines" / "designing an ETL pipeline": the L2 ETL layer was removed in spec 17 with no replacement (17.etl-pipeline-layer-retired.ts:7-20); the package declares 17.x and has zero ETL body content. Also the frontmatter/description (AUTO-A-01).SKILL.md:791-792— "Always handle errors. Addboundary_eventnodes": 0 authorings; the showcase's own waiver (coverage.ts:299-300) namestry_catchandwaitas the author-facing equivalents.Three funded additions
notifyconfig fence (AUTO-E-04, +140, paid by AUTO-D-03 + AUTO-D-05) — the 8 keys actually used (recipients13,title10,topic9,message8,severity7,channels7,sourceObject/sourceId4,actionUrl), schemaio-node-config.zod.ts:179-218, plus one "Valid-but-silently-wrong" line for the messaging-absent silent success.Flight scope
IMPLEMENT (shrink-only): rows 1, 3–15 and the findings file at HIGH or MED; the three funded additions; falsehoods 1–2 incl. the description; AUTO-A-02/A-03 (add
jobs/webhooksand screen-flow routing to the description — paid by same-file deletions); AUTO-B-01/B-02 reorder (free — bring the "Valid-but-silently-wrong" block up); link the eval fromSKILL.md.ANCHOR RULINGS: hooks →
objectstack-data/references/data-hooks.md(AUTO-C-02: delete + pointer). The objectstack-query flight points at this package's:157-164flow-filter rule — keep that section stable. Screen flows vs views: this package owns screen flows; objectstack-ui points here.DEFER: AUTO-B-04 (eval stub, #14296 item 2); AUTO-B-05 (generator map
build-skill-references.ts:120-129→ out-of-scope card for the spec lane: dropstate-machine.zod.ts, addbuiltin-node-config.zod.ts/io-node-config.zod.ts).Flight constraints (binding)
Fixes #<this card>; governed ⇒ stays draft; review requests are the seat's step..describe()string ⇒ spec-side twin card.node scripts/check-skills-token-ratchet.mjs,pnpm --filter @objectstack/spec check:skill-examples,pnpm check:skill-compatibility,pnpm check:skill-identifier-liveness, plusnode scripts/pm/dispatch-gates.mjs --commands <changed paths>; record the head sha.needs:contract-reviewon both carriers (the control-flow rows and thenotifysilent-success semantics are contract claims).Refs: #14292 · #14296 · #13658.