Starter packs slice SP2 (#1873): the five shipped starter packs. Design: docs/plans/2026-11-12_starter-packs-design.md sections 7 and 8, under Jason's full send of 11-12 about 21:05Z.
packages/plugins/starter-pack/<id>/index.mjs for coding, creative-writing, marketing, montage and business-management. Each exports interfaceVersion = 1 and starterPack(), which returns a fresh packVersion 1 document on every call. Every definition is a whole template ref {template, sha256} pinned at today's templateHash, so a template edit refuses the pack with starter-pack-template-changed until it is re-pinned.
expected-lines.json per pack: the chief pin and, per proposed hire, the flagged lines from checkComposition against roles/chief-of-staff.json and the credentialLines the broker computes. chief-marketing-officer is the only proposal with no lines.
Shapes follow the SP1 checker where the design's prose differs: workflow {description, steps}, steps {id, title, roles, state}, hires {name, definition, reason} with no level, pack id equal to its directory name.
starter-pack.test.mjs (SP1's test): it asserted an empty shipped listing, which any shipped pack breaks. It now asserts a nonempty listing with every entry origin: shipped, and the installed-pack assertions filter to installed packs. No refusal assertion got weaker.
No source outside the pack directories changed. Nothing in roles/ or contracts/.
Tests: starter-pack-shipped.test.mjs, 10 tests. Red before on 755ba3fa8: 0/9 (the tenth came in the review round and also fails without the install guard). Lane gate: 1556/1; the one failure is the known CHAT-01 base red in conversation reader.test.mjs. test-config.sh 55/0. The Lead check ran separately under env -i: 150/0.
Reviews (fresh Opus delegates): build approve, security approve, no P1 or P2. Three P3s fixed in the review commit.
Deferred (SP1 follow-ups):
A broken old plug-in in plugins.lock named like a shipped pack fails the whole pack listing (fails closed, needs host write access).
checkPack accepts a definition named human, which collides with the human step role.
packages/plugins/README.md does not mention the kind or the packs.
Starter packs slice SP2 (#1873): the five shipped starter packs. Design: `docs/plans/2026-11-12_starter-packs-design.md` sections 7 and 8, under Jason's full send of 11-12 about 21:05Z.
- `packages/plugins/starter-pack/<id>/index.mjs` for coding, creative-writing, marketing, montage and business-management. Each exports `interfaceVersion = 1` and `starterPack()`, which returns a fresh packVersion 1 document on every call. Every definition is a whole template ref `{template, sha256}` pinned at today's `templateHash`, so a template edit refuses the pack with `starter-pack-template-changed` until it is re-pinned.
- `expected-lines.json` per pack: the chief pin and, per proposed hire, the `flagged` lines from `checkComposition` against `roles/chief-of-staff.json` and the `credentialLines` the broker computes. chief-marketing-officer is the only proposal with no lines.
- Shapes follow the SP1 checker where the design's prose differs: workflow `{description, steps}`, steps `{id, title, roles, state}`, hires `{name, definition, reason}` with no `level`, pack id equal to its directory name.
- `starter-pack.test.mjs` (SP1's test): it asserted an empty shipped listing, which any shipped pack breaks. It now asserts a nonempty listing with every entry `origin: shipped`, and the installed-pack assertions filter to installed packs. No refusal assertion got weaker.
No source outside the pack directories changed. Nothing in `roles/` or `contracts/`.
Tests: `starter-pack-shipped.test.mjs`, 10 tests. Red before on 755ba3fa8: 0/9 (the tenth came in the review round and also fails without the install guard). Lane gate: 1556/1; the one failure is the known CHAT-01 base red in conversation reader.test.mjs. `test-config.sh` 55/0. The Lead check ran separately under `env -i`: 150/0.
Reviews (fresh Opus delegates): build approve, security approve, no P1 or P2. Three P3s fixed in the review commit.
Deferred (SP1 follow-ups):
- A broken old plug-in in plugins.lock named like a shipped pack fails the whole pack listing (fails closed, needs host write access).
- `checkPack` accepts a definition named `human`, which collides with the `human` step role.
- `packages/plugins/README.md` does not mention the kind or the packs.
coding, creative-writing, marketing, montage and business-management,
each a packVersion 1 document pinning whole V2 templates at today's
templateHash. expected-lines.json beside each pack records the flagged
and credential lines every proposed hire carries against
roles/chief-of-staff.json, as the broker computes them.
starter-pack-shipped.test.mjs checks each pack loads through SP1 with
origin shipped, matches section 7, and that its lines equal
expected-lines.json; a template edit refuses the pack until re-pinned.
The SP1 test no longer expects an empty shipped listing.
The SP1 listing test also requires a nonempty shipped listing, and a
new SP2 case pins that installing a plug-in named after any shipped
pack refuses core-name, so an installed pack cannot replace one.
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Starter packs slice SP2 (#1873): the five shipped starter packs. Design:
docs/plans/2026-11-12_starter-packs-design.mdsections 7 and 8, under Jason's full send of 11-12 about 21:05Z.packages/plugins/starter-pack/<id>/index.mjsfor coding, creative-writing, marketing, montage and business-management. Each exportsinterfaceVersion = 1andstarterPack(), which returns a fresh packVersion 1 document on every call. Every definition is a whole template ref{template, sha256}pinned at today'stemplateHash, so a template edit refuses the pack withstarter-pack-template-changeduntil it is re-pinned.expected-lines.jsonper pack: the chief pin and, per proposed hire, theflaggedlines fromcheckCompositionagainstroles/chief-of-staff.jsonand thecredentialLinesthe broker computes. chief-marketing-officer is the only proposal with no lines.{description, steps}, steps{id, title, roles, state}, hires{name, definition, reason}with nolevel, pack id equal to its directory name.starter-pack.test.mjs(SP1's test): it asserted an empty shipped listing, which any shipped pack breaks. It now asserts a nonempty listing with every entryorigin: shipped, and the installed-pack assertions filter to installed packs. No refusal assertion got weaker.No source outside the pack directories changed. Nothing in
roles/orcontracts/.Tests:
starter-pack-shipped.test.mjs, 10 tests. Red before on755ba3fa8: 0/9 (the tenth came in the review round and also fails without the install guard). Lane gate: 1556/1; the one failure is the known CHAT-01 base red in conversation reader.test.mjs.test-config.sh55/0. The Lead check ran separately underenv -i: 150/0.Reviews (fresh Opus delegates): build approve, security approve, no P1 or P2. Three P3s fixed in the review commit.
Deferred (SP1 follow-ups):
checkPackaccepts a definition namedhuman, which collides with thehumanstep role.packages/plugins/README.mddoes not mention the kind or the packs.