@zalom/plastic 1.14.1 → 2.0.0-alpha.10

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 (213) hide show
  1. package/PLASTIC.md +101 -294
  2. package/README.md +5 -6
  3. package/agents/plastic-advisor.md +18 -17
  4. package/agents/plastic-enforcer.md +57 -69
  5. package/agents/plastic-executor.md +34 -20
  6. package/agents/plastic-faux-advisor.md +18 -18
  7. package/bin/lib/context_budget.rb +453 -0
  8. package/bin/plastic-bench +78 -0
  9. package/config_asks.yml +38 -0
  10. package/hooks/capture +4 -0
  11. package/hooks/close +5 -0
  12. package/hooks/hooks.json +14 -42
  13. package/hooks/message-display +81 -0
  14. package/hooks/record +4 -0
  15. package/hooks/savepoint +5 -5
  16. package/package.json +3 -2
  17. package/scripts/agent-report +15 -10
  18. package/scripts/append-ledger +208 -0
  19. package/scripts/codex-hook +78 -90
  20. package/scripts/dashboard.rb +43 -14
  21. package/scripts/day-summary +53 -0
  22. package/scripts/doctor.rb +269 -43
  23. package/scripts/end-intent +170 -76
  24. package/scripts/exec-worktree +11 -20
  25. package/scripts/file-session-intent +61 -0
  26. package/scripts/hook-capture +255 -0
  27. package/scripts/hook-close +36 -0
  28. package/scripts/hook-message-display +74 -0
  29. package/scripts/hook-record +157 -0
  30. package/scripts/hook-savepoint +45 -0
  31. package/scripts/hook-session-start +128 -12
  32. package/scripts/install.rb +8 -6
  33. package/scripts/intent-screen +77 -0
  34. package/scripts/lib/agent_models.rb +1 -7
  35. package/scripts/lib/arm.rb +308 -0
  36. package/scripts/lib/backfill_intent.rb +316 -0
  37. package/scripts/lib/bridge.rb +24 -1597
  38. package/scripts/lib/compact_instructions.rb +56 -0
  39. package/scripts/lib/day_summary.rb +211 -0
  40. package/scripts/lib/doctor_core.rb +66 -88
  41. package/scripts/lib/doctor_session_ledger.rb +158 -0
  42. package/scripts/lib/exec_worktree.rb +14 -60
  43. package/scripts/lib/handoff.rb +184 -0
  44. package/scripts/lib/harness_text.rb +5 -4
  45. package/scripts/lib/hook_registry.rb +57 -106
  46. package/scripts/lib/insights.rb +3 -4
  47. package/scripts/lib/installer_core.rb +136 -41
  48. package/scripts/lib/intent_screen.rb +309 -0
  49. package/scripts/lib/intent_screen_ansi.rb +262 -0
  50. package/scripts/lib/lock.rb +6 -26
  51. package/scripts/lib/message_display.rb +290 -0
  52. package/scripts/lib/outcome_guard.rb +7 -5
  53. package/scripts/lib/project_validator.rb +30 -1
  54. package/scripts/lib/report_screen.rb +648 -0
  55. package/scripts/lib/roadmap_queue.rb +3 -3
  56. package/scripts/lib/roadmap_savepoint.rb +1 -1
  57. package/scripts/lib/rule_catalog.rb +6 -3
  58. package/scripts/lib/savepoint.rb +334 -0
  59. package/scripts/lib/scaffold_intent.rb +13 -179
  60. package/scripts/lib/screen_paint.rb +276 -0
  61. package/scripts/lib/session_backfill.rb +184 -0
  62. package/scripts/lib/session_close.rb +104 -0
  63. package/scripts/lib/session_git.rb +500 -0
  64. package/scripts/lib/session_ledger.rb +621 -0
  65. package/scripts/lib/store_discovery.rb +1 -1
  66. package/scripts/lib/store_provisioning.rb +1 -1
  67. package/scripts/maintenance-run +7 -7
  68. package/scripts/new-intent +63 -4
  69. package/scripts/plastic-lock +101 -41
  70. package/scripts/promote-session-item +150 -0
  71. package/scripts/read-config +3 -0
  72. package/scripts/rebuild-graph +1 -1
  73. package/scripts/report-screen +120 -0
  74. package/scripts/roadmap-next +2 -2
  75. package/scripts/rollback.rb +48 -3
  76. package/scripts/savepoint-note +67 -0
  77. package/scripts/scaffold-intent +37 -63
  78. package/scripts/session-commit +116 -0
  79. package/scripts/spawn-preamble +14 -7
  80. package/scripts/update.rb +7 -3
  81. package/scripts/write-handoff +60 -0
  82. package/skills/agent-advisor/SKILL.md +3 -3
  83. package/skills/agent-advisor/references/advisor-protocol.md +20 -20
  84. package/skills/auto/SKILL.md +223 -317
  85. package/skills/auto/evals/evals.json +10 -10
  86. package/skills/auto/references/agent-architecture.md +102 -90
  87. package/skills/auto/references/agent-report-contract.md +4 -21
  88. package/skills/auto/references/end-tail.md +47 -53
  89. package/skills/auto/references/human-report-contract.md +62 -56
  90. package/skills/conventions/SKILL.md +1 -3
  91. package/skills/conventions/references/lifecycle-and-savepoints.md +35 -1
  92. package/skills/conventions/references/locks-and-worktrees.md +62 -58
  93. package/skills/conventions/references/maintenance-and-revisions.md +12 -12
  94. package/skills/dashboard/SKILL.md +1 -1
  95. package/skills/direct/SKILL.md +66 -0
  96. package/skills/direct/references/request-signals.md +59 -0
  97. package/skills/doctor/SKILL.md +58 -11
  98. package/skills/doctor/report.md +3 -1
  99. package/skills/install/SKILL.md +11 -9
  100. package/skills/intent-continuing/SKILL.md +142 -91
  101. package/skills/intent-continuing/references/boarding-matrix.md +34 -0
  102. package/skills/intent-continuing/references/context-management.md +3 -3
  103. package/skills/intent-creating/SKILL.md +2 -2
  104. package/skills/intent-creating/references/lifecycle.md +1 -1
  105. package/skills/intent-ending/SKILL.md +34 -37
  106. package/skills/intent-ending/evals/evals.json +4 -4
  107. package/skills/intent-executing/SKILL.md +15 -46
  108. package/skills/intent-executing/plan-reviewer-prompt.md +39 -0
  109. package/skills/intent-speccing/SKILL.md +108 -51
  110. package/skills/intent-speccing/evals/evals.json +5 -5
  111. package/skills/intent-speccing/references/per-section-fill-rules.md +4 -4
  112. package/skills/intent-speccing/references/self-verify-checklist.md +1 -2
  113. package/skills/project-creating/SKILL.md +1 -1
  114. package/skills/releasing/SKILL.md +7 -8
  115. package/skills/tutorial/SKILL.md +2 -2
  116. package/skills/tutorial/references/track-1-guided.md +16 -18
  117. package/skills/tutorial/references/track-2-auto.md +12 -13
  118. package/skills/tutorial/references/track-3-projects-and-roadmaps.md +2 -2
  119. package/templates/agents.md +4 -7
  120. package/templates/config.yml +5 -0
  121. package/templates/intent-screen.md +17 -0
  122. package/templates/outcome.md +14 -1
  123. package/templates/project.yml +7 -0
  124. package/templates/report-state.md +11 -0
  125. package/templates/roadmap.md +1 -1
  126. package/templates/savepoint.md +2 -2
  127. package/templates/session-intent.md +29 -0
  128. package/agents/plastic-brainstorming.md +0 -48
  129. package/agents/plastic-future-intent-researcher.md +0 -35
  130. package/agents/plastic-intent-curator.md +0 -47
  131. package/agents/plastic-intent-discovery.md +0 -43
  132. package/agents/plastic-planner.md +0 -56
  133. package/agents/plastic-spec-specialist.md +0 -53
  134. package/hooks/auto-arm +0 -5
  135. package/hooks/bash-gate +0 -3
  136. package/hooks/continue +0 -31
  137. package/hooks/edit-gates +0 -3
  138. package/hooks/future-intent-check +0 -25
  139. package/hooks/gate-check +0 -12
  140. package/hooks/power-tools +0 -8
  141. package/scripts/hook-auto-arm +0 -51
  142. package/scripts/hook-bash-gate +0 -78
  143. package/scripts/hook-code-gate +0 -38
  144. package/scripts/hook-continue +0 -48
  145. package/scripts/hook-create-gate +0 -51
  146. package/scripts/hook-edit-gates +0 -58
  147. package/scripts/hook-future-intent-check +0 -90
  148. package/scripts/hook-gate-check +0 -169
  149. package/scripts/hook-links-gate +0 -54
  150. package/scripts/hook-lock-gate +0 -47
  151. package/scripts/hook-power-tools +0 -38
  152. package/scripts/hook-savepoint-pre +0 -32
  153. package/scripts/lib/codex_edit_gates.rb +0 -138
  154. package/scripts/lib/edit_gates.rb +0 -398
  155. package/scripts/lib/links_gate.rb +0 -140
  156. package/scripts/lib/qmd_hook.rb +0 -41
  157. package/scripts/lib/spec_header.rb +0 -83
  158. package/scripts/lib/start_intent.rb +0 -296
  159. package/scripts/start-intent +0 -89
  160. package/skills/_active-intent-gate.md +0 -26
  161. package/skills/auto/references/tiers.md +0 -100
  162. package/skills/continuing/SKILL.md +0 -34
  163. package/skills/continuing/evals/evals.json +0 -91
  164. package/skills/conventions/references/gates-and-enforcement.md +0 -53
  165. package/skills/conventions/references/tiers-and-dispatch.md +0 -135
  166. package/skills/doctor/references/gates-stuck-detection.md +0 -43
  167. package/skills/intent-brainstorming/SKILL.md +0 -118
  168. package/skills/intent-brainstorming/evals/evals.json +0 -67
  169. package/skills/intent-continuing/evals/evals.json +0 -145
  170. package/skills/intent-discovering/SKILL.md +0 -56
  171. package/skills/intent-grilling/SKILL.md +0 -108
  172. package/skills/intent-linking/SKILL.md +0 -128
  173. package/skills/intent-linking/evals/evals.json +0 -22
  174. package/skills/intent-linking/references/zettelkasten.md +0 -45
  175. package/skills/intent-locking/SKILL.md +0 -64
  176. package/skills/intent-planning/SKILL.md +0 -145
  177. package/skills/intent-planning/evals/evals.json +0 -81
  178. package/skills/intent-planning/references/plan-format.md +0 -130
  179. package/skills/intent-researching/SKILL.md +0 -123
  180. package/skills/intent-researching/evals/evals.json +0 -22
  181. package/skills/intent-savepoint/SKILL.md +0 -83
  182. package/skills/intent-savepoint/references/context-management.md +0 -32
  183. package/skills/intent-starting/SKILL.md +0 -151
  184. package/skills/intent-starting/evals/evals.json +0 -117
  185. package/skills/intent-starting/references/boarding-matrix.md +0 -35
  186. package/skills/project-continuing/SKILL.md +0 -119
  187. package/skills/project-continuing/evals/evals.json +0 -100
  188. package/skills/roadmap-continuing/SKILL.md +0 -89
  189. package/skills/roadmap-continuing/evals/evals.json +0 -82
  190. package/skills/skill-creating/SKILL.md +0 -75
  191. package/skills/skill-creating/evals/evals.json +0 -108
  192. package/skills/skill-creating/references/agents.md +0 -168
  193. package/skills/skill-creating/references/defaults-first.md +0 -23
  194. package/skills/skill-creating/references/evals.md +0 -41
  195. package/skills/skill-creating/references/hooks.md +0 -251
  196. package/skills/skill-creating/references/progressive-disclosure.md +0 -176
  197. package/skills/skill-creating/references/scripts.md +0 -166
  198. package/skills/skill-creating/references/skills.md +0 -169
  199. package/skills/skill-creating/scripts/scaffold.rb +0 -313
  200. package/skills/skill-evaluating/SKILL.md +0 -141
  201. package/skills/skill-evaluating/assets/eval-template.json +0 -12
  202. package/skills/skill-evaluating/evals/evals.json +0 -75
  203. package/skills/skill-evaluating/references/convention-checks.md +0 -76
  204. package/skills/skill-evaluating/references/eval-methodology.md +0 -154
  205. package/skills/store-curating/SKILL.md +0 -64
  206. package/skills/store-curating/evals/evals.json +0 -38
  207. package/skills/store-indexing/SKILL.md +0 -93
  208. package/skills/store-indexing/evals/evals.json +0 -22
  209. package/skills/store-indexing/references/zettelkasten-linking.md +0 -32
  210. package/skills/store-provisioning/SKILL.md +0 -55
  211. /package/skills/{project-continuing → intent-continuing}/references/board-fill.md +0 -0
  212. /package/skills/{roadmap-continuing → intent-continuing}/references/liveness-ranking.md +0 -0
  213. /package/skills/{intent-brainstorming → intent-speccing}/references/design-principles.md +0 -0
@@ -24,7 +24,7 @@ installed directory.
24
24
  | # | Step | Who does it |
25
25
  |---|---|---|
26
26
  | 0 | Precondition check | You, before touching outcome.md |
27
- | 1 | outcome.md + intent-file `## Outcome` summary | `scripts/end-intent` |
27
+ | 1 | backfill spec/plan/action/outcome from the record, self-check, intent-file `## Outcome` summary | `scripts/end-intent` |
28
28
  | 2 | INDEX.md terminal move (Active -> Completed/Abandoned) | `scripts/end-intent` |
29
29
  | 3 | savepoint `Done` bookend | `scripts/end-intent` |
30
30
  | 4 | store auto-commit | `scripts/end-intent` |
@@ -39,45 +39,42 @@ deliveries; separately, one session delivered four intents back to back and
39
39
  never ran the old step-5 one-liner at all, intent 188). Never restate
40
40
  outcome/INDEX/savepoint/disarm prose inline again; call `scripts/end-intent`.
41
41
 
42
- ### Step 0. Precondition (the gate is section-blind, not selective)
42
+ ### Step 0. Precondition (the record is what gets backfilled)
43
43
 
44
- `Bridge.check_gate` (scripts/lib/bridge.rb) is LIVE code already wired into
45
- the write-time hook. Its outcome.md rule is a blind scan of the WHOLE
46
- checklist.md: `content.scan(/^- \[ \]/)` counts every unchecked box, in
47
- every section, with no awareness of which section a box lives in. ANY
48
- unchecked box anywhere blocks the outcome.md write; there is no exemption
49
- for orchestrator-owned or completion-tracking items.
44
+ Nothing refuses the close any more (the 1.x write-time gate and `end-intent`'s
45
+ exit-6 structure gate were retired in 2.0, intents 302 and 308). What you leave
46
+ on disk is what the record becomes, so before the call:
50
47
 
51
48
  1. Read checklist.md. Tick every item as it is actually performed, including
52
49
  an item that describes the close itself: running this very procedure IS
53
- what that item describes, so tick it at the moment you begin the close,
54
- before authoring outcome.md. By the time outcome.md is written,
55
- checklist.md must read 100 percent checked; there is no other way past
56
- the gate.
50
+ what that item describes. An unchecked box is not a refusal, it is a
51
+ reported gap that lands verbatim in the backfilled `## Follow-ups`.
57
52
  2. Confirm every acceptance criterion in spec.md is verifiable (tests pass,
58
53
  or the manual check described in its HOW line was actually run).
59
- 3. The structure gate (intent 222) now enforces this: `scripts/end-intent`
60
- refuses with exit 6 and names the exact unchecked box (or any other
61
- structural gap: intent-file validity, lifecycle-artifact presence,
62
- `## Links` projection). On a refusal, fix via the OWNING tool, never a
63
- hand edit of the check's own output:
64
- - checklist/outcome content - finish it yourself, the same as before.
65
- - links projection - run
66
- `ruby ~/.plastic/scripts/maintenance-run --tool project-links --intent <id> --apply`.
67
- - a savepoint issue - advisory only (WARN, never blocks): run
68
- `plastic-intent-savepoint` to rebuild via `Bridge.rebuild_savepoint` if
69
- you want it clean, but it never refuses the close on its own.
70
- Then re-run `scripts/end-intent`.
54
+ 3. Decide what you have to say. A spec.md, plan.md, action file, or outcome.md
55
+ left as the scaffold placeholder is written from the record by
56
+ `scripts/end-intent` (the intent file's `## Intent`, `### Decisions`, and
57
+ `## Insights`, the checklist, the diff on the intent's own worktree). A
58
+ file you wrote, even under a still-present sentinel, is never touched.
59
+ Write outcome.md yourself when the summary deserves more than the
60
+ `--outcome-summary` line; otherwise let the backfill carry it.
71
61
 
72
62
  ### Step 1-5. Run `scripts/end-intent`
73
63
 
74
- First author outcome.md for real (never leave the scaffold placeholder in
75
- place): copy `templates/outcome.md`, set the frontmatter to
76
- `disposition: delivered` or `disposition: abandoned`, and fill `## Summary`,
77
- `## Delivered`, `## Verification`, `## Follow-ups`. On abandon, `## Summary`
78
- states the abandonment reason and the trail (see Pivot below). Also author
64
+ Author outcome.md yourself when it deserves prose: copy `templates/outcome.md`,
65
+ set the frontmatter to `disposition: delivered` or `disposition: abandoned`, and
66
+ fill `## Summary`, `## Delivered`, `## Verification`, `## Follow-ups`. `## Delivered` is a
67
+ `| Row | What |` table: one row per thing delivered, in plain wording a reader
68
+ recognizes, not a method name or an implementation summary (that detail
69
+ belongs in `## Summary`). Each row's label must appear as a standalone token
70
+ in an action-file heading (`### S1 - ...` proves row S1); that heading's
71
+ matrix rows become the row's Proven-by cell on `report-screen delivered`'s
72
+ post-delivery screen. `## Needs you` is the literal None or a
73
+ `| N | What | Why |` table. On abandon, `## Summary` states the abandonment reason and the trail (see Pivot
74
+ below). A placeholder outcome.md is backfilled from the record instead, with the
75
+ close's disposition and the `--outcome-summary` line as its summary. Also author
79
76
  the rich INDEX entry note now (a short line in the store's existing
80
- Completed/Abandoned convention: mode/tier, what shipped or why it was
77
+ Completed/Abandoned convention: mode, what shipped or why it was
81
78
  abandoned, suite result, merge/spawn notes); content authoring stays with
82
79
  you, `--index-note` only appends what you write.
83
80
 
@@ -91,9 +88,11 @@ ruby ~/.plastic/scripts/end-intent \
91
88
  --index-note "<rich Completed/Abandoned entry description>"
92
89
  ```
93
90
 
94
- This does all of steps 1-5 in order: guards outcome.md (a missing or
95
- still-placeholder file is caught by the structure gate first and exits 6; a
96
- wrong-disposition file exits 2; either way it authors nothing), stamps the
91
+ This does all of steps 1-5 in order: backfills every missing or placeholder
92
+ spec.md, plan.md, action file, and outcome.md from the record (never a file
93
+ you wrote), runs doctor's per-intent structure check and the outcome guard as
94
+ a self-check that reports on stderr and proceeds (an unchecked box, a
95
+ malformed intent file, a wrong-disposition outcome.md you wrote), stamps the
97
96
  intent file's `## Outcome` section, moves the INDEX.md
98
97
  line from `## Active` to `## Completed` or `## Abandoned` (dated today,
99
98
  idempotent, accepting either a real em dash or a plain hyphen as the id/
@@ -127,8 +126,7 @@ correctly, for the first time on that path (D7).
127
126
 
128
127
  Exit codes: 0 success (the intent is closed AND its delivery lock is gone);
129
128
  1 a usage or resolution failure, OR an INDEX id that resolves to neither
130
- `## Active` nor the terminal section; 2 the outcome.md guard refusing (fix
131
- outcome.md and re-run, nothing was written); 3 steps 1-4 already committed
129
+ `## Active` nor the terminal section; 3 steps 1-4 already committed
132
130
  but disarm could not verify the lock is gone afterward (run `/plastic-doctor
133
131
  check the lock status`); 4 a live foreign session holds the lock (back off);
134
132
  5 the code worktree is dirty (commit/stash first, or pass
@@ -171,8 +169,7 @@ historical record of what was planned.
171
169
 
172
170
  ## Routing
173
171
 
174
- `plastic-releasing`, `plastic-auto`, `plastic-intent-executing`, the curator
175
- agent, `store-curating`, and `store-indexing` all delegate their mechanical
172
+ `plastic-releasing`, `plastic-auto`, and `plastic-intent-executing` all delegate their mechanical
176
173
  close to this skill (or call `scripts/end-intent` directly for steps 1-5).
177
174
  None of them restate the outcome/INDEX/savepoint/disarm prose inline any
178
175
  more; if you find one that does, that surface has drifted and should route
@@ -7,11 +7,11 @@
7
7
  "scope": "behavior",
8
8
  "set": "train",
9
9
  "prompt": "checklist.md has one unchecked non-completion item. Try to complete the intent.",
10
- "expected_output": "Defers to the existing Bridge.check_gate hard gate rather than writing outcome.md; tells the user to finish the checklist item first instead of fighting the deny.",
10
+ "expected_output": "Ticks or finishes the item before calling scripts/end-intent, because an unchecked box is reported by the structure self-check and lands verbatim in the backfilled Follow-ups; never a refusal (the write-time gate was removed in 2.0, intents 302 and 308).",
11
11
  "files": [],
12
12
  "assertions": [
13
- { "type": "human", "check": "SKILL.md Step 0 states the gate blocks outcome.md while unchecked non-completion items remain, and instructs finishing the checklist rather than attempting the write", "result": "expect-pass" },
14
- { "type": "code", "check": "Bridge.check_gate(intent_dir, 'outcome.md') returns a non-nil block reason when checklist.md has an unchecked '- [ ]' item (scripts/lib/bridge.rb)", "result": "pass" }
13
+ { "type": "human", "check": "SKILL.md Step 0 states that nothing refuses the close, that an unchecked box is a reported gap landing in Follow-ups, and instructs finishing the checklist before the call", "result": "expect-pass" },
14
+ { "type": "code", "check": "scripts/end-intent exits 0 on an unchecked '- [ ]' item and prints 'structure check: intent_checklist_complete' (test/end_intent_test.rb)", "result": "pass" }
15
15
  ]
16
16
  },
17
17
  {
@@ -53,7 +53,7 @@
53
53
  "scope": "triggering",
54
54
  "set": "validation",
55
55
  "prompt": "Start work on intent 87.",
56
- "expected_output": "Does NOT activate plastic-intent-ending; this is a boarding request (plastic-intent-starting), the opposite end of the lifecycle from a close.",
56
+ "expected_output": "Does NOT activate plastic-intent-ending; this is a resume request (plastic-intent-continuing), the opposite end of the lifecycle from a close.",
57
57
  "files": [],
58
58
  "assertions": [
59
59
  { "type": "code", "check": "router CHOICE != plastic-intent-ending", "result": "expect-pass" }
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: plastic-intent-executing
3
- description: Use when you have a written implementation plan to execute. Default mode is subagent-driven (at L a fresh subagent per task with two-stage review, at S and M one executor dispatch for the whole consolidated action). Fallback mode is inline execution for environments without subagent support. If superpowers:subagent-driven-development or superpowers:executing-plans are available, delegates to them.
3
+ description: Use when you have a written implementation plan to execute. Default mode is subagent-driven (one executor dispatch for the whole consolidated action, tests first, reviewed by risk). Fallback mode is inline execution for environments without subagent support. If superpowers:subagent-driven-development or superpowers:executing-plans are available, delegates to them.
4
4
  user-invocable: true
5
5
  ---
6
6
 
@@ -8,7 +8,7 @@ user-invocable: true
8
8
 
9
9
  ## Overview
10
10
 
11
- Load plan from the active intent's `plan.md`, execute all tasks, review per the tier gate below, report when complete.
11
+ Load plan from the active intent's `plan.md`, execute all tasks, review as below, report when complete.
12
12
 
13
13
  ## Step 0: Sync Worktree First
14
14
 
@@ -40,12 +40,9 @@ If `superpowers:subagent-driven-development` is available as a skill, delegate t
40
40
  - Superpowers skills respect "user preferences for plan/spec location"; Plastic IS that preference
41
41
 
42
42
  ### Subagent-Driven (Default)
43
- Dispatches subagents to do the work. The controller never implements. It dispatches, reviews, and tracks progress. How many dispatches it makes depends on the tier stamped at the top of `spec.md` (the `Tier:` line, the single authoritative record). `plan.md` carries a bold `**Tier:**` field copied from it, a convenience only:
43
+ Dispatches subagents to do the work. The controller never implements. It dispatches, reviews, and tracks progress. One executor dispatch implements the whole consolidated action from `plan.md`, the action file's failure-mode matrix, and `checklist.md` in one pass, tests first: the matrix's tests are committed red before the code. Several independent action files are handed to the same executor in order; they are not a reason for a per-task review loop (removed in 2.0, intent 307).
44
44
 
45
- - **S or M:** one executor dispatch implements the whole consolidated action from `plan.md` plus `checklist.md` in one pass. There is no per-task implementer-then-two-reviewers loop.
46
- - **L:** a fresh subagent per task, and a two-stage review after each task: spec compliance first, then code quality.
47
-
48
- The final independent review in Step 3 runs at every tier. It is a separate agent with fresh context, and it is never the maker.
45
+ The post-execution review in Step 3 runs by risk (the rule lives in the auto skill). When it runs, the reviewer is a separate agent with fresh context, never the maker. The plan itself is reviewed before code by the adversarial plan reviewer (`plan-reviewer-prompt.md`), dispatched by the lead at How.
49
46
 
50
47
  ### Inline (Fallback)
51
48
  Executes tasks sequentially in the current session. Use when subagents aren't available or user explicitly requests inline mode.
@@ -62,46 +59,21 @@ Run Step 0 (Sync Worktree First) before this step.
62
59
 
63
60
  ### Step 2: Execute Each Task
64
61
 
65
- Read the `Tier:` line stamped at the top of `spec.md` first (the authority), then follow the matching branch. `plan.md`'s bold `**Tier:**` field is a convenience copy of the same value, useful when `spec.md` is not already open.
66
-
67
- #### At S or M: one executor dispatch
62
+ Dispatch ONE executor subagent and give it the whole delivery: every task's full text from `plan.md` (pasted in, never a file reference), every action file with its failure-mode matrix, the checklist items it must tick, the project context from CLAUDE.md, the active intent context from `{ID}--{slug}.md`, and the worktree path. In auto mode this is the `plastic-executor` agent; elsewhere use the `implementer-prompt.md` template. The executor writes the matrix's tests and commits them red, implements the consolidated action in order, ticks each item as it lands (see `## Tick-as-you-land`), and drives the test suite green.
68
63
 
69
- Dispatch ONE executor subagent and give it the whole delivery: every task's full text from `plan.md` (pasted in, never a file reference), the checklist items it must tick, the project context from CLAUDE.md, and the active intent context from `{ID}--{slug}.md`. In auto mode this is the `plastic-executor` agent; elsewhere use the `implementer-prompt.md` template. The executor implements the consolidated action in order, ticks each item as it lands (see `## Tick-as-you-land`), and drives the test suite green.
64
+ After each commit lands (the red commit and every commit after it), append a `Commit` line to the savepoint ledger: `ruby ~/.plastic/scripts/savepoint-note <intent_dir> --kind Commit --text "<sha> <what it proves>"` (intent 317, D17). This is what feeds `report-screen delay`; a commit with no line is a gap the delay report cannot explain.
70
65
 
71
66
  Read its response by code:
72
- - DONE or DONE_WITH_CONCERNS → proceed to Step 3. Run no per-task spec review and no per-task quality review at these tiers; Step 3's final review covers the work.
67
+ - DONE or DONE_WITH_CONCERNS → proceed to Step 3.
73
68
  - NEEDS_CONTEXT → provide the missing context, re-dispatch the executor.
74
69
  - BLOCKED → stop, report to the user, wait for resolution.
75
70
 
76
- #### At L: one subagent per task
77
-
78
- For each task sequentially (never parallel: conflict risk):
79
-
80
- **a. Dispatch implementer subagent**
81
- Use the Agent tool with the implementer prompt template. Include:
82
- - Full task text (pasted in, not file reference)
83
- - Project context from CLAUDE.md
84
- - Active intent context from `{ID}--{slug}.md`
71
+ ### Step 3: Review by Risk
72
+ Apply the auto skill's risk rule to the executor's return and the diff: a matrix row no test could prove, a diff touching a hook, the lock, the worktree code, the installer, or a release file, a DONE_WITH_CONCERNS or a deviation from the matrix, or an owner-facing surface no test pins. When a rule fires, dispatch the post-execution reviewer with `code-quality-reviewer-prompt.md` (a separate agent with fresh context, never the maker); if it returns changes, re-dispatch the executor to fix them, then run the suite once more. When no rule fires, the green suite is the review.
85
73
 
86
- **b. Handle implementer response**
87
- - DONE → proceed to spec review
88
- - DONE_WITH_CONCERNS → note concerns, proceed to spec review
89
- - NEEDS_CONTEXT → provide missing context, re-dispatch
90
- - BLOCKED → stop, report to user, wait for resolution
74
+ Whenever a review verdict returns - the plan review before code, or the post-execution review above - the lead appends a `Review` line: `ruby ~/.plastic/scripts/savepoint-note <intent_dir> --kind Review --text "<verdict, what changed>"` (intent 317, D17). This is the other half of what `report-screen delay` reads.
91
75
 
92
- **c. Dispatch spec compliance reviewer**
93
- Use the Agent tool with spec-reviewer prompt. The reviewer reads actual code and compares against the task requirements. Pass/fail.
94
- - If fail: implementer fixes, spec reviewer re-reviews (loop until pass)
95
-
96
- **d. Dispatch code quality reviewer**
97
- Only after spec compliance passes. Reviews clean code, testing, architecture. Pass/fail.
98
- - If fail: implementer fixes, quality reviewer re-reviews (loop until pass)
99
-
100
- **e. Tick as it lands, then move to next**
101
- Follow `## Tick-as-you-land` below: move the task's checklist item to `## Completed` and add a `## Session Log` row in the same edit.
102
-
103
- ### Step 3: Final Review
104
- After all tasks complete, dispatch a final reviewer for the entire implementation. This runs at every tier, S, M, and L. The reviewer is a separate agent with fresh context and is never the maker. At S and M this is the only review the work gets, so if it returns changes, re-dispatch the executor to fix them, then re-review.
76
+ **The D19 heading convention.** An action file's `## Delivered` row (in `outcome.md`) is proven by whichever `actions/ACTION_N.md` heading carries that row's label as a standalone token - `### Row A -` proves row A, `### S1 -` proves row S1. Write action-file section headings so the label they prove is unambiguous (never a substring another label could also match, like `A` inside `AB`); `report-screen delivered`'s Proven-by column renders `not recorded` when no heading matches.
105
77
 
106
78
  ### Step 4: Update Intent and Complete
107
79
  Capture observations in `## Insights`. When ALL checklist items are checked:
@@ -142,22 +114,19 @@ row (Date, Items Completed, Notes). Do not batch several tasks' worth of
142
114
  checklist updates into one later edit; tick the moment the task is verified,
143
115
  before moving to the next task.
144
116
 
145
- ## Verify before every owner gate
117
+ ## Verify before every owner review
146
118
 
147
119
  Hard rule: before presenting any completed work to the owner, independently
148
120
  verify it. Grep or run the artifact the work just produced (the test suite,
149
121
  the changed file, the installed output) rather than restating the intended
150
122
  change. Never present an unverified claim to the owner. If verification
151
- fails, fix it before the gate, not after.
152
-
153
- Read `../plastic-conventions/references/gates-and-enforcement.md` for the transition-gate
154
- mechanics, the audited escape, and gate logging behind every owner gate named here.
123
+ fails, fix it before the review, not after.
155
124
 
156
125
  ## Methods report (audits and sweeps)
157
126
 
158
127
  When the work is an audit or a sweep (checking many files or many instances of
159
128
  something rather than building one artifact), deposit a methods report to
160
- `{intent_dir}/resources/` before the gate: what was checked, how it was
129
+ `{intent_dir}/resources/` before the review: what was checked, how it was
161
130
  checked, and what was found. This lets the owner review the method, not just
162
131
  the conclusion.
163
132
 
@@ -175,7 +144,7 @@ When presenting a batch of Exec decisions for the owner to rule, read
175
144
  `~/.plastic/_decision-tables.md` and follow the numbered-table procedure,
176
145
  persisting each ruling with `--stage Exec`.
177
146
 
178
- ## Gate position
147
+ ## Position in the cycle
179
148
 
180
149
  - **Before:** `plan.md` and `checklist.md` exist; the worktree is armed.
181
150
  - **Produces:** code changes, a ticked checklist, and (for audits or sweeps) a methods report in `resources/`.
@@ -0,0 +1,39 @@
1
+ # Adversarial Plan Reviewer Prompt
2
+
3
+ You review a plan before any code exists. The lead of this intent wrote `spec.md`, `plan.md`,
4
+ and at least one `actions/ACTION_N.md` that carries a failure-mode matrix: one row per
5
+ operation, naming a failure mode and the test that would catch it. Your job is to find what
6
+ that matrix misses and what it claims but cannot deliver, so the executor builds against a
7
+ plan that has already been attacked.
8
+
9
+ ## Intent
10
+
11
+ {{INTENT_DIR}} (read `spec.md`, `plan.md`, every `actions/ACTION_N.md`, and anything under
12
+ `resources/` the spec cites). Target tree: {{WORKTREE}}.
13
+
14
+ ## Instructions
15
+
16
+ 1. Read the spec's decisions and the matrix first, then the tree. Check every claim by
17
+ opening the named file at the named line; never accept a line number from the spec on
18
+ trust.
19
+ 2. For every operation in the spec, name a failure mode the matrix does not cover, or a
20
+ covered failure mode whose named test cannot actually detect it (the test reads a
21
+ different file, the regex cannot match, the assertion is a tautology, the fixture never
22
+ produces the case).
23
+ 3. Grep the tree for every name the plan deletes, renames, or re-points, and list each
24
+ caller, test, doc, or template the plan does not name.
25
+ 4. Where the plan touches a test the suite pins by exact string, quote the pinned string and
26
+ say what the change must keep verbatim.
27
+ 5. Run any probe that settles a claim cheaply (a single test file, a measurement); report the
28
+ numbers.
29
+ 6. Write no code and edit no repository file. Your output is the review.
30
+
31
+ ## Report Format
32
+
33
+ One line first, the verdict: **REVISE** or **PROCEED**, with the biggest risk in the same
34
+ sentence.
35
+
36
+ Then numbered findings under `## A. Matrix gaps`, `## B. Missed files and pins`, and
37
+ `## C. Probes`. Each finding names the file and line you read and states what the spec or
38
+ the matrix must add, change, or drop. Be concrete and adversarial; do not pad; do not restate
39
+ the plan.
@@ -1,73 +1,130 @@
1
1
  ---
2
2
  name: plastic-intent-speccing
3
- description: >
4
- Consolidate the enriched Why (`## Context`, `### Decisions`, `## Insights`) into `spec.md`
5
- through a deterministic, judgment-free numbered sequence. Use when the user types the command
6
- to turn the brainstorm into a spec, asks to "write the spec", "spec this intent", "consolidate
7
- into spec.md", or the active intent is at Why with enough Decisions on record to close it out.
8
- Also fires on an indirect request that never names spec.md, such as "turn what we just
9
- discussed into the contract the planner builds from." Distinct from `plastic-intent-brainstorming`
10
- (the exploration that produces the enriched Why, upstream of this skill) and
11
- `plastic-intent-planning` (turns an existing spec.md into plan.md for How, downstream of this
12
- skill).
3
+ description: >-
4
+ Thinking mode for an intent: the conversation that turns an idea into rulings, the
5
+ research that backs them, and the action files that say how the work runs. Use when the
6
+ user wants to think a request through before building it, says "let's design this",
7
+ "brainstorm", "grill me", "research this first", "spec this intent", "write the spec",
8
+ or when a prompt is too vague to run directly and the direct skill routes here. Also
9
+ fires on an indirect ask that never names a spec, such as "turn what we just discussed
10
+ into the contract the work runs from." Absorbs what the former intent-brainstorming,
11
+ intent-grilling, and intent-researching skills used to do (intent 304).
13
12
  user-invocable: true
14
13
  ---
15
14
 
16
- # Intent Speccing
15
+ # Intent Speccing: thinking mode
17
16
 
18
- Consolidate the enriched Why into `spec.md` through eight fixed steps, one action per step. The
19
- next action is never a judgment call: when a section cannot be filled from what is on record,
20
- step 5 is to stop and ask, never invent.
17
+ One skill for the whole thinking conversation on an intent. It asks one question at a time,
18
+ records every owner ruling the moment it lands, grills when asked, deposits research in
19
+ `resources/`, and ends by writing the action files the work runs from and consolidating the
20
+ rulings into `spec.md`. There is no separate brainstorm, grill, or research skill; those are
21
+ the modes below.
21
22
 
22
- ## Precondition
23
+ ## Active intent
23
24
 
24
- Run only when the active intent is at Why (its `## Intent` and enriched `## Context` plus
25
- `### Decisions` exist, `spec.md` does not yet exist or is being redone) and the user has asked to
26
- consolidate that Why into the spec. If no intent is active, or the active intent is not at Why,
27
- report that and stop; do not guess which intent is meant.
25
+ Resolve the active intent before anything else: read `~/.plastic/projects.yml`, match the
26
+ working directory against registered project paths (a match means the project store at
27
+ `~/.plastic/projects/{slug}/store/`, no match means `~/.plastic/store/`), then read that
28
+ store's `INDEX.md` under `## Active`. Exactly one active intent is the one to work; several
29
+ means ask which; none means stop and say so ("No active intent. Create one first with
30
+ /plastic-intent-creating"). Every artifact goes into `{store}/{id}--{slug}/`; never write
31
+ outside it.
28
32
 
29
- ## The 8-step sequence
33
+ ## The conversation
30
34
 
31
- | Step | Action |
32
- |---|---|
33
- | 1 | Confirm the precondition above. |
34
- | 2 | Read inputs in fixed order and build a ruling ledger: (a) `## Context` and `### Decisions`; (b) `## Insights` newest-last, so a later ruling supersedes an earlier conflicting one; (c) `resources/discovery--<slug>.md`; (d) any other `resources/*.md`. |
35
- | 3 | Decide the tier: adopt the brainstorming `Tier:` recommendation from Decisions or Insights; otherwise apply the PLASTIC.md tiers rubric (S = single mechanism or file cluster, M = one subsystem, L = cross-cutting or novel design). |
36
- | 4 | Fill the template section by section, all 8 sections in template order. Read `references/per-section-fill-rules.md` now, filling the template is the trigger. Write the tier as the literal top line above `# Spec:`. Encode every ruling into its matching section, later supersedes earlier on conflict. A collapsed single-line S/M section is complete and valid; do not pad it. |
37
- | 5 | Gap rule: if any section cannot be filled from the ledger built in step 2, STOP and ask the user for the missing ruling. Never invent scope to fill a gap. |
38
- | 6 | State the gate position (below) so the user knows what happens next. |
39
- | 7 | Self-verify against the checklist. Read `references/self-verify-checklist.md` now, verifying before presenting is the trigger. Fix any failing check, then re-verify from the top. |
40
- | 8 | Present `spec.md` for the user-review gate, then hand off to `plastic-intent-planning` for How. |
35
+ QMD-first: before scanning the store by hand for prior decisions, specs, or research, run
36
+ `ruby ~/.plastic/scripts/qmd-sync search "<terms>"` and open the authoritative intent file for
37
+ any hit you act on. The command is a no-op when QMD is absent.
38
+
39
+ 1. **Context first.** Check the project state (files, docs, recent commits) and the intent's
40
+ `## Context` and `## Insights`. Assess scope: a request that describes several independent
41
+ subsystems is decomposed first, one thinking conversation per piece, before any detail
42
+ question is spent.
43
+ 2. **One question per message, in prose.** No multiple-choice chips; a short menu of named
44
+ options is fine when the choice is genuinely enumerable, phrased as a sentence. Focus on
45
+ purpose, constraints, and success criteria. Before asking how something works, look:
46
+ in a codebase the answer is usually on disk.
47
+ 3. **Propose two or three approaches** with trade-offs, leading with the recommendation and
48
+ the reason for it. YAGNI: strip what the design does not need.
49
+ 4. **Present the design in sections** scaled to their complexity (a few sentences when
50
+ straightforward, up to 300 words when nuanced): architecture, components, data flow,
51
+ error handling, testing. Get a ruling after each section. Read
52
+ `references/design-principles.md` before proposing a design for the unit-boundary and
53
+ existing-codebase guidance (follow established patterns, no unrelated refactoring).
54
+ 5. **Record every ruling as it lands.** The moment the owner rules, before the next question:
55
+ ```
56
+ ruby ~/.plastic/scripts/insight-append {intent_dir} "<ruling text>" --stage Why --author human
57
+ ```
58
+ Never batch. A later ruling that conflicts with an earlier one gets a new insight naming
59
+ the superseded one; both stay on record and the later wins. When presenting a batch of
60
+ options for the owner to pick from, read `~/.plastic/_decision-tables.md` and follow the
61
+ numbered-table procedure.
62
+
63
+ No implementation starts until a design has been presented and ruled on. That holds for a
64
+ config change and a one-function utility as much as for a subsystem; the design can be three
65
+ sentences, but it is presented.
66
+
67
+ ### Grill mode
41
68
 
42
- ## Gate position (step 6)
69
+ When the owner says "grill me" or asks to stress-test a plan or design, the same conversation
70
+ turns relentless. Identify the root in one sentence and restate it. Walk the decision tree
71
+ branch by branch: state the branch, ask a specific question, lead with your own recommended
72
+ answer, resolve before moving on, name dependencies between decisions and resolve the
73
+ upstream one first. Do not accept "it depends" without "on what?"; do not skip edge cases; do
74
+ not assume when you can verify; challenge assumptions ("why not the alternative?"). Every
75
+ three or four questions, summarize what is decided. At natural checkpoints, about every ten
76
+ questions, offer to continue or to pause and capture what is decided; a pause records every
77
+ ruling so far and stops. When all branches are resolved, list the decisions and the deferred
78
+ items, then offer the hand-off below.
43
79
 
44
- The Why stage's deliverable is `spec.md`; the gate is satisfied the moment a complete, real
45
- `spec.md` exists (this is the gates-by-name framing: gate-check enforces spec.md before plan.md,
46
- not the Transition Gates table row). Writing `plan.md` is what opens the code gate for Exec, and
47
- writing `plan.md` is not this skill's job, that is `plastic-intent-planning`. State this to the user
48
- at step 6 so the handoff at step 8 is expected, not a surprise.
80
+ ### Research mode
49
81
 
50
- Read `../plastic-conventions/references/lifecycle-and-savepoints.md` for the subagent
51
- report-home contract behind this handoff. This path resolves relative to this skill's own
52
- installed directory.
82
+ When a question needs evidence rather than a ruling, research it and deposit the report in
83
+ `{intent_dir}/resources/{type}--{topic}.md`, with `{type}` one of `deep-research`,
84
+ `competitive-analysis`, `technical-spike`, `reference`, `landscape-survey` and `{topic}` in
85
+ kebab-case. Choose the depth and say why: shallow (one or two searches plus a look at the
86
+ code, minutes) for a narrow factual question; deep (several sources, cross-checked, a
87
+ landscape or an architectural decision, or when a wrong answer would cause an architectural
88
+ mistake) through the harness's deep-research capability when it has one, else a manual
89
+ fan-out of searches. The report carries a summary, findings with citations, sources, and a
90
+ "Relevance to intent" section; tables for findings and comparisons. Log one line in the
91
+ intent's `## Insights` naming the file and the key finding. Research does not chain to
92
+ another step; the conversation decides what to do with it.
53
93
 
54
- ## Tier stamp (step 3, convention only)
94
+ ## Closing the conversation
55
95
 
56
- Write `Tier: S|M|L` as the literal first line of the file, above the `# Spec:` heading. This line
57
- is convention-only: the orchestrator and the planner read it, no gate and no doctor check
58
- validates it.
96
+ When the rulings are enough to build from:
59
97
 
60
- ## Completion report
98
+ 1. **Write the action files.** Every ruling that says how the work runs lands in
99
+ `actions/ACTION_N.md` (at least one real file, no placeholder): the files to touch, the
100
+ order, the tests that prove each step, the rules. The action files are what direct mode or
101
+ an auto team executes; they exist before the work runs.
102
+ 2. **Consolidate `spec.md`** from the rulings, section by section in template order. Read
103
+ `references/per-section-fill-rules.md` when filling the template. Build the ruling ledger
104
+ in fixed order first: `## Context` and `### Decisions`, then `## Insights` newest-last so a
105
+ later ruling supersedes an earlier one, then `resources/discovery--<slug>.md`, then any
106
+ other `resources/*.md`. Encode every ruling into its section; a collapsed single-line
107
+ section is complete when it names everything. If a section cannot be filled from the
108
+ ledger, stop and ask for the missing ruling; never invent scope. A spec.md left as the
109
+ placeholder is backfilled from the record at close (`## Problem`, `## Decisions`,
110
+ `## Acceptance Criteria`; the rest stays stub text), so consolidate only when the
111
+ rulings say more than the record already does.
112
+ 3. **Self-verify.** Read `references/self-verify-checklist.md` before presenting; fix any
113
+ failing check and re-verify from the top.
114
+ 4. **Present and hand off.** Present `spec.md` and the action files. Then offer the routes:
115
+ run it now inline when the work is small enough for direct mode; hand to `plastic-auto`
116
+ when the owner says auto and the checklist above passes (all decisions resolved, scope
117
+ bounded, dependencies named, success criteria defined); or keep thinking.
61
118
 
62
- State, in this order: which file was written (`spec.md`, new or rewritten), the stamped `Tier:`
63
- value, the count of Acceptance Criteria produced (the surface the planner will cover), which
64
- `## Insights` rulings superseded an earlier Decision (if any) and where each landed, and the
65
- handoff target (`plastic-intent-planning`). If step 5 stopped for a missing ruling, report that
66
- instead: which section, what is missing, and the question put to the user.
119
+ Report, in this order: which files were written (`spec.md` new or rewritten, the action
120
+ files), the count of acceptance criteria, which `## Insights` rulings superseded an earlier
121
+ decision and where each landed, and the route chosen. If step 2 stopped for a missing
122
+ ruling, report that instead: which section, what is missing, the question put to the owner.
67
123
 
68
124
  ## References
69
125
 
70
126
  | Trigger | Read |
71
127
  |---|---|
72
- | Filling the template (step 4) | `references/per-section-fill-rules.md` |
73
- | Self-verifying before presenting (step 7) | `references/self-verify-checklist.md` |
128
+ | Before proposing a design (unit boundaries, existing codebases) | `references/design-principles.md` |
129
+ | Filling the spec template (closing step 2) | `references/per-section-fill-rules.md` |
130
+ | Self-verifying before presenting (closing step 3) | `references/self-verify-checklist.md` |
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "skill_name": "plastic-intent-speccing",
3
- "notes": "Intent 163. Scopes: description triggering (1-4) and behavior (5-8: all-8-sections output, mandatory superseding-ruling case, STOP-and-ask gap rule, tabular alternatives with no em-dash). No dedicated Ruby test file backs this skill yet (natural-language guided command), so all assertions are result: expect-pass pending a real observed run, per the intent-starting evals.json convention.",
3
+ "notes": "Intent 163. Scopes: description triggering (1-4) and behavior (5-8: all-8-sections output, mandatory superseding-ruling case, STOP-and-ask gap rule, tabular alternatives with no em-dash). No dedicated Ruby test file backs this skill yet (natural-language guided command), so all assertions are result: expect-pass pending a real observed run, per the evals.json convention.",
4
4
  "evals": [
5
5
  {
6
6
  "id": 1,
@@ -37,7 +37,7 @@
37
37
  "scope": "triggering",
38
38
  "set": "validation",
39
39
  "prompt": "Brainstorm this intent.",
40
- "expected_output": "Does NOT activate plastic-intent-speccing; activates plastic-intent-brainstorming (exploration that produces the enriched Why, upstream of speccing).",
40
+ "expected_output": "Activates plastic-intent-speccing (brainstorming is a mode of the thinking conversation since intent 304).",
41
41
  "files": [],
42
42
  "assertions": [
43
43
  {
@@ -52,7 +52,7 @@
52
52
  "scope": "triggering",
53
53
  "set": "validation",
54
54
  "prompt": "Write the plan.",
55
- "expected_output": "Does NOT activate plastic-intent-speccing; activates plastic-intent-planning (turns an existing spec.md into plan.md for How, downstream of speccing).",
55
+ "expected_output": "Does NOT activate plastic-intent-speccing; a plan is written from the action files by the executing skill.",
56
56
  "files": [],
57
57
  "assertions": [
58
58
  {
@@ -67,12 +67,12 @@
67
67
  "scope": "behavior",
68
68
  "set": "train",
69
69
  "prompt": "Intent Y is at Why: Context describes the problem and goal, and 5 Decisions are recorded resolving scope, approach, and one rejected alternative. Consolidate into spec.md.",
70
- "expected_output": "Produces spec.md with Tier: S|M|L as the literal top line above the Spec heading; all 8 template sections present once, in template order (Problem, Goals, Non-Goals, Approach, Alternatives Considered, Decisions, Acceptance Criteria, Open Questions); no template placeholder text remains; every recorded Decision is encoded into its matching section.",
70
+ "expected_output": "Produces spec.md starting at the Spec heading; all 8 template sections present once, in template order (Problem, Goals, Non-Goals, Approach, Alternatives Considered, Decisions, Acceptance Criteria, Open Questions); no template placeholder text remains; every recorded Decision is encoded into its matching section.",
71
71
  "files": [],
72
72
  "assertions": [
73
73
  {
74
74
  "type": "human",
75
- "check": "Tier line is literally the first line of the file; all 8 sections appear once each, in template order; no placeholder text; every Decision traces to a section",
75
+ "check": "The file starts at the Spec heading; all 8 sections appear once each, in template order; no placeholder text; every Decision traces to a section",
76
76
  "result": "expect-pass"
77
77
  }
78
78
  ]
@@ -1,8 +1,8 @@
1
1
  # Per-Section Fill Rules
2
2
 
3
- The single shared method for turning the enriched Why into `spec.md`. Both
4
- `plastic-intent-speccing` (guided) and the `plastic-spec-specialist` agent (auto) point here;
5
- neither restates these rules. One fill rule per template section, in template order.
3
+ The single shared method for turning the rulings into `spec.md`. `plastic-intent-speccing`
4
+ (the thinking conversation) and the auto orchestrator both point here; neither restates these
5
+ rules. One fill rule per template section, in template order.
6
6
 
7
7
  Read the ruling ledger first (built in step 2 of the SKILL.md sequence): `## Context` plus
8
8
  `### Decisions`, then `## Insights` newest-last (a later ruling supersedes an earlier
@@ -24,7 +24,7 @@ delivering a specific outcome.
24
24
 
25
25
  One bullet per goal, each a concrete, observable outcome the delivery must reach. Encode every
26
26
  Decision that commits to an outcome as its own bullet, do not compress two Decisions into one
27
- vague goal. A single-line collapsed Goals section (S/M tier) is complete if it names every
27
+ vague goal. A single-line collapsed Goals section is complete if it names every
28
28
  outcome; do not pad it with restated Problem text.
29
29
 
30
30
  ## 3. Non-Goals
@@ -22,8 +22,7 @@ these.
22
22
  5. **No template placeholder text remains.** No literal `<intent name>`, `<alternative>`, `...`,
23
23
  sample bracket text, or other template filler from `templates/spec.md` survives anywhere in
24
24
  the artifact.
25
- 6. **Tier stamp is the top line.** `Tier: S|M|L` is the literal first line of the file, above the
26
- `# Spec:` heading, not folded into a section body.
25
+ 6. **No header line.** The file starts at the `# Spec:` heading; there is no `Tier:` line (removed in 2.0, intent 304).
27
26
  7. **All 8 sections present, in template order.** Problem, Goals, Non-Goals, Approach,
28
27
  Alternatives Considered, Decisions, Acceptance Criteria, Open Questions, each present once, in
29
28
  that order, none merged into another.
@@ -77,7 +77,7 @@ writes `INDEX.md` and `project.yml` only if missing. It is idempotent, so it is
77
77
  safe even when the tactical mirror in step 5 already created the store directory.
78
78
  Do not create the store with an inline `mkdir`; the provisioner is the only place
79
79
  a store is made. For a project that is already registered but store-less, use the
80
- `plastic-store-provisioning` skill instead.
80
+ `plastic-doctor` skill's provisioning section instead.
81
81
 
82
82
  ### 8. Mark Global Intent(s) Completed
83
83