@zalom/plastic 1.14.0 → 2.0.0-alpha.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 (190) hide show
  1. package/PLASTIC.md +101 -294
  2. package/README.md +5 -6
  3. package/agents/plastic-advisor.md +18 -17
  4. package/agents/plastic-enforcer.md +57 -69
  5. package/agents/plastic-executor.md +34 -20
  6. package/agents/plastic-faux-advisor.md +18 -18
  7. package/config_asks.yml +38 -0
  8. package/hooks/capture +4 -0
  9. package/hooks/check-update +12 -3
  10. package/hooks/close +5 -0
  11. package/hooks/hooks.json +9 -49
  12. package/hooks/record +4 -0
  13. package/package.json +3 -2
  14. package/scripts/agent-report +8 -9
  15. package/scripts/append-ledger +195 -0
  16. package/scripts/codex-hook +101 -95
  17. package/scripts/dashboard.rb +4 -4
  18. package/scripts/doctor.rb +106 -43
  19. package/scripts/end-intent +77 -76
  20. package/scripts/exec-worktree +11 -20
  21. package/scripts/file-session-intent +61 -0
  22. package/scripts/hook-capture +242 -0
  23. package/scripts/hook-close +34 -0
  24. package/scripts/hook-record +149 -0
  25. package/scripts/hook-session-start +95 -12
  26. package/scripts/install.rb +8 -6
  27. package/scripts/lib/agent_models.rb +1 -7
  28. package/scripts/lib/arm.rb +283 -0
  29. package/scripts/lib/backfill_intent.rb +316 -0
  30. package/scripts/lib/bridge.rb +24 -1597
  31. package/scripts/lib/doctor_core.rb +17 -88
  32. package/scripts/lib/doctor_session_ledger.rb +106 -0
  33. package/scripts/lib/exec_worktree.rb +14 -60
  34. package/scripts/lib/harness_text.rb +5 -4
  35. package/scripts/lib/hook_registry.rb +44 -107
  36. package/scripts/lib/insights.rb +3 -4
  37. package/scripts/lib/installer_core.rb +19 -30
  38. package/scripts/lib/lock.rb +6 -26
  39. package/scripts/lib/outcome_guard.rb +7 -5
  40. package/scripts/lib/project_validator.rb +30 -1
  41. package/scripts/lib/roadmap_queue.rb +3 -3
  42. package/scripts/lib/roadmap_savepoint.rb +1 -1
  43. package/scripts/lib/rule_catalog.rb +6 -3
  44. package/scripts/lib/savepoint.rb +320 -0
  45. package/scripts/lib/scaffold_intent.rb +13 -179
  46. package/scripts/lib/session_backfill.rb +184 -0
  47. package/scripts/lib/session_close.rb +84 -0
  48. package/scripts/lib/session_git.rb +469 -0
  49. package/scripts/lib/session_ledger.rb +497 -0
  50. package/scripts/lib/store_discovery.rb +1 -1
  51. package/scripts/lib/store_provisioning.rb +1 -1
  52. package/scripts/maintenance-run +7 -7
  53. package/scripts/new-intent +63 -4
  54. package/scripts/plastic-lock +94 -41
  55. package/scripts/promote-session-item +150 -0
  56. package/scripts/rebuild-graph +1 -1
  57. package/scripts/roadmap-next +2 -2
  58. package/scripts/rollback.rb +42 -3
  59. package/scripts/scaffold-intent +37 -63
  60. package/scripts/session-commit +116 -0
  61. package/scripts/spawn-preamble +5 -5
  62. package/scripts/update.rb +7 -3
  63. package/skills/agent-advisor/SKILL.md +3 -3
  64. package/skills/agent-advisor/references/advisor-protocol.md +20 -20
  65. package/skills/auto/SKILL.md +218 -317
  66. package/skills/auto/evals/evals.json +10 -10
  67. package/skills/auto/references/agent-architecture.md +102 -90
  68. package/skills/auto/references/agent-report-contract.md +4 -21
  69. package/skills/auto/references/end-tail.md +47 -53
  70. package/skills/auto/references/human-report-contract.md +8 -8
  71. package/skills/conventions/SKILL.md +1 -3
  72. package/skills/conventions/references/lifecycle-and-savepoints.md +35 -1
  73. package/skills/conventions/references/locks-and-worktrees.md +47 -55
  74. package/skills/conventions/references/maintenance-and-revisions.md +12 -12
  75. package/skills/dashboard/SKILL.md +1 -1
  76. package/skills/direct/SKILL.md +66 -0
  77. package/skills/direct/references/request-signals.md +59 -0
  78. package/skills/doctor/SKILL.md +58 -11
  79. package/skills/doctor/report.md +3 -1
  80. package/skills/install/SKILL.md +11 -9
  81. package/skills/intent-continuing/SKILL.md +131 -89
  82. package/skills/intent-continuing/references/boarding-matrix.md +34 -0
  83. package/skills/intent-continuing/references/context-management.md +2 -2
  84. package/skills/intent-creating/SKILL.md +2 -2
  85. package/skills/intent-creating/references/lifecycle.md +1 -1
  86. package/skills/intent-ending/SKILL.md +28 -37
  87. package/skills/intent-ending/evals/evals.json +4 -4
  88. package/skills/intent-executing/SKILL.md +12 -49
  89. package/skills/intent-executing/plan-reviewer-prompt.md +39 -0
  90. package/skills/intent-speccing/SKILL.md +108 -51
  91. package/skills/intent-speccing/evals/evals.json +5 -5
  92. package/skills/intent-speccing/references/per-section-fill-rules.md +4 -4
  93. package/skills/intent-speccing/references/self-verify-checklist.md +1 -2
  94. package/skills/project-creating/SKILL.md +1 -1
  95. package/skills/releasing/SKILL.md +7 -8
  96. package/skills/tutorial/SKILL.md +2 -2
  97. package/skills/tutorial/references/track-1-guided.md +16 -18
  98. package/skills/tutorial/references/track-2-auto.md +12 -13
  99. package/skills/tutorial/references/track-3-projects-and-roadmaps.md +2 -2
  100. package/templates/agents.md +4 -7
  101. package/templates/project.yml +7 -0
  102. package/templates/roadmap.md +1 -1
  103. package/templates/savepoint.md +2 -2
  104. package/templates/session-intent.md +29 -0
  105. package/agents/plastic-brainstorming.md +0 -48
  106. package/agents/plastic-future-intent-researcher.md +0 -35
  107. package/agents/plastic-intent-curator.md +0 -47
  108. package/agents/plastic-intent-discovery.md +0 -43
  109. package/agents/plastic-planner.md +0 -56
  110. package/agents/plastic-spec-specialist.md +0 -53
  111. package/hooks/auto-arm +0 -5
  112. package/hooks/bash-gate +0 -3
  113. package/hooks/continue +0 -31
  114. package/hooks/edit-gates +0 -3
  115. package/hooks/future-intent-check +0 -25
  116. package/hooks/gate-check +0 -12
  117. package/hooks/power-tools +0 -8
  118. package/scripts/hook-auto-arm +0 -51
  119. package/scripts/hook-bash-gate +0 -78
  120. package/scripts/hook-code-gate +0 -38
  121. package/scripts/hook-continue +0 -48
  122. package/scripts/hook-create-gate +0 -51
  123. package/scripts/hook-edit-gates +0 -58
  124. package/scripts/hook-future-intent-check +0 -90
  125. package/scripts/hook-gate-check +0 -169
  126. package/scripts/hook-links-gate +0 -54
  127. package/scripts/hook-lock-gate +0 -47
  128. package/scripts/hook-power-tools +0 -38
  129. package/scripts/hook-savepoint-pre +0 -32
  130. package/scripts/lib/codex_edit_gates.rb +0 -138
  131. package/scripts/lib/edit_gates.rb +0 -398
  132. package/scripts/lib/links_gate.rb +0 -140
  133. package/scripts/lib/qmd_hook.rb +0 -41
  134. package/scripts/lib/spec_header.rb +0 -83
  135. package/scripts/lib/start_intent.rb +0 -296
  136. package/scripts/start-intent +0 -89
  137. package/skills/_active-intent-gate.md +0 -26
  138. package/skills/auto/references/tiers.md +0 -100
  139. package/skills/continuing/SKILL.md +0 -34
  140. package/skills/continuing/evals/evals.json +0 -91
  141. package/skills/conventions/references/gates-and-enforcement.md +0 -53
  142. package/skills/conventions/references/tiers-and-dispatch.md +0 -135
  143. package/skills/doctor/references/gates-stuck-detection.md +0 -43
  144. package/skills/intent-brainstorming/SKILL.md +0 -118
  145. package/skills/intent-brainstorming/evals/evals.json +0 -67
  146. package/skills/intent-continuing/evals/evals.json +0 -145
  147. package/skills/intent-discovering/SKILL.md +0 -56
  148. package/skills/intent-grilling/SKILL.md +0 -108
  149. package/skills/intent-linking/SKILL.md +0 -128
  150. package/skills/intent-linking/evals/evals.json +0 -22
  151. package/skills/intent-linking/references/zettelkasten.md +0 -45
  152. package/skills/intent-locking/SKILL.md +0 -64
  153. package/skills/intent-planning/SKILL.md +0 -145
  154. package/skills/intent-planning/evals/evals.json +0 -81
  155. package/skills/intent-planning/references/plan-format.md +0 -130
  156. package/skills/intent-researching/SKILL.md +0 -123
  157. package/skills/intent-researching/evals/evals.json +0 -22
  158. package/skills/intent-savepoint/SKILL.md +0 -83
  159. package/skills/intent-savepoint/references/context-management.md +0 -32
  160. package/skills/intent-starting/SKILL.md +0 -151
  161. package/skills/intent-starting/evals/evals.json +0 -117
  162. package/skills/intent-starting/references/boarding-matrix.md +0 -35
  163. package/skills/project-continuing/SKILL.md +0 -119
  164. package/skills/project-continuing/evals/evals.json +0 -100
  165. package/skills/roadmap-continuing/SKILL.md +0 -89
  166. package/skills/roadmap-continuing/evals/evals.json +0 -82
  167. package/skills/skill-creating/SKILL.md +0 -75
  168. package/skills/skill-creating/evals/evals.json +0 -108
  169. package/skills/skill-creating/references/agents.md +0 -168
  170. package/skills/skill-creating/references/defaults-first.md +0 -23
  171. package/skills/skill-creating/references/evals.md +0 -41
  172. package/skills/skill-creating/references/hooks.md +0 -251
  173. package/skills/skill-creating/references/progressive-disclosure.md +0 -176
  174. package/skills/skill-creating/references/scripts.md +0 -166
  175. package/skills/skill-creating/references/skills.md +0 -169
  176. package/skills/skill-creating/scripts/scaffold.rb +0 -313
  177. package/skills/skill-evaluating/SKILL.md +0 -141
  178. package/skills/skill-evaluating/assets/eval-template.json +0 -12
  179. package/skills/skill-evaluating/evals/evals.json +0 -75
  180. package/skills/skill-evaluating/references/convention-checks.md +0 -76
  181. package/skills/skill-evaluating/references/eval-methodology.md +0 -154
  182. package/skills/store-curating/SKILL.md +0 -64
  183. package/skills/store-curating/evals/evals.json +0 -38
  184. package/skills/store-indexing/SKILL.md +0 -93
  185. package/skills/store-indexing/evals/evals.json +0 -22
  186. package/skills/store-indexing/references/zettelkasten-linking.md +0 -32
  187. package/skills/store-provisioning/SKILL.md +0 -55
  188. /package/skills/{project-continuing → intent-continuing}/references/board-fill.md +0 -0
  189. /package/skills/{roadmap-continuing → intent-continuing}/references/liveness-ranking.md +0 -0
  190. /package/skills/{intent-brainstorming → intent-speccing}/references/design-principles.md +0 -0
@@ -0,0 +1,39 @@
1
+ # Adversarial Plan Reviewer Prompt
2
+
3
+ You review a plan before any code exists. The lead of this intent wrote `spec.md`, `plan.md`,
4
+ and at least one `actions/ACTION_N.md` that carries a failure-mode matrix: one row per
5
+ operation, naming a failure mode and the test that would catch it. Your job is to find what
6
+ that matrix misses and what it claims but cannot deliver, so the executor builds against a
7
+ plan that has already been attacked.
8
+
9
+ ## Intent
10
+
11
+ {{INTENT_DIR}} (read `spec.md`, `plan.md`, every `actions/ACTION_N.md`, and anything under
12
+ `resources/` the spec cites). Target tree: {{WORKTREE}}.
13
+
14
+ ## Instructions
15
+
16
+ 1. Read the spec's decisions and the matrix first, then the tree. Check every claim by
17
+ opening the named file at the named line; never accept a line number from the spec on
18
+ trust.
19
+ 2. For every operation in the spec, name a failure mode the matrix does not cover, or a
20
+ covered failure mode whose named test cannot actually detect it (the test reads a
21
+ different file, the regex cannot match, the assertion is a tautology, the fixture never
22
+ produces the case).
23
+ 3. Grep the tree for every name the plan deletes, renames, or re-points, and list each
24
+ caller, test, doc, or template the plan does not name.
25
+ 4. Where the plan touches a test the suite pins by exact string, quote the pinned string and
26
+ say what the change must keep verbatim.
27
+ 5. Run any probe that settles a claim cheaply (a single test file, a measurement); report the
28
+ numbers.
29
+ 6. Write no code and edit no repository file. Your output is the review.
30
+
31
+ ## Report Format
32
+
33
+ One line first, the verdict: **REVISE** or **PROCEED**, with the biggest risk in the same
34
+ sentence.
35
+
36
+ Then numbered findings under `## A. Matrix gaps`, `## B. Missed files and pins`, and
37
+ `## C. Probes`. Each finding names the file and line you read and states what the spec or
38
+ the matrix must add, change, or drop. Be concrete and adversarial; do not pad; do not restate
39
+ the plan.
@@ -1,73 +1,130 @@
1
1
  ---
2
2
  name: plastic-intent-speccing
3
- description: >
4
- Consolidate the enriched Why (`## Context`, `### Decisions`, `## Insights`) into `spec.md`
5
- through a deterministic, judgment-free numbered sequence. Use when the user types the command
6
- to turn the brainstorm into a spec, asks to "write the spec", "spec this intent", "consolidate
7
- into spec.md", or the active intent is at Why with enough Decisions on record to close it out.
8
- Also fires on an indirect request that never names spec.md, such as "turn what we just
9
- discussed into the contract the planner builds from." Distinct from `plastic-intent-brainstorming`
10
- (the exploration that produces the enriched Why, upstream of this skill) and
11
- `plastic-intent-planning` (turns an existing spec.md into plan.md for How, downstream of this
12
- skill).
3
+ description: >-
4
+ Thinking mode for an intent: the conversation that turns an idea into rulings, the
5
+ research that backs them, and the action files that say how the work runs. Use when the
6
+ user wants to think a request through before building it, says "let's design this",
7
+ "brainstorm", "grill me", "research this first", "spec this intent", "write the spec",
8
+ or when a prompt is too vague to run directly and the direct skill routes here. Also
9
+ fires on an indirect ask that never names a spec, such as "turn what we just discussed
10
+ into the contract the work runs from." Absorbs what the former intent-brainstorming,
11
+ intent-grilling, and intent-researching skills used to do (intent 304).
13
12
  user-invocable: true
14
13
  ---
15
14
 
16
- # Intent Speccing
15
+ # Intent Speccing: thinking mode
17
16
 
18
- Consolidate the enriched Why into `spec.md` through eight fixed steps, one action per step. The
19
- next action is never a judgment call: when a section cannot be filled from what is on record,
20
- step 5 is to stop and ask, never invent.
17
+ One skill for the whole thinking conversation on an intent. It asks one question at a time,
18
+ records every owner ruling the moment it lands, grills when asked, deposits research in
19
+ `resources/`, and ends by writing the action files the work runs from and consolidating the
20
+ rulings into `spec.md`. There is no separate brainstorm, grill, or research skill; those are
21
+ the modes below.
21
22
 
22
- ## Precondition
23
+ ## Active intent
23
24
 
24
- Run only when the active intent is at Why (its `## Intent` and enriched `## Context` plus
25
- `### Decisions` exist, `spec.md` does not yet exist or is being redone) and the user has asked to
26
- consolidate that Why into the spec. If no intent is active, or the active intent is not at Why,
27
- report that and stop; do not guess which intent is meant.
25
+ Resolve the active intent before anything else: read `~/.plastic/projects.yml`, match the
26
+ working directory against registered project paths (a match means the project store at
27
+ `~/.plastic/projects/{slug}/store/`, no match means `~/.plastic/store/`), then read that
28
+ store's `INDEX.md` under `## Active`. Exactly one active intent is the one to work; several
29
+ means ask which; none means stop and say so ("No active intent. Create one first with
30
+ /plastic-intent-creating"). Every artifact goes into `{store}/{id}--{slug}/`; never write
31
+ outside it.
28
32
 
29
- ## The 8-step sequence
33
+ ## The conversation
30
34
 
31
- | Step | Action |
32
- |---|---|
33
- | 1 | Confirm the precondition above. |
34
- | 2 | Read inputs in fixed order and build a ruling ledger: (a) `## Context` and `### Decisions`; (b) `## Insights` newest-last, so a later ruling supersedes an earlier conflicting one; (c) `resources/discovery--<slug>.md`; (d) any other `resources/*.md`. |
35
- | 3 | Decide the tier: adopt the brainstorming `Tier:` recommendation from Decisions or Insights; otherwise apply the PLASTIC.md tiers rubric (S = single mechanism or file cluster, M = one subsystem, L = cross-cutting or novel design). |
36
- | 4 | Fill the template section by section, all 8 sections in template order. Read `references/per-section-fill-rules.md` now, filling the template is the trigger. Write the tier as the literal top line above `# Spec:`. Encode every ruling into its matching section, later supersedes earlier on conflict. A collapsed single-line S/M section is complete and valid; do not pad it. |
37
- | 5 | Gap rule: if any section cannot be filled from the ledger built in step 2, STOP and ask the user for the missing ruling. Never invent scope to fill a gap. |
38
- | 6 | State the gate position (below) so the user knows what happens next. |
39
- | 7 | Self-verify against the checklist. Read `references/self-verify-checklist.md` now, verifying before presenting is the trigger. Fix any failing check, then re-verify from the top. |
40
- | 8 | Present `spec.md` for the user-review gate, then hand off to `plastic-intent-planning` for How. |
35
+ QMD-first: before scanning the store by hand for prior decisions, specs, or research, run
36
+ `ruby ~/.plastic/scripts/qmd-sync search "<terms>"` and open the authoritative intent file for
37
+ any hit you act on. The command is a no-op when QMD is absent.
38
+
39
+ 1. **Context first.** Check the project state (files, docs, recent commits) and the intent's
40
+ `## Context` and `## Insights`. Assess scope: a request that describes several independent
41
+ subsystems is decomposed first, one thinking conversation per piece, before any detail
42
+ question is spent.
43
+ 2. **One question per message, in prose.** No multiple-choice chips; a short menu of named
44
+ options is fine when the choice is genuinely enumerable, phrased as a sentence. Focus on
45
+ purpose, constraints, and success criteria. Before asking how something works, look:
46
+ in a codebase the answer is usually on disk.
47
+ 3. **Propose two or three approaches** with trade-offs, leading with the recommendation and
48
+ the reason for it. YAGNI: strip what the design does not need.
49
+ 4. **Present the design in sections** scaled to their complexity (a few sentences when
50
+ straightforward, up to 300 words when nuanced): architecture, components, data flow,
51
+ error handling, testing. Get a ruling after each section. Read
52
+ `references/design-principles.md` before proposing a design for the unit-boundary and
53
+ existing-codebase guidance (follow established patterns, no unrelated refactoring).
54
+ 5. **Record every ruling as it lands.** The moment the owner rules, before the next question:
55
+ ```
56
+ ruby ~/.plastic/scripts/insight-append {intent_dir} "<ruling text>" --stage Why --author human
57
+ ```
58
+ Never batch. A later ruling that conflicts with an earlier one gets a new insight naming
59
+ the superseded one; both stay on record and the later wins. When presenting a batch of
60
+ options for the owner to pick from, read `~/.plastic/_decision-tables.md` and follow the
61
+ numbered-table procedure.
62
+
63
+ No implementation starts until a design has been presented and ruled on. That holds for a
64
+ config change and a one-function utility as much as for a subsystem; the design can be three
65
+ sentences, but it is presented.
66
+
67
+ ### Grill mode
41
68
 
42
- ## Gate position (step 6)
69
+ When the owner says "grill me" or asks to stress-test a plan or design, the same conversation
70
+ turns relentless. Identify the root in one sentence and restate it. Walk the decision tree
71
+ branch by branch: state the branch, ask a specific question, lead with your own recommended
72
+ answer, resolve before moving on, name dependencies between decisions and resolve the
73
+ upstream one first. Do not accept "it depends" without "on what?"; do not skip edge cases; do
74
+ not assume when you can verify; challenge assumptions ("why not the alternative?"). Every
75
+ three or four questions, summarize what is decided. At natural checkpoints, about every ten
76
+ questions, offer to continue or to pause and capture what is decided; a pause records every
77
+ ruling so far and stops. When all branches are resolved, list the decisions and the deferred
78
+ items, then offer the hand-off below.
43
79
 
44
- The Why stage's deliverable is `spec.md`; the gate is satisfied the moment a complete, real
45
- `spec.md` exists (this is the gates-by-name framing: gate-check enforces spec.md before plan.md,
46
- not the Transition Gates table row). Writing `plan.md` is what opens the code gate for Exec, and
47
- writing `plan.md` is not this skill's job, that is `plastic-intent-planning`. State this to the user
48
- at step 6 so the handoff at step 8 is expected, not a surprise.
80
+ ### Research mode
49
81
 
50
- Read `../plastic-conventions/references/lifecycle-and-savepoints.md` for the subagent
51
- report-home contract behind this handoff. This path resolves relative to this skill's own
52
- installed directory.
82
+ When a question needs evidence rather than a ruling, research it and deposit the report in
83
+ `{intent_dir}/resources/{type}--{topic}.md`, with `{type}` one of `deep-research`,
84
+ `competitive-analysis`, `technical-spike`, `reference`, `landscape-survey` and `{topic}` in
85
+ kebab-case. Choose the depth and say why: shallow (one or two searches plus a look at the
86
+ code, minutes) for a narrow factual question; deep (several sources, cross-checked, a
87
+ landscape or an architectural decision, or when a wrong answer would cause an architectural
88
+ mistake) through the harness's deep-research capability when it has one, else a manual
89
+ fan-out of searches. The report carries a summary, findings with citations, sources, and a
90
+ "Relevance to intent" section; tables for findings and comparisons. Log one line in the
91
+ intent's `## Insights` naming the file and the key finding. Research does not chain to
92
+ another step; the conversation decides what to do with it.
53
93
 
54
- ## Tier stamp (step 3, convention only)
94
+ ## Closing the conversation
55
95
 
56
- Write `Tier: S|M|L` as the literal first line of the file, above the `# Spec:` heading. This line
57
- is convention-only: the orchestrator and the planner read it, no gate and no doctor check
58
- validates it.
96
+ When the rulings are enough to build from:
59
97
 
60
- ## Completion report
98
+ 1. **Write the action files.** Every ruling that says how the work runs lands in
99
+ `actions/ACTION_N.md` (at least one real file, no placeholder): the files to touch, the
100
+ order, the tests that prove each step, the rules. The action files are what direct mode or
101
+ an auto team executes; they exist before the work runs.
102
+ 2. **Consolidate `spec.md`** from the rulings, section by section in template order. Read
103
+ `references/per-section-fill-rules.md` when filling the template. Build the ruling ledger
104
+ in fixed order first: `## Context` and `### Decisions`, then `## Insights` newest-last so a
105
+ later ruling supersedes an earlier one, then `resources/discovery--<slug>.md`, then any
106
+ other `resources/*.md`. Encode every ruling into its section; a collapsed single-line
107
+ section is complete when it names everything. If a section cannot be filled from the
108
+ ledger, stop and ask for the missing ruling; never invent scope. A spec.md left as the
109
+ placeholder is backfilled from the record at close (`## Problem`, `## Decisions`,
110
+ `## Acceptance Criteria`; the rest stays stub text), so consolidate only when the
111
+ rulings say more than the record already does.
112
+ 3. **Self-verify.** Read `references/self-verify-checklist.md` before presenting; fix any
113
+ failing check and re-verify from the top.
114
+ 4. **Present and hand off.** Present `spec.md` and the action files. Then offer the routes:
115
+ run it now inline when the work is small enough for direct mode; hand to `plastic-auto`
116
+ when the owner says auto and the checklist above passes (all decisions resolved, scope
117
+ bounded, dependencies named, success criteria defined); or keep thinking.
61
118
 
62
- State, in this order: which file was written (`spec.md`, new or rewritten), the stamped `Tier:`
63
- value, the count of Acceptance Criteria produced (the surface the planner will cover), which
64
- `## Insights` rulings superseded an earlier Decision (if any) and where each landed, and the
65
- handoff target (`plastic-intent-planning`). If step 5 stopped for a missing ruling, report that
66
- instead: which section, what is missing, and the question put to the user.
119
+ Report, in this order: which files were written (`spec.md` new or rewritten, the action
120
+ files), the count of acceptance criteria, which `## Insights` rulings superseded an earlier
121
+ decision and where each landed, and the route chosen. If step 2 stopped for a missing
122
+ ruling, report that instead: which section, what is missing, the question put to the owner.
67
123
 
68
124
  ## References
69
125
 
70
126
  | Trigger | Read |
71
127
  |---|---|
72
- | Filling the template (step 4) | `references/per-section-fill-rules.md` |
73
- | Self-verifying before presenting (step 7) | `references/self-verify-checklist.md` |
128
+ | Before proposing a design (unit boundaries, existing codebases) | `references/design-principles.md` |
129
+ | Filling the spec template (closing step 2) | `references/per-section-fill-rules.md` |
130
+ | Self-verifying before presenting (closing step 3) | `references/self-verify-checklist.md` |
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "skill_name": "plastic-intent-speccing",
3
- "notes": "Intent 163. Scopes: description triggering (1-4) and behavior (5-8: all-8-sections output, mandatory superseding-ruling case, STOP-and-ask gap rule, tabular alternatives with no em-dash). No dedicated Ruby test file backs this skill yet (natural-language guided command), so all assertions are result: expect-pass pending a real observed run, per the intent-starting evals.json convention.",
3
+ "notes": "Intent 163. Scopes: description triggering (1-4) and behavior (5-8: all-8-sections output, mandatory superseding-ruling case, STOP-and-ask gap rule, tabular alternatives with no em-dash). No dedicated Ruby test file backs this skill yet (natural-language guided command), so all assertions are result: expect-pass pending a real observed run, per the evals.json convention.",
4
4
  "evals": [
5
5
  {
6
6
  "id": 1,
@@ -37,7 +37,7 @@
37
37
  "scope": "triggering",
38
38
  "set": "validation",
39
39
  "prompt": "Brainstorm this intent.",
40
- "expected_output": "Does NOT activate plastic-intent-speccing; activates plastic-intent-brainstorming (exploration that produces the enriched Why, upstream of speccing).",
40
+ "expected_output": "Activates plastic-intent-speccing (brainstorming is a mode of the thinking conversation since intent 304).",
41
41
  "files": [],
42
42
  "assertions": [
43
43
  {
@@ -52,7 +52,7 @@
52
52
  "scope": "triggering",
53
53
  "set": "validation",
54
54
  "prompt": "Write the plan.",
55
- "expected_output": "Does NOT activate plastic-intent-speccing; activates plastic-intent-planning (turns an existing spec.md into plan.md for How, downstream of speccing).",
55
+ "expected_output": "Does NOT activate plastic-intent-speccing; a plan is written from the action files by the executing skill.",
56
56
  "files": [],
57
57
  "assertions": [
58
58
  {
@@ -67,12 +67,12 @@
67
67
  "scope": "behavior",
68
68
  "set": "train",
69
69
  "prompt": "Intent Y is at Why: Context describes the problem and goal, and 5 Decisions are recorded resolving scope, approach, and one rejected alternative. Consolidate into spec.md.",
70
- "expected_output": "Produces spec.md with Tier: S|M|L as the literal top line above the Spec heading; all 8 template sections present once, in template order (Problem, Goals, Non-Goals, Approach, Alternatives Considered, Decisions, Acceptance Criteria, Open Questions); no template placeholder text remains; every recorded Decision is encoded into its matching section.",
70
+ "expected_output": "Produces spec.md starting at the Spec heading; all 8 template sections present once, in template order (Problem, Goals, Non-Goals, Approach, Alternatives Considered, Decisions, Acceptance Criteria, Open Questions); no template placeholder text remains; every recorded Decision is encoded into its matching section.",
71
71
  "files": [],
72
72
  "assertions": [
73
73
  {
74
74
  "type": "human",
75
- "check": "Tier line is literally the first line of the file; all 8 sections appear once each, in template order; no placeholder text; every Decision traces to a section",
75
+ "check": "The file starts at the Spec heading; all 8 sections appear once each, in template order; no placeholder text; every Decision traces to a section",
76
76
  "result": "expect-pass"
77
77
  }
78
78
  ]
@@ -1,8 +1,8 @@
1
1
  # Per-Section Fill Rules
2
2
 
3
- The single shared method for turning the enriched Why into `spec.md`. Both
4
- `plastic-intent-speccing` (guided) and the `plastic-spec-specialist` agent (auto) point here;
5
- neither restates these rules. One fill rule per template section, in template order.
3
+ The single shared method for turning the rulings into `spec.md`. `plastic-intent-speccing`
4
+ (the thinking conversation) and the auto orchestrator both point here; neither restates these
5
+ rules. One fill rule per template section, in template order.
6
6
 
7
7
  Read the ruling ledger first (built in step 2 of the SKILL.md sequence): `## Context` plus
8
8
  `### Decisions`, then `## Insights` newest-last (a later ruling supersedes an earlier
@@ -24,7 +24,7 @@ delivering a specific outcome.
24
24
 
25
25
  One bullet per goal, each a concrete, observable outcome the delivery must reach. Encode every
26
26
  Decision that commits to an outcome as its own bullet, do not compress two Decisions into one
27
- vague goal. A single-line collapsed Goals section (S/M tier) is complete if it names every
27
+ vague goal. A single-line collapsed Goals section is complete if it names every
28
28
  outcome; do not pad it with restated Problem text.
29
29
 
30
30
  ## 3. Non-Goals
@@ -22,8 +22,7 @@ these.
22
22
  5. **No template placeholder text remains.** No literal `<intent name>`, `<alternative>`, `...`,
23
23
  sample bracket text, or other template filler from `templates/spec.md` survives anywhere in
24
24
  the artifact.
25
- 6. **Tier stamp is the top line.** `Tier: S|M|L` is the literal first line of the file, above the
26
- `# Spec:` heading, not folded into a section body.
25
+ 6. **No header line.** The file starts at the `# Spec:` heading; there is no `Tier:` line (removed in 2.0, intent 304).
27
26
  7. **All 8 sections present, in template order.** Problem, Goals, Non-Goals, Approach,
28
27
  Alternatives Considered, Decisions, Acceptance Criteria, Open Questions, each present once, in
29
28
  that order, none merged into another.
@@ -77,7 +77,7 @@ writes `INDEX.md` and `project.yml` only if missing. It is idempotent, so it is
77
77
  safe even when the tactical mirror in step 5 already created the store directory.
78
78
  Do not create the store with an inline `mkdir`; the provisioner is the only place
79
79
  a store is made. For a project that is already registered but store-less, use the
80
- `plastic-store-provisioning` skill instead.
80
+ `plastic-doctor` skill's provisioning section instead.
81
81
 
82
82
  ### 8. Mark Global Intent(s) Completed
83
83
 
@@ -250,16 +250,15 @@ This is the release branch of `plastic-intent-ending`'s Step 5 disarm (`merge: t
250
250
  separate concern: a release is the merge-then-remove path for the intent's worktree (intent
251
251
  73c3), so the intent's code branch is merged back into the default branch BEFORE the worktree
252
252
  is removed. Drive it through `Worktree.finish` with `merge: true`, which merges the code
253
- branch, then removes the worktree, prunes the repo, and clears the worktree block from the
254
- bridge:
253
+ branch, then removes the worktree, and prunes the repo:
255
254
 
256
255
  ```bash
257
- ruby -r ~/.plastic/scripts/lib/worktree -r ~/.plastic/scripts/lib/bridge -e \
258
- 'b = Bridge.discover_bridge(session: ENV["CLAUDE_CODE_SESSION_ID"], cwd: Dir.pwd); Worktree.finish(b, merge: true) if b'
256
+ ruby -r ~/.plastic/scripts/lib/worktree -r ~/.plastic/scripts/lib/arm -e \
257
+ 'Worktree.finish(Arm.bridge_hash(intent_dir: "<STORE>/<dir>"), merge: true)'
259
258
  ```
260
259
 
261
- (Uses `discover_bridge`, not a bare session-keyed `Bridge.read`, because a session can own more
262
- than one live bridge now (intent 131) and `discover_bridge` resolves the right one for this cwd.)
260
+ (The worktree block is derived from `projects.yml` and the intent id, so the one-liner needs
261
+ only the intent directory; the `/tmp` bridge it once discovered was removed in 2.0, intent 307.)
263
262
 
264
263
  Honor the worktree-cleanup rule: never leave an orphaned worktree, and run `git worktree
265
264
  prune` in the affected repo if you hit a stale reference. For why this is the one place the
@@ -279,14 +278,14 @@ A release IS a delivery. The active intent that drove this work must be complete
279
278
  ruby ~/.plastic/scripts/end-intent --store <store_path> --id <ID> --disposition delivered \
280
279
  --session "$CLAUDE_CODE_SESSION_ID" \
281
280
  --outcome-summary "delivered in <tag-name>: <one-line summary>" \
282
- --index-note "<tag-name>, <mode/tier>; <what shipped>; <suite result>"
281
+ --index-note "<tag-name>, <mode>; <what shipped>; <suite result>"
283
282
  ```
284
283
  A non-zero exit needs attention: 4 means a live foreign session holds the lock (back
285
284
  off), 5 means the code worktree is still dirty (should not happen here, since step 8
286
285
  already removed it; investigate before overriding with `--discard-worktree-changes`),
287
286
  3 means disarm ran but the lock is still present (run `/plastic-doctor check the lock
288
287
  status`).
289
- d. Update clusters to show `_(completed)_` (the store-curating skill's job on its next pass).
288
+ d. Update clusters to show `_(completed)_`.
290
289
 
291
290
  **If no active intent exists for this release**, that itself is a problem - work happened outside the intent system. Log it and move on, but flag it.
292
291
 
@@ -21,7 +21,7 @@ reference. Every checkpoint inside a track is prose, never another menu.
21
21
 
22
22
  1. **Guided**: deliver a first intent, stage by stage, approving each step yourself. Routes to
23
23
  `references/track-1-guided.md`.
24
- 2. **Auto**: hand delivery to the agent and watch the gates and reports as it works. Routes to
24
+ 2. **Auto**: hand delivery to the agent and watch the record and reports as it works. Routes to
25
25
  `references/track-2-auto.md`.
26
26
  3. **Projects and roadmaps**: grow a founding intent into a small real project, add more
27
27
  intents, and plan a delivery batch with a roadmap. Routes to
@@ -35,7 +35,7 @@ showing the menu again.
35
35
 
36
36
  Narrate one step at a time: say what the next station does, then hand control back so the
37
37
  user types the real command themselves. After they run it, look at what appeared (a file, a
38
- gate message, a report) and debrief in plain words before moving to the next station. Never
38
+ ledger line, a report) and debrief in plain words before moving to the next station. Never
39
39
  run a station's command on the user's behalf; the tutorial teaches the shape of the work, it
40
40
  does not do the work.
41
41
 
@@ -35,19 +35,19 @@ tool, never written by hand.
35
35
 
36
36
  ### 2. Board the intent
37
37
 
38
- Type `/plastic-intent-starting`.
38
+ Type `/plastic-intent-continuing` and name the intent.
39
39
 
40
40
  Artifact: a delivery lock (a `delivery.lock` file in the intent directory) naming this
41
41
  session as the one owner, and a line in `savepoint.md` recording the stage. The agent then
42
- asks exactly one question: "auto or guided?"
42
+ resumes at the last delivered station and asks nothing.
43
43
 
44
- Checkpoint: answer "guided." Explain in one sentence why the lock matters: it stops two
44
+ Checkpoint: explain in one sentence why the lock matters: it stops two
45
45
  sessions from editing the same intent at the same time.
46
46
 
47
47
  ### 3. Why, rulings one at a time
48
48
 
49
- Type `/plastic-intent-brainstorming` (or `/plastic-intent-grilling` for a harder,
50
- interview-style pass over the same ground). It asks conversational prose questions, one at a
49
+ Type `/plastic-intent-speccing` (say "grill me" for a harder, interview-style pass over
50
+ the same ground). It asks conversational prose questions, one at a
51
51
  time, never a multiple-choice menu, and answers them one at a time in return.
52
52
 
53
53
  Artifact: `## Context` and `### Decisions` in the intent file fill in as each answer lands, and
@@ -62,21 +62,19 @@ is already sitting in `### Decisions` and in `## Insights`, in writing.
62
62
 
63
63
  Type `/plastic-intent-speccing`.
64
64
 
65
- Artifact: `spec.md`, stamped with a tier (`S`, for this small worked example) and its eight
66
- sections filled from the rulings recorded in station 3.
65
+ Artifact: `spec.md`, its eight sections filled from the rulings recorded in station 3.
67
66
 
68
- Checkpoint: name the stamped tier and point at one sentence in `spec.md` that traces back to
69
- an answer given in station 3.
67
+ Checkpoint: point at one sentence in `spec.md` that traces back to an answer given in
68
+ station 3.
70
69
 
71
70
  ### 5. Plan
72
71
 
73
- Type `/plastic-intent-planning`.
72
+ Ask the same conversation to write the action files and the plan.
74
73
 
75
- Artifact: `plan.md`, `checklist.md`, and at least one real `actions/ACTION_N.md`. At the S
76
- tier used here, the planner consolidates the whole delivery into a single
77
- `actions/ACTION_1.md` (the ordered steps plus the exact changes); the L tier (many
78
- independent tasks, dispatched in parallel) instead gets one `actions/ACTION_N.md` file per
79
- task. `checklist.md` follows a fixed form: tasks start under `## In Progress`, move to
74
+ Artifact: `plan.md`, `checklist.md`, and at least one real `actions/ACTION_N.md`. A small
75
+ delivery like this one consolidates the whole delivery into a single `actions/ACTION_1.md`
76
+ (the ordered steps plus the exact changes); many independent tasks, dispatched in parallel,
77
+ instead get one `actions/ACTION_N.md` file per task. `checklist.md` follows a fixed form: tasks start under `## In Progress`, move to
80
78
  `## Completed` as they land, and a `## Session Log` table records what happened each session.
81
79
  A task that depends on an owner decision landing first (a destructive step, a structural
82
80
  ruling) gets an `[ORCHESTRATOR]` prefix and blocks every other item until that decision is
@@ -86,7 +84,7 @@ Checkpoint: open `checklist.md`. Every task in `plan.md` has a matching checkbox
86
84
  `## In Progress`; that checklist, not `plan.md` itself, is what gets ticked off and moved to
87
85
  `## Completed` during Exec.
88
86
 
89
- ### 6. Exec, verify before the gate
87
+ ### 6. Exec, verify before you report
90
88
 
91
89
  Type `/plastic-intent-executing`.
92
90
 
@@ -121,5 +119,5 @@ two, exactly the README section (or note) just delivered.
121
119
 
122
120
  That is the full cycle once: create, board, decide, spec, plan, build, done. Read
123
121
  [`your-first-intent-in-10-minutes.md`](https://github.com/zalom/plastic/blob/main/docs/guides/your-first-intent-in-10-minutes.md) for the same path condensed to a single
124
- read, and [`what-the-gates-are-telling-you.md`](https://github.com/zalom/plastic/blob/main/docs/guides/what-the-gates-are-telling-you.md) for what to do if a station denies
125
- an action instead of completing it.
122
+ read, and [`reading-the-ledgers.md`](https://github.com/zalom/plastic/blob/main/docs/guides/reading-the-ledgers.md) for where each station wrote its
123
+ work down.
@@ -51,16 +51,15 @@ mixed up in what it tells you.
51
51
 
52
52
  Checkpoint: name one thing auto will always stop and ask about, rather than decide alone.
53
53
 
54
- ### 3. Walking the gates
54
+ ### 3. Walking the record
55
55
 
56
- No new command. Auto still honors every hard gate a guided session would hit: the delivery
57
- lock (one owner at a time), the code gate (shut until `plan.md` and `checklist.md` exist),
58
- the create gate (intents only come from the tool that makes them, never hand-authored), the
59
- links gate (a `## Links` section changes only to match the file's own frontmatter), and the
60
- bash gate (a shell command cannot write project code the code gate would have blocked).
56
+ No new command. Auto keeps one delivery in one place and writes down every move: the delivery
57
+ lock (one owner at a time, a `delivery.lock` file in the intent directory), the worktree (code
58
+ edits land on the intent's own branch), the savepoint ledger (one line per lifecycle file the
59
+ team writes), and the day ledger (the request that started this run moves from pending to open
60
+ when the first project file lands). Nothing blocks the team; the record is how you follow it.
61
61
 
62
- Checkpoint: read one gate message from the run so far and name which of the five gates it
63
- came from.
62
+ Checkpoint: open the intent's `savepoint.md` and name the stage its last line records.
64
63
 
65
64
  ### 4. Reading the per-stage reports
66
65
 
@@ -75,7 +74,7 @@ line.
75
74
 
76
75
  ### 5. Continue and where-was-I after time away
77
76
 
78
- Type `/plastic-continuing`.
77
+ Type `/plastic-intent-continuing`.
79
78
 
80
79
  Artifact: the current state, presented and then the session stops. If a specific intent is
81
80
  named, the agent reads its stage and savepoint and resumes exactly there, rather than
@@ -86,11 +85,11 @@ at and how that matched what was actually on disk.
86
85
 
87
86
  ## Wrap and where to go next
88
87
 
89
- Auto keeps the same stages and the same gates as guided; the only difference is who steers.
90
- Read [`pick-your-mode.md`](https://github.com/zalom/plastic/blob/main/docs/guides/pick-your-mode.md) for the honest trade-off between guided and auto, and
88
+ Auto keeps the same stages and the same record as thinking; the only difference is who steers.
89
+ Read [`pick-your-mode.md`](https://github.com/zalom/plastic/blob/main/docs/guides/pick-your-mode.md) for the honest trade-off between the three modes, and
91
90
  [`using-plastic-with-claude-code.md`](https://github.com/zalom/plastic/blob/main/docs/guides/using-plastic-with-claude-code.md) for how that choice feels day to day and how
92
- it connects to roadmap-driven delivery. For denial messages met along the way, read
93
- [`what-the-gates-are-telling-you.md`](https://github.com/zalom/plastic/blob/main/docs/guides/what-the-gates-are-telling-you.md).
91
+ it connects to roadmap-driven delivery. For where the team wrote its work down, read
92
+ [`reading-the-ledgers.md`](https://github.com/zalom/plastic/blob/main/docs/guides/reading-the-ledgers.md).
94
93
 
95
94
  Note on terms: "guided" means the user starts each stage with a command and the agent
96
95
  narrows the thinking inside it, the same shape track 1 walked. "Manual", editing project
@@ -21,10 +21,10 @@ one this tutorial keeps or ships.
21
21
  ### 1. Start from a founding implementation intent
22
22
 
23
23
  Create and board an intent the same way as track 1, stations 1 and 2: `/plastic-intent-creating`,
24
- then `/plastic-intent-starting`. Describe something meant to grow into a small real project,
24
+ then `/plastic-intent-continuing`. Describe something meant to grow into a small real project,
25
25
  for example "build a personal todo app."
26
26
 
27
- Then type `/plastic-intent-brainstorming` and record a couple of real rulings on this founding
27
+ Then type `/plastic-intent-speccing` and record a couple of real rulings on this founding
28
28
  intent, for example the language or how tasks get stored. Keep it short: this intent only
29
29
  needs enough decisions for the new project to inherit, not a full design.
30
30
 
@@ -45,8 +45,8 @@ Active/Future/Completed placement is managed in INDEX.md, not in frontmatter.
45
45
  Create through the `plastic-intent-creating` skill, which scaffolds with one call:
46
46
  `ruby ~/.plastic/scripts/new-intent --store .plastic/store --intent "<one-line>" --slug <slug> [--sources <governing-id>]`.
47
47
  It allocates the Folgezettel ID, creates `.plastic/store/ID--slug/ID--slug.md` born
48
- complete, and wires the links. Never hand-author the files: the write-time create gate
49
- rejects an incomplete or malformed intent file.
48
+ complete, and wires the links. Never hand-author the files: `new-intent` validates the
49
+ intent file it writes, and `end-intent` checks it again at close.
50
50
 
51
51
  ## Lifecycle Skills
52
52
 
@@ -55,11 +55,8 @@ Plastic has its own lifecycle skills. When a Plastic skill exists for the curren
55
55
  | Phase | Skill | Produces |
56
56
  |-------|-------|----------|
57
57
  | What | `plastic-intent-creating` | Intent file |
58
- | Why | `plastic-intent-brainstorming` | Enriched `## Context` + `### Decisions` |
59
- | Why | `plastic-intent-speccing` | `spec.md` |
60
- | Why | `plastic-intent-researching` | `resources/*.md` |
61
- | Why | `plastic-intent-grilling` | Deep interrogation |
62
- | How | `plastic-intent-planning` | `plan.md`, `checklist.md`, `actions/` |
58
+ | Why | `plastic-intent-speccing` | Rulings as insights, `resources/*.md`, `spec.md` |
59
+ | How | `plastic-intent-speccing` | `actions/`, `plan.md`, `checklist.md` |
63
60
  | Exec | `plastic-intent-executing` | Code + `outcome.md` |
64
61
  | Done | `plastic-intent-ending` | Lifecycle transition |
65
62
 
@@ -3,3 +3,10 @@ governing_docs:
3
3
 
4
4
  release:
5
5
  on_complete: commit
6
+
7
+ # flow:
8
+ # mode: direct # direct | pull_request
9
+ # base: main # defaults to origin/HEAD, then main, then master
10
+ # branch_template: "session/{{day}}" # {{day}}, {{ticket}}, {{slug}} tokens
11
+ # ticket_source: intent_id # intent_id (the session pointer's intent id, else the day id)
12
+ # workspace: checkout # checkout | worktree (worktree applies to direct mode only)
@@ -1,6 +1,6 @@
1
1
  # Roadmap: <name>
2
2
 
3
- (one-line meta: what this roadmap delivers, and which tier it lives in. `roadmaps/` is a sibling
3
+ (one-line meta: what this roadmap delivers, and whether it is a project or the global roadmap. `roadmaps/` is a sibling
4
4
  of `INDEX.md` — a project's root or the global `~/.plastic/`, never inside `store/`. When this
5
5
  roadmap's goal is reached, move this file from `roadmaps/{slug}.md` to
6
6
  `roadmaps/archived/{slug}.md`; `roadmaps/` itself lists only live roadmaps.)
@@ -1,4 +1,4 @@
1
- # Deterministic cycle-step ledger, written automatically by the gate hook.
1
+ # Deterministic cycle-step ledger, written automatically by the record hook.
2
2
  # One line per lifecycle milestone, append-only, newest at the bottom:
3
3
  #
4
4
  # {UTC-iso8601} {Stage} {milestone}
@@ -11,4 +11,4 @@
11
11
  # 2026-06-16T16:40:00Z Exec outcome.md created
12
12
  #
13
13
  # This file is sugar on top of the conventions, not a source of truth. It is
14
- # rebuildable from files-on-disk via Bridge.rebuild_savepoint. Do not hand-edit.
14
+ # rebuildable from files-on-disk via Savepoint.rebuild_savepoint. Do not hand-edit.
@@ -0,0 +1,29 @@
1
+ ---
2
+ id: "{{DAY}}"
3
+ intent: "Session ledger for {{DATE}}"
4
+ sources: []
5
+ chain: []
6
+ created: {{CREATED}}
7
+ author: {{AUTHOR}}
8
+ tags: ["session"]
9
+ mode: direct
10
+ ---
11
+
12
+ ## Intent
13
+ Carry every session's activity for {{DATE}} in one shared, append-only day ledger.
14
+
15
+ ## Context
16
+ This day ledger holds the checklist and savepoint lines that every session touching
17
+ {{DATE}} appends, tagged by session and project. It is not a project intent: it has
18
+ no plan, no actions, and no id that participates in a store's Folgezettel graph.
19
+
20
+ ## Outcome
21
+ `checklist.md` and `savepoint.md` appear inside this day's directory on first append,
22
+ each written under an exclusive file lock so concurrent sessions never lose or
23
+ interleave a line.
24
+
25
+ ## Insights
26
+ (observations captured throughout the day, appended by later sessions)
27
+
28
+ ## Links
29
+ <!-- No sources or chain; this intent has no graph edges to project. -->