@zalom/plastic 1.0.3 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (98) hide show
  1. package/PLASTIC-reference.md +11 -11
  2. package/PLASTIC.md +7 -7
  3. package/README.md +47 -0
  4. package/agents/plastic-enforcer.md +3 -3
  5. package/agents/plastic-intent-curator.md +9 -10
  6. package/agents/plastic-spec-specialist.md +9 -6
  7. package/bin/plastic.js +2 -2
  8. package/package.json +1 -1
  9. package/scripts/dashboard.rb +1 -1
  10. package/scripts/doctor.rb +52 -4
  11. package/scripts/end-intent +330 -0
  12. package/scripts/hook-code-gate +1 -1
  13. package/scripts/hook-continue +1 -1
  14. package/scripts/hook-create-gate +2 -2
  15. package/scripts/hook-session-start +1 -1
  16. package/scripts/lib/bridge.rb +35 -3
  17. package/scripts/lib/installer_core.rb +8 -6
  18. package/scripts/lib/store_provisioning.rb +1 -1
  19. package/scripts/new-intent +1 -1
  20. package/scripts/{versions.rb → rollback.rb} +33 -41
  21. package/scripts/update.rb +1 -1
  22. package/skills/_active-intent-gate.md +1 -1
  23. package/skills/_decision-tables.md +50 -0
  24. package/skills/auto/SKILL.md +47 -64
  25. package/skills/auto/evals/evals.json +4 -4
  26. package/skills/auto/references/agent-architecture.md +2 -2
  27. package/skills/dashboard/SKILL.md +2 -2
  28. package/skills/doctor/SKILL.md +3 -3
  29. package/skills/install/SKILL.md +1 -1
  30. package/skills/{brainstorming → intent-brainstorming}/SKILL.md +43 -45
  31. package/skills/intent-brainstorming/evals/evals.json +67 -0
  32. package/skills/{brainstorming → intent-brainstorming}/references/design-principles.md +12 -17
  33. package/skills/{continuing → intent-continuing}/SKILL.md +3 -3
  34. package/skills/{continuing → intent-continuing}/evals/evals.json +24 -24
  35. package/skills/{creating-intent → intent-creating}/SKILL.md +3 -3
  36. package/skills/{creating-intent → intent-creating}/evals/evals.json +1 -1
  37. package/skills/{intent-discovery → intent-discovering}/SKILL.md +1 -1
  38. package/skills/intent-ending/SKILL.md +151 -0
  39. package/skills/intent-ending/evals/evals.json +74 -0
  40. package/skills/{executing-plan → intent-executing}/SKILL.md +75 -15
  41. package/skills/intent-executing/evals/evals.json +66 -0
  42. package/skills/{brainstorming-grill-me → intent-grilling}/SKILL.md +4 -4
  43. package/skills/{linking-intents → intent-linking}/SKILL.md +1 -1
  44. package/skills/{linking-intents → intent-linking}/evals/evals.json +1 -1
  45. package/skills/{lock → intent-locking}/SKILL.md +1 -1
  46. package/skills/{writing-plans → intent-planning}/SKILL.md +48 -20
  47. package/skills/intent-planning/evals/evals.json +66 -0
  48. package/skills/{writing-plans → intent-planning}/references/plan-format.md +31 -7
  49. package/skills/{research → intent-researching}/SKILL.md +2 -2
  50. package/skills/{research → intent-researching}/evals/evals.json +1 -1
  51. package/skills/{savepoint → intent-savepoint}/SKILL.md +1 -1
  52. package/skills/intent-speccing/SKILL.md +69 -0
  53. package/skills/intent-speccing/evals/evals.json +126 -0
  54. package/skills/intent-speccing/references/per-section-fill-rules.md +92 -0
  55. package/skills/intent-speccing/references/self-verify-checklist.md +38 -0
  56. package/skills/intent-starting/SKILL.md +2 -2
  57. package/skills/intent-starting/evals/evals.json +2 -2
  58. package/skills/{creating-project → project-creating}/SKILL.md +2 -2
  59. package/skills/releasing/SKILL.md +18 -14
  60. package/skills/{versions → rollback}/SKILL.md +30 -20
  61. package/skills/{creating-skills → skill-creating}/SKILL.md +2 -2
  62. package/skills/{creating-skills → skill-creating}/evals/evals.json +5 -5
  63. package/skills/{creating-skills → skill-creating}/references/progressive-disclosure.md +2 -2
  64. package/skills/{evaluating-skills → skill-evaluating}/SKILL.md +1 -1
  65. package/skills/{evaluating-skills → skill-evaluating}/evals/evals.json +3 -3
  66. package/skills/{intent-curator → store-curating}/SKILL.md +6 -7
  67. package/skills/{intent-curator → store-curating}/evals/evals.json +1 -1
  68. package/skills/{managing-index → store-indexing}/SKILL.md +6 -7
  69. package/skills/{managing-index → store-indexing}/evals/evals.json +1 -1
  70. package/skills/{add-project-store → store-provisioning}/SKILL.md +2 -2
  71. package/skills/tutorial/SKILL.md +65 -0
  72. package/skills/tutorial/evals/evals.json +186 -0
  73. package/skills/tutorial/references/track-1-guided.md +123 -0
  74. package/skills/tutorial/references/track-2-auto.md +95 -0
  75. package/skills/tutorial/references/track-3-projects-and-roadmaps.md +110 -0
  76. package/skills/update/SKILL.md +1 -1
  77. package/templates/agents.md +7 -7
  78. package/skills/brainstorming/evals/evals.json +0 -22
  79. /package/skills/{continuing → intent-continuing}/references/context-management.md +0 -0
  80. /package/skills/{creating-intent → intent-creating}/references/lifecycle.md +0 -0
  81. /package/skills/{creating-intent → intent-creating}/references/wikilinks.md +0 -0
  82. /package/skills/{executing-plan → intent-executing}/code-quality-reviewer-prompt.md +0 -0
  83. /package/skills/{executing-plan → intent-executing}/implementer-prompt.md +0 -0
  84. /package/skills/{executing-plan → intent-executing}/spec-reviewer-prompt.md +0 -0
  85. /package/skills/{linking-intents → intent-linking}/references/zettelkasten.md +0 -0
  86. /package/skills/{savepoint → intent-savepoint}/references/context-management.md +0 -0
  87. /package/skills/{creating-project → project-creating}/references/hubs-projects.md +0 -0
  88. /package/skills/{creating-project → project-creating}/references/project-scaffolding.md +0 -0
  89. /package/skills/{creating-skills → skill-creating}/references/agents.md +0 -0
  90. /package/skills/{creating-skills → skill-creating}/references/evals.md +0 -0
  91. /package/skills/{creating-skills → skill-creating}/references/hooks.md +0 -0
  92. /package/skills/{creating-skills → skill-creating}/references/scripts.md +0 -0
  93. /package/skills/{creating-skills → skill-creating}/references/skills.md +0 -0
  94. /package/skills/{creating-skills → skill-creating}/scripts/scaffold.rb +0 -0
  95. /package/skills/{evaluating-skills → skill-evaluating}/assets/eval-template.json +0 -0
  96. /package/skills/{evaluating-skills → skill-evaluating}/references/convention-checks.md +0 -0
  97. /package/skills/{evaluating-skills → skill-evaluating}/references/eval-methodology.md +0 -0
  98. /package/skills/{managing-index → store-indexing}/references/zettelkasten-linking.md +0 -0
@@ -0,0 +1,50 @@
1
+ ## Numbered Decision Tables
2
+
3
+ The shared procedure for collecting owner rulings during any stage (Why, How, Exec).
4
+ Any stage skill that needs the owner to choose between options or rule on a batch of
5
+ open questions follows this procedure instead of improvising its own format.
6
+
7
+ Read this when a stage skill's own text says to.
8
+
9
+ ### The procedure
10
+
11
+ 1. **Collect the candidate decisions.** Gather every open question or option set that
12
+ needs an owner ruling right now. Do not present them one at a time across separate
13
+ messages; batch them into a single collection first.
14
+
15
+ 2. **Present exactly ONE table.** Its first column is the row number. One decision per
16
+ row. Add a recommendation column stating the agent's recommended choice and a short
17
+ reason. Example shape:
18
+
19
+ | # | Decision | Recommendation |
20
+ |---|---|---|
21
+ | 1 | Ship the setting as a CLI flag or a config file? | Config file: survives across invocations |
22
+ | 2 | Retry, circuit breaker, or fallback for the flaky call? | Retry: matches existing error handling elsewhere in this module |
23
+
24
+ 3. **Let the owner rule by row number.** The owner responds with a ruling per row
25
+ number (e.g. "1: config file, 2: retry"). Do not require prose paragraphs back; a
26
+ row-number ruling is enough.
27
+
28
+ 4. **Persist each ruling immediately, one at a time.** For every ruling, before moving
29
+ to the next row, run:
30
+
31
+ ```
32
+ ruby ~/.plastic/scripts/insight-append {intent_dir} "<ruling text>" --stage <stage> --author human
33
+ ```
34
+
35
+ Never batch rulings into a single call and never wait until all rows are ruled to
36
+ start persisting. `<stage>` is the current stage (Why, How, or Exec). If a ruling
37
+ supersedes an earlier one already on record, append a second insight that names the
38
+ superseded decision and states plainly that this ruling supersedes it. Both insights
39
+ stay on record; the later one wins.
40
+
41
+ 5. **Write the full ruling set to a rulings file.** After the last row is ruled and
42
+ persisted, write the complete table plus every ruling to
43
+ `{intent_dir}/resources/rulings--<slug>.md` so the full set is readable in one place
44
+ alongside the per-row insights.
45
+
46
+ ### Why one table, not a chip per row
47
+
48
+ A single table lets the owner rule on everything in one pass and reference row numbers
49
+ in their reply. Multiple small prompts force the owner to context-switch per decision
50
+ and make later replies ambiguous about which decision they answer.
@@ -1,15 +1,15 @@
1
1
  ---
2
2
  name: plastic-auto
3
3
  description: >-
4
- Autonomous intent delivery agent takes over How and Exec. Use when user says
4
+ Autonomous intent delivery - agent takes over How and Exec. Use when user says
5
5
  "auto", "take it from here", "deliver this", or when brainstorming-grill-me concludes
6
6
  and user confirms autonomous execution. Requires an active intent in INDEX.md.
7
7
  user-invocable: true
8
8
  ---
9
9
 
10
- # Auto Autonomous Intent Delivery
10
+ # Auto - Autonomous Intent Delivery
11
11
 
12
- Announce: "Taking over intent [ID] [name] for autonomous delivery."
12
+ Announce: "Taking over intent [ID] - [name] for autonomous delivery."
13
13
 
14
14
  **Advisory (not a gate).** At auto-mode start, recommend once that the user run this
15
15
  orchestrating main session on the best available thinking model (Fable, Opus, or whatever
@@ -19,7 +19,7 @@ subagents keep their pinned tier and never resolve to Fable.
19
19
 
20
20
  ## Precondition
21
21
 
22
- An active intent MUST exist in INDEX.md. If none exists, refuse: "No active intent found. Create one first with /plastic-creating-intent."
22
+ An active intent MUST exist in INDEX.md. If none exists, refuse: "No active intent found. Create one first with /plastic-intent-creating."
23
23
 
24
24
  If multiple active intents exist, ask the user which one to deliver (this is the only question auto asks).
25
25
 
@@ -31,8 +31,8 @@ next dispatchable intent:
31
31
  ruby ~/.plastic/scripts/dashboard.rb all --json
32
32
  ```
33
33
 
34
- Work `dispatchable_queue` in `rank` order (these are `defer`/`research` dispositions
35
- safe to deliver autonomously). Leave `human_only` and `next_big_thing` for the user those
34
+ Work `dispatchable_queue` in `rank` order (these are `defer`/`research` dispositions -
35
+ safe to deliver autonomously). Leave `human_only` and `next_big_thing` for the user - those
36
36
  are `drive`/`triage` items the human should lead. See the `plastic-dashboard` skill.
37
37
 
38
38
  QMD-first (when available): when the user describes the work to deliver rather than naming an
@@ -65,7 +65,7 @@ and artifact depth to that size. Extended walkthrough: `references/tiers.md`.
65
65
 
66
66
  ## Arm the Lifecycle Gate (do this FIRST)
67
67
 
68
- Immediately after selecting the intent before any other work arm auto mode. This
68
+ Immediately after selecting the intent - before any other work - arm auto mode. This
69
69
  writes the session bridge that makes the code-edit gate live, so project code cannot be
70
70
  edited before the plan exists (the gate applies to YOU, the orchestrator):
71
71
 
@@ -88,7 +88,7 @@ Honor the cycle: What → Why (spec.md) → How (plan.md + actions/ + checklist.
88
88
 
89
89
  ## Flags
90
90
 
91
- - `--skip-permissions` bypass hard stops on destructive actions on existing projects. Full trust mode. Default: off.
91
+ - `--skip-permissions` - bypass hard stops on destructive actions on existing projects. Full trust mode. Default: off.
92
92
 
93
93
  ## Team Spin-Up
94
94
 
@@ -104,7 +104,7 @@ Roster (one role per cycle stage):
104
104
  - **plastic-executor** (code + checklist + `## Insights`)
105
105
  - **plastic-enforcer** (orchestrates + gates; that is YOU)
106
106
 
107
- Dispatch rule: sequential, one specialist per stage on one branch (the deliverables share files). Gate each deliverable against the stage's exit criteria before handing off. The How and Exec phases below default to Plastic's native dispatch (`plastic-executing-plan`) and delegate to the superpowers skills only when they are available or the user asks; do not restate the phase mechanics here.
107
+ Dispatch rule: sequential, one specialist per stage on one branch (the deliverables share files). Gate each deliverable against the stage's exit criteria before handing off. The How and Exec phases below default to Plastic's native dispatch (`plastic-intent-executing`) and delegate to the superpowers skills only when they are available or the user asks; do not restate the phase mechanics here.
108
108
 
109
109
  Spawn preamble (live-state injection): before dispatching any specialist, run `scripts/spawn-preamble <intent_dir> --role <role>` and PREPEND its output to that specialist's prompt. The preamble is a deterministic, filesystem-only snapshot of the active intent (id, intent line, current stage, and the provisioned code worktree path when one exists on disk) plus the honoring instruction, so every spawned agent boots with accurate live state instead of guessing. This is the authoritative L2 mechanism for harnesses whose sub-agents do not inherit a top-level session event (see `docs/reference/harness-adapters.md`).
110
110
 
@@ -168,15 +168,15 @@ this is worth doing, or proceed).
168
168
  When entering at Why stage:
169
169
 
170
170
  1. Read existing `## Context` and `### Decisions` from the intent file
171
- 2. Assess gaps what decisions are missing? What context is incomplete?
172
- 3. Self-directed research read code, search docs, explore related intents (via wikilinks in `## Links`), web search if needed. NO questions to human.
173
- 4. Adaptive budget assess complexity and set your own research budget:
171
+ 2. Assess gaps - what decisions are missing? What context is incomplete?
172
+ 3. Self-directed research - read code, search docs, explore related intents (via wikilinks in `## Links`), web search if needed. NO questions to human.
173
+ 4. Adaptive budget - assess complexity and set your own research budget:
174
174
  - Simple (config change, small feature): 2-3 research steps
175
175
  - Medium (new feature, integration): 5-8 research steps
176
176
  - Complex (new project, architecture): 10-15 research steps
177
- 5. Make decisions pick best option, document in `## Context > ### Decisions` with rationale
177
+ 5. Make decisions - pick best option, document in `## Context > ### Decisions` with rationale
178
178
  6. Log all autonomous decisions in `## Insights` with `(autonomous)` marker: "Decision: chose X because Y (autonomous)"
179
- 7. Write `spec.md` consolidated specification
179
+ 7. Write `spec.md` - consolidated specification
180
180
  8. Notify user (Why briefing): brief per `references/human-report-contract.md`
181
181
  (State: the approach chosen, one line; Risk: the main trade-off; Call: the one decision
182
182
  needed, approve or pick an option).
@@ -191,9 +191,9 @@ intent birth and persists at every tier; only writing `ACTION_N.md` files into i
191
191
  only (S/M leave the directory empty).
192
192
 
193
193
  1. If `superpowers:writing-plans` is available as a skill, delegate plan creation to it. Tell it the plan saves to the active intent's directory (not `docs/superpowers/plans/`).
194
- 2. Otherwise, write `plan.md` directly implementation plan with numbered tasks
195
- 3. Write `ACTION_N.md` files into the existing `actions/` directory (one per task, self-contained) L only
196
- 4. Write `checklist.md` execution registry with checkboxes covering all actions
194
+ 2. Otherwise, write `plan.md` directly - implementation plan with numbered tasks
195
+ 3. Write `ACTION_N.md` files into the existing `actions/` directory (one per task, self-contained) - L only
196
+ 4. Write `checklist.md` - execution registry with checkboxes covering all actions
197
197
  5. Notify user (How briefing): brief per `references/human-report-contract.md`
198
198
  (State: the plan shape, task count and what it builds; Risk: the riskiest task or
199
199
  dependency; Call: approve the plan to build).
@@ -205,9 +205,9 @@ Then proceed to Exec.
205
205
  If the plan calls for creating a new project (the intent is an implementation intent that needs a new codebase):
206
206
 
207
207
  1. Determine project path from `~/.plastic/config.yml` `project_roots` or from intent context
208
- 2. **Confirm path with user** this is the ONE human interaction during auto delivery:
208
+ 2. **Confirm path with user** - this is the ONE human interaction during auto delivery:
209
209
  > "Creating project `<slug>` at `<path>`. Confirm path, or provide alternative."
210
- 3. Invoke `plastic-creating-project` skill
210
+ 3. Invoke `plastic-project-creating` skill
211
211
  4. The global intent is now Completed (creating-project handles this)
212
212
  5. The tactical mirror in the project store becomes the active intent
213
213
  6. Continue execution from the project directory using the tactical intent
@@ -215,7 +215,7 @@ If the plan calls for creating a new project (the intent is an implementation in
215
215
  ## Exec Phase
216
216
 
217
217
  1. If `superpowers:subagent-driven-development` or `superpowers:executing-plans` is available, delegate execution to it
218
- 2. Otherwise invoke `plastic-executing-plan`
218
+ 2. Otherwise invoke `plastic-intent-executing`
219
219
  3. Execute actions from checklist sequentially
220
220
  4. Check off items in `checklist.md` as completed
221
221
  5. Append observations to `## Insights` with `(autonomous)` marker
@@ -224,7 +224,7 @@ If the plan calls for creating a new project (the intent is an implementation in
224
224
  (State: what got built and the test result; Risk: residual failures or deviations;
225
225
  Call: go to review, or done).
226
226
 
227
- ## Permission Model Safe-by-Default
227
+ ## Permission Model - Safe-by-Default
228
228
 
229
229
  The agent MUST prefer non-destructive routes:
230
230
 
@@ -232,7 +232,7 @@ The agent MUST prefer non-destructive routes:
232
232
  |---|---|
233
233
  | Drop table | Rename to `_deprecated_<table>`, flag for cleanup |
234
234
  | Delete files | Move to `.archive/` or backup branch |
235
- | Alter column | Additive migration new column + backfill |
235
+ | Alter column | Additive migration - new column + backfill |
236
236
  | Remove feature | Feature flag off, code stays until human confirms |
237
237
  | Database migration | Backup before migration, keep rollback path |
238
238
 
@@ -247,7 +247,7 @@ With `--skip-permissions`, the agent logs the action in Insights but proceeds wi
247
247
 
248
248
  ### Greenfield Exception
249
249
 
250
- During initial project creation, all decisions are non-destructive by definition (there's nothing to destroy). The agent has full autonomy for greenfield choices DB engine, framework, gems, architecture.
250
+ During initial project creation, all decisions are non-destructive by definition (there's nothing to destroy). The agent has full autonomy for greenfield choices - DB engine, framework, gems, architecture.
251
251
 
252
252
  ## Completion
253
253
 
@@ -258,55 +258,38 @@ During initial project creation, all decisions are non-destructive by definition
258
258
  and End tail in PLASTIC.md `## Delivery Isolation and the Single-Owner Lock`).
259
259
  3. Write `## Outcome` summary in the intent file (1-2 sentences)
260
260
  4. **Release (if configured)**
261
- 1. Detect project match CWD against paths in `~/.plastic/projects.yml` to find the project slug. If no match, skip to step 5 (default commit-only behavior).
261
+ 1. Detect project - match CWD against paths in `~/.plastic/projects.yml` to find the project slug. If no match, skip to step 5 (default commit-only behavior).
262
262
  2. Read `~/.plastic/projects/{slug}/project.yml`. If the file doesn't exist or has no `release` key, skip to step 5.
263
263
  3. Based on `release.on_complete`:
264
- - `commit` git add + commit (same as default, proceed to step 5)
265
- - `commit_and_push` git add + commit + push
266
- - `manual` skip auto-commit, notify user: "Release configured as manual commit when ready."
264
+ - `commit` - git add + commit (same as default, proceed to step 5)
265
+ - `commit_and_push` - git add + commit + push
266
+ - `manual` - skip auto-commit, notify user: "Release configured as manual - commit when ready."
267
267
  4. If `release.verify` is set, run the verify command (e.g. `bundle exec rake test`):
268
268
  - **Exit 0 (green):** proceed to sub-step 5
269
269
  - **Non-zero (red):** check `release.on_red`:
270
- - `fix_and_retry` attempt to fix the failure, re-run verify (max 2 retries)
271
- - `stop` write `savepoint.md` with current state, notify user: "Verify failed savepoint written.", **STOP**
272
- - `manual` notify user: "Verify failed: [summary]. Resolve manually."
273
- 5. If `release.on_green` has items, invoke `plastic-releasing` to handle them (tag, changelog, publish, etc.). Do NOT duplicate release logic delegate entirely.
270
+ - `fix_and_retry` - attempt to fix the failure, re-run verify (max 2 retries)
271
+ - `stop` - write `savepoint.md` with current state, notify user: "Verify failed - savepoint written.", **STOP**
272
+ - `manual` - notify user: "Verify failed: [summary]. Resolve manually."
273
+ 5. If `release.on_green` has items, invoke `plastic-releasing` to handle them (tag, changelog, publish, etc.). Do NOT duplicate release logic - delegate entirely.
274
274
  5. Review `## Insights` for observations that should spawn future intents. If any:
275
- - Create them (using `plastic-creating-intent` conventions)
275
+ - Create them (using `plastic-intent-creating` conventions)
276
276
  - Update `chain` in the current intent's frontmatter
277
- 6. Move intent from `## Active` to `## Completed` in INDEX.md (with today's date). As the
278
- closing act of the transfer, stamp the terminal ledger bookend (intent 81) so the savepoint's
279
- last line records delivery:
277
+ 6. Run the mechanical close through `plastic-intent-ending`: it owns steps 1-6 of the Done
278
+ procedure (outcome/INDEX/savepoint/commit, disarm, and the QMD reindex last) as ONE
279
+ delegation, not five separate one-liners restated here. Run its backing script for the
280
+ outcome/INDEX/savepoint/commit core, passing `--index-note` with a rich Completed/
281
+ Abandoned entry description (mode/tier, what shipped or why abandoned, suite result):
280
282
  ```bash
281
- ruby -r ~/.plastic/scripts/lib/bridge -e 'Bridge.append_terminal_savepoint("<intent_dir>", "delivered")'
283
+ ruby ~/.plastic/scripts/end-intent --store <store_path> --id <ID> --disposition delivered \
284
+ --index-note "<mode, tier>; <what shipped>; <suite result>"
282
285
  ```
283
- (Use `"abandoned"` instead when the intent is being moved to `## Abandoned`.) Idempotent.
284
- 7. Auto-commit: `cd <store-root> && git add . && git commit -m "feat: deliver intent <ID> — <name>"`
285
- 8. Disarm the lifecycle gate (auto delivery is finished). Substitute the intent's own id for
286
- `<ID>` (a session can be delivering more than one intent at once, intent 131, so disarm must
287
- name which of the session's bridges to clear):
288
- ```bash
289
- ruby -r ~/.plastic/scripts/lib/bridge -e 'Bridge.disarm_auto(ENV["CLAUDE_CODE_SESSION_ID"], intent_id: "<ID>")'
290
- ```
291
- Disarm runs the ordered End tail (release worktrees, then clear the `delivery.lock`,
292
- then the bridge becomes purge-eligible) and performs the mandatory worktree cleanup
293
- (intent 73c3): both per-intent worktrees are removed and both repos pruned. This is
294
- the plain remove path (no merge); when the work ships through a release, the release
295
- path merges the branch BEFORE the worktree is removed instead of relying on this step.
296
- Never leave an orphaned worktree, and run `git worktree prune` if you hit a stale
297
- reference. For the full ordering rationale and the release-vs-plain-disarm
298
- distinction, read `references/end-tail.md`.
299
- 9. QMD reindex LAST (canonical End tail), run only after disarm has released the
300
- worktrees, cleared the `delivery.lock`, and purged the bridge. It runs in the
301
- background so it never blocks the turn:
302
- ```bash
303
- ruby ~/.plastic/scripts/qmd-sync reindex --store <store-root> --async
304
- ```
305
- `<store-root>` is the store that holds this intent (the global store or the project
306
- store); the command is a no-op when QMD is absent. For why the reindex must be last
307
- (so the index never references a bridge or lock about to disappear), read
308
- `references/end-tail.md`.
309
- 10. Notify user (Done briefing): brief per `references/human-report-contract.md`
286
+ (Use `--disposition abandoned` when the intent is being moved to `## Abandoned`.) Then
287
+ follow `plastic-intent-ending`'s Step 5 (disarm: `Bridge.disarm_auto` on this auto/curator
288
+ path, the plain-remove branch) and Step 6 (QMD reindex, async, last) exactly as that skill
289
+ states them. Never leave an orphaned worktree; run `git worktree prune` on a stale
290
+ reference. If any of this ever needs to change, change `plastic-intent-ending`, not this
291
+ skill.
292
+ 7. Notify user (Done briefing): brief per `references/human-report-contract.md`
310
293
  (State: the delivered impact; Risk: residual risk; Call: the decision left to you, merge,
311
294
  release, or accept). See `outcome.md` for details.
312
295
 
@@ -315,7 +298,7 @@ During initial project creation, all decisions are non-destructive by definition
315
298
  If the agent gets stuck (can't resolve a gap, dependency is missing, tests fail persistently):
316
299
  1. Log the blocker in `## Insights`
317
300
  2. Write `savepoint.md` with current state
318
- 3. Notify user: "Blocked on intent [ID] [name]: [description]. Savepoint written."
301
+ 3. Notify user: "Blocked on intent [ID] - [name]: [description]. Savepoint written."
319
302
  4. **STOP.** Do not attempt workarounds that could leave the project in a broken state.
320
303
 
321
304
  ## References
@@ -116,13 +116,13 @@
116
116
  "scope": "triggering",
117
117
  "set": "train",
118
118
  "prompt": "create a new intent for the dashboard idea",
119
- "expected_output": "Does NOT activate plastic-auto; activates plastic-creating-intent.",
119
+ "expected_output": "Does NOT activate plastic-auto; activates plastic-intent-creating.",
120
120
  "files": [],
121
121
  "assertions": [
122
122
  {
123
123
  "type": "code",
124
124
  "check": "router CHOICE != plastic-auto",
125
- "observed": "plastic-creating-intent",
125
+ "observed": "plastic-intent-creating",
126
126
  "result": "pass"
127
127
  }
128
128
  ]
@@ -132,13 +132,13 @@
132
132
  "scope": "triggering",
133
133
  "set": "validation",
134
134
  "prompt": "what's the status of my active intents?",
135
- "expected_output": "Does NOT activate plastic-auto; this is a read/continuing/managing-index query.",
135
+ "expected_output": "Does NOT activate plastic-auto; this is a read/intent-continuing/store-indexing query.",
136
136
  "files": [],
137
137
  "assertions": [
138
138
  {
139
139
  "type": "code",
140
140
  "check": "router CHOICE != plastic-auto",
141
- "observed": "plastic-managing-index",
141
+ "observed": "plastic-store-indexing",
142
142
  "result": "pass"
143
143
  }
144
144
  ]
@@ -101,7 +101,7 @@ verifies state itself.
101
101
  ### Delegation
102
102
 
103
103
  The roles are thin handoff contracts, not a spawning engine. Dispatch and review run
104
- by default through Plastic's own engine, `plastic-executing-plan` (implementer plus
104
+ by default through Plastic's own engine, `plastic-intent-executing` (implementer plus
105
105
  two-stage review, no external plugin). When `superpowers:subagent-driven-development`
106
106
  and `superpowers:dispatching-parallel-agents` are available, or the user asks for them,
107
107
  they delegate to those as an enhancement. The team model defines who hands what to whom
@@ -112,7 +112,7 @@ spawning.
112
112
 
113
113
  The default is always Plastic's native engine, so a user without superpowers still gets
114
114
  the full behavior. If the harness supports subagents but superpowers is absent, auto
115
- mode dispatches through `plastic-executing-plan`. If the harness has no subagent dispatch
115
+ mode dispatches through `plastic-intent-executing`. If the harness has no subagent dispatch
116
116
  at all, auto mode falls back to a single agent walking the full What, Why, How, Exec
117
117
  cycle itself. The enforcer's gate discipline still applies in every case.
118
118
 
@@ -19,7 +19,7 @@ state → byte-identical payload, regardless of model. Do NOT hand-summarize int
19
19
 
20
20
  - User invokes `/plastic-dashboard`
21
21
  - User asks "where are we", "what's next", "what should I work on", "show me the intents"
22
- - `plastic-continuing` lands on the board on resume
22
+ - `plastic-intent-continuing` lands on the board on resume
23
23
  - `plastic-auto` reads `--json` to choose the next dispatchable intent
24
24
 
25
25
  ## Procedure (the Markdown board — default human surface)
@@ -84,7 +84,7 @@ a no-op when QMD is absent, so fall back to the existing INDEX.md / file scan.
84
84
  The board lists everything; the user navigates by free prose (no capped picker):
85
85
  - On the **global** board, the user replies with an **intent id** (work it), a **project
86
86
  name** (re-run `project <slug> --data` and present that board), or **"new"** (start a new
87
- intent in global via `plastic-creating-intent`).
87
+ intent in global via `plastic-intent-creating`).
88
88
  - On a **project** board, the user replies with an **intent id**, or **"global"** to return.
89
89
 
90
90
  ## Auto-mode contract (`--json`)
@@ -13,7 +13,7 @@ Doctor has three scopes. Pick the right one for the situation:
13
13
  | Scope | Flag | When it runs | States |
14
14
  |-------|------|--------------|--------|
15
15
  | Core check | `--core` | SessionStart hook (automatic), also available on demand | Binary: pass or error |
16
- | Store check | `--store [global\|<slug>]` | Dashboard load, `plastic-continuing` | Three-state: pass / warn / fail |
16
+ | Store check | `--store [global\|<slug>]` | Dashboard load, `plastic-intent-continuing` | Three-state: pass / warn / fail |
17
17
  | Full check | (no flag) | After every update (automatic), or `/plastic-doctor` | Three-state: pass / warn / fail |
18
18
 
19
19
  ### `--core` (binary, manifest-backed)
@@ -118,9 +118,9 @@ Use the `fix_hint` value to determine the correct action:
118
118
  | "Add missing entries to INDEX.md" | Add orphaned intents to the appropriate INDEX.md section |
119
119
  | "Remove stale references from INDEX.md" | Edit INDEX.md to remove ghost references |
120
120
  | "Inject the missing required frontmatter field(s)" | Edit the intent's `{ID}--{slug}.md` frontmatter to add the missing key (e.g. `chain: []`) without touching other keys |
121
- | "Run: provision-project-store {slug}" | Run `provision-project-store <slug>` (or invoke the `plastic-add-project-store` skill) to create the missing store |
121
+ | "Run: provision-project-store {slug}" | Run `provision-project-store <slug>` (or invoke the `plastic-store-provisioning` skill) to create the missing store |
122
122
  | "Re-run installer" | Run `npx -y @zalom/plastic@<channel> install --agent <agent>` (channel: -alpha->@alpha, -beta->@beta, else @latest) |
123
- | "Dispatch plastic-intent-curator ... revisions.md ..." | Invoke the `plastic-intent-curator` (or the agent) to relocate the flagged section or ref into the intent's `revisions.md` via move-and-record (one dated, `[rule: <tag>]`-tagged entry per item), per PLASTIC.md > Structural maintenance and revisions.md. For a missing required section, restore or reproject it instead. |
123
+ | "Dispatch plastic-store-curating ... revisions.md ..." | Invoke the `plastic-store-curating` (or the agent) to relocate the flagged section or ref into the intent's `revisions.md` via move-and-record (one dated, `[rule: <tag>]`-tagged entry per item), per PLASTIC.md > Structural maintenance and revisions.md. For a missing required section, restore or reproject it instead. |
124
124
 
125
125
  For fixes the agent cannot handle automatically, explain what the user needs
126
126
  to do manually. The `revisions.md` remedy is curator-applied (a move-and-record
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: plastic-install
3
- description: Use when initializing Plastic globally (~/.plastic/) or locally in a project, or to re-install/repair a broken installation. Accepts channel flags (--alpha, --beta, --latest) to select release channel. First install defaults to --beta; reinstalls match the already-installed channel. Global install is recommended: it creates the global intent store as a git-backed repository. Local install creates .plastic/ in the current project for testing.
3
+ description: 'Use when initializing Plastic globally (~/.plastic/) or locally in a project, or to re-install/repair a broken installation. Accepts channel flags (--alpha, --beta, --latest) to select release channel. First install defaults to --beta; reinstalls match the already-installed channel. Global install is recommended: it creates the global intent store as a git-backed repository. Local install creates .plastic/ in the current project for testing.'
4
4
  user-invocable: true
5
5
  ---
6
6
 
@@ -1,19 +1,19 @@
1
1
  ---
2
- name: plastic-brainstorming
3
- description: "Explore intent requirements and design before implementation. Produces spec.md in the active intent directory."
2
+ name: plastic-intent-brainstorming
3
+ description: "Explore intent requirements and design before implementation, through conversational prose questions asked one at a time (no multiple-choice chips), persisting each owner ruling immediately as an insight. Produces the enriched Why (Context and Decisions) in the active intent directory; hands off to /plastic-intent-speccing for spec.md."
4
4
  user-invocable: true
5
5
  ---
6
6
 
7
7
  # Brainstorming Ideas Into Designs
8
8
 
9
- Help turn ideas into fully formed designs and specs through natural collaborative dialogue.
9
+ Help turn ideas into fully formed designs through natural collaborative dialogue.
10
10
 
11
- Announce: "I'm using the brainstorming skill to explore the design for intent {id} {name}."
11
+ Announce: "I'm using the brainstorming skill to explore the design for intent {id}: {name}."
12
12
 
13
- Start by understanding the current project context, then ask questions one at a time to refine the idea. Once you understand what you're building, present the design and get user approval.
13
+ Start by understanding the current project context, then ask questions one at a time, in prose, to refine the idea. Once you understand what you're building, present the design and collect the owner's rulings on it. This skill's product is the enriched Why, not spec.md.
14
14
 
15
15
  <HARD-GATE>
16
- Do NOT invoke any implementation skill, write any code, scaffold any project, or take any implementation action until you have presented a design and the user has approved it. This applies to EVERY project regardless of perceived simplicity.
16
+ Do NOT invoke any implementation skill, write any code, scaffold any project, or take any implementation action until you have presented a design and the user has ruled on it. This applies to EVERY project regardless of perceived simplicity.
17
17
  </HARD-GATE>
18
18
 
19
19
  ## Active Intent Gate
@@ -21,34 +21,32 @@ Do NOT invoke any implementation skill, write any code, scaffold any project, or
21
21
  Before proceeding, resolve the active intent:
22
22
 
23
23
  1. **Detect store:** Read `~/.plastic/projects.yml`, match CWD against registered project paths. If match → project store at `~/.plastic/projects/{slug}/store/`. If no match → global store at `~/.plastic/store/`.
24
- 2. **Find active intent:** Read `INDEX.md` from the detected store. Look under `## Active`. If exactly one → use it. If multiple → ask which. If none → refuse: "No active intent. Create one first with /plastic-creating-intent"
24
+ 2. **Find active intent:** Read `INDEX.md` from the detected store. Look under `## Active`. If exactly one → use it. If multiple → ask which. If none → refuse: "No active intent. Create one first with /plastic-intent-creating"
25
25
  3. **Resolve intent directory:** `{store}/store/{id}--{slug}/`
26
26
 
27
27
  All artifacts go to the intent directory. Never write to external paths.
28
28
 
29
29
  ## Anti-Pattern: "This Is Too Simple To Need A Design"
30
30
 
31
- Every project goes through this process. A todo list, a single-function utility, a config change all of them. "Simple" projects are where unexamined assumptions cause the most wasted work. The design can be short (a few sentences for truly simple projects), but you MUST present it and get approval.
31
+ Every project goes through this process. A todo list, a single-function utility, a config change: all of them. "Simple" projects are where unexamined assumptions cause the most wasted work. The design can be short (a few sentences for truly simple projects), but you MUST present it and get a ruling.
32
32
 
33
33
  ## Checklist
34
34
 
35
35
  You MUST create a task for each of these items and complete them in order:
36
36
 
37
- 1. **Explore project context** check files, docs, recent commits, read active intent
38
- 2. **Ask clarifying questions** one at a time, understand purpose/constraints/success criteria
39
- 3. **Propose 2-3 approaches** with trade-offs and your recommendation
40
- 4. **Present design** in sections scaled to their complexity, get user approval after each section
41
- 5. **Write spec** save to `{intent_dir}/spec.md` and commit to store repo
42
- 6. **Spec self-review** placeholder scan, consistency, scope, ambiguity
43
- 7. **User reviews written spec** — ask user to review before proceeding
44
- 8. **Transition to planning** — invoke `plastic-writing-plans`
37
+ 1. **Explore project context**: check files, docs, recent commits, read active intent
38
+ 2. **Grill in prose**: ask conversational prose questions, one at a time, no multiple-choice chips; understand purpose/constraints/success criteria
39
+ 3. **Propose 2-3 approaches**: with trade-offs and your recommendation
40
+ 4. **Present design**: in sections scaled to their complexity, get a ruling after each section
41
+ 5. **Collect rulings**: for each owner ruling, immediately persist it (see Collect rulings below); never batch
42
+ 6. **Hand off to /plastic-intent-speccing**: the enriched Why is done; do not author spec.md here
45
43
 
46
44
  ## Process Flow
47
45
 
48
- The Checklist above states the ordered flow (steps 1-8). For the same flow as a
46
+ The Checklist above states the ordered flow (steps 1-6). For the same flow as a
49
47
  diagram, read `references/design-principles.md`.
50
48
 
51
- **The terminal state is invoking `plastic-writing-plans`.** Do NOT invoke any other implementation skill. The ONLY skill you invoke after brainstorming is `plastic-writing-plans`.
49
+ **The terminal state is the handoff below.** Do NOT invoke any implementation skill and do NOT write spec.md. Brainstorming's product is the enriched Why.
52
50
 
53
51
  ## The Process
54
52
 
@@ -56,9 +54,9 @@ diagram, read `references/design-principles.md`.
56
54
  - QMD-first (when available): before scanning the store with grep/Read for prior decisions, specs, or outcomes, run `ruby ~/.plastic/scripts/qmd-sync search "<terms>"` to surface candidate, prior, or related intents, then open the authoritative intent file for any hit you act on. The command is a no-op when QMD is absent, so fall back to the existing INDEX.md / file scan.
57
55
  - Check out the current project state first (files, docs, recent commits)
58
56
  - Before asking detailed questions, assess scope: if the request describes multiple independent subsystems (e.g., "build a platform with chat, file storage, billing, and analytics"), flag this immediately. Don't spend questions refining details of a project that needs to be decomposed first.
59
- - If the project is too large for a single spec, help the user decompose into sub-projects: what are the independent pieces, how do they relate, what order should they be built? Then brainstorm the first sub-project through the normal design flow. Each sub-project gets its own spec → plan → implementation cycle.
60
- - For appropriately-scoped projects, ask questions one at a time to refine the idea
61
- - Prefer multiple choice questions when possible, but open-ended is fine too
57
+ - If the project is too large for a single spec, help the user decompose into sub-projects: what are the independent pieces, how do they relate, what order should they be built? Then brainstorm the first sub-project through the normal design flow. Each sub-project gets its own Why → spec → plan → implementation cycle.
58
+ - For appropriately-scoped projects, ask questions one at a time, in prose, to refine the idea
59
+ - Ask conversational prose questions, not multiple-choice chips. A short menu of named options is fine when the choice is genuinely enumerable, but phrase it as a sentence, not a bulleted picker.
62
60
  - Only one question per message - if a topic needs more exploration, break it into multiple questions
63
61
  - Focus on understanding: purpose, constraints, success criteria
64
62
 
@@ -80,39 +78,39 @@ guidance (what makes a good interface, when a file has grown too large) and
80
78
  existing-codebase guidance (follow established patterns, fold in targeted
81
79
  improvements without unrelated refactoring).
82
80
 
83
- ## After the Design
84
- **Documentation:**
85
- - Write the validated design (spec) to `{intent_dir}/spec.md` using the `${CLAUDE_PLUGIN_ROOT}/templates/spec.md` form
86
- - Use elements-of-style:writing-clearly-and-concisely skill if available
87
- - Commit to the store repo:
88
- ```
89
- cd {store_root} && git add . && git commit -m "docs: spec for intent {id} — {name}"
90
- ```
81
+ ## Collect rulings
91
82
 
92
- **Spec Self-Review:**
93
- After writing the spec document, look at it with fresh eyes:
94
- 1. **Placeholder scan:** Any "TBD", "TODO", incomplete sections, or vague requirements? Fix them.
95
- 2. **Internal consistency:** Do any sections contradict each other? Does the architecture match the feature descriptions?
96
- 3. **Scope check:** Is this focused enough for a single implementation plan, or does it need decomposition?
97
- 4. **Ambiguity check:** Could any requirement be interpreted two different ways? If so, pick one and make it explicit.
83
+ Each owner ruling triggers one immediate persist call, never a batch. The moment the
84
+ owner rules on a question or a design section, before moving to the next one, run:
98
85
 
99
- Fix any issues inline. No need to re-review — just fix and move on.
86
+ ```
87
+ ruby ~/.plastic/scripts/insight-append {intent_dir} "<ruling text>" --stage Why --author human
88
+ ```
100
89
 
101
- **User Review Gate:**
102
- After the spec review loop passes, ask the user to review the written spec before proceeding:
103
- > "Spec written and committed to `{intent_dir}/spec.md`. Please review it and let me know if you want to make any changes before we start writing out the implementation plan."
90
+ When a later ruling conflicts with an earlier one already on record, append a new
91
+ insight that names the superseded ruling and states plainly that this one supersedes
92
+ it. Both insights stay on record; the later one wins.
104
93
 
105
- Wait for the user's response. If they request changes, make them and re-run the spec review loop. Only proceed once the user approves.
94
+ When presenting a batch of design options or rulings for the owner to choose, read
95
+ `~/.plastic/_decision-tables.md` and follow the numbered-table procedure.
106
96
 
107
- **Implementation:**
108
- - Invoke `plastic-writing-plans` to create the implementation plan
109
- - Do NOT invoke any other skill. `plastic-writing-plans` is the next step.
97
+ ## Handoff
98
+
99
+ Why exploration complete. The enriched Why is captured (Context, Decisions, one
100
+ insight per ruling). Invoke /plastic-intent-speccing to consolidate it into spec.md.
101
+ Do not author spec.md here.
102
+
103
+ ## Gate position
104
+
105
+ - **Before:** an active intent exists with the lock armed.
106
+ - **Produces:** the enriched Why (`## Context`, `### Decisions`, one `## Insights` entry per ruling).
107
+ - **Next:** /plastic-intent-speccing consolidates the enriched Why into spec.md.
110
108
 
111
109
  ## Key Principles
112
110
 
113
111
  - **One question at a time** - Don't overwhelm with multiple questions
114
- - **Multiple choice preferred** - Easier to answer than open-ended when possible
112
+ - **Prose, not chips** - Ask conversational prose questions; skip multiple-choice menus
115
113
  - **YAGNI ruthlessly** - Remove unnecessary features from all designs
116
114
  - **Explore alternatives** - Always propose 2-3 approaches before settling
117
- - **Incremental validation** - Present design, get approval before moving on
115
+ - **Incremental validation** - Present design, collect a ruling before moving on
118
116
  - **Be flexible** - Go back and clarify when something doesn't make sense
@@ -0,0 +1,67 @@
1
+ {
2
+ "skill_name": "plastic-intent-brainstorming",
3
+ "notes": "Intent 66a. Spec for the QMD-first step in the Why/explore-context phase (surface prior decisions/specs/outcomes before grep/Read). Runner is intent 76; spec only. Intent 164 extended this file with the prose-grilling, conflict-supersession, and handoff-to-speccing scenarios; evals 2-4 are pending a real observed run per the plastic-evaluating-skills convention.",
4
+ "evals": [
5
+ {
6
+ "id": 1,
7
+ "scope": "behavior",
8
+ "set": "validation",
9
+ "prompt": "QMD is present. Brainstorming the active intent during the Why phase, the agent needs prior decisions and specs on caching.",
10
+ "expected_output": "In the explore-project-context (Why) step, before scanning the store with grep/Read, runs `ruby ~/.plastic/scripts/qmd-sync search \"caching decisions\"` to surface prior decisions, specs, or outcomes, then opens the authoritative intent file for any hit it acts on. No-op fallback to INDEX.md / file scan when QMD is absent.",
11
+ "files": [],
12
+ "assertions": [
13
+ {
14
+ "type": "human",
15
+ "check": "qmd-sync search is run during Why before grep/Read; authoritative file opened for any hit",
16
+ "observed": "SKILL.md (or agent file) carries the QMD-first step: run qmd-sync search before grep/Read, then open the authoritative file; no-op fallback when QMD is absent",
17
+ "result": "pass"
18
+ }
19
+ ]
20
+ },
21
+ {
22
+ "id": 2,
23
+ "scope": "behavior",
24
+ "set": "validation",
25
+ "prompt": "During Why exploration for intent X, the owner first rules that a setting ships as a CLI flag. Later in the same session, after more discussion, the owner rules that it should ship as a config-file setting instead, explicitly reversing the earlier call.",
26
+ "expected_output": "The skill persists BOTH rulings as separate insight-append calls with --stage Why: one for the CLI-flag ruling when it was made, and a second for the config-file ruling that names the CLI-flag ruling as superseded and states that this ruling supersedes it. Neither call is skipped, merged, or batched.",
27
+ "files": [],
28
+ "assertions": [
29
+ {
30
+ "type": "human",
31
+ "check": "two separate `ruby ~/.plastic/scripts/insight-append {intent_dir} \"<ruling text>\" --stage Why --author human` calls are made, one per ruling, immediately as each ruling lands; the second insight names the superseded CLI-flag ruling and states supersession",
32
+ "result": "expect-pass"
33
+ }
34
+ ]
35
+ },
36
+ {
37
+ "id": 3,
38
+ "scope": "behavior",
39
+ "set": "train",
40
+ "prompt": "Brainstorming a new intent about notification delivery, the agent needs to learn the owner's preferred channel (email, push, or SMS).",
41
+ "expected_output": "The agent asks a single conversational prose question about the preferred channel, one at a time, phrased as a sentence rather than a bulleted or lettered multiple-choice menu.",
42
+ "files": [],
43
+ "assertions": [
44
+ {
45
+ "type": "human",
46
+ "check": "the question is prose, not a chip/lettered multiple-choice menu; only one question is asked per message",
47
+ "result": "expect-pass"
48
+ }
49
+ ]
50
+ },
51
+ {
52
+ "id": 4,
53
+ "scope": "behavior",
54
+ "set": "train",
55
+ "prompt": "Design for intent Y is presented and the owner has ruled on every open section.",
56
+ "expected_output": "The skill states the enriched Why is captured (Context, Decisions, one insight per ruling) and invokes /plastic-intent-speccing as the handoff. It does not write spec.md itself.",
57
+ "files": [],
58
+ "assertions": [
59
+ {
60
+ "type": "code",
61
+ "check": "no spec.md write action is taken by this skill; the terminal message names /plastic-intent-speccing and states spec.md is not authored here",
62
+ "result": "expect-pass"
63
+ }
64
+ ]
65
+ }
66
+ ]
67
+ }