@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
@@ -250,16 +250,15 @@ This is the release branch of `plastic-intent-ending`'s Step 5 disarm (`merge: t
250
250
  separate concern: a release is the merge-then-remove path for the intent's worktree (intent
251
251
  73c3), so the intent's code branch is merged back into the default branch BEFORE the worktree
252
252
  is removed. Drive it through `Worktree.finish` with `merge: true`, which merges the code
253
- branch, then removes the worktree, prunes the repo, and clears the worktree block from the
254
- bridge:
253
+ branch, then removes the worktree, and prunes the repo:
255
254
 
256
255
  ```bash
257
- ruby -r ~/.plastic/scripts/lib/worktree -r ~/.plastic/scripts/lib/bridge -e \
258
- 'b = Bridge.discover_bridge(session: ENV["CLAUDE_CODE_SESSION_ID"], cwd: Dir.pwd); Worktree.finish(b, merge: true) if b'
256
+ ruby -r ~/.plastic/scripts/lib/worktree -r ~/.plastic/scripts/lib/arm -e \
257
+ 'Worktree.finish(Arm.bridge_hash(intent_dir: "<STORE>/<dir>"), merge: true)'
259
258
  ```
260
259
 
261
- (Uses `discover_bridge`, not a bare session-keyed `Bridge.read`, because a session can own more
262
- than one live bridge now (intent 131) and `discover_bridge` resolves the right one for this cwd.)
260
+ (The worktree block is derived from `projects.yml` and the intent id, so the one-liner needs
261
+ only the intent directory; the `/tmp` bridge it once discovered was removed in 2.0, intent 307.)
263
262
 
264
263
  Honor the worktree-cleanup rule: never leave an orphaned worktree, and run `git worktree
265
264
  prune` in the affected repo if you hit a stale reference. For why this is the one place the
@@ -279,14 +278,14 @@ A release IS a delivery. The active intent that drove this work must be complete
279
278
  ruby ~/.plastic/scripts/end-intent --store <store_path> --id <ID> --disposition delivered \
280
279
  --session "$CLAUDE_CODE_SESSION_ID" \
281
280
  --outcome-summary "delivered in <tag-name>: <one-line summary>" \
282
- --index-note "<tag-name>, <mode/tier>; <what shipped>; <suite result>"
281
+ --index-note "<tag-name>, <mode>; <what shipped>; <suite result>"
283
282
  ```
284
283
  A non-zero exit needs attention: 4 means a live foreign session holds the lock (back
285
284
  off), 5 means the code worktree is still dirty (should not happen here, since step 8
286
285
  already removed it; investigate before overriding with `--discard-worktree-changes`),
287
286
  3 means disarm ran but the lock is still present (run `/plastic-doctor check the lock
288
287
  status`).
289
- d. Update clusters to show `_(completed)_` (the store-curating skill's job on its next pass).
288
+ d. Update clusters to show `_(completed)_`.
290
289
 
291
290
  **If no active intent exists for this release**, that itself is a problem - work happened outside the intent system. Log it and move on, but flag it.
292
291
 
@@ -21,7 +21,7 @@ reference. Every checkpoint inside a track is prose, never another menu.
21
21
 
22
22
  1. **Guided**: deliver a first intent, stage by stage, approving each step yourself. Routes to
23
23
  `references/track-1-guided.md`.
24
- 2. **Auto**: hand delivery to the agent and watch the gates and reports as it works. Routes to
24
+ 2. **Auto**: hand delivery to the agent and watch the record and reports as it works. Routes to
25
25
  `references/track-2-auto.md`.
26
26
  3. **Projects and roadmaps**: grow a founding intent into a small real project, add more
27
27
  intents, and plan a delivery batch with a roadmap. Routes to
@@ -35,7 +35,7 @@ showing the menu again.
35
35
 
36
36
  Narrate one step at a time: say what the next station does, then hand control back so the
37
37
  user types the real command themselves. After they run it, look at what appeared (a file, a
38
- gate message, a report) and debrief in plain words before moving to the next station. Never
38
+ ledger line, a report) and debrief in plain words before moving to the next station. Never
39
39
  run a station's command on the user's behalf; the tutorial teaches the shape of the work, it
40
40
  does not do the work.
41
41
 
@@ -35,19 +35,19 @@ tool, never written by hand.
35
35
 
36
36
  ### 2. Board the intent
37
37
 
38
- Type `/plastic-intent-starting`.
38
+ Type `/plastic-intent-continuing` and name the intent.
39
39
 
40
40
  Artifact: a delivery lock (a `delivery.lock` file in the intent directory) naming this
41
41
  session as the one owner, and a line in `savepoint.md` recording the stage. The agent then
42
- asks exactly one question: "auto or guided?"
42
+ resumes at the last delivered station and asks nothing.
43
43
 
44
- Checkpoint: answer "guided." Explain in one sentence why the lock matters: it stops two
44
+ Checkpoint: explain in one sentence why the lock matters: it stops two
45
45
  sessions from editing the same intent at the same time.
46
46
 
47
47
  ### 3. Why, rulings one at a time
48
48
 
49
- Type `/plastic-intent-brainstorming` (or `/plastic-intent-grilling` for a harder,
50
- interview-style pass over the same ground). It asks conversational prose questions, one at a
49
+ Type `/plastic-intent-speccing` (say "grill me" for a harder, interview-style pass over
50
+ the same ground). It asks conversational prose questions, one at a
51
51
  time, never a multiple-choice menu, and answers them one at a time in return.
52
52
 
53
53
  Artifact: `## Context` and `### Decisions` in the intent file fill in as each answer lands, and
@@ -62,21 +62,19 @@ is already sitting in `### Decisions` and in `## Insights`, in writing.
62
62
 
63
63
  Type `/plastic-intent-speccing`.
64
64
 
65
- Artifact: `spec.md`, stamped with a tier (`S`, for this small worked example) and its eight
66
- sections filled from the rulings recorded in station 3.
65
+ Artifact: `spec.md`, its eight sections filled from the rulings recorded in station 3.
67
66
 
68
- Checkpoint: name the stamped tier and point at one sentence in `spec.md` that traces back to
69
- an answer given in station 3.
67
+ Checkpoint: point at one sentence in `spec.md` that traces back to an answer given in
68
+ station 3.
70
69
 
71
70
  ### 5. Plan
72
71
 
73
- Type `/plastic-intent-planning`.
72
+ Ask the same conversation to write the action files and the plan.
74
73
 
75
- Artifact: `plan.md`, `checklist.md`, and at least one real `actions/ACTION_N.md`. At the S
76
- tier used here, the planner consolidates the whole delivery into a single
77
- `actions/ACTION_1.md` (the ordered steps plus the exact changes); the L tier (many
78
- independent tasks, dispatched in parallel) instead gets one `actions/ACTION_N.md` file per
79
- task. `checklist.md` follows a fixed form: tasks start under `## In Progress`, move to
74
+ Artifact: `plan.md`, `checklist.md`, and at least one real `actions/ACTION_N.md`. A small
75
+ delivery like this one consolidates the whole delivery into a single `actions/ACTION_1.md`
76
+ (the ordered steps plus the exact changes); many independent tasks, dispatched in parallel,
77
+ instead get one `actions/ACTION_N.md` file per task. `checklist.md` follows a fixed form: tasks start under `## In Progress`, move to
80
78
  `## Completed` as they land, and a `## Session Log` table records what happened each session.
81
79
  A task that depends on an owner decision landing first (a destructive step, a structural
82
80
  ruling) gets an `[ORCHESTRATOR]` prefix and blocks every other item until that decision is
@@ -86,7 +84,7 @@ Checkpoint: open `checklist.md`. Every task in `plan.md` has a matching checkbox
86
84
  `## In Progress`; that checklist, not `plan.md` itself, is what gets ticked off and moved to
87
85
  `## Completed` during Exec.
88
86
 
89
- ### 6. Exec, verify before the gate
87
+ ### 6. Exec, verify before you report
90
88
 
91
89
  Type `/plastic-intent-executing`.
92
90
 
@@ -121,5 +119,5 @@ two, exactly the README section (or note) just delivered.
121
119
 
122
120
  That is the full cycle once: create, board, decide, spec, plan, build, done. Read
123
121
  [`your-first-intent-in-10-minutes.md`](https://github.com/zalom/plastic/blob/main/docs/guides/your-first-intent-in-10-minutes.md) for the same path condensed to a single
124
- read, and [`what-the-gates-are-telling-you.md`](https://github.com/zalom/plastic/blob/main/docs/guides/what-the-gates-are-telling-you.md) for what to do if a station denies
125
- an action instead of completing it.
122
+ read, and [`reading-the-ledgers.md`](https://github.com/zalom/plastic/blob/main/docs/guides/reading-the-ledgers.md) for where each station wrote its
123
+ work down.
@@ -51,16 +51,15 @@ mixed up in what it tells you.
51
51
 
52
52
  Checkpoint: name one thing auto will always stop and ask about, rather than decide alone.
53
53
 
54
- ### 3. Walking the gates
54
+ ### 3. Walking the record
55
55
 
56
- No new command. Auto still honors every hard gate a guided session would hit: the delivery
57
- lock (one owner at a time), the code gate (shut until `plan.md` and `checklist.md` exist),
58
- the create gate (intents only come from the tool that makes them, never hand-authored), the
59
- links gate (a `## Links` section changes only to match the file's own frontmatter), and the
60
- bash gate (a shell command cannot write project code the code gate would have blocked).
56
+ No new command. Auto keeps one delivery in one place and writes down every move: the delivery
57
+ lock (one owner at a time, a `delivery.lock` file in the intent directory), the worktree (code
58
+ edits land on the intent's own branch), the savepoint ledger (one line per lifecycle file the
59
+ team writes), and the day ledger (the request that started this run moves from pending to open
60
+ when the first project file lands). Nothing blocks the team; the record is how you follow it.
61
61
 
62
- Checkpoint: read one gate message from the run so far and name which of the five gates it
63
- came from.
62
+ Checkpoint: open the intent's `savepoint.md` and name the stage its last line records.
64
63
 
65
64
  ### 4. Reading the per-stage reports
66
65
 
@@ -75,7 +74,7 @@ line.
75
74
 
76
75
  ### 5. Continue and where-was-I after time away
77
76
 
78
- Type `/plastic-continuing`.
77
+ Type `/plastic-intent-continuing`.
79
78
 
80
79
  Artifact: the current state, presented and then the session stops. If a specific intent is
81
80
  named, the agent reads its stage and savepoint and resumes exactly there, rather than
@@ -86,11 +85,11 @@ at and how that matched what was actually on disk.
86
85
 
87
86
  ## Wrap and where to go next
88
87
 
89
- Auto keeps the same stages and the same gates as guided; the only difference is who steers.
90
- Read [`pick-your-mode.md`](https://github.com/zalom/plastic/blob/main/docs/guides/pick-your-mode.md) for the honest trade-off between guided and auto, and
88
+ Auto keeps the same stages and the same record as thinking; the only difference is who steers.
89
+ Read [`pick-your-mode.md`](https://github.com/zalom/plastic/blob/main/docs/guides/pick-your-mode.md) for the honest trade-off between the three modes, and
91
90
  [`using-plastic-with-claude-code.md`](https://github.com/zalom/plastic/blob/main/docs/guides/using-plastic-with-claude-code.md) for how that choice feels day to day and how
92
- it connects to roadmap-driven delivery. For denial messages met along the way, read
93
- [`what-the-gates-are-telling-you.md`](https://github.com/zalom/plastic/blob/main/docs/guides/what-the-gates-are-telling-you.md).
91
+ it connects to roadmap-driven delivery. For where the team wrote its work down, read
92
+ [`reading-the-ledgers.md`](https://github.com/zalom/plastic/blob/main/docs/guides/reading-the-ledgers.md).
94
93
 
95
94
  Note on terms: "guided" means the user starts each stage with a command and the agent
96
95
  narrows the thinking inside it, the same shape track 1 walked. "Manual", editing project
@@ -21,10 +21,10 @@ one this tutorial keeps or ships.
21
21
  ### 1. Start from a founding implementation intent
22
22
 
23
23
  Create and board an intent the same way as track 1, stations 1 and 2: `/plastic-intent-creating`,
24
- then `/plastic-intent-starting`. Describe something meant to grow into a small real project,
24
+ then `/plastic-intent-continuing`. Describe something meant to grow into a small real project,
25
25
  for example "build a personal todo app."
26
26
 
27
- Then type `/plastic-intent-brainstorming` and record a couple of real rulings on this founding
27
+ Then type `/plastic-intent-speccing` and record a couple of real rulings on this founding
28
28
  intent, for example the language or how tasks get stored. Keep it short: this intent only
29
29
  needs enough decisions for the new project to inherit, not a full design.
30
30
 
@@ -45,8 +45,8 @@ Active/Future/Completed placement is managed in INDEX.md, not in frontmatter.
45
45
  Create through the `plastic-intent-creating` skill, which scaffolds with one call:
46
46
  `ruby ~/.plastic/scripts/new-intent --store .plastic/store --intent "<one-line>" --slug <slug> [--sources <governing-id>]`.
47
47
  It allocates the Folgezettel ID, creates `.plastic/store/ID--slug/ID--slug.md` born
48
- complete, and wires the links. Never hand-author the files: the write-time create gate
49
- rejects an incomplete or malformed intent file.
48
+ complete, and wires the links. Never hand-author the files: `new-intent` validates the
49
+ intent file it writes, and `end-intent` checks it again at close.
50
50
 
51
51
  ## Lifecycle Skills
52
52
 
@@ -55,11 +55,8 @@ Plastic has its own lifecycle skills. When a Plastic skill exists for the curren
55
55
  | Phase | Skill | Produces |
56
56
  |-------|-------|----------|
57
57
  | What | `plastic-intent-creating` | Intent file |
58
- | Why | `plastic-intent-brainstorming` | Enriched `## Context` + `### Decisions` |
59
- | Why | `plastic-intent-speccing` | `spec.md` |
60
- | Why | `plastic-intent-researching` | `resources/*.md` |
61
- | Why | `plastic-intent-grilling` | Deep interrogation |
62
- | How | `plastic-intent-planning` | `plan.md`, `checklist.md`, `actions/` |
58
+ | Why | `plastic-intent-speccing` | Rulings as insights, `resources/*.md`, `spec.md` |
59
+ | How | `plastic-intent-speccing` | `actions/`, `plan.md`, `checklist.md` |
63
60
  | Exec | `plastic-intent-executing` | Code + `outcome.md` |
64
61
  | Done | `plastic-intent-ending` | Lifecycle transition |
65
62
 
@@ -2,6 +2,11 @@ version: 3
2
2
  project_roots:
3
3
  - ~/.plastic/projects
4
4
  stale_threshold_days: 3
5
+ # When to compact. Absolute token counts for a 1M window (35 and 50 percent), not
6
+ # percentages: models are reliable only to roughly 50 to 65 percent of advertised
7
+ # context, so a percentage that is right at 200k floats to an untested size at 1M.
8
+ context_offer_tokens: 350000
9
+ context_insist_tokens: 500000
5
10
  execution_mode: subagent-driven
6
11
  hash_length: 6
7
12
  hash_algorithm: sha256-base36
@@ -0,0 +1,17 @@
1
+ ## ▶ {{id}} · {{name}}
2
+
3
+ | | | |
4
+ | --- | --- | --- |
5
+ | **Store** | {{store}} | {{store.note}} |
6
+ | **Status** | {{status}} | {{status.note}} |
7
+ | **Stage** | {{stage}} | {{stage.note}} |
8
+ | **Savepoint** | {{savepoint}} | {{savepoint.note}} |
9
+ | **Progress** | {{progress.bar}} {{progress.done}} / {{progress.total}} | {{progress.note}} |
10
+ | **Next** | {{next}} | {{next.note}} |
11
+ | **Insight** | {{insight}} | {{insight.note}} |
12
+
13
+ **Steps**
14
+
15
+ | Step | Status | What |
16
+ | --- | --- | --- |
17
+ {{steps.rows}}
@@ -7,10 +7,23 @@ disposition: delivered|abandoned
7
7
  (what was delivered)
8
8
 
9
9
  ## Delivered
10
- - ...
10
+ <!-- One row per thing delivered, in plain wording a reader recognizes, not
11
+ an implementation summary; the technical detail belongs in ## Summary. Each
12
+ row's label must appear as a standalone token in an actions/*.md heading
13
+ (for example "### S1 - ..." proves row S1): that heading's matrix rows become
14
+ the row's Proven-by cell on the delivered screen (intent 317 D19, 317a). -->
15
+ | Row | What |
16
+ | --- | --- |
17
+ | S1 | ... |
11
18
 
12
19
  ## Verification
13
20
  - <acceptance criterion> — verified by ... → result
14
21
 
22
+ ## Needs you
23
+ <!-- The literal None, or a table shaped | N | What | Why | with one row per
24
+ open owner action. Prose is tolerated by the reader but renders as a single
25
+ untyped row - write the table. -->
26
+ None
27
+
15
28
  ## Follow-ups
16
29
  None
@@ -3,3 +3,10 @@ governing_docs:
3
3
 
4
4
  release:
5
5
  on_complete: commit
6
+
7
+ # flow:
8
+ # mode: direct # direct | pull_request
9
+ # base: main # defaults to origin/HEAD, then main, then master
10
+ # branch_template: "session/{{day}}" # {{day}}, {{ticket}}, {{slug}} tokens
11
+ # ticket_source: intent_id # intent_id (the session pointer's intent id, else the day id)
12
+ # workspace: checkout # checkout | worktree (worktree applies to direct mode only)
@@ -0,0 +1,11 @@
1
+ ## ▶ {{id}} · {{name}}
2
+
3
+ | | | |
4
+ | --- | --- | --- |
5
+ {{fields.rows}}
6
+
7
+ **Steps**
8
+
9
+ | Step | Status | What |
10
+ | --- | --- | --- |
11
+ {{steps.rows}}
@@ -1,6 +1,6 @@
1
1
  # Roadmap: <name>
2
2
 
3
- (one-line meta: what this roadmap delivers, and which tier it lives in. `roadmaps/` is a sibling
3
+ (one-line meta: what this roadmap delivers, and whether it is a project or the global roadmap. `roadmaps/` is a sibling
4
4
  of `INDEX.md` — a project's root or the global `~/.plastic/`, never inside `store/`. When this
5
5
  roadmap's goal is reached, move this file from `roadmaps/{slug}.md` to
6
6
  `roadmaps/archived/{slug}.md`; `roadmaps/` itself lists only live roadmaps.)
@@ -1,4 +1,4 @@
1
- # Deterministic cycle-step ledger, written automatically by the gate hook.
1
+ # Deterministic cycle-step ledger, written automatically by the record hook.
2
2
  # One line per lifecycle milestone, append-only, newest at the bottom:
3
3
  #
4
4
  # {UTC-iso8601} {Stage} {milestone}
@@ -11,4 +11,4 @@
11
11
  # 2026-06-16T16:40:00Z Exec outcome.md created
12
12
  #
13
13
  # This file is sugar on top of the conventions, not a source of truth. It is
14
- # rebuildable from files-on-disk via Bridge.rebuild_savepoint. Do not hand-edit.
14
+ # rebuildable from files-on-disk via Savepoint.rebuild_savepoint. Do not hand-edit.
@@ -0,0 +1,29 @@
1
+ ---
2
+ id: "{{DAY}}"
3
+ intent: "Session ledger for {{DATE}}"
4
+ sources: []
5
+ chain: []
6
+ created: {{CREATED}}
7
+ author: {{AUTHOR}}
8
+ tags: ["session"]
9
+ mode: direct
10
+ ---
11
+
12
+ ## Intent
13
+ Carry every session's activity for {{DATE}} in one shared, append-only day ledger.
14
+
15
+ ## Context
16
+ This day ledger holds the checklist and savepoint lines that every session touching
17
+ {{DATE}} appends, tagged by session and project. It is not a project intent: it has
18
+ no plan, no actions, and no id that participates in a store's Folgezettel graph.
19
+
20
+ ## Outcome
21
+ `checklist.md` and `savepoint.md` appear inside this day's directory on first append,
22
+ each written under an exclusive file lock so concurrent sessions never lose or
23
+ interleave a line.
24
+
25
+ ## Insights
26
+ (observations captured throughout the day, appended by later sessions)
27
+
28
+ ## Links
29
+ <!-- No sources or chain; this intent has no graph edges to project. -->
@@ -1,48 +0,0 @@
1
- ---
2
- name: plastic-brainstorming
3
- description: |
4
- Use for the Why-stage exploration of an active intent in auto mode: enrich the
5
- intent's Context and record its Decisions before the spec is written.
6
- model: opus
7
- ---
8
-
9
- You are the Plastic Brainstorming specialist. You own the Why-stage exploration of one intent in the What->Why->How->Exec cycle.
10
-
11
- When dispatched in auto mode you receive the standard Plastic spawn preamble (from `scripts/spawn-preamble`) prepended to your prompt: it states the active intent id, intent line, current stage, your role, and the instruction to emit valid lifecycle artifacts. Honor it as your live state; do not re-derive or contradict it.
12
-
13
- ## Your Responsibilities
14
-
15
- 1. **Explore the problem** — read the intent's `## Intent` and `## Context`, the linked intents, and the relevant code
16
- 2. **Decide autonomously** — in auto mode you make the calls yourself, no questions to the human
17
- 3. **Enrich context** — write findings into `## Context` and record choices in `### Decisions` with rationale
18
- 4. **Recommend a tier** — emit a `Tier: S|M|L` recommendation for this intent, using the
19
- deterministic sizing rule (S = single mechanism or file cluster, hours; M = one subsystem,
20
- about a day; L = cross-cutting or novel design), and record it in `### Decisions` (or
21
- `## Insights` with the `(autonomous)` marker) with a one-line rationale. This is a
22
- recommendation, not the stamp: the orchestrator reads it to pick the topology, and the
23
- spec-specialist stamps the final `Tier:` line at the top of spec.md.
24
- 5. **Hand off** — leave the Why stage ready for the spec-specialist to consolidate into a spec
25
-
26
- ## How You Work
27
-
28
- 1. Receive (input handoff): the intent's `## Intent` / `## Context` from the enforcer's context bundle
29
- 2. Read the intent file, its `## Links`, and related code or docs
30
- 3. Research with the adaptive budget the enforcer set (simple 2-3, medium 5-8, complex 10-15 steps)
31
- 4. Produce (output handoff): an enriched `## Context` plus `### Decisions` with rationale
32
- 5. Log autonomous calls in `## Insights` with the `(autonomous)` marker, then report for gating (see `## Completion Report`)
33
-
34
- ## Completion Report
35
-
36
- END your turn with a structured completion report as your final message, per the spawn preamble's `REPORT_CONTRACT` and `skills/auto/references/agent-report-contract.md`. Do not finish silently. Carry the common envelope (role, intent id, stage, status, artifacts written, verification, checklist deltas, deviations, blockers, insights) plus the brainstorming payload:
37
-
38
- - Decisions recorded in `### Decisions`, each with its one-line rationale
39
- - Context enriched: what was researched and the key findings
40
- - Open questions resolved, and any deliberately left for the spec
41
- - Tier recommendation (`S|M|L`) and its one-line rationale
42
-
43
- ## Constraints
44
-
45
- - You are dispatched by the plastic-enforcer and your deliverable is gated before How begins
46
- - You only write intent-store files (the intent's `## Context`, `### Decisions`, `## Insights`)
47
- - You never write `spec.md`, `plan.md`, or project code; those belong to later stages
48
- - You explore and decide without asking the human (auto mode); record every decision
@@ -1,35 +0,0 @@
1
- ---
2
- name: plastic-future-intent-researcher
3
- description: |
4
- Use to research a parked future intent autonomously via web search and codebase
5
- analysis, writing the findings into the intent.
6
- model: sonnet
7
- ---
8
-
9
- You are the Plastic Future Intent Researcher. Your role is to pick up parked future intents, research them, and write findings so the user can make informed decisions about whether to pursue them.
10
-
11
- ## Your Responsibilities
12
-
13
- 1. **Select a future intent** — read `.plastic/INDEX.md`, find intents listed under `## Future`
14
- 2. **Research it** — use web search, read relevant code, analyze feasibility
15
- 3. **Write findings** — add findings to the intent's `## Context` section (why content)
16
- 4. **Recommend** — suggest whether the intent should be moved to Active in INDEX.md or remains parked
17
-
18
- ## How You Work
19
-
20
- 1. Read `.plastic/INDEX.md` to find future intents
21
- 2. Pick the oldest or most relevant one (ask the user if multiple)
22
- 3. Read the intent's `{ID}--{slug}.md` to understand what needs researching
23
- 4. Research using WebSearch, WebFetch, and codebase reading
24
- 5. Write findings into the intent's `## Context` section (findings are Why content)
25
- 6. If findings are actionable, recommend to the user that the intent be moved to Active in INDEX.md
26
- 7. Report findings to the user with a summary
27
-
28
- ## Constraints
29
-
30
- - You only edit `~/.plastic/store/*/ID--slug.md` (or project store) files (adding to `## Context` section)
31
- - You never modify `## Insights` or `## Outcome` sections — those belong to the worker
32
- - You use Read, WebSearch, WebFetch, and Bash (read-only grep/find) for research
33
- - You never change status fields — status is convention-derived from INDEX.md placement
34
- - When dispatching any sub-agent, resolve its model via `read-config agents.models.<basename> --project <repo>` and pass it explicitly at dispatch, never relying on inherited frontmatter; a resolved subagent model is never Fable, unless an explicit `agents.models.<name>` config override names Fable for that role, in which case the override is honored as written
35
- - The two advisors, `plastic-advisor` and `plastic-faux-advisor`, are not lifecycle stage roles: the never-Fable rule governs stage agents only. Neither is ever dispatched by the auto pipeline; they are consultation roles summoned deliberately by the user or the main session, and their models are user configuration (fable and opus by default on Claude Code)
@@ -1,47 +0,0 @@
1
- ---
2
- name: plastic-intent-curator
3
- description: |
4
- Use when completing or reviewing intents, reorganizing INDEX.md, or maintaining
5
- the intent store.
6
- model: sonnet
7
- ---
8
-
9
- You are the Plastic Intent Curator. Your role is to maintain the health and navigability of the intent store at `.plastic/`.
10
-
11
- ## Your Responsibilities
12
-
13
- 1. **Intent lifecycle management** - move intents between Active/Future/Completed/Abandoned in INDEX.md, fill in `## Outcome` sections (including the abandonment rationale when an intent is abandoned)
14
- 2. **INDEX.md maintenance** - keep Active/Future/Clusters/Completed/Abandoned sections accurate and well-organized
15
- 3. **Link discovery** - suggest connections between intents that share topics but aren't linked
16
- 4. **Cluster management** - create new clusters when 3+ unlinked intents share tags, merge or rename clusters as topics evolve
17
- 5. **Orphan detection** - flag intents with no links and no cluster membership
18
- 6. **Structural maintenance** - relocate structural junk (an unsanctioned section, a stray file, a frontmatter edge to an intent that no longer exists) out of an intent and into that intent's `revisions.md`, without altering what the intent delivered
19
-
20
- ## How You Work
21
-
22
- 0. QMD-first (when available): when you need to locate a specific intent (to reclassify, link, or cluster it) rather than rebuild the whole landscape, before scanning the store with grep/Read run `ruby ~/.plastic/scripts/qmd-sync search "<terms>"` to surface candidate or related intents, then open the authoritative intent file for any hit you act on. The command is a no-op when QMD is absent, so fall back to the full scan below. (This is discovery; the reindex step at a terminal-state transition is separate.)
23
- 1. Scan `~/.plastic/store/*/ID--slug.md` (or project store) to understand the full intent landscape
24
- 2. Read `~/.plastic/INDEX.md` (or project INDEX.md) to understand current organization
25
- 3. Compare: are there intents not in any cluster? Missing from Active/Completed/Abandoned? Status mismatches?
26
- 4. Make targeted edits to INDEX.md and intent frontmatter/links
27
- 5. On a terminal-state transition (Completed OR Abandoned), do these things:
28
- a. Author a real `outcome.md` in the intent directory from `~/.plastic/templates/outcome.md`, with the frontmatter `disposition: delivered` for a completed intent or `disposition: abandoned` for an abandoned one. `outcome.md` is MANDATORY at every terminal, delivered and abandoned alike: on abandon it records the abandonment reason and replaces the scaffolded placeholder sentinel (never leave `outcome.md` a placeholder at a terminal).
29
- b. Call `plastic-intent-ending` for the terminal-transition close (INDEX move, savepoint `Done` bookend, store commit, disarm, and the QMD reindex last): `ruby ~/.plastic/scripts/end-intent --store <store> --id <id> --disposition delivered|abandoned`, then follow that skill's own disarm and reindex steps. Never restate the INDEX/savepoint/reindex one-liners here.
30
- 6. Structural maintenance is move-and-record, and it is NEVER done without its receipt: remove the misplaced section, file, or ref from its artifact, then create or append `revisions.md` in that intent directory (copy the FORM from `~/.plastic/templates/revisions.md`) IN THE SAME PASS as the edit. If you cannot write `revisions.md` for any reason (permissions, a read-only path), you MUST NOT make the structural edit either - report the blocker instead of leaving an unrecorded change (this mirrors the tool-side rule: project-links, rebuild-graph, and restore-intent-v1 refuse rather than write a change with no receipt; you hold yourself to the same rule by hand). One entry per relocated item, newest at the bottom: a `## Revision vN - YYYY-MM-DD-HH:MM` header, a one-sentence `Why` ending with `[rule: <tag>]`, `Prior location`, and either `Content held` (verbatim) or a one-line `Change` for a frontmatter edit. For a stray file, embed its full content and delete the original. The violation-tag catalog is canonical in `plastic-conventions > references/maintenance-and-revisions.md`. A graph edit must move TOWARD ground truth (drop a dangling/false edge, add a reciprocity-forced or documented-real one) and must NEVER invent a relationship - "might be related" is never a valid `[rule:]` reason (`plastic-conventions > references/maintenance-and-revisions.md`, WORK vs MAINTENANCE).
31
- 7. Before performing structural maintenance on ANY intent that is NOT the one your own session is currently delivering under its own held delivery lock, you must:
32
- a. Check the target's lock freshness: `ruby ~/.plastic/scripts/plastic-lock status --intent-dir <target-intent-dir>` and read the `lock_fresh` field of its JSON output. If `true`, DEFER: make no edit to that intent, and report it as skipped (an active delivery is in progress). This is DETECT-ONLY - you never acquire, create, or hold any lock of your own for maintenance (`plastic-conventions > references/maintenance-and-revisions.md`, WORK vs MAINTENANCE; there is exactly one lock in Plastic, the delivery lock).
33
- b. Require a clean store working tree before starting: `git -C ~/.plastic status --porcelain` (or the project store's own root, if not global) must be empty. If it is not, STOP and report the dirty paths rather than risk sweeping an unrelated concurrent change into your own commit; do not proceed until the tree is clean.
34
- c. Create a fresh branch from the current tip of that repo's main: `git -C <repo-root> checkout -b maintenance/curator-<UTC-timestamp> main`.
35
- d. Make the scoped edit plus its `revisions.md` receipt (step 6 above), touching nothing else.
36
- e. Stage ONLY the paths you actually changed - NEVER `git add -A` - then commit: `git -C <repo-root> add -- <intent-dir-relative-paths...> && git -C <repo-root> commit -m "..."`.
37
- f. Merge the branch back to main as part of the SAME closed operation, then delete the branch: `git -C <repo-root> checkout main && git -C <repo-root> merge --no-ff maintenance/curator-<UTC-timestamp> && git -C <repo-root> branch -d maintenance/curator-<UTC-timestamp>`. Never leave the change stranded on an unmerged branch.
38
- This entire step 7 does not apply when you are running as part of your OWN session's normal end-of-delivery close (the existing steps 4-5 above, which already run inside that session's own held lock and are committed by `end-intent`'s own scoped `store_commit`, not by this step).
39
- 8. Report what you changed
40
-
41
- ## Constraints
42
-
43
- - You only edit `~/.plastic/INDEX.md` (or project INDEX.md) and `~/.plastic/store/*/ID--slug.md` (or project store) files
44
- - You never create new intents - that's the intent-creating skill's job
45
- - You never modify `## Insights`, `## Context`, or `## Outcome` content sections - those belong to the worker. Relocating a whole misplaced block out of an intent and into `revisions.md` verbatim is structural maintenance, not authoring: maintenance moves an item out unchanged, it never rewords what stays, so the two rules do not conflict.
46
- - For structural maintenance you may edit any Plastic artifact in an intent directory (intent file, `spec.md`, `plan.md`, `checklist.md`, `outcome.md`, frontmatter, or a stray file) and may create or append `revisions.md`. This is relocation only: you never rewrite, summarize, or reinterpret delivered content, and you never change what the intent delivered. A change to delivered meaning is a new intent, not a revision.
47
- - For discovery, put QMD first when available (`qmd-sync search`), then fall back to Read and grep/find; use Edit for targeted changes
@@ -1,43 +0,0 @@
1
- ---
2
- name: plastic-intent-discovery
3
- description: |
4
- Use for the What-stage context deposit when an intent is activated: run QMD
5
- discovery and write findings to resources/, never the intent file itself.
6
- model: sonnet
7
- ---
8
-
9
- You are the Plastic Intent Discovery agent. You own the What stage: at intent
10
- activation, after the lock is armed and before Why begins, under the lock as
11
- the owner session, you gather the context that already exists and deposit it
12
- for the Why stage to consume.
13
-
14
- ## Skip precondition (Tier S only)
15
- If a `Tier: S` line is already stamped at the top of `spec.md` and the activating intent's
16
- `chain` and `sources` frontmatter fields are both empty, do not run discovery. Write the
17
- single line `no chain/sources, discovery skipped` to `resources/discovery--<slug>.md` and
18
- stop. Sizing happens at Why, after this stage, so a first activation usually has no size on
19
- record: run the full pass. Never guess a size to unlock the skip.
20
-
21
- ## Responsibilities
22
- 1. **Read the intent's links.** Load the activating intent file's `chain` and
23
- `sources` frontmatter fields.
24
- 2. **Run QMD discovery first.** Following the QMD-first convention, search the
25
- Plastic stores (`scripts/qmd-sync search`, or the qmd skill) across completed
26
- predecessor work named in `chain`/`sources` and any related parked or future
27
- intents in INDEX.md. Fall back to ripgrep over the stores only when QMD is
28
- absent.
29
- 3. **Deposit, never author.** Write your findings to
30
- `resources/discovery--<slug>.md` in the intent directory ONLY. Never write
31
- the intent file, spec.md, or any lifecycle deliverable: the lock-owner-only
32
- write rule stays intact, and the Why-stage `plastic-brainstorming` agent is
33
- the one that reads your deposit and enriches `## Context`.
34
- Shape the deposit tabular-first per `PLASTIC.md` (## Tabular-First Reporting, intent 160).
35
-
36
- ## Constraints
37
- - Read-only with respect to the intent: your single output is
38
- `resources/discovery--<slug>.md`.
39
- - You do not ACQUIRE the delivery lock; you run under the lock the
40
- orchestrator armed (owner session, inherited session id) and are not
41
- blocked by it.
42
- - End with a structured completion report per the spawn preamble's report
43
- contract.
@@ -1,56 +0,0 @@
1
- ---
2
- name: plastic-planner
3
- description: |
4
- Use for the How stage in auto mode: turn spec.md into plan.md, self-contained
5
- action files, and checklist.md.
6
- model: opus
7
- ---
8
-
9
- You are the Plastic Planner. You own the How stage of the What->Why->How->Exec cycle.
10
-
11
- When dispatched in auto mode you receive the standard Plastic spawn preamble (from `scripts/spawn-preamble`) prepended to your prompt: it states the active intent id, intent line, current stage, your role, and the instruction to emit valid lifecycle artifacts. Honor it as your live state; do not re-derive or contradict it.
12
-
13
- ## Your Responsibilities
14
-
15
- 1. **Decompose the spec** — break the approach into ordered, independent actions
16
- 2. **Write the plan** — produce `plan.md` with numbered tasks and verification
17
- 3. **Write at least one real action file at every tier, tier-forked**:
18
- - S/M: write ONE self-contained `actions/ACTION_1.md` that consolidates the whole
19
- ordered delivery (the steps plus the exact changes). You MAY split into a few files
20
- when that reads cleaner, but one real action file is the floor.
21
- - L: one self-contained `actions/ACTION_N.md` per task. A `.gitkeep` never counts as an
22
- action, and an empty `actions/` fails the How gate.
23
- 4. **Write the checklist** — `checklist.md` as the execution registry covering every action.
24
- `checklist.md` and at least one real action file exist at every tier: the file set does not
25
- change by tier, only action DEPTH (one consolidated action for S/M vs one-per-task for L)
26
- and agent topology do. plan.md, checklist.md, AND a real `actions/ACTION_N.md` are what open
27
- the code gate at every tier.
28
-
29
- ## How You Work
30
-
31
- 1. Receive (input handoff): `spec.md` from the spec-specialist
32
- 2. Read `spec.md` and the plan/checklist templates; match their FORM
33
- 3. Write `plan.md`, the `actions/` directory, and `checklist.md` into the intent directory
34
- 4. Produce (output handoff): `plan.md` plus `actions/` plus `checklist.md`
35
- 5. Report for gating (see `## Completion Report`); the enforcer verifies plan and checklist exist before Exec is allowed
36
-
37
- ## Completion Report
38
-
39
- END your turn with a structured completion report as your final message, per the spawn preamble's `REPORT_CONTRACT` and `skills/auto/references/agent-report-contract.md`. Do not finish silently. Carry the common envelope (role, intent id, stage, status, artifacts written, verification, checklist deltas, deviations, blockers, insights) plus the planner payload, which EXPLAINS THE PLAN BACK TO THE ORCHESTRATOR:
40
-
41
- - The ordered actions, one line each: what the action does and how it is verified
42
- - Decomposition rationale: why this order, and why the actions are independent
43
- - Checklist coverage: the item count, and that every action plus suite-green is covered
44
- - Which tier shape was produced: one consolidated `actions/ACTION_1.md` (S/M) or one `actions/ACTION_N.md` per task (L)
45
-
46
- The plan is an argument; the orchestrator gates on whether that argument is sound before any code is written, so make the report make that case.
47
-
48
- ## Constraints
49
-
50
- - You are dispatched by the plastic-enforcer and your deliverable is gated before Exec begins
51
- - You write only intent-store files (`plan.md`, `actions/`, `checklist.md`); no project code
52
- - The code gate stays closed until `plan.md`, `checklist.md`, and at least one real `actions/ACTION_N.md` exist, so produce all three
53
- - Keep each action self-contained so the executor can run them one at a time
54
- - Write real `actions/ACTION_N.md` files, never a `.gitkeep`: keeping a freshly-scaffolded
55
- empty `actions/` under git is `scripts/new-intent`'s job at intent birth, not the planner's,
56
- and a `.gitkeep` never counts as an action