@zalom/plastic 2.0.0-alpha.9 → 2.0.2

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 (326) hide show
  1. package/PLASTIC.md +13 -136
  2. package/README.md +357 -133
  3. package/agents/plastic-enforcer.md +21 -16
  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 +8 -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/docs/help/completion-and-done.md +53 -0
  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 +5 -4
  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 +378 -56
  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 +74 -91
  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 +111 -0
  67. package/scripts/lib/cli/commands/auto_report.rb +50 -0
  68. package/scripts/lib/cli/commands/auto_take.rb +68 -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 +58 -0
  82. package/scripts/lib/cli/commands/intent_end.rb +75 -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 +79 -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 +46 -0
  95. package/scripts/lib/cli/commands/project_list.rb +20 -0
  96. package/scripts/lib/cli/commands/project_new.rb +95 -0
  97. package/scripts/lib/cli/commands/query.rb +31 -0
  98. package/scripts/lib/cli/commands/render.rb +35 -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 +77 -0
  104. package/scripts/lib/cli/commands/roadmap_show.rb +65 -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 +55 -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 +235 -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 +543 -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 +921 -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 +170 -12
  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 +526 -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 +67 -19
  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/untouched_scaffold.rb +51 -0
  212. package/scripts/lib/verify_intent.rb +36 -8
  213. package/scripts/lib/version_number.rb +48 -0
  214. package/scripts/lib/work_graph.rb +59 -0
  215. package/scripts/lib/work_graph_validator.rb +201 -0
  216. package/scripts/lib/worktree.rb +27 -32
  217. package/scripts/lib/worktree_sweep.rb +6 -5
  218. package/scripts/link-suggest +2 -1
  219. package/scripts/meter-watch +57 -0
  220. package/scripts/migrate-to-global +1 -1
  221. package/scripts/new-intent +4 -13
  222. package/scripts/node-input +92 -0
  223. package/scripts/node-run +225 -0
  224. package/scripts/node-transition +291 -0
  225. package/scripts/outcome-report +74 -0
  226. package/scripts/plastic-lock +65 -60
  227. package/scripts/project-links +6 -21
  228. package/scripts/promote-session-item +3 -2
  229. package/scripts/read-config +53 -9
  230. package/scripts/ready-set +126 -0
  231. package/scripts/release-check +123 -0
  232. package/scripts/report-screen +177 -16
  233. package/scripts/roadmap-graph +125 -0
  234. package/scripts/roadmap-savepoint +7 -0
  235. package/scripts/rollback.rb +5 -1
  236. package/scripts/runner +581 -0
  237. package/scripts/savepoint-note +11 -9
  238. package/scripts/session-commit +2 -1
  239. package/scripts/session-usage +56 -0
  240. package/scripts/skill-lint +115 -6
  241. package/scripts/spawn-preamble +2 -2
  242. package/scripts/update.rb +31 -4
  243. package/scripts/validate-work-graph +39 -0
  244. package/scripts/verify-intent +3 -2
  245. package/scripts/write-handoff +2 -1
  246. package/templates/agents.md +7 -7
  247. package/templates/config.yml +16 -9
  248. package/templates/dashboard-screen.md +22 -0
  249. package/templates/display-fixture.md +21 -0
  250. package/templates/graph.md +16 -0
  251. package/templates/index.md +1 -1
  252. package/templates/intent-screen.md +1 -1
  253. package/templates/node-decision.md +11 -0
  254. package/templates/node-research.md +13 -0
  255. package/templates/node-verify.md +13 -0
  256. package/templates/node-work.md +22 -0
  257. package/templates/outcome.md +8 -3
  258. package/templates/project.yml +1 -1
  259. package/templates/render.css +10 -0
  260. package/templates/report-plan.md +15 -0
  261. package/templates/report-roadmap-delivered.md +10 -0
  262. package/templates/report-roadmap-plan.md +9 -0
  263. package/templates/report-roadmap-state.md +9 -0
  264. package/templates/report-state.md +1 -1
  265. package/templates/roadmap.md +13 -0
  266. package/bin/plastic.js +0 -70
  267. package/scripts/lib/bridge.rb +0 -116
  268. package/skills/agent-advisor/SKILL.md +0 -92
  269. package/skills/auto/SKILL.md +0 -296
  270. package/skills/auto/evals/evals.json +0 -255
  271. package/skills/auto/references/end-tail.md +0 -66
  272. package/skills/auto/references/human-report-contract.md +0 -78
  273. package/skills/conventions/SKILL.md +0 -29
  274. package/skills/conventions/references/completion-and-done.md +0 -43
  275. package/skills/dashboard/SKILL.md +0 -169
  276. package/skills/dashboard/evals/evals.json +0 -38
  277. package/skills/dashboard/references/classification.md +0 -22
  278. package/skills/dashboard/templates/dashboard-global.md +0 -20
  279. package/skills/dashboard/templates/dashboard-project.md +0 -19
  280. package/skills/direct/SKILL.md +0 -66
  281. package/skills/direct/references/request-signals.md +0 -59
  282. package/skills/doctor/SKILL.md +0 -299
  283. package/skills/doctor/report.md +0 -102
  284. package/skills/feedback/SKILL.md +0 -98
  285. package/skills/feedback/references/transport-and-privacy.md +0 -65
  286. package/skills/feedback/report.md +0 -36
  287. package/skills/install/SKILL.md +0 -217
  288. package/skills/intent-continuing/SKILL.md +0 -154
  289. package/skills/intent-continuing/references/board-fill.md +0 -43
  290. package/skills/intent-continuing/references/boarding-matrix.md +0 -34
  291. package/skills/intent-continuing/references/context-management.md +0 -28
  292. package/skills/intent-continuing/references/liveness-ranking.md +0 -57
  293. package/skills/intent-creating/SKILL.md +0 -164
  294. package/skills/intent-creating/evals/evals.json +0 -72
  295. package/skills/intent-creating/references/lifecycle.md +0 -81
  296. package/skills/intent-creating/references/wikilinks.md +0 -8
  297. package/skills/intent-ending/SKILL.md +0 -176
  298. package/skills/intent-ending/evals/evals.json +0 -74
  299. package/skills/intent-executing/SKILL.md +0 -170
  300. package/skills/intent-executing/evals/evals.json +0 -66
  301. package/skills/intent-executing/implementer-prompt.md +0 -42
  302. package/skills/intent-executing/spec-reviewer-prompt.md +0 -27
  303. package/skills/intent-speccing/SKILL.md +0 -130
  304. package/skills/intent-speccing/evals/evals.json +0 -126
  305. package/skills/intent-speccing/references/design-principles.md +0 -44
  306. package/skills/intent-speccing/references/per-section-fill-rules.md +0 -92
  307. package/skills/intent-speccing/references/self-verify-checklist.md +0 -37
  308. package/skills/project-creating/SKILL.md +0 -162
  309. package/skills/project-creating/references/hubs-projects.md +0 -55
  310. package/skills/project-creating/references/project-scaffolding.md +0 -97
  311. package/skills/releasing/SKILL.md +0 -337
  312. package/skills/releasing/references/deprecations.md +0 -60
  313. package/skills/releasing/references/promotion-and-tagging.md +0 -66
  314. package/skills/releasing/references/release-lines.md +0 -105
  315. package/skills/roadmap/SKILL.md +0 -64
  316. package/skills/roadmap/references/file-format.md +0 -124
  317. package/skills/roadmap/references/operations.md +0 -112
  318. package/skills/rollback/SKILL.md +0 -91
  319. package/skills/tutorial/SKILL.md +0 -65
  320. package/skills/tutorial/evals/evals.json +0 -186
  321. package/skills/uninstall/SKILL.md +0 -75
  322. package/skills/update/SKILL.md +0 -126
  323. /package/{skills/auto/references → docs/help}/agent-report-contract.md +0 -0
  324. /package/{skills/intent-executing → docs/help}/code-quality-reviewer-prompt.md +0 -0
  325. /package/{skills/conventions/references → docs/help}/lifecycle-and-savepoints.md +0 -0
  326. /package/{skills/intent-executing → docs/help}/plan-reviewer-prompt.md +0 -0
@@ -1,44 +0,0 @@
1
- # Design Principles: Unit Boundaries and Existing Codebases
2
-
3
- General good-developer guidance behind two parts of the Process: how to design for
4
- isolation and clarity, and how to behave in an existing codebase. Also holds the
5
- Process Flow diagram (the same ordered flow the Checklist already states as numbered
6
- steps).
7
-
8
- ## Design for isolation and clarity
9
-
10
- - Break the system into smaller units that each have one clear purpose, communicate through well-defined interfaces, and can be understood and tested independently
11
- - For each unit, you should be able to answer: what does it do, how do you use it, and what does it depend on?
12
- - Can someone understand what a unit does without reading its internals? Can you change the internals without breaking consumers? If not, the boundaries need work.
13
- - Smaller, well-bounded units are also easier for you to work with - you reason better about code you can hold in context at once, and your edits are more reliable when files are focused. When a file grows large, that's often a signal that it's doing too much.
14
-
15
- ## Working in existing codebases
16
-
17
- - Explore the current structure before proposing changes. Follow existing patterns.
18
- - Where existing code has problems that affect the work (e.g., a file that's grown too large, unclear boundaries, tangled responsibilities), include targeted improvements as part of the design - the way a good developer improves code they're working in.
19
- - Don't propose unrelated refactoring. Stay focused on what serves the current goal.
20
-
21
- ## Process Flow (diagram)
22
-
23
- The Checklist above already states this ordered flow as numbered steps 1-6; this
24
- diagram is the same flow in a visual form.
25
-
26
- ```dot
27
- digraph brainstorming {
28
- "Explore project context" [shape=box];
29
- "Grill in prose" [shape=box];
30
- "Propose 2-3 approaches" [shape=box];
31
- "Present design sections" [shape=box];
32
- "Owner rules?" [shape=diamond];
33
- "Collect rulings\n(persist each immediately)" [shape=box];
34
- "Invoke /plastic-intent-speccing" [shape=doublecircle];
35
-
36
- "Explore project context" -> "Grill in prose";
37
- "Grill in prose" -> "Propose 2-3 approaches";
38
- "Propose 2-3 approaches" -> "Present design sections";
39
- "Present design sections" -> "Owner rules?";
40
- "Owner rules?" -> "Present design sections" [label="no, revise"];
41
- "Owner rules?" -> "Collect rulings\n(persist each immediately)" [label="yes"];
42
- "Collect rulings\n(persist each immediately)" -> "Invoke /plastic-intent-speccing";
43
- }
44
- ```
@@ -1,92 +0,0 @@
1
- # Per-Section Fill Rules
2
-
3
- The single shared method for turning the rulings into `spec.md`. `plastic-intent-speccing`
4
- (the thinking conversation) and the auto orchestrator both point here; neither restates these
5
- rules. One fill rule per template section, in template order.
6
-
7
- Read the ruling ledger first (built in step 2 of the SKILL.md sequence): `## Context` plus
8
- `### Decisions`, then `## Insights` newest-last (a later ruling supersedes an earlier
9
- conflicting one), then `resources/discovery--<slug>.md`, then any other `resources/*.md`.
10
- Every rule below names which part of that ledger feeds the section.
11
-
12
- ## 1. Problem
13
-
14
- Source: the intent's `## Intent` line plus the problem narrative in `## Context`.
15
-
16
- State the problem as a problem, not a solution: what is broken, missing, or costly today, for
17
- whom. Do not describe the fix here, that belongs in Approach. If `## Insights` records a later
18
- reframe of the problem (a scope correction, a retargeted root cause), the later framing wins.
19
-
20
- ## 2. Goals
21
-
22
- Source: explicit goal statements in `## Context`, plus any `### Decisions` entry that commits to
23
- delivering a specific outcome.
24
-
25
- One bullet per goal, each a concrete, observable outcome the delivery must reach. Encode every
26
- Decision that commits to an outcome as its own bullet, do not compress two Decisions into one
27
- vague goal. A single-line collapsed Goals section is complete if it names every
28
- outcome; do not pad it with restated Problem text.
29
-
30
- ## 3. Non-Goals
31
-
32
- Source: `### Decisions` entries that name something explicitly out of scope, and `## Insights`
33
- rulings that narrowed scope after the initial brainstorm.
34
-
35
- One bullet per excluded item, each naming what is out and, briefly, why (a sibling intent owns
36
- it, a scope-reframe ruling cut it, it is a future intent). If a later Insight narrows scope
37
- further than an earlier Decision, the Insight's narrower boundary is the one recorded.
38
-
39
- ## 4. Approach
40
-
41
- Source: every `### Decisions` entry that describes HOW, resolved into one coherent narrative.
42
-
43
- Write prose, not a decision list. Synthesize the chosen path so it reads as one design: what
44
- gets built, in what shape, and how the pieces fit. Every Decision that shapes the approach must
45
- be traceable to a sentence here, but do not restate each Decision by its Dn label, that
46
- enumeration belongs in the Decisions section. Use a table only where the Approach itself compares
47
- options inline (rare; usually that comparison belongs in Alternatives Considered instead).
48
-
49
- ## 5. Alternatives Considered
50
-
51
- Source: `### Decisions` entries and `## Insights` rulings that name a rejected path and the
52
- reason it lost.
53
-
54
- Render as a table, not the template's bullet-dash form, so the reason column stays uniform and
55
- free of dash-glyph punctuation:
56
-
57
- | Alternative | Not chosen because |
58
- |---|---|
59
- | <rejected path> | <the ruling's stated reason, paraphrased> |
60
-
61
- One row per rejected alternative. If two Decisions reject variants of the same alternative, merge
62
- them into one row rather than duplicating it. Never use an em-dash or en-dash in the reason
63
- column; write "because" or a colon instead.
64
-
65
- ## 6. Decisions
66
-
67
- Source: `### Decisions` verbatim, in the order recorded, one entry per Decision.
68
-
69
- One bullet per decision, each keeping its `Dn` label and its ruling in paraphrase or verbatim.
70
- Do not drop a decision because it seems minor: every Decision must appear here even if its effect
71
- on the shipped Approach or Goals is small. When `## Insights` records a later ruling that
72
- supersedes an earlier Decision, add or amend the bullet to state the later ruling and note which
73
- earlier Decision it supersedes.
74
-
75
- ## 7. Acceptance Criteria
76
-
77
- Source: any criteria named directly in `### Decisions` or `## Insights`, plus one inferred
78
- criterion per Goal that has no explicit criterion on record.
79
-
80
- One checkbox bullet per criterion, each concretely checkable: a fact a reviewer can confirm true
81
- or false by inspection, a command, or a file, never a vague quality judgment. Every Goal must map
82
- to at least one criterion. A criterion that cannot be checked without more interpretation is not
83
- done, rewrite it or ask (the gap rule, SKILL.md step 5).
84
-
85
- ## 8. Open Questions
86
-
87
- Source: any question raised during Why that has no matching Decision or Insight resolving it.
88
-
89
- List each unresolved question as its own bullet. If every question raised during Why has a
90
- resolving Decision or Insight, write `None` and, directly under it, one line per resolved
91
- question naming which Decision or Insight resolved it (so a reader can audit the resolution
92
- instead of taking "None" on faith).
@@ -1,37 +0,0 @@
1
- # Self-Verify Checklist
2
-
3
- Run this before presenting spec.md (SKILL.md step 7). Ten checks: the four points of
4
- brainstorming's proven Spec Self-Review, merged with the six binding output checks this skill
5
- adds. Fix any failing check, then re-verify from the top; do not present a spec that fails one of
6
- these.
7
-
8
- ## Brainstorming's four Spec Self-Review points
9
-
10
- 1. **Placeholder scan.** Any "TBD", "TODO", incomplete section, or vague requirement left in the
11
- draft? Fix it before moving on.
12
- 2. **Internal consistency.** Do any two sections contradict each other? Does the Approach
13
- actually match what Goals and Acceptance Criteria describe?
14
- 3. **Scope check.** Is this spec focused enough for a single implementation plan, or does the
15
- Problem actually describe more than one independent piece of work that needs decomposing
16
- first?
17
- 4. **Ambiguity check.** Could any requirement be read two different ways? If so, pick one
18
- reading and rewrite the line so only that reading survives.
19
-
20
- ## The six binding output checks
21
-
22
- 5. **No template placeholder text remains.** No literal `<intent name>`, `<alternative>`, `...`,
23
- sample bracket text, or other template filler from `templates/spec.md` survives anywhere in
24
- the artifact.
25
- 6. **No header line.** The file starts at the `# Spec:` heading; there is no `Tier:` line (removed in 2.0, intent 304).
26
- 7. **All 8 sections present, in template order.** Problem, Goals, Non-Goals, Approach,
27
- Alternatives Considered, Decisions, Acceptance Criteria, Open Questions, each present once, in
28
- that order, none merged into another.
29
- 8. **Every `## Insights` ruling is traceable to a spec line.** Walk the Insights log entry by
30
- entry: each one lands in some section of the spec. Where two rulings conflict, the later one
31
- (further down the log) is the one that landed, and the earlier one does not silently persist
32
- in a different section.
33
- 9. **Acceptance criteria are concretely checkable.** Each Acceptance Criteria bullet reads as a
34
- fact a reviewer can confirm true or false by inspection, a command, or a named file, not a
35
- quality judgment a reviewer would have to interpret.
36
- 10. **No em-dashes or en-dashes anywhere in the artifact.** Scan the full file; replace any dash
37
- glyph with a comma, period, parenthesis, or colon.
@@ -1,162 +0,0 @@
1
- ---
2
- name: plastic-project-creating
3
- description: >-
4
- Create a new project from an implementation intent. Sets up project directory,
5
- git init, AGENTS.md with founding intent decisions, plastic-install --local,
6
- tactical mirror, projects.yml registration, and framework scaffolding.
7
- Use when an implementation intent spawns a project, or manually by user.
8
- user-invocable: true
9
- ---
10
-
11
- # Creating a Project
12
-
13
- ## Precondition
14
-
15
- An active intent must exist with enough context to define a project — at minimum: name/slug, path, and key decisions from `## Context > ### Decisions`.
16
-
17
- ## Workflow
18
-
19
- ### 1. Determine Project Identity
20
-
21
- - **Slug:** derived from intent name (kebab-case, 2-4 words) or user-specified
22
- - **Path:** from `~/.plastic/config.yml` `project_roots` (first entry as default), or user-specified
23
- - Confirm path with user before creation
24
-
25
- ### 2. Create Project Directory
26
-
27
- ```bash
28
- mkdir -p <project_root>/<slug>
29
- cd <project_root>/<slug>
30
- git init
31
- ```
32
-
33
- ### 3. Run `plastic-install --local`
34
-
35
- Invoke `plastic-install --local` in the project directory. This creates:
36
- ```
37
- .plastic/
38
- ├── store/
39
- ├── INDEX.md
40
- └── config.yml
41
- ```
42
-
43
- ### 4. Populate AGENTS.md
44
-
45
- Create `AGENTS.md` in the project root from the skeleton in
46
- `references/project-scaffolding.md` ("AGENTS.md skeleton"): read it now and fill in
47
- the project name, governing intent IDs, decisions, and project-specific rules.
48
-
49
- ### 5. Create Tactical Mirror
50
-
51
- Create the first intent in the project's store at `~/.plastic/projects/{slug}/store/`
52
- using the frontmatter, sections, and INDEX.md line in `references/project-scaffolding.md`
53
- ("Tactical mirror intent"), including the Hub multi-intent variant if there is more
54
- than one founding intent.
55
-
56
- **Directory:** `~/.plastic/projects/{slug}/store/1--{slug}/`
57
- **File:** `~/.plastic/projects/{slug}/store/1--{slug}/1--{slug}.md`
58
-
59
- ### 6. Register in projects.yml
60
-
61
- Read `~/.plastic/projects.yml` and add the entry shown in
62
- `references/project-scaffolding.md` ("projects.yml registration block"). For
63
- Hub-spawned projects, `parent` references the primary founding intent.
64
-
65
- ### 7. Provision the Project Store
66
-
67
- The `provision-project-store` verb is the single source of truth for store
68
- creation. Run it after the project is registered in step 6 (the provisioner
69
- requires registration), and before the QMD step:
70
-
71
- ```bash
72
- ruby ~/.plastic/scripts/provision-project-store <slug>
73
- ```
74
-
75
- This ensures `~/.plastic/projects/<slug>/store/` exists with `.gitkeep`, and
76
- writes `INDEX.md` and `project.yml` only if missing. It is idempotent, so it is
77
- safe even when the tactical mirror in step 5 already created the store directory.
78
- Do not create the store with an inline `mkdir`; the provisioner is the only place
79
- a store is made. For a project that is already registered but store-less, use the
80
- `plastic-doctor` skill's provisioning section instead.
81
-
82
- ### 8. Mark Global Intent(s) Completed
83
-
84
- For each founding intent:
85
-
86
- 1. Write `## Outcome` in the intent file:
87
- > "Spawned project `<slug>` at `<path>`. Decisions carried to AGENTS.md. Tactical mirror: `project-<slug>:1`."
88
- 2. Write `outcome.md` with full details (all decisions, project path, tactical mirror ID)
89
- 3. Update `chain` to include `project-<slug>:1`
90
- 4. Move from `## Active` to `## Completed` in `~/.plastic/INDEX.md` (with today's date)
91
-
92
- ### 9. Framework Scaffolding
93
-
94
- If decisions specify a framework, run the appropriate scaffolding command AFTER steps 3-4 (so scaffolding doesn't overwrite Plastic files or AGENTS.md):
95
-
96
- | Framework | Command |
97
- |---|---|
98
- | Rails | `rails new <slug> [options from decisions] --skip-git` (skip git — already initialized) |
99
- | Node/npm | `npm init -y` |
100
- | Ruby gem | `bundle gem <slug>` |
101
- | Other | As specified in decisions |
102
-
103
- After scaffolding, verify AGENTS.md and `.plastic/` still exist. If scaffolding overwrote them, restore.
104
-
105
- ### 10. Auto-commit Both Stores
106
-
107
- ```bash
108
- cd ~/.plastic && git add . && git commit -m "feat: spawn project <slug> from intent <ID>"
109
- cd <project> && git add . && git commit -m "feat: initialize project from intent <ID>"
110
- ```
111
-
112
- ### 11. Register the project store with QMD (optional)
113
-
114
- If QMD is installed, register the new project's store as a search collection:
115
-
116
- ```bash
117
- ruby ~/.plastic/scripts/qmd-sync register --store ~/.plastic/projects/<slug>/store
118
- ```
119
-
120
- `qmd-sync` no-ops when QMD is absent, so run it unconditionally. This adds the
121
- `plastic-<slug>` collection and indexes it.
122
-
123
- ### 12. Self-Check with validate-project
124
-
125
- Before announcing, verify the spawn actually landed everything it claims to
126
- have created. Run:
127
-
128
- ```bash
129
- ruby ~/.plastic/scripts/validate-project <slug>
130
- ```
131
-
132
- If this exits 0, proceed to step 13. If it exits non-zero, STOP: do not
133
- proceed to Announce. Read the `missing:` and error lines it printed to
134
- stderr, fix the named gap(s), for example:
135
-
136
- - missing `project.yml` or `INDEX.md` or `store/`: re-run
137
- `ruby ~/.plastic/scripts/provision-project-store <slug>` (step 7), then
138
- re-check
139
- - missing project-root `AGENTS.md`: repeat step 4 (populate AGENTS.md at the
140
- project root, not `~/.plastic/projects/<slug>/`)
141
- - project directory missing on disk: repeat step 2
142
- - not registered in projects.yml: repeat step 6
143
-
144
- Re-run `validate-project <slug>` after each fix until it exits 0. Only a
145
- project spawn that passes this self-check moves on to be announced as
146
- created. A spawn that never verifies itself is exactly the bug this step
147
- exists to close (intent 190; the intent-26 spawn shipped with no
148
- `project.yml` and no root `AGENTS.md`, caught only weeks later by a doctor
149
- sweep).
150
-
151
- ### 13. Announce
152
-
153
- Log in `## Insights` of each founding intent:
154
- > "Project `<slug>` created at `<path>`. Tactical mirror: `project-<slug>:1` (autonomous)"
155
-
156
- Announce to user:
157
- > "Project `<slug>` created at `<path>`. AGENTS.md populated with [N] decisions from [founding intent IDs]. Tactical mirror `1` is now the active intent in the project store."
158
-
159
- ## References
160
-
161
- - Read `references/project-scaffolding.md` before steps 4-6, for the AGENTS.md skeleton, the tactical mirror intent format, and the projects.yml registration block
162
- - Read `references/hubs-projects.md` for the full hub/project relationship model, project creation flow, and cross-linking conventions
@@ -1,55 +0,0 @@
1
- # Hubs and Projects
2
-
3
- ## Hubs
4
-
5
- A Hub is a cloud of intents around related topics. Hubs emerge naturally from
6
- Folgezettel branching — intents that spawn in the same direction cluster.
7
-
8
- - A Hub can spawn a Project. The Hub holds the founding ideas.
9
- - A single intent can also spawn a Project.
10
- - Hub-spawned projects revolve around different ideas around related topics.
11
- - Intent-spawned projects revolve around the single founding intent.
12
- - A Project is the deliverable outcome of one or more intents.
13
-
14
- Hubs are represented as clusters in INDEX.md.
15
-
16
- ## Projects — Full Detail
17
-
18
- A Project is a deliverable grouping of intents. Projects have two stores:
19
-
20
- - **Global store** (`~/.plastic/store/`): strategic intents
21
- - **Project store** (`~/.plastic/projects/{slug}/store/`): tactical intents
22
-
23
- `projects.yml` maps project slugs to codebase paths:
24
- ```yaml
25
- projects:
26
- plastic:
27
- path: "/path/to/plastic"
28
- remote: "git@github.com:org/plastic.git"
29
- registered: '2026-05-26'
30
- status: active
31
- ```
32
-
33
- Config resolution: `~/.plastic/projects/{slug}/config.yml` overrides `~/.plastic/config.yml`.
34
-
35
- Cross-linking: project intents reference global intents via `[[global:ID]]`. Global intents reference project intents via `[[project-slug:ID]]`.
36
-
37
- ## Privacy and Collaboration
38
-
39
- **Plastic is personal.** All intent data lives under `~/.plastic/` — one location,
40
- one git repo, never pushed. Each person has their own intent store.
41
-
42
- Collaboration happens through pull requests and project conventions, not shared intents.
43
- When an intent delivers something that changes how a project works, the decision gets
44
- written into the project's shared files (README, docs, config). The intents themselves
45
- are private working memory.
46
-
47
- ## Project Creation Flow
48
-
49
- When an implementation intent spawns a project:
50
- 1. Determine project path from config `project_roots` or intent context
51
- 2. `gh repo create --private` (agent-created repos are always private by default)
52
- 3. Set up project directory, git init, AGENTS.md with founding intent decisions
53
- 4. Register in `projects.yml`
54
- 5. Create tactical mirror in project store
55
- 6. The global intent completes; the tactical mirror becomes the active intent
@@ -1,97 +0,0 @@
1
- # Project Scaffolding Templates
2
-
3
- Full templates for the artifacts created while spawning a project: the AGENTS.md
4
- skeleton (Workflow step 4), the tactical mirror intent (step 5), and the
5
- projects.yml registration block (step 6).
6
-
7
- ## Table of Contents
8
-
9
- - [AGENTS.md skeleton (step 4)](#agentsmd-skeleton-step-4)
10
- - [Tactical mirror intent (step 5)](#tactical-mirror-intent-step-5)
11
- - [projects.yml registration block (step 6)](#projectsyml-registration-block-step-6)
12
-
13
- ## AGENTS.md skeleton (step 4)
14
-
15
- Create `AGENTS.md` in the project root with:
16
-
17
- ```markdown
18
- # <Project Name> — Agent Instructions
19
-
20
- Read `PLASTIC.md` in `~/.plastic/` for the core conventions; deeper doctrine lives in
21
- the `plastic-conventions` skill's chapters. Follow it exactly.
22
-
23
- This file is the operating contract for this project. Any agent entering
24
- this project reads this file first.
25
-
26
- ## Global Store
27
-
28
- Location: `~/.plastic/`
29
- Governing intent(s): <list of founding intent IDs with descriptions>
30
-
31
- ## Decisions
32
-
33
- <Copy ALL decisions from founding intent(s)' `## Context > ### Decisions`>
34
-
35
- Each decision should include:
36
- - The decision itself
37
- - The rationale (why this choice)
38
- - Date decided
39
-
40
- ## Project-Specific Rules
41
-
42
- <Any rules derived from the decisions — e.g., "Use Minitest, not RSpec",
43
- "37signals methodology", "sqlite-vec for vector storage">
44
- ```
45
-
46
- ## Tactical mirror intent (step 5)
47
-
48
- Create the first intent in the project's store at `~/.plastic/projects/{slug}/store/`:
49
-
50
- **Directory:** `~/.plastic/projects/{slug}/store/1--{slug}/`
51
- **File:** `~/.plastic/projects/{slug}/store/1--{slug}/1--{slug}.md`
52
-
53
- ```yaml
54
- ---
55
- id: '1'
56
- intent: "<same description as founding intent>"
57
- sources: ["global:<founding_intent_ID>"]
58
- chain: []
59
- created: <today>
60
- author: <same as founding intent author>
61
- tags: [<relevant tags>]
62
- ---
63
- ```
64
-
65
- Sections:
66
- - `## Intent` — same as founding intent
67
- - `## Context` — carry forward relevant Context and Decisions
68
- - `## Outcome` — (pending)
69
- - `## Insights` — empty
70
- - `## Links` — `[[global:<founding_intent_ID>|<founding intent name>]]`
71
-
72
- Update the project's `~/.plastic/projects/{slug}/INDEX.md`:
73
- ```markdown
74
- # Index
75
-
76
- ## Active
77
- - [1 — <intent name>](store/1--<slug>/1--<slug>.md) — implementation, from: global:<ID>
78
- ```
79
-
80
- **For multi-intent spawning (Hub):**
81
- - `sources`: `["global:<id1>", "global:<id2>", ...]` — all founding intents
82
- - All founding intents' decisions merge into AGENTS.md
83
- - Context carries forward from all founding intents
84
-
85
- ## projects.yml registration block (step 6)
86
-
87
- Read `~/.plastic/projects.yml` and add:
88
-
89
- ```yaml
90
- <slug>:
91
- path: <full-path>
92
- parent: "<founding_intent_ID>"
93
- registered: <today>
94
- status: active
95
- ```
96
-
97
- For Hub-spawned projects, `parent` references the primary founding intent.