@zalom/plastic 1.0.3 → 1.1.1

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 (130) hide show
  1. package/PLASTIC-reference.md +11 -11
  2. package/PLASTIC.md +11 -9
  3. package/README.md +48 -1
  4. package/agents/plastic-enforcer.md +8 -5
  5. package/agents/plastic-future-intent-researcher.md +1 -1
  6. package/agents/plastic-intent-curator.md +9 -10
  7. package/agents/plastic-spec-specialist.md +9 -6
  8. package/bin/plastic.js +2 -2
  9. package/hooks/check-update +1 -1
  10. package/hooks/continue +1 -1
  11. package/package.json +1 -1
  12. package/scripts/dashboard.rb +29 -24
  13. package/scripts/doctor.rb +188 -9
  14. package/scripts/end-intent +330 -0
  15. package/scripts/hook-code-gate +1 -1
  16. package/scripts/hook-continue +2 -2
  17. package/scripts/hook-create-gate +2 -2
  18. package/scripts/hook-session-start +1 -1
  19. package/scripts/install.rb +2 -1
  20. package/scripts/lib/bridge.rb +116 -3
  21. package/scripts/lib/dashboard_banner.rb +8 -9
  22. package/scripts/lib/installer_core.rb +17 -8
  23. package/scripts/lib/legacy_bookend_amnesty.rb +35 -0
  24. package/scripts/lib/release_guard.rb +62 -0
  25. package/scripts/lib/roadmap_queue.rb +285 -0
  26. package/scripts/lib/roadmap_savepoint.rb +213 -0
  27. package/scripts/lib/store_provisioning.rb +1 -1
  28. package/scripts/lib/worktree.rb +21 -0
  29. package/scripts/new-intent +2 -1
  30. package/scripts/read-config +3 -3
  31. package/scripts/roadmap-next +44 -0
  32. package/scripts/roadmap-savepoint +64 -0
  33. package/scripts/{versions.rb → rollback.rb} +33 -41
  34. package/scripts/update.rb +1 -1
  35. package/skills/_active-intent-gate.md +1 -1
  36. package/skills/_decision-tables.md +50 -0
  37. package/skills/auto/SKILL.md +69 -68
  38. package/skills/auto/evals/evals.json +4 -4
  39. package/skills/auto/references/agent-architecture.md +2 -2
  40. package/skills/continuing/SKILL.md +23 -130
  41. package/skills/continuing/evals/evals.json +26 -80
  42. package/skills/dashboard/SKILL.md +18 -15
  43. package/skills/dashboard/references/classification.md +3 -3
  44. package/skills/dashboard/templates/dashboard-global.md +8 -23
  45. package/skills/dashboard/templates/dashboard-project.md +7 -26
  46. package/skills/doctor/SKILL.md +3 -3
  47. package/skills/install/SKILL.md +10 -10
  48. package/skills/{brainstorming → intent-brainstorming}/SKILL.md +43 -45
  49. package/skills/intent-brainstorming/evals/evals.json +67 -0
  50. package/skills/{brainstorming → intent-brainstorming}/references/design-principles.md +12 -17
  51. package/skills/intent-continuing/SKILL.md +99 -0
  52. package/skills/intent-continuing/evals/evals.json +145 -0
  53. package/skills/intent-continuing/references/context-management.md +28 -0
  54. package/skills/{creating-intent → intent-creating}/SKILL.md +3 -3
  55. package/skills/{creating-intent → intent-creating}/evals/evals.json +1 -1
  56. package/skills/{intent-discovery → intent-discovering}/SKILL.md +1 -1
  57. package/skills/intent-ending/SKILL.md +151 -0
  58. package/skills/intent-ending/evals/evals.json +74 -0
  59. package/skills/{executing-plan → intent-executing}/SKILL.md +75 -15
  60. package/skills/intent-executing/evals/evals.json +66 -0
  61. package/skills/{brainstorming-grill-me → intent-grilling}/SKILL.md +4 -4
  62. package/skills/{linking-intents → intent-linking}/SKILL.md +1 -1
  63. package/skills/{linking-intents → intent-linking}/evals/evals.json +1 -1
  64. package/skills/{lock → intent-locking}/SKILL.md +1 -1
  65. package/skills/{writing-plans → intent-planning}/SKILL.md +48 -20
  66. package/skills/intent-planning/evals/evals.json +66 -0
  67. package/skills/{writing-plans → intent-planning}/references/plan-format.md +31 -7
  68. package/skills/{research → intent-researching}/SKILL.md +2 -2
  69. package/skills/{research → intent-researching}/evals/evals.json +1 -1
  70. package/skills/{savepoint → intent-savepoint}/SKILL.md +13 -1
  71. package/skills/intent-speccing/SKILL.md +69 -0
  72. package/skills/intent-speccing/evals/evals.json +126 -0
  73. package/skills/intent-speccing/references/per-section-fill-rules.md +92 -0
  74. package/skills/intent-speccing/references/self-verify-checklist.md +38 -0
  75. package/skills/intent-starting/SKILL.md +2 -2
  76. package/skills/intent-starting/evals/evals.json +2 -2
  77. package/skills/project-continuing/SKILL.md +104 -0
  78. package/skills/project-continuing/evals/evals.json +100 -0
  79. package/skills/project-continuing/references/board-fill.md +33 -0
  80. package/skills/{creating-project → project-creating}/SKILL.md +2 -2
  81. package/skills/releasing/SKILL.md +66 -14
  82. package/skills/releasing/references/release-lines.md +105 -0
  83. package/skills/roadmap/SKILL.md +7 -1
  84. package/skills/roadmap/references/file-format.md +30 -1
  85. package/skills/roadmap/references/operations.md +26 -6
  86. package/skills/roadmap-continuing/SKILL.md +85 -0
  87. package/skills/roadmap-continuing/evals/evals.json +82 -0
  88. package/skills/roadmap-continuing/references/liveness-ranking.md +56 -0
  89. package/skills/{versions → rollback}/SKILL.md +30 -20
  90. package/skills/{creating-skills → skill-creating}/SKILL.md +2 -2
  91. package/skills/{creating-skills → skill-creating}/evals/evals.json +5 -5
  92. package/skills/{creating-skills → skill-creating}/references/progressive-disclosure.md +2 -2
  93. package/skills/{evaluating-skills → skill-evaluating}/SKILL.md +1 -1
  94. package/skills/{evaluating-skills → skill-evaluating}/evals/evals.json +3 -3
  95. package/skills/{intent-curator → store-curating}/SKILL.md +6 -7
  96. package/skills/{intent-curator → store-curating}/evals/evals.json +1 -1
  97. package/skills/{managing-index → store-indexing}/SKILL.md +6 -7
  98. package/skills/{managing-index → store-indexing}/evals/evals.json +1 -1
  99. package/skills/{add-project-store → store-provisioning}/SKILL.md +2 -2
  100. package/skills/tutorial/SKILL.md +65 -0
  101. package/skills/tutorial/evals/evals.json +186 -0
  102. package/skills/tutorial/references/track-1-guided.md +123 -0
  103. package/skills/tutorial/references/track-2-auto.md +95 -0
  104. package/skills/tutorial/references/track-3-projects-and-roadmaps.md +110 -0
  105. package/skills/uninstall/SKILL.md +2 -2
  106. package/skills/update/SKILL.md +3 -3
  107. package/templates/agents.md +7 -7
  108. package/templates/config.yml +2 -1
  109. package/templates/index.md +4 -1
  110. package/skills/brainstorming/evals/evals.json +0 -22
  111. package/skills/savepoint/references/context-management.md +0 -32
  112. /package/skills/{creating-intent → intent-creating}/references/lifecycle.md +0 -0
  113. /package/skills/{creating-intent → intent-creating}/references/wikilinks.md +0 -0
  114. /package/skills/{executing-plan → intent-executing}/code-quality-reviewer-prompt.md +0 -0
  115. /package/skills/{executing-plan → intent-executing}/implementer-prompt.md +0 -0
  116. /package/skills/{executing-plan → intent-executing}/spec-reviewer-prompt.md +0 -0
  117. /package/skills/{linking-intents → intent-linking}/references/zettelkasten.md +0 -0
  118. /package/skills/{continuing → intent-savepoint}/references/context-management.md +0 -0
  119. /package/skills/{creating-project → project-creating}/references/hubs-projects.md +0 -0
  120. /package/skills/{creating-project → project-creating}/references/project-scaffolding.md +0 -0
  121. /package/skills/{creating-skills → skill-creating}/references/agents.md +0 -0
  122. /package/skills/{creating-skills → skill-creating}/references/evals.md +0 -0
  123. /package/skills/{creating-skills → skill-creating}/references/hooks.md +0 -0
  124. /package/skills/{creating-skills → skill-creating}/references/scripts.md +0 -0
  125. /package/skills/{creating-skills → skill-creating}/references/skills.md +0 -0
  126. /package/skills/{creating-skills → skill-creating}/scripts/scaffold.rb +0 -0
  127. /package/skills/{evaluating-skills → skill-evaluating}/assets/eval-template.json +0 -0
  128. /package/skills/{evaluating-skills → skill-evaluating}/references/convention-checks.md +0 -0
  129. /package/skills/{evaluating-skills → skill-evaluating}/references/eval-methodology.md +0 -0
  130. /package/skills/{managing-index → store-indexing}/references/zettelkasten-linking.md +0 -0
@@ -1,38 +1,54 @@
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
16
16
  supersedes them) for the sharpest gating and synthesis. This is advice only: it changes no
17
17
  behavior and blocks nothing if ignored. It concerns the human's MAIN session; dispatched
18
- subagents keep their pinned tier and never resolve to Fable.
18
+ subagents keep their pinned tier and never resolve to Fable, unless an explicit
19
+ `agents.models.<name>` config override names Fable for that role, in which case the override
20
+ is honored as written.
19
21
 
20
22
  ## Precondition
21
23
 
22
- An active intent MUST exist in INDEX.md. If none exists, refuse: "No active intent found. Create one first with /plastic-creating-intent."
24
+ An active intent MUST exist in INDEX.md. If none exists, refuse: "No active intent found. Create one first with /plastic-intent-creating."
23
25
 
24
26
  If multiple active intents exist, ask the user which one to deliver (this is the only question auto asks).
25
27
 
26
28
  **Picking work when no intent is specified.** If the user says "auto" without naming an
27
- intent and none is active, consult the dashboard's machine-readable queue to choose the
28
- next dispatchable intent:
29
+ intent and none is active, consult the roadmap first (the primary planning surface), then
30
+ fall back to the dashboard queue. Read the tier's mid-flight roadmap:
31
+
32
+ ```bash
33
+ ruby ~/.plastic/scripts/roadmap-next --roadmaps-dir <tier>/roadmaps
34
+ ```
35
+
36
+ Branch on `state`:
37
+ - `dispatchable`: work its `dispatchable_queue` in `rank` order (the head is the next batch
38
+ entry). These are the current batch's `queued` intents, parallel-safe within the wave.
39
+ - `in_flight`: the frontier batch is still delivering. Report it and wait. Do NOT dispatch a
40
+ later batch and do NOT fall through to the dashboard, the roadmap is live.
41
+ - `none` or `exhausted`: no roadmap, or nothing left to dispatch. Fall back to the dashboard
42
+ queue below. (The global store has no roadmap, so it always reports `none` and falls back.)
43
+
44
+ Dashboard fallback:
29
45
 
30
46
  ```bash
31
47
  ruby ~/.plastic/scripts/dashboard.rb all --json
32
48
  ```
33
49
 
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
50
+ Work `dispatchable_queue` in `rank` order (these are `defer`/`research` dispositions -
51
+ safe to deliver autonomously). Leave `human_only` and `next_big_thing` for the user - those
36
52
  are `drive`/`triage` items the human should lead. See the `plastic-dashboard` skill.
37
53
 
38
54
  QMD-first (when available): when the user describes the work to deliver rather than naming an
@@ -65,7 +81,7 @@ and artifact depth to that size. Extended walkthrough: `references/tiers.md`.
65
81
 
66
82
  ## Arm the Lifecycle Gate (do this FIRST)
67
83
 
68
- Immediately after selecting the intent before any other work arm auto mode. This
84
+ Immediately after selecting the intent - before any other work - arm auto mode. This
69
85
  writes the session bridge that makes the code-edit gate live, so project code cannot be
70
86
  edited before the plan exists (the gate applies to YOU, the orchestrator):
71
87
 
@@ -88,7 +104,7 @@ Honor the cycle: What → Why (spec.md) → How (plan.md + actions/ + checklist.
88
104
 
89
105
  ## Flags
90
106
 
91
- - `--skip-permissions` bypass hard stops on destructive actions on existing projects. Full trust mode. Default: off.
107
+ - `--skip-permissions` - bypass hard stops on destructive actions on existing projects. Full trust mode. Default: off.
92
108
 
93
109
  ## Team Spin-Up
94
110
 
@@ -104,11 +120,13 @@ Roster (one role per cycle stage):
104
120
  - **plastic-executor** (code + checklist + `## Insights`)
105
121
  - **plastic-enforcer** (orchestrates + gates; that is YOU)
106
122
 
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.
123
+ 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
124
 
109
125
  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
126
 
111
- Dispatch-time model contract (belt-and-braces): alongside the preamble, resolve each specialist's model through the config chain (`read-config agents.models.<basename> --project <repo>`: project override, then global, then the shipped tier default) and pass it explicitly at dispatch. Never rely on the dispatched role's frontmatter alone; a resolved subagent model is never Fable.
127
+ Dispatch-time model contract (belt-and-braces): alongside the preamble, resolve each specialist's model through the config chain (`read-config agents.models.<basename> --project <repo>`: project override, then global, then the shipped tier default) and pass it explicitly at dispatch. Never rely on the dispatched role's frontmatter alone; a resolved subagent model is never Fable,
128
+ unless an explicit `agents.models.<name>` config override names Fable for that role, in which
129
+ case the override is honored as written.
112
130
 
113
131
  Completion report (require-then-synthesize): every dispatched specialist MUST end with a structured completion report as its final message. The preamble's `REPORT_CONTRACT` injects this and the role prompts carry the per-role format (see `references/agent-report-contract.md`). Because child-agent honor is best-effort across harnesses, this is decision-shaping, not a hard block. When a specialist returns no usable report (it went idle, emitted only a bare ping, or its message was lost to a mid-run interjection), run `scripts/agent-report <intent_dir> --role <role>` to synthesize a deterministic filesystem-derived report so the handoff account always exists. Use the agent-authored report when present, the synthesized one otherwise.
114
132
 
@@ -168,15 +186,15 @@ this is worth doing, or proceed).
168
186
  When entering at Why stage:
169
187
 
170
188
  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:
189
+ 2. Assess gaps - what decisions are missing? What context is incomplete?
190
+ 3. Self-directed research - read code, search docs, explore related intents (via wikilinks in `## Links`), web search if needed. NO questions to human.
191
+ 4. Adaptive budget - assess complexity and set your own research budget:
174
192
  - Simple (config change, small feature): 2-3 research steps
175
193
  - Medium (new feature, integration): 5-8 research steps
176
194
  - Complex (new project, architecture): 10-15 research steps
177
- 5. Make decisions pick best option, document in `## Context > ### Decisions` with rationale
195
+ 5. Make decisions - pick best option, document in `## Context > ### Decisions` with rationale
178
196
  6. Log all autonomous decisions in `## Insights` with `(autonomous)` marker: "Decision: chose X because Y (autonomous)"
179
- 7. Write `spec.md` consolidated specification
197
+ 7. Write `spec.md` - consolidated specification
180
198
  8. Notify user (Why briefing): brief per `references/human-report-contract.md`
181
199
  (State: the approach chosen, one line; Risk: the main trade-off; Call: the one decision
182
200
  needed, approve or pick an option).
@@ -191,9 +209,9 @@ intent birth and persists at every tier; only writing `ACTION_N.md` files into i
191
209
  only (S/M leave the directory empty).
192
210
 
193
211
  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
212
+ 2. Otherwise, write `plan.md` directly - implementation plan with numbered tasks
213
+ 3. Write `ACTION_N.md` files into the existing `actions/` directory (one per task, self-contained) - L only
214
+ 4. Write `checklist.md` - execution registry with checkboxes covering all actions
197
215
  5. Notify user (How briefing): brief per `references/human-report-contract.md`
198
216
  (State: the plan shape, task count and what it builds; Risk: the riskiest task or
199
217
  dependency; Call: approve the plan to build).
@@ -205,9 +223,9 @@ Then proceed to Exec.
205
223
  If the plan calls for creating a new project (the intent is an implementation intent that needs a new codebase):
206
224
 
207
225
  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:
226
+ 2. **Confirm path with user** - this is the ONE human interaction during auto delivery:
209
227
  > "Creating project `<slug>` at `<path>`. Confirm path, or provide alternative."
210
- 3. Invoke `plastic-creating-project` skill
228
+ 3. Invoke `plastic-project-creating` skill
211
229
  4. The global intent is now Completed (creating-project handles this)
212
230
  5. The tactical mirror in the project store becomes the active intent
213
231
  6. Continue execution from the project directory using the tactical intent
@@ -215,7 +233,7 @@ If the plan calls for creating a new project (the intent is an implementation in
215
233
  ## Exec Phase
216
234
 
217
235
  1. If `superpowers:subagent-driven-development` or `superpowers:executing-plans` is available, delegate execution to it
218
- 2. Otherwise invoke `plastic-executing-plan`
236
+ 2. Otherwise invoke `plastic-intent-executing`
219
237
  3. Execute actions from checklist sequentially
220
238
  4. Check off items in `checklist.md` as completed
221
239
  5. Append observations to `## Insights` with `(autonomous)` marker
@@ -224,7 +242,7 @@ If the plan calls for creating a new project (the intent is an implementation in
224
242
  (State: what got built and the test result; Risk: residual failures or deviations;
225
243
  Call: go to review, or done).
226
244
 
227
- ## Permission Model Safe-by-Default
245
+ ## Permission Model - Safe-by-Default
228
246
 
229
247
  The agent MUST prefer non-destructive routes:
230
248
 
@@ -232,7 +250,7 @@ The agent MUST prefer non-destructive routes:
232
250
  |---|---|
233
251
  | Drop table | Rename to `_deprecated_<table>`, flag for cleanup |
234
252
  | Delete files | Move to `.archive/` or backup branch |
235
- | Alter column | Additive migration new column + backfill |
253
+ | Alter column | Additive migration - new column + backfill |
236
254
  | Remove feature | Feature flag off, code stays until human confirms |
237
255
  | Database migration | Backup before migration, keep rollback path |
238
256
 
@@ -247,7 +265,7 @@ With `--skip-permissions`, the agent logs the action in Insights but proceeds wi
247
265
 
248
266
  ### Greenfield Exception
249
267
 
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.
268
+ 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
269
 
252
270
  ## Completion
253
271
 
@@ -258,55 +276,38 @@ During initial project creation, all decisions are non-destructive by definition
258
276
  and End tail in PLASTIC.md `## Delivery Isolation and the Single-Owner Lock`).
259
277
  3. Write `## Outcome` summary in the intent file (1-2 sentences)
260
278
  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).
279
+ 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
280
  2. Read `~/.plastic/projects/{slug}/project.yml`. If the file doesn't exist or has no `release` key, skip to step 5.
263
281
  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."
282
+ - `commit` - git add + commit (same as default, proceed to step 5)
283
+ - `commit_and_push` - git add + commit + push
284
+ - `manual` - skip auto-commit, notify user: "Release configured as manual - commit when ready."
267
285
  4. If `release.verify` is set, run the verify command (e.g. `bundle exec rake test`):
268
286
  - **Exit 0 (green):** proceed to sub-step 5
269
287
  - **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.
288
+ - `fix_and_retry` - attempt to fix the failure, re-run verify (max 2 retries)
289
+ - `stop` - write `savepoint.md` with current state, notify user: "Verify failed - savepoint written.", **STOP**
290
+ - `manual` - notify user: "Verify failed: [summary]. Resolve manually."
291
+ 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
292
  5. Review `## Insights` for observations that should spawn future intents. If any:
275
- - Create them (using `plastic-creating-intent` conventions)
293
+ - Create them (using `plastic-intent-creating` conventions)
276
294
  - 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:
280
- ```bash
281
- ruby -r ~/.plastic/scripts/lib/bridge -e 'Bridge.append_terminal_savepoint("<intent_dir>", "delivered")'
282
- ```
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:
295
+ 6. Run the mechanical close through `plastic-intent-ending`: it owns steps 1-6 of the Done
296
+ procedure (outcome/INDEX/savepoint/commit, disarm, and the QMD reindex last) as ONE
297
+ delegation, not five separate one-liners restated here. Run its backing script for the
298
+ outcome/INDEX/savepoint/commit core, passing `--index-note` with a rich Completed/
299
+ Abandoned entry description (mode/tier, what shipped or why abandoned, suite result):
302
300
  ```bash
303
- ruby ~/.plastic/scripts/qmd-sync reindex --store <store-root> --async
301
+ ruby ~/.plastic/scripts/end-intent --store <store_path> --id <ID> --disposition delivered \
302
+ --index-note "<mode, tier>; <what shipped>; <suite result>"
304
303
  ```
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`
304
+ (Use `--disposition abandoned` when the intent is being moved to `## Abandoned`.) Then
305
+ follow `plastic-intent-ending`'s Step 5 (disarm: `Bridge.disarm_auto` on this auto/curator
306
+ path, the plain-remove branch) and Step 6 (QMD reindex, async, last) exactly as that skill
307
+ states them. Never leave an orphaned worktree; run `git worktree prune` on a stale
308
+ reference. If any of this ever needs to change, change `plastic-intent-ending`, not this
309
+ skill.
310
+ 7. Notify user (Done briefing): brief per `references/human-report-contract.md`
310
311
  (State: the delivered impact; Risk: residual risk; Call: the decision left to you, merge,
311
312
  release, or accept). See `outcome.md` for details.
312
313
 
@@ -315,7 +316,7 @@ During initial project creation, all decisions are non-destructive by definition
315
316
  If the agent gets stuck (can't resolve a gap, dependency is missing, tests fail persistently):
316
317
  1. Log the blocker in `## Insights`
317
318
  2. Write `savepoint.md` with current state
318
- 3. Notify user: "Blocked on intent [ID] [name]: [description]. Savepoint written."
319
+ 3. Notify user: "Blocked on intent [ID] - [name]: [description]. Savepoint written."
319
320
  4. **STOP.** Do not attempt workarounds that could leave the project in a broken state.
320
321
 
321
322
  ## 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
 
@@ -1,141 +1,34 @@
1
1
  ---
2
2
  name: plastic-continuing
3
- description: Use when the user says "continue", "resume", or "pick up where we left off", or when starting a new session. Continues work with the latest project context: lands on the right dashboard, then presents choices. Boot (health check, core context, version, statusline) is owned by the SessionStart hook, not this skill. Does not drive work autonomously (that is plastic-auto).
3
+ description: >-
4
+ Use when the user says "continue", "resume", or "pick up where we left off", starts a new
5
+ session and wants to keep going, asks "what should I work on", or asks a where-was-I question
6
+ that never says "continue" (for example "where was I"). This is the front door for resuming
7
+ work: it dispatches to plastic-intent-continuing (a specific intent named to resume),
8
+ plastic-project-continuing (the default, general board landing), or
9
+ plastic-roadmap-continuing (a roadmap or delivery batch named to resume).
4
10
  user-invocable: true
5
11
  ---
6
12
 
7
- # Continuing
13
+ # Continuing - the front door
8
14
 
9
- `plastic-continuing` continues work. It presents the latest state via the dashboard and offers
10
- choices, then stops. It does NOT execute work autonomously (that is `plastic-auto`) and does
11
- NOT render the dashboard itself (it only invokes it).
15
+ `plastic-continuing` is the front door for resuming work (ruling 96: continuing routes,
16
+ starting does the lock plus resume plus work). It routes to exactly one of three skills and
17
+ does nothing else: no ledger-resume, no dashboard render, no roadmap read happens here.
12
18
 
13
- **Boot is not this skill's job.** The `hook-session-start` hook already runs by construction on
14
- every session start: it runs the core health check (`doctor --core`), primes `PLASTIC.md` +
15
- store/project state, and prints the `Plastic Core loaded — v{version}` banner. The
16
- `plastic-statusline` hook sets the statusline. So by the time this skill runs, core is loaded
17
- and healthy (or the banner already warned otherwise). This skill picks up from there and
18
- continues work. This is the seam future continue-flags build on (see [[39]]).
19
+ ## Route
19
20
 
20
- ## When to Use
21
- - UserPromptSubmit hook detects "continue" (automatic)
22
- - User says "continue", "resume", or "pick up where we left off"
23
- - Starting a new session and you want to resume work with the latest context
21
+ | Args / context | Route to |
22
+ |---|---|
23
+ | `--intent {id}`, or the user names one specific intent (by id or description) to resume | `plastic-intent-continuing` (intent route) |
24
+ | `--roadmap {slug}`, or the user asks to continue/resume a roadmap or delivery batch | `plastic-roadmap-continuing` (roadmap route) |
25
+ | bare "continue" / "resume" / no further target (default) | `plastic-project-continuing` (project route) |
24
26
 
25
- ## Determine Store
27
+ ## Announce, then hand off
26
28
 
27
- 1. **Global store** `~/.plastic/INDEX.md` exists global mode.
28
- 2. **Local store** a project store under `~/.plastic/projects/{slug}/` whose registered
29
- path (in `~/.plastic/projects.yml`) matches the current working directory → project mode.
30
- The SessionStart hook already detects this; here you only need the slug to scope the
31
- dashboard.
32
- 3. If neither exists → announce "No Plastic store found. Run /plastic-install."
29
+ State the chosen route in one line before delegating (this is the router's own "present state
30
+ before any ask" - the router asks nothing itself). Example: "Routing to the project board (no
31
+ specific intent or roadmap named)."
33
32
 
34
- ## Continue (present the dashboard)
35
-
36
- Land on the Markdown board via the `plastic-dashboard` skill. Rendering belongs there, not
37
- here — run the data payload and fill + present the matching template:
38
- - Project loaded → `ruby ~/.plastic/scripts/dashboard.rb project <slug> --data`
39
- - Otherwise → `ruby ~/.plastic/scripts/dashboard.rb continue --data`
40
-
41
- Fill the matching template from this skill's `templates/` and **present the filled Markdown
42
- in your reply** (every time, non-optional). If the reply does not contain the filled Markdown,
43
- the user sees nothing — tool-call stdout and hook `additionalContext` are both invisible to
44
- them. `hook-continue` also emits a one-line `systemMessage` summary as a hook-owned fallback;
45
- treat it as a floor only, never as a substitute for presenting the full board here. See
46
- `plastic-dashboard` for the fill rules and entry flow.
47
-
48
- The board load runs the scoped store check on every load (`doctor --store <scope>`): the
49
- global board runs `--store global` and a project board runs `--store <slug>`. The result
50
- arrives in the payload as `store_health`; surface it as a one-line store-health note. It is
51
- non-fatal (a warn or fail is shown as data, it does not block continuing).
52
-
53
- ### Then stop
54
- Present "here is the state, what next?" and wait. Offer active intents first, then future
55
- intents. Do not start executing work. The branches below are the only follow-ups:
56
- - User/agent names a specific intent to continue → **Conditional ledger-resume** (below).
57
- - User says "auto" / an agent is instructed to deliver → hand to `plastic-auto`.
58
-
59
- ## Conditional Ledger-Resume
60
-
61
- Fires ONLY when the user explicitly asks to continue a SPECIFIC intent, or an agent is
62
- instructed to continue one. It is not part of every boot.
63
-
64
- QMD-first (when available): when the user names the intent by description rather than id, before
65
- scanning the store with grep/Read run `ruby ~/.plastic/scripts/qmd-sync search "<terms>"` to
66
- surface the candidate intent, then open the authoritative intent file for the hit you resume. The
67
- command is a no-op when QMD is absent, so fall back to the existing INDEX.md / file scan.
68
-
69
- For that intent's directory:
70
-
71
- 1. **Read `savepoint.md` FIRST (intent 81).** It is a deterministic, append-only ledger
72
- (one line per event, newest at the bottom): `{utc-iso8601} {Stage} {milestone}`. Classify
73
- the state from the **last line** alone, then verify ONLY that line's artifact. The bookends
74
- are fixed: first line `What created`, last line either a cycle position or
75
- `Done delivered|abandoned`.
76
-
77
- | Last line | State | Verify only |
78
- |---|---|---|
79
- | `What {id}--{slug}.md` | born / parked | intent file exists |
80
- | `Why started` | Why entered, no spec yet | spec.md not yet real; continue Why |
81
- | `Why spec.md created` | Why done | spec.md present; continue to How |
82
- | `How started` / `How plan.md created` | How in progress | plan.md; continue How |
83
- | `How checklist.md created` / `Exec started` | ready for / in Exec | plan.md + checklist.md present; continue Exec |
84
- | `Exec outcome.md created` | Exec done | outcome.md present; ready to complete |
85
- | `Done delivered` / `Done abandoned` | terminal | do NOT cycle-resume; INDEX is authoritative |
86
-
87
- 2. **Verify the stage file.** Confirm only the last line's artifact exists and is non-empty
88
- (ledger `How plan.md created` → `plan.md` must be present and non-empty). Do not re-probe
89
- every lifecycle file.
90
- 3. **Drift handling.** If the ledger's last line disagrees with files-on-disk, rebuild the
91
- ledger from filesystem state and note the correction. A rebuilt ledger is the file-landing
92
- skeleton (no `started`/`Done` lines), which still pins cycle position:
93
- ```bash
94
- ruby -r ~/.plastic/scripts/lib/bridge -e 'Bridge.rebuild_savepoint("<intent_dir>")'
95
- ```
96
- 4. **Derive the next step:**
97
- - First unchecked item in `checklist.md` if it exists, else
98
- - "advance to the next lifecycle stage" (e.g. ledger shows Why/spec.md → next is How).
99
- - The newest `## Insights` entry supplies human-readable context (Insights are
100
- append-only, newest at the bottom).
101
- 5. **Announce and stop:**
102
- ```
103
- Resuming intent [ID] — [name]
104
- Store: [global | project:<slug> | local]
105
- Stage: [from ledger last line]
106
- Next step: [first unchecked checklist item | advance to <stage>]
107
- Context: [newest ## Insights entry]
108
- Drift: [none | ledger rebuilt from filesystem]
109
- ```
110
- Then proceed with the next step. Autonomy is `plastic-auto`'s job — if the intent's
111
- `## Insights` contains `(autonomous)` entries, it was being delivered autonomously; hand
112
- to `plastic-auto` to continue from the current stage.
113
-
114
- ## Priority Order
115
-
116
- 1. **Active intents first** — surface work in progress.
117
- 2. **Project context** — if in a registered project, show governing + tactical intents.
118
- 3. **Stale future intents** — surface for triage (see below).
119
- 4. **Fresh future intents** — offer as next work.
120
-
121
- ## Stale Future Intents
122
-
123
- If a future intent's `created` date is older than the configured `stale_threshold_days`
124
- (default 3), surface it for triage without taking action:
125
-
126
- ```
127
- Stale future intents (no action taken):
128
-
129
- - [ID — name] (X days old)
130
- a) Activate — start working on it now
131
- b) Abandon — mark as abandoned
132
- c) Defer to agent: implement | research | ideate
133
- d) Auto — go fully autonomous (invokes plastic-auto)
134
- ```
135
-
136
- When the user activates a future intent, move it to `## Active` in INDEX.md and auto-commit.
137
-
138
- ## References
139
-
140
- - Read `references/context-management.md` for the full save/continue protocol and for
141
- debugging the resume flow.
33
+ Then hand off to the chosen skill. Do not inline any of the routed skill's own work here -
34
+ that belongs to the routes.