@zalom/plastic 2.0.0-alpha.9 → 2.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (322) hide show
  1. package/PLASTIC.md +13 -136
  2. package/README.md +357 -133
  3. package/agents/plastic-enforcer.md +20 -15
  4. package/agents/plastic-executor.md +15 -4
  5. package/agents/plastic-node-research.md +30 -0
  6. package/agents/plastic-node-verify.md +28 -0
  7. package/agents/plastic-node-work.md +33 -0
  8. package/agents/{plastic-advisor.md → plastic-primary-advisor.md} +7 -9
  9. package/agents/{plastic-faux-advisor.md → plastic-secondary-advisor.md} +9 -12
  10. package/assets/plastic-logo.svg +1 -0
  11. package/bin/crap +4 -0
  12. package/bin/lib/context_budget.rb +43 -6
  13. package/bin/lib/skill_census.rb +839 -0
  14. package/bin/plastic +6 -0
  15. package/bin/plastic-skill-census +114 -0
  16. package/bin/test +24 -4
  17. package/bin/verify-change +345 -0
  18. package/config_asks.yml +4 -4
  19. package/deprecations.yml +1 -1
  20. package/{skills/agent-advisor/references → docs/help}/advisor-protocol.md +19 -24
  21. package/{skills/auto/references → docs/help}/agent-architecture.md +16 -14
  22. package/{skills/conventions/references → docs/help}/completion-and-done.md +15 -16
  23. package/docs/help/human-report-contract.md +152 -0
  24. package/{skills/conventions/references → docs/help}/knowledge-graph.md +9 -0
  25. package/{skills/conventions/references → docs/help}/locks-and-worktrees.md +11 -13
  26. package/{skills/conventions/references → docs/help}/maintenance-and-revisions.md +1 -1
  27. package/{skills/conventions/references → docs/help}/roadmaps.md +2 -2
  28. package/{skills/tutorial/references → docs/help}/track-1-guided.md +28 -47
  29. package/{skills/tutorial/references → docs/help}/track-2-auto.md +8 -8
  30. package/{skills/tutorial/references → docs/help}/track-3-projects-and-roadmaps.md +24 -17
  31. package/hooks/call-budget +4 -0
  32. package/hooks/hooks.json +24 -0
  33. package/hooks/message-display +55 -2
  34. package/hooks/session-start +5 -1
  35. package/hooks/statusline +32 -27
  36. package/hooks/stop +5 -0
  37. package/package.json +5 -3
  38. package/scripts/append-ledger +2 -1
  39. package/scripts/dashboard.rb +267 -16
  40. package/scripts/day-summary +2 -1
  41. package/scripts/doctor.rb +680 -39
  42. package/scripts/end-intent +153 -30
  43. package/scripts/exec-worktree +5 -5
  44. package/scripts/file-session-intent +2 -1
  45. package/scripts/graph-measure +249 -0
  46. package/scripts/hook-call-budget +222 -0
  47. package/scripts/hook-capture +24 -123
  48. package/scripts/hook-close +2 -1
  49. package/scripts/hook-message-display +7 -0
  50. package/scripts/hook-record +24 -16
  51. package/scripts/hook-savepoint +27 -3
  52. package/scripts/hook-session-start +359 -321
  53. package/scripts/hook-stop +58 -0
  54. package/scripts/index-projection +74 -0
  55. package/scripts/insight-append +17 -4
  56. package/scripts/install.rb +9 -7
  57. package/scripts/lib/action_graph_shim.rb +279 -0
  58. package/scripts/lib/active_delivery.rb +105 -0
  59. package/scripts/lib/agent_models.rb +63 -25
  60. package/scripts/lib/arm.rb +48 -83
  61. package/scripts/lib/atomic_write.rb +31 -0
  62. package/scripts/lib/backup.rb +65 -0
  63. package/scripts/lib/cli/command.rb +92 -0
  64. package/scripts/lib/cli/commands/auto.rb +18 -0
  65. package/scripts/lib/cli/commands/auto_brief.rb +44 -0
  66. package/scripts/lib/cli/commands/auto_lock.rb +99 -0
  67. package/scripts/lib/cli/commands/auto_report.rb +50 -0
  68. package/scripts/lib/cli/commands/auto_take.rb +31 -0
  69. package/scripts/lib/cli/commands/backup.rb +43 -0
  70. package/scripts/lib/cli/commands/checkout.rb +25 -0
  71. package/scripts/lib/cli/commands/continue.rb +66 -0
  72. package/scripts/lib/cli/commands/doctor.rb +81 -0
  73. package/scripts/lib/cli/commands/feedback.rb +40 -0
  74. package/scripts/lib/cli/commands/help.rb +69 -0
  75. package/scripts/lib/cli/commands/hook.rb +32 -0
  76. package/scripts/lib/cli/commands/index.rb +23 -0
  77. package/scripts/lib/cli/commands/install.rb +21 -0
  78. package/scripts/lib/cli/commands/installer_verb.rb +37 -0
  79. package/scripts/lib/cli/commands/intent.rb +19 -0
  80. package/scripts/lib/cli/commands/intent_answer.rb +37 -0
  81. package/scripts/lib/cli/commands/intent_command.rb +53 -0
  82. package/scripts/lib/cli/commands/intent_end.rb +62 -0
  83. package/scripts/lib/cli/commands/intent_new.rb +62 -0
  84. package/scripts/lib/cli/commands/intent_note.rb +43 -0
  85. package/scripts/lib/cli/commands/intent_rule.rb +36 -0
  86. package/scripts/lib/cli/commands/intent_show.rb +32 -0
  87. package/scripts/lib/cli/commands/intent_spec.rb +44 -0
  88. package/scripts/lib/cli/commands/intent_step.rb +71 -0
  89. package/scripts/lib/cli/commands/intent_verify.rb +26 -0
  90. package/scripts/lib/cli/commands/migrate.rb +16 -0
  91. package/scripts/lib/cli/commands/migrate_stores.rb +31 -0
  92. package/scripts/lib/cli/commands/next.rb +54 -0
  93. package/scripts/lib/cli/commands/project.rb +19 -0
  94. package/scripts/lib/cli/commands/project_links.rb +42 -0
  95. package/scripts/lib/cli/commands/project_list.rb +20 -0
  96. package/scripts/lib/cli/commands/project_new.rb +72 -0
  97. package/scripts/lib/cli/commands/query.rb +31 -0
  98. package/scripts/lib/cli/commands/render.rb +33 -0
  99. package/scripts/lib/cli/commands/roadmap.rb +19 -0
  100. package/scripts/lib/cli/commands/roadmap_check.rb +54 -0
  101. package/scripts/lib/cli/commands/roadmap_log.rb +54 -0
  102. package/scripts/lib/cli/commands/roadmap_migrate.rb +53 -0
  103. package/scripts/lib/cli/commands/roadmap_next.rb +70 -0
  104. package/scripts/lib/cli/commands/roadmap_show.rb +45 -0
  105. package/scripts/lib/cli/commands/rollback.rb +20 -0
  106. package/scripts/lib/cli/commands/search.rb +60 -0
  107. package/scripts/lib/cli/commands/session.rb +18 -0
  108. package/scripts/lib/cli/commands/session_commit.rb +42 -0
  109. package/scripts/lib/cli/commands/session_handoff.rb +34 -0
  110. package/scripts/lib/cli/commands/session_summary.rb +35 -0
  111. package/scripts/lib/cli/commands/status.rb +68 -0
  112. package/scripts/lib/cli/commands/subcommand_list.rb +36 -0
  113. package/scripts/lib/cli/commands/sync.rb +46 -0
  114. package/scripts/lib/cli/commands/uninstall.rb +20 -0
  115. package/scripts/lib/cli/commands/update.rb +20 -0
  116. package/scripts/lib/cli/commands/version.rb +53 -0
  117. package/scripts/lib/cli/frontier.rb +86 -0
  118. package/scripts/lib/cli/intent_progress.rb +36 -0
  119. package/scripts/lib/cli/legacy.rb +80 -0
  120. package/scripts/lib/cli/output.rb +137 -0
  121. package/scripts/lib/cli/scope.rb +134 -0
  122. package/scripts/lib/cli/table.rb +65 -0
  123. package/scripts/lib/cli.rb +94 -0
  124. package/scripts/lib/codex_adapter.rb +198 -0
  125. package/scripts/lib/compact_instructions.rb +13 -5
  126. package/scripts/lib/core_integrity.rb +71 -0
  127. package/scripts/lib/dashboard_screen.rb +40 -0
  128. package/scripts/lib/data_boundary.rb +132 -0
  129. package/scripts/lib/day_summary.rb +23 -14
  130. package/scripts/lib/doctor_core.rb +114 -38
  131. package/scripts/lib/doctor_session_ledger.rb +5 -53
  132. package/scripts/lib/engine_permissions.rb +88 -0
  133. package/scripts/lib/exec_worktree.rb +24 -21
  134. package/scripts/lib/feedback_report.rb +1 -1
  135. package/scripts/lib/graph_edges.rb +137 -0
  136. package/scripts/lib/graph_file.rb +246 -0
  137. package/scripts/lib/graph_measure.rb +645 -0
  138. package/scripts/lib/graph_measure_budget.rb +409 -0
  139. package/scripts/lib/graph_measure_cohorts.rb +487 -0
  140. package/scripts/lib/graph_measure_models.rb +413 -0
  141. package/scripts/lib/graph_measure_report.rb +532 -0
  142. package/scripts/lib/graph_tree.rb +98 -0
  143. package/scripts/lib/guarded_append.rb +155 -0
  144. package/scripts/lib/handoff.rb +40 -13
  145. package/scripts/lib/harness_adapter.rb +184 -0
  146. package/scripts/lib/hook_registry.rb +27 -3
  147. package/scripts/lib/hook_replay.rb +229 -0
  148. package/scripts/lib/index_entry.rb +62 -0
  149. package/scripts/lib/index_projection.rb +201 -0
  150. package/scripts/lib/insights.rb +1 -1
  151. package/scripts/lib/installer_core.rb +531 -71
  152. package/scripts/lib/intent_screen.rb +4 -4
  153. package/scripts/lib/intent_screen_ansi.rb +73 -12
  154. package/scripts/lib/intent_validator.rb +2 -2
  155. package/scripts/lib/lock.rb +10 -11
  156. package/scripts/lib/message_display.rb +350 -54
  157. package/scripts/lib/meter_watch.rb +185 -0
  158. package/scripts/lib/node_file.rb +234 -0
  159. package/scripts/lib/node_ids.rb +99 -0
  160. package/scripts/lib/node_input.rb +913 -0
  161. package/scripts/lib/node_input_compatibility.rb +62 -0
  162. package/scripts/lib/node_ledger.rb +386 -0
  163. package/scripts/lib/node_progress.rb +153 -0
  164. package/scripts/lib/node_return.rb +204 -0
  165. package/scripts/lib/node_worktree.rb +337 -0
  166. package/scripts/lib/outcome_report.rb +440 -0
  167. package/scripts/lib/preflight.rb +4 -6
  168. package/scripts/lib/project_config.rb +46 -0
  169. package/scripts/lib/project_validator.rb +3 -2
  170. package/scripts/lib/qmd_sync.rb +8 -7
  171. package/scripts/lib/ready_set.rb +462 -0
  172. package/scripts/lib/reference_archive.rb +45 -0
  173. package/scripts/lib/release_guard.rb +18 -0
  174. package/scripts/lib/report_screen.rb +1371 -47
  175. package/scripts/lib/rlm/corpus.rb +13 -0
  176. package/scripts/lib/rlm/probe.rb +29 -0
  177. package/scripts/lib/rlm/query.rb +22 -0
  178. package/scripts/lib/roadmap_graph.rb +210 -0
  179. package/scripts/lib/roadmap_migration.rb +95 -0
  180. package/scripts/lib/roadmap_queue.rb +158 -8
  181. package/scripts/lib/roadmap_render.rb +150 -0
  182. package/scripts/lib/roadmap_savepoint.rb +64 -14
  183. package/scripts/lib/runner_absorb.rb +703 -0
  184. package/scripts/lib/runner_answer.rb +206 -0
  185. package/scripts/lib/runner_core.rb +194 -0
  186. package/scripts/lib/runner_dispatch.rb +525 -0
  187. package/scripts/lib/runner_policy.rb +191 -0
  188. package/scripts/lib/runner_proposals.rb +275 -0
  189. package/scripts/lib/runner_rewind.rb +201 -0
  190. package/scripts/lib/runner_sweep.rb +231 -0
  191. package/scripts/lib/runner_until_empty.rb +252 -0
  192. package/scripts/lib/runner_watch.rb +389 -0
  193. package/scripts/lib/savepoint.rb +141 -19
  194. package/scripts/lib/scaffold_intent.rb +6 -3
  195. package/scripts/lib/screen_paint.rb +365 -28
  196. package/scripts/lib/screens/dashboard.rb +20 -0
  197. package/scripts/lib/screens/plan.rb +18 -0
  198. package/scripts/lib/screens/roadmap.rb +15 -0
  199. package/scripts/lib/search_index.rb +55 -0
  200. package/scripts/lib/session_close.rb +30 -28
  201. package/scripts/lib/session_git.rb +25 -18
  202. package/scripts/lib/session_ledger.rb +48 -4
  203. package/scripts/lib/session_usage.rb +190 -0
  204. package/scripts/lib/sqlite.rb +22 -0
  205. package/scripts/lib/stop_gate.rb +95 -0
  206. package/scripts/lib/store_discovery.rb +7 -6
  207. package/scripts/lib/store_layout.rb +54 -0
  208. package/scripts/lib/store_provisioning.rb +2 -1
  209. package/scripts/lib/store_sync.rb +85 -0
  210. package/scripts/lib/stores_move.rb +93 -0
  211. package/scripts/lib/verify_intent.rb +36 -8
  212. package/scripts/lib/version_number.rb +48 -0
  213. package/scripts/lib/work_graph.rb +59 -0
  214. package/scripts/lib/work_graph_validator.rb +201 -0
  215. package/scripts/lib/worktree.rb +27 -32
  216. package/scripts/lib/worktree_sweep.rb +6 -5
  217. package/scripts/link-suggest +2 -1
  218. package/scripts/meter-watch +57 -0
  219. package/scripts/migrate-to-global +1 -1
  220. package/scripts/new-intent +4 -13
  221. package/scripts/node-input +92 -0
  222. package/scripts/node-run +225 -0
  223. package/scripts/node-transition +291 -0
  224. package/scripts/outcome-report +74 -0
  225. package/scripts/plastic-lock +42 -33
  226. package/scripts/promote-session-item +3 -2
  227. package/scripts/read-config +53 -9
  228. package/scripts/ready-set +126 -0
  229. package/scripts/release-check +123 -0
  230. package/scripts/report-screen +177 -16
  231. package/scripts/roadmap-graph +119 -0
  232. package/scripts/roadmap-savepoint +7 -0
  233. package/scripts/runner +581 -0
  234. package/scripts/savepoint-note +11 -9
  235. package/scripts/session-commit +2 -1
  236. package/scripts/session-usage +56 -0
  237. package/scripts/skill-lint +115 -6
  238. package/scripts/spawn-preamble +2 -2
  239. package/scripts/update.rb +25 -4
  240. package/scripts/validate-work-graph +39 -0
  241. package/scripts/verify-intent +3 -2
  242. package/scripts/write-handoff +2 -1
  243. package/templates/agents.md +7 -7
  244. package/templates/config.yml +16 -9
  245. package/templates/dashboard-screen.md +22 -0
  246. package/templates/display-fixture.md +21 -0
  247. package/templates/graph.md +16 -0
  248. package/templates/index.md +1 -1
  249. package/templates/intent-screen.md +1 -1
  250. package/templates/node-decision.md +11 -0
  251. package/templates/node-research.md +13 -0
  252. package/templates/node-verify.md +13 -0
  253. package/templates/node-work.md +22 -0
  254. package/templates/outcome.md +8 -3
  255. package/templates/project.yml +1 -1
  256. package/templates/render.css +10 -0
  257. package/templates/report-plan.md +15 -0
  258. package/templates/report-roadmap-delivered.md +10 -0
  259. package/templates/report-roadmap-plan.md +9 -0
  260. package/templates/report-roadmap-state.md +9 -0
  261. package/templates/report-state.md +1 -1
  262. package/templates/roadmap.md +13 -0
  263. package/bin/plastic.js +0 -70
  264. package/scripts/lib/bridge.rb +0 -116
  265. package/skills/agent-advisor/SKILL.md +0 -92
  266. package/skills/auto/SKILL.md +0 -296
  267. package/skills/auto/evals/evals.json +0 -255
  268. package/skills/auto/references/end-tail.md +0 -66
  269. package/skills/auto/references/human-report-contract.md +0 -78
  270. package/skills/conventions/SKILL.md +0 -29
  271. package/skills/dashboard/SKILL.md +0 -169
  272. package/skills/dashboard/evals/evals.json +0 -38
  273. package/skills/dashboard/references/classification.md +0 -22
  274. package/skills/dashboard/templates/dashboard-global.md +0 -20
  275. package/skills/dashboard/templates/dashboard-project.md +0 -19
  276. package/skills/direct/SKILL.md +0 -66
  277. package/skills/direct/references/request-signals.md +0 -59
  278. package/skills/doctor/SKILL.md +0 -299
  279. package/skills/doctor/report.md +0 -102
  280. package/skills/feedback/SKILL.md +0 -98
  281. package/skills/feedback/references/transport-and-privacy.md +0 -65
  282. package/skills/feedback/report.md +0 -36
  283. package/skills/install/SKILL.md +0 -217
  284. package/skills/intent-continuing/SKILL.md +0 -154
  285. package/skills/intent-continuing/references/board-fill.md +0 -43
  286. package/skills/intent-continuing/references/boarding-matrix.md +0 -34
  287. package/skills/intent-continuing/references/context-management.md +0 -28
  288. package/skills/intent-continuing/references/liveness-ranking.md +0 -57
  289. package/skills/intent-creating/SKILL.md +0 -164
  290. package/skills/intent-creating/evals/evals.json +0 -72
  291. package/skills/intent-creating/references/lifecycle.md +0 -81
  292. package/skills/intent-creating/references/wikilinks.md +0 -8
  293. package/skills/intent-ending/SKILL.md +0 -176
  294. package/skills/intent-ending/evals/evals.json +0 -74
  295. package/skills/intent-executing/SKILL.md +0 -170
  296. package/skills/intent-executing/evals/evals.json +0 -66
  297. package/skills/intent-executing/implementer-prompt.md +0 -42
  298. package/skills/intent-executing/spec-reviewer-prompt.md +0 -27
  299. package/skills/intent-speccing/SKILL.md +0 -130
  300. package/skills/intent-speccing/evals/evals.json +0 -126
  301. package/skills/intent-speccing/references/design-principles.md +0 -44
  302. package/skills/intent-speccing/references/per-section-fill-rules.md +0 -92
  303. package/skills/intent-speccing/references/self-verify-checklist.md +0 -37
  304. package/skills/project-creating/SKILL.md +0 -162
  305. package/skills/project-creating/references/hubs-projects.md +0 -55
  306. package/skills/project-creating/references/project-scaffolding.md +0 -97
  307. package/skills/releasing/SKILL.md +0 -337
  308. package/skills/releasing/references/deprecations.md +0 -60
  309. package/skills/releasing/references/promotion-and-tagging.md +0 -66
  310. package/skills/releasing/references/release-lines.md +0 -105
  311. package/skills/roadmap/SKILL.md +0 -64
  312. package/skills/roadmap/references/file-format.md +0 -124
  313. package/skills/roadmap/references/operations.md +0 -112
  314. package/skills/rollback/SKILL.md +0 -91
  315. package/skills/tutorial/SKILL.md +0 -65
  316. package/skills/tutorial/evals/evals.json +0 -186
  317. package/skills/uninstall/SKILL.md +0 -75
  318. package/skills/update/SKILL.md +0 -126
  319. /package/{skills/auto/references → docs/help}/agent-report-contract.md +0 -0
  320. /package/{skills/intent-executing → docs/help}/code-quality-reviewer-prompt.md +0 -0
  321. /package/{skills/conventions/references → docs/help}/lifecycle-and-savepoints.md +0 -0
  322. /package/{skills/intent-executing → docs/help}/plan-reviewer-prompt.md +0 -0
@@ -1,74 +0,0 @@
1
- {
2
- "skill_name": "plastic-intent-ending",
3
- "notes": "Intent 161. Scopes: description triggering (3-6) and behavior (1-2: the two mandatory D6 cases). Case B graduates into test/end_intent_test.rb (test_done_bookend_lands_once_and_is_idempotent) per evaluating-skills conventions.",
4
- "evals": [
5
- {
6
- "id": 1,
7
- "scope": "behavior",
8
- "set": "train",
9
- "prompt": "checklist.md has one unchecked non-completion item. Try to complete the intent.",
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
- "files": [],
12
- "assertions": [
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
- ]
16
- },
17
- {
18
- "id": 2,
19
- "scope": "behavior",
20
- "set": "train",
21
- "prompt": "Run the mechanical close (scripts/end-intent) for a delivered intent with a real outcome.md.",
22
- "expected_output": "The savepoint Done bookend lands exactly once in savepoint.md, and a second run of the same command does not duplicate it (this is the regression the intent fixes: releasing used to skip this line entirely).",
23
- "files": [],
24
- "assertions": [
25
- { "type": "human", "check": "SKILL.md Step 1-4 calls scripts/end-intent as one script instead of restating the outcome/INDEX/savepoint one-liners in prose", "result": "expect-pass" },
26
- { "type": "code", "check": "test/end_intent_test.rb#test_done_bookend_lands_once_and_is_idempotent is green", "result": "pass" }
27
- ]
28
- },
29
- {
30
- "id": 3,
31
- "scope": "triggering",
32
- "set": "train",
33
- "prompt": "Mark intent 87 done, it shipped.",
34
- "expected_output": "Activates plastic-intent-ending to run the mechanical close (outcome.md, INDEX move, savepoint bookend, commit, disarm, reindex, report).",
35
- "files": [],
36
- "assertions": [
37
- { "type": "code", "check": "router CHOICE == plastic-intent-ending", "result": "expect-pass" }
38
- ]
39
- },
40
- {
41
- "id": 4,
42
- "scope": "triggering",
43
- "set": "train",
44
- "prompt": "This one's not worth finishing, abandon it and wrap this up.",
45
- "expected_output": "Activates plastic-intent-ending (indirect trigger: 'wrap this up' names no lifecycle vocabulary directly). Abandoned runs the identical procedure, only outcome.md content and the INDEX section differ.",
46
- "files": [],
47
- "assertions": [
48
- { "type": "code", "check": "router CHOICE == plastic-intent-ending", "result": "expect-pass" }
49
- ]
50
- },
51
- {
52
- "id": 5,
53
- "scope": "triggering",
54
- "set": "validation",
55
- "prompt": "Start work on intent 87.",
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
- "files": [],
58
- "assertions": [
59
- { "type": "code", "check": "router CHOICE != plastic-intent-ending", "result": "expect-pass" }
60
- ]
61
- },
62
- {
63
- "id": 6,
64
- "scope": "triggering",
65
- "set": "validation",
66
- "prompt": "Cut a release and tag it v1.2.0.",
67
- "expected_output": "Does NOT activate plastic-intent-ending directly; activates plastic-releasing, which internally calls scripts/end-intent for the mechanical close as one of its own steps.",
68
- "files": [],
69
- "assertions": [
70
- { "type": "code", "check": "router CHOICE == plastic-releasing", "result": "expect-pass" }
71
- ]
72
- }
73
- ]
74
- }
@@ -1,170 +0,0 @@
1
- ---
2
- name: plastic-intent-executing
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
- user-invocable: true
5
- ---
6
-
7
- # Executing a Plan
8
-
9
- ## Overview
10
-
11
- Load plan from the active intent's `plan.md`, execute all tasks, review as below, report when complete.
12
-
13
- ## Step 0: Sync Worktree First
14
-
15
- Before Step 1 (Load Plan) in either workflow below, sync the code worktree with
16
- main first, so no edit lands on a path a merged rename or delete already removed:
17
-
18
- ```
19
- git -C <worktree> fetch origin && git -C <worktree> merge --ff-only origin/main
20
- ```
21
-
22
- After syncing, verify the plan's target files exist at the paths plan.md names.
23
- If a named file or directory is missing (renamed or removed upstream), stop and
24
- report it rather than editing a stale path.
25
-
26
- Read `../plastic-conventions/references/locks-and-worktrees.md` for delivery isolation: the
27
- single-owner lock, claims, worktrees, solo mode, and the station ledger, before touching the
28
- worktree above. This path resolves relative to this skill's own installed directory.
29
-
30
- ## Mode Selection
31
-
32
- ### Check for superpowers first
33
- If `superpowers:subagent-driven-development` is available as a skill, delegate to it. If only `superpowers:executing-plans` is available, delegate to that. If neither is available, use Plastic's own execution engine below.
34
-
35
- **CRITICAL: when delegating to superpowers:**
36
- - Tell the skill that the plan is at `~/.plastic/store/ID--slug/plan.md` (not `docs/superpowers/plans/`)
37
- - Tell the skill that specs live at `~/.plastic/store/ID--slug/spec.md` (not `docs/superpowers/specs/`)
38
- - All meta-artifacts must stay inside `~/.plastic/store/ID--slug/`
39
- - Code files go in the project tree as normal
40
- - Superpowers skills respect "user preferences for plan/spec location"; Plastic IS that preference
41
-
42
- ### Subagent-Driven (Default)
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
-
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.
46
-
47
- ### Inline (Fallback)
48
- Executes tasks sequentially in the current session. Use when subagents aren't available or user explicitly requests inline mode.
49
-
50
- To select: user says "inline", "execute inline", or "no subagents".
51
-
52
- ## Subagent-Driven Workflow
53
-
54
- ### Step 1: Load Plan
55
- Run Step 0 (Sync Worktree First) before this step.
56
- 1. Read the active intent's `plan.md`
57
- 2. Extract ALL tasks with their full text, store in memory. Never make subagents read the plan file.
58
- 3. Create a task list to track progress
59
-
60
- ### Step 2: Execute Each Task
61
-
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.
63
-
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.
65
-
66
- Read its response by code:
67
- - DONE or DONE_WITH_CONCERNS → proceed to Step 3.
68
- - NEEDS_CONTEXT → provide the missing context, re-dispatch the executor.
69
- - BLOCKED → stop, report to the user, wait for resolution.
70
-
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.
73
-
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.
75
-
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.
77
-
78
- ### Step 4: Update Intent and Complete
79
- Capture observations in `## Insights`. When ALL checklist items are checked:
80
-
81
- 1. Update the intent's cluster entries in `INDEX.md` to show `_(completed)_`. Do this first, so the store auto-commit in the next step picks it up. `plastic-intent-ending` does not cover cluster maintenance (`store-indexing` and `store-curating` own it), so doing it here keeps the step from being lost.
82
- 2. Hand the mechanical close to `plastic-intent-ending`. It owns `outcome.md`, the intent file's `## Outcome` stamp, the INDEX terminal move, the savepoint `Done` line, the store auto-commit, disarm, the QMD reindex, and the EM-to-CTO owner report, as ONE delegation. Author the outcome.md content when that skill asks for it; do not restate the mechanical steps here.
83
-
84
- **This is NOT optional.** An intent with all checklist items done but no Outcome is a broken state. Complete the intent immediately, do not leave it for later.
85
-
86
- ## Inline Workflow
87
-
88
- ### Step 1: Load and Review Plan
89
- Run Step 0 (Sync Worktree First) before this step.
90
- 1. Read plan file from active intent
91
- 2. Review critically, raise concerns before starting
92
- 3. Create task list to track progress
93
-
94
- ### Step 2: Execute Tasks
95
- For each task:
96
- 1. Mark as in_progress
97
- 2. Follow each step exactly
98
- 3. Run verifications as specified
99
- 4. Tick as it lands: follow `## Tick-as-you-land` below
100
-
101
- ### Step 3: Update Intent and Complete
102
- Capture observations in `## Insights`. When ALL checklist items are checked:
103
-
104
- 1. Update the intent's cluster entries in `INDEX.md` to show `_(completed)_`. Do this first, so the store auto-commit in the next step picks it up. `plastic-intent-ending` does not cover cluster maintenance (`store-indexing` and `store-curating` own it), so doing it here keeps the step from being lost.
105
- 2. Hand the mechanical close to `plastic-intent-ending`. It owns `outcome.md`, the intent file's `## Outcome` stamp, the INDEX terminal move, the savepoint `Done` line, the store auto-commit, disarm, the QMD reindex, and the EM-to-CTO owner report, as ONE delegation. Author the outcome.md content when that skill asks for it; do not restate the mechanical steps here.
106
-
107
- **This is NOT optional.** Complete the intent immediately when work is done.
108
-
109
- ## Tick-as-you-land
110
-
111
- As each task lands, in the same edit: move its checklist item from `## In
112
- Progress` to `## Completed` in `checklist.md`, and add one `## Session Log`
113
- row (Date, Items Completed, Notes). Do not batch several tasks' worth of
114
- checklist updates into one later edit; tick the moment the task is verified,
115
- before moving to the next task.
116
-
117
- ## Verify before every owner review
118
-
119
- Hard rule: before presenting any completed work to the owner, independently
120
- verify it. Grep or run the artifact the work just produced (the test suite,
121
- the changed file, the installed output) rather than restating the intended
122
- change. Never present an unverified claim to the owner. If verification
123
- fails, fix it before the review, not after.
124
-
125
- ## Methods report (audits and sweeps)
126
-
127
- When the work is an audit or a sweep (checking many files or many instances of
128
- something rather than building one artifact), deposit a methods report to
129
- `{intent_dir}/resources/` before the review: what was checked, how it was
130
- checked, and what was found. This lets the owner review the method, not just
131
- the conclusion.
132
-
133
- ## Reroute vs dispatch
134
-
135
- A human-facing instruction like "run /plastic-intent-speccing" means the user
136
- types that slash command themselves; it is never handed to a
137
- subagent. Agent-facing dispatch text is a prompt passed to the Agent tool for
138
- a subagent to execute. Keep the two separate: do not address a slash command
139
- to a subagent, and do not paste a dispatch prompt at the user.
140
-
141
- ## Owner decisions during Exec
142
-
143
- When presenting a batch of Exec decisions for the owner to rule, read
144
- `~/.plastic/_decision-tables.md` and follow the numbered-table procedure,
145
- persisting each ruling with `--stage Exec`.
146
-
147
- ## Position in the cycle
148
-
149
- - **Before:** `plan.md` and `checklist.md` exist; the worktree is armed.
150
- - **Produces:** code changes, a ticked checklist, and (for audits or sweeps) a methods report in `resources/`.
151
- - **Next:** `plastic-intent-ending` owns `outcome.md` and the rest of the mechanical close (see intent 161). The Update-Intent-and-Complete step above hands off to it.
152
-
153
- Read `../plastic-conventions/references/lifecycle-and-savepoints.md` for the subagent
154
- report-home contract this handoff relies on.
155
-
156
- ## Model Selection for Subagents
157
-
158
- Match model to task complexity:
159
- - **Mechanical tasks** (config files, boilerplate): cheapest available
160
- - **Standard implementation**: default model
161
- - **Architecture, integration, review**: most capable model
162
-
163
- ## Prompt Templates
164
-
165
- Subagent prompts are in this skill's directory:
166
- - `implementer-prompt.md`: template for implementer subagents
167
- - `spec-reviewer-prompt.md`: template for spec compliance reviewers
168
- - `code-quality-reviewer-prompt.md`: template for code quality reviewers
169
-
170
- Read the appropriate template when dispatching each subagent type.
@@ -1,66 +0,0 @@
1
- {
2
- "skill_name": "plastic-intent-executing",
3
- "notes": "Intent 164. New evals.json for the executing-plan skill: refuse-to-present-unverified, sync-worktree-first, and the reroute-vs-dispatch distinction. All assertions are pending a real observed run per the plastic-evaluating-skills convention.",
4
- "evals": [
5
- {
6
- "id": 1,
7
- "scope": "behavior",
8
- "set": "train",
9
- "prompt": "A task just landed: a new method was added and its test file was written. The agent is about to tell the owner the task is done and move to the next one.",
10
- "expected_output": "Before presenting the completed task to the owner, the agent independently verifies it: greps the changed file or runs the specific test, rather than restating what it intended to do. It does not present the claim until the grep or test run has actually been observed.",
11
- "files": [],
12
- "assertions": [
13
- {
14
- "type": "human",
15
- "check": "a grep or test run against the actual artifact is shown before the owner-facing claim; no claim is presented as done without that observed check",
16
- "result": "expect-pass"
17
- }
18
- ]
19
- },
20
- {
21
- "id": 2,
22
- "scope": "behavior",
23
- "set": "validation",
24
- "prompt": "The agent finished implementing a task and, without running anything, tells the owner \"Task 3 is complete and the tests pass.\"",
25
- "expected_output": "This is a refusal case: the skill does not allow presenting a pass claim without first grepping or running the artifact. The correct behavior is to run the verification first and only then report the observed result.",
26
- "files": [],
27
- "assertions": [
28
- {
29
- "type": "human",
30
- "check": "the skill's stated hard rule blocks an unverified claim like this; expected behavior is verify-then-report, not report-then-hope",
31
- "result": "expect-pass"
32
- }
33
- ]
34
- },
35
- {
36
- "id": 3,
37
- "scope": "behavior",
38
- "set": "train",
39
- "prompt": "Execution is starting for an intent whose plan.md was written two days ago; the code worktree has not been touched since.",
40
- "expected_output": "Before Step 1 (Load Plan), the agent syncs the code worktree with main: `git -C <worktree> fetch origin && git -C <worktree> merge --ff-only origin/main`, then verifies the plan's target files exist at the paths plan.md names before editing any of them.",
41
- "files": [],
42
- "assertions": [
43
- {
44
- "type": "code",
45
- "check": "the fetch-and-merge --ff-only sync command runs before Load Plan; target file existence is checked before the first edit",
46
- "result": "expect-pass"
47
- }
48
- ]
49
- },
50
- {
51
- "id": 4,
52
- "scope": "behavior",
53
- "set": "validation",
54
- "prompt": "The plan's next step reads \"run /plastic-intent-speccing\" as a human-facing instruction to consolidate the spec once Exec finishes an audit task.",
55
- "expected_output": "The agent tells the user to type the /plastic-intent-speccing command themselves; it does not dispatch a subagent with that slash-command text as a prompt, and it does not paste an agent-facing dispatch prompt at the user instead.",
56
- "files": [],
57
- "assertions": [
58
- {
59
- "type": "human",
60
- "check": "the slash-command instruction is directed at the user, not handed to the Agent tool as a subagent prompt; no dispatch-prompt text leaks into the user-facing message",
61
- "result": "expect-pass"
62
- }
63
- ]
64
- }
65
- ]
66
- }
@@ -1,42 +0,0 @@
1
- # Implementer Subagent Prompt
2
-
3
- You are implementing a specific task from a plan. You have been given the full task text below.
4
-
5
- ## Your Task
6
-
7
- {{TASK_TEXT}}
8
-
9
- ## Project Context
10
-
11
- {{PROJECT_CONTEXT}}
12
-
13
- ## Active Intent
14
-
15
- {{INTENT_CONTEXT}}
16
-
17
- ## Instructions
18
-
19
- 1. Read the task carefully. If anything is unclear, report NEEDS_CONTEXT with what you need.
20
- 2. Implement exactly what the task specifies — nothing more, nothing less.
21
- 3. Write tests first when the task includes test steps (TDD).
22
- 4. Follow the file paths specified in the task exactly.
23
- 5. Commit after each logical unit of work.
24
- 6. When done, self-review against this checklist:
25
- - [ ] All steps in the task are completed
26
- - [ ] Tests pass
27
- - [ ] Code is clean and follows project conventions
28
- - [ ] No unrelated changes
29
-
30
- ## Report Format
31
-
32
- End your work with one of these status lines:
33
-
34
- **DONE** — All steps completed, tests pass, code committed.
35
-
36
- **DONE_WITH_CONCERNS** — Completed but I noticed: [describe concerns].
37
-
38
- **NEEDS_CONTEXT** — I need clarification on: [specific questions].
39
-
40
- **BLOCKED** — Cannot proceed because: [describe blocker].
41
-
42
- It is always OK to report BLOCKED or NEEDS_CONTEXT. Do not guess or improvise when uncertain.
@@ -1,27 +0,0 @@
1
- # Spec Compliance Reviewer Prompt
2
-
3
- The implementer says they finished this task. Verify independently — their report may be incomplete or optimistic.
4
-
5
- ## Task Requirements
6
-
7
- {{TASK_TEXT}}
8
-
9
- ## Instructions
10
-
11
- 1. Read the actual code that was written (not the implementer's report)
12
- 2. Compare line by line against the task requirements
13
- 3. Check for:
14
- - Missing requirements — anything in the task that wasn't implemented
15
- - Extra work — anything added that the task didn't ask for
16
- - Misunderstandings — code that doesn't match what the task intended
17
- - Test coverage — are all specified behaviors tested?
18
-
19
- ## Report Format
20
-
21
- **PASS** — All task requirements are correctly implemented. No gaps, no extras.
22
-
23
- **FAIL** — Issues found:
24
- - [file:line] Description of what's wrong and what was expected
25
- - [file:line] Description of what's missing
26
-
27
- Be specific. Reference exact file paths and line numbers.
@@ -1,130 +0,0 @@
1
- ---
2
- name: plastic-intent-speccing
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).
12
- user-invocable: true
13
- ---
14
-
15
- # Intent Speccing: thinking mode
16
-
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.
22
-
23
- ## Active intent
24
-
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.
32
-
33
- ## The conversation
34
-
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
68
-
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.
79
-
80
- ### Research mode
81
-
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.
93
-
94
- ## Closing the conversation
95
-
96
- When the rulings are enough to build from:
97
-
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.
118
-
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.
123
-
124
- ## References
125
-
126
- | Trigger | Read |
127
- |---|---|
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,126 +0,0 @@
1
- {
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 evals.json convention.",
4
- "evals": [
5
- {
6
- "id": 1,
7
- "scope": "triggering",
8
- "set": "train",
9
- "prompt": "The active intent is at Why with Context and Decisions recorded. Consolidate the enriched Why into spec.md.",
10
- "expected_output": "Activates plastic-intent-speccing (the user-typed Why-to-How consolidation command).",
11
- "files": [],
12
- "assertions": [
13
- {
14
- "type": "code",
15
- "check": "router CHOICE == plastic-intent-speccing",
16
- "result": "expect-pass"
17
- }
18
- ]
19
- },
20
- {
21
- "id": 2,
22
- "scope": "triggering",
23
- "set": "train",
24
- "prompt": "Turn what we just discussed into the contract the planner builds from.",
25
- "expected_output": "Activates plastic-intent-speccing; an indirect trigger that names neither the skill nor spec.md.",
26
- "files": [],
27
- "assertions": [
28
- {
29
- "type": "code",
30
- "check": "router CHOICE == plastic-intent-speccing",
31
- "result": "expect-pass"
32
- }
33
- ]
34
- },
35
- {
36
- "id": 3,
37
- "scope": "triggering",
38
- "set": "validation",
39
- "prompt": "Brainstorm this intent.",
40
- "expected_output": "Activates plastic-intent-speccing (brainstorming is a mode of the thinking conversation since intent 304).",
41
- "files": [],
42
- "assertions": [
43
- {
44
- "type": "code",
45
- "check": "router CHOICE != plastic-intent-speccing",
46
- "result": "expect-pass"
47
- }
48
- ]
49
- },
50
- {
51
- "id": 4,
52
- "scope": "triggering",
53
- "set": "validation",
54
- "prompt": "Write the plan.",
55
- "expected_output": "Does NOT activate plastic-intent-speccing; a plan is written from the action files by the executing skill.",
56
- "files": [],
57
- "assertions": [
58
- {
59
- "type": "code",
60
- "check": "router CHOICE != plastic-intent-speccing",
61
- "result": "expect-pass"
62
- }
63
- ]
64
- },
65
- {
66
- "id": 5,
67
- "scope": "behavior",
68
- "set": "train",
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 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
- "files": [],
72
- "assertions": [
73
- {
74
- "type": "human",
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
- "result": "expect-pass"
77
- }
78
- ]
79
- },
80
- {
81
- "id": 6,
82
- "scope": "behavior",
83
- "set": "train",
84
- "prompt": "Intent Z has Decisions recording D4: ship the setting as a CLI flag. A later Insights entry, timestamped after D4, reads: superseding ruling, ship as a config-file setting instead of a CLI flag, per user correction. Consolidate into spec.md.",
85
- "expected_output": "The produced spec Approach and Decisions sections encode the LATER ruling (config-file setting); the superseded earlier Decision (CLI flag) does not stand as the shipped design in any section. The Decisions section notes that the later Insight supersedes D4.",
86
- "files": [],
87
- "assertions": [
88
- {
89
- "type": "human",
90
- "check": "Approach and Decisions state the config-file setting, not the CLI flag; no section still asserts the CLI-flag path as the shipped design",
91
- "result": "expect-pass"
92
- }
93
- ]
94
- },
95
- {
96
- "id": 7,
97
- "scope": "behavior",
98
- "set": "validation",
99
- "prompt": "Intent W is at Why. Context says the team wants error handling that is more resilient, but no Decision or Insight states which specific mechanism (retry, circuit breaker, or fallback) was chosen. Consolidate into spec.md.",
100
- "expected_output": "Stops at step 5 (the gap rule) instead of inventing an Approach; asks the user which error-handling mechanism was decided, naming the missing ruling and the section it blocks.",
101
- "files": [],
102
- "assertions": [
103
- {
104
- "type": "human",
105
- "check": "no invented Approach or Decisions content fills the gap; the agent asks for the missing ruling instead of guessing a default mechanism",
106
- "result": "expect-pass"
107
- }
108
- ]
109
- },
110
- {
111
- "id": 8,
112
- "scope": "behavior",
113
- "set": "validation",
114
- "prompt": "Intent V has Decisions recording 3 rejected alternatives, each with a one-line reason it lost. Consolidate into spec.md.",
115
- "expected_output": "Alternatives Considered renders as a table (Alternative, Not chosen because), not the bullet-dash form shown in the template; the produced spec file contains no em-dashes or en-dashes anywhere in the file.",
116
- "files": [],
117
- "assertions": [
118
- {
119
- "type": "human",
120
- "check": "Alternatives Considered is a two-column table with one row per rejected alternative; a full-file dash-glyph scan of the produced spec file finds none",
121
- "result": "expect-pass"
122
- }
123
- ]
124
- }
125
- ]
126
- }