@zalom/plastic 2.0.0-alpha.26 → 2.0.0-alpha.28

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 (224) hide show
  1. package/PLASTIC.md +13 -139
  2. package/README.md +337 -133
  3. package/agents/plastic-enforcer.md +12 -12
  4. package/agents/plastic-executor.md +2 -1
  5. package/agents/plastic-node-research.md +4 -2
  6. package/agents/plastic-node-verify.md +1 -0
  7. package/agents/plastic-node-work.md +1 -0
  8. package/agents/{plastic-advisor.md → plastic-primary-advisor.md} +6 -8
  9. package/agents/{plastic-faux-advisor.md → plastic-secondary-advisor.md} +9 -12
  10. package/bin/crap +4 -0
  11. package/bin/lib/context_budget.rb +35 -1
  12. package/bin/lib/skill_census.rb +839 -0
  13. package/bin/plastic +6 -0
  14. package/bin/plastic-skill-census +114 -0
  15. package/bin/verify-change +345 -0
  16. package/config_asks.yml +4 -4
  17. package/deprecations.yml +1 -1
  18. package/{skills/agent-advisor/references → docs/help}/advisor-protocol.md +19 -24
  19. package/{skills/auto/references → docs/help}/agent-architecture.md +7 -7
  20. package/{skills/conventions/references → docs/help}/completion-and-done.md +1 -1
  21. package/{skills/auto/references → docs/help}/human-report-contract.md +17 -19
  22. package/{skills/conventions/references → docs/help}/roadmaps.md +2 -2
  23. package/{skills/tutorial/references → docs/help}/track-1-guided.md +8 -8
  24. package/{skills/tutorial/references → docs/help}/track-2-auto.md +5 -5
  25. package/{skills/tutorial/references → docs/help}/track-3-projects-and-roadmaps.md +24 -17
  26. package/package.json +3 -2
  27. package/scripts/append-ledger +2 -1
  28. package/scripts/dashboard.rb +10 -9
  29. package/scripts/day-summary +2 -1
  30. package/scripts/doctor.rb +57 -49
  31. package/scripts/end-intent +2 -8
  32. package/scripts/file-session-intent +2 -1
  33. package/scripts/hook-capture +4 -3
  34. package/scripts/hook-close +2 -1
  35. package/scripts/hook-record +3 -2
  36. package/scripts/hook-savepoint +3 -2
  37. package/scripts/hook-session-start +5 -4
  38. package/scripts/hook-stop +2 -1
  39. package/scripts/insight-append +1 -2
  40. package/scripts/install.rb +7 -5
  41. package/scripts/lib/action_graph_shim.rb +3 -1
  42. package/scripts/lib/active_delivery.rb +1 -1
  43. package/scripts/lib/agent_models.rb +44 -26
  44. package/scripts/lib/arm.rb +2 -1
  45. package/scripts/lib/backup.rb +63 -0
  46. package/scripts/lib/cli/command.rb +85 -0
  47. package/scripts/lib/cli/commands/auto.rb +18 -0
  48. package/scripts/lib/cli/commands/auto_brief.rb +44 -0
  49. package/scripts/lib/cli/commands/auto_lock.rb +60 -0
  50. package/scripts/lib/cli/commands/auto_report.rb +50 -0
  51. package/scripts/lib/cli/commands/auto_take.rb +25 -0
  52. package/scripts/lib/cli/commands/backup.rb +43 -0
  53. package/scripts/lib/cli/commands/checkout.rb +25 -0
  54. package/scripts/lib/cli/commands/continue.rb +66 -0
  55. package/scripts/lib/cli/commands/doctor.rb +20 -0
  56. package/scripts/lib/cli/commands/feedback.rb +40 -0
  57. package/scripts/lib/cli/commands/help.rb +69 -0
  58. package/scripts/lib/cli/commands/hook.rb +32 -0
  59. package/scripts/lib/cli/commands/index.rb +23 -0
  60. package/scripts/lib/cli/commands/install.rb +21 -0
  61. package/scripts/lib/cli/commands/installer_verb.rb +37 -0
  62. package/scripts/lib/cli/commands/intent.rb +19 -0
  63. package/scripts/lib/cli/commands/intent_answer.rb +37 -0
  64. package/scripts/lib/cli/commands/intent_command.rb +53 -0
  65. package/scripts/lib/cli/commands/intent_end.rb +61 -0
  66. package/scripts/lib/cli/commands/intent_new.rb +62 -0
  67. package/scripts/lib/cli/commands/intent_note.rb +43 -0
  68. package/scripts/lib/cli/commands/intent_rule.rb +36 -0
  69. package/scripts/lib/cli/commands/intent_show.rb +25 -0
  70. package/scripts/lib/cli/commands/intent_spec.rb +44 -0
  71. package/scripts/lib/cli/commands/intent_step.rb +43 -0
  72. package/scripts/lib/cli/commands/intent_verify.rb +26 -0
  73. package/scripts/lib/cli/commands/migrate.rb +16 -0
  74. package/scripts/lib/cli/commands/migrate_stores.rb +31 -0
  75. package/scripts/lib/cli/commands/next.rb +49 -0
  76. package/scripts/lib/cli/commands/project.rb +19 -0
  77. package/scripts/lib/cli/commands/project_links.rb +42 -0
  78. package/scripts/lib/cli/commands/project_list.rb +20 -0
  79. package/scripts/lib/cli/commands/project_new.rb +72 -0
  80. package/scripts/lib/cli/commands/query.rb +31 -0
  81. package/scripts/lib/cli/commands/render.rb +25 -0
  82. package/scripts/lib/cli/commands/roadmap.rb +19 -0
  83. package/scripts/lib/cli/commands/roadmap_check.rb +44 -0
  84. package/scripts/lib/cli/commands/roadmap_log.rb +54 -0
  85. package/scripts/lib/cli/commands/roadmap_next.rb +34 -0
  86. package/scripts/lib/cli/commands/roadmap_show.rb +45 -0
  87. package/scripts/lib/cli/commands/rollback.rb +20 -0
  88. package/scripts/lib/cli/commands/search.rb +60 -0
  89. package/scripts/lib/cli/commands/session.rb +18 -0
  90. package/scripts/lib/cli/commands/session_commit.rb +42 -0
  91. package/scripts/lib/cli/commands/session_handoff.rb +34 -0
  92. package/scripts/lib/cli/commands/session_summary.rb +35 -0
  93. package/scripts/lib/cli/commands/status.rb +68 -0
  94. package/scripts/lib/cli/commands/subcommand_list.rb +36 -0
  95. package/scripts/lib/cli/commands/sync.rb +46 -0
  96. package/scripts/lib/cli/commands/uninstall.rb +20 -0
  97. package/scripts/lib/cli/commands/update.rb +20 -0
  98. package/scripts/lib/cli/commands/version.rb +53 -0
  99. package/scripts/lib/cli/frontier.rb +84 -0
  100. package/scripts/lib/cli/legacy.rb +50 -0
  101. package/scripts/lib/cli/output.rb +102 -0
  102. package/scripts/lib/cli/scope.rb +127 -0
  103. package/scripts/lib/cli/table.rb +64 -0
  104. package/scripts/lib/cli.rb +94 -0
  105. package/scripts/lib/codex_adapter.rb +5 -4
  106. package/scripts/lib/compact_instructions.rb +8 -0
  107. package/scripts/lib/day_summary.rb +4 -3
  108. package/scripts/lib/doctor_core.rb +7 -32
  109. package/scripts/lib/doctor_session_ledger.rb +2 -1
  110. package/scripts/lib/feedback_report.rb +1 -1
  111. package/scripts/lib/graph_measure_models.rb +4 -2
  112. package/scripts/lib/index_entry.rb +9 -0
  113. package/scripts/lib/installer_core.rb +175 -56
  114. package/scripts/lib/intent_screen.rb +3 -3
  115. package/scripts/lib/lock.rb +2 -2
  116. package/scripts/lib/node_file.rb +22 -2
  117. package/scripts/lib/node_input.rb +11 -6
  118. package/scripts/lib/node_return.rb +8 -3
  119. package/scripts/lib/preflight.rb +2 -4
  120. package/scripts/lib/project_config.rb +2 -1
  121. package/scripts/lib/project_validator.rb +3 -2
  122. package/scripts/lib/qmd_sync.rb +8 -7
  123. package/scripts/lib/reference_archive.rb +45 -0
  124. package/scripts/lib/release_guard.rb +2 -0
  125. package/scripts/lib/report_screen.rb +4 -3
  126. package/scripts/lib/rlm/corpus.rb +13 -0
  127. package/scripts/lib/rlm/probe.rb +29 -0
  128. package/scripts/lib/rlm/query.rb +22 -0
  129. package/scripts/lib/roadmap_queue.rb +2 -2
  130. package/scripts/lib/roadmap_savepoint.rb +1 -1
  131. package/scripts/lib/runner_absorb.rb +59 -2
  132. package/scripts/lib/runner_dispatch.rb +12 -8
  133. package/scripts/lib/runner_policy.rb +28 -10
  134. package/scripts/lib/search_index.rb +55 -0
  135. package/scripts/lib/session_git.rb +4 -3
  136. package/scripts/lib/sqlite.rb +22 -0
  137. package/scripts/lib/store_discovery.rb +7 -6
  138. package/scripts/lib/store_layout.rb +54 -0
  139. package/scripts/lib/store_provisioning.rb +2 -1
  140. package/scripts/lib/store_sync.rb +85 -0
  141. package/scripts/lib/stores_move.rb +93 -0
  142. package/scripts/lib/verify_intent.rb +2 -7
  143. package/scripts/lib/version_number.rb +48 -0
  144. package/scripts/lib/work_graph.rb +59 -0
  145. package/scripts/lib/worktree.rb +3 -8
  146. package/scripts/lib/worktree_sweep.rb +3 -2
  147. package/scripts/link-suggest +2 -1
  148. package/scripts/migrate-to-global +1 -1
  149. package/scripts/new-intent +3 -12
  150. package/scripts/node-run +2 -1
  151. package/scripts/plastic-lock +3 -2
  152. package/scripts/promote-session-item +3 -2
  153. package/scripts/read-config +44 -6
  154. package/scripts/release-check +10 -5
  155. package/scripts/report-screen +1 -1
  156. package/scripts/session-commit +2 -1
  157. package/scripts/spawn-preamble +2 -2
  158. package/scripts/update.rb +25 -4
  159. package/scripts/write-handoff +2 -1
  160. package/templates/agents.md +6 -6
  161. package/templates/config.yml +13 -6
  162. package/templates/node-research.md +4 -2
  163. package/templates/render.css +10 -0
  164. package/bin/plastic.js +0 -70
  165. package/skills/agent-advisor/SKILL.md +0 -92
  166. package/skills/auto/SKILL.md +0 -297
  167. package/skills/auto/evals/evals.json +0 -255
  168. package/skills/auto/references/end-tail.md +0 -64
  169. package/skills/conventions/SKILL.md +0 -29
  170. package/skills/dashboard/SKILL.md +0 -180
  171. package/skills/dashboard/evals/evals.json +0 -38
  172. package/skills/dashboard/references/classification.md +0 -22
  173. package/skills/dashboard/templates/dashboard-global.md +0 -20
  174. package/skills/dashboard/templates/dashboard-project.md +0 -19
  175. package/skills/direct/SKILL.md +0 -66
  176. package/skills/direct/references/request-signals.md +0 -59
  177. package/skills/doctor/SKILL.md +0 -305
  178. package/skills/doctor/report.md +0 -102
  179. package/skills/feedback/SKILL.md +0 -98
  180. package/skills/feedback/references/transport-and-privacy.md +0 -65
  181. package/skills/feedback/report.md +0 -36
  182. package/skills/install/SKILL.md +0 -217
  183. package/skills/intent-continuing/SKILL.md +0 -156
  184. package/skills/intent-continuing/references/board-fill.md +0 -52
  185. package/skills/intent-continuing/references/boarding-matrix.md +0 -35
  186. package/skills/intent-continuing/references/context-management.md +0 -28
  187. package/skills/intent-continuing/references/liveness-ranking.md +0 -57
  188. package/skills/intent-creating/SKILL.md +0 -89
  189. package/skills/intent-creating/evals/evals.json +0 -72
  190. package/skills/intent-creating/references/lifecycle.md +0 -81
  191. package/skills/intent-creating/references/wikilinks.md +0 -8
  192. package/skills/intent-ending/SKILL.md +0 -182
  193. package/skills/intent-ending/evals/evals.json +0 -74
  194. package/skills/intent-executing/SKILL.md +0 -87
  195. package/skills/intent-executing/evals/evals.json +0 -66
  196. package/skills/intent-executing/implementer-prompt.md +0 -47
  197. package/skills/intent-executing/spec-reviewer-prompt.md +0 -27
  198. package/skills/intent-speccing/SKILL.md +0 -136
  199. package/skills/intent-speccing/evals/evals.json +0 -126
  200. package/skills/intent-speccing/references/design-principles.md +0 -44
  201. package/skills/intent-speccing/references/per-section-fill-rules.md +0 -92
  202. package/skills/intent-speccing/references/self-verify-checklist.md +0 -37
  203. package/skills/project-creating/SKILL.md +0 -162
  204. package/skills/project-creating/references/hubs-projects.md +0 -55
  205. package/skills/project-creating/references/project-scaffolding.md +0 -97
  206. package/skills/releasing/SKILL.md +0 -376
  207. package/skills/releasing/references/deprecations.md +0 -60
  208. package/skills/releasing/references/promotion-and-tagging.md +0 -70
  209. package/skills/releasing/references/release-lines.md +0 -105
  210. package/skills/roadmap/SKILL.md +0 -90
  211. package/skills/roadmap/references/file-format.md +0 -134
  212. package/skills/roadmap/references/operations.md +0 -112
  213. package/skills/rollback/SKILL.md +0 -91
  214. package/skills/tutorial/SKILL.md +0 -66
  215. package/skills/tutorial/evals/evals.json +0 -186
  216. package/skills/uninstall/SKILL.md +0 -75
  217. package/skills/update/SKILL.md +0 -126
  218. /package/{skills/auto/references → docs/help}/agent-report-contract.md +0 -0
  219. /package/{skills/intent-executing → docs/help}/code-quality-reviewer-prompt.md +0 -0
  220. /package/{skills/conventions/references → docs/help}/knowledge-graph.md +0 -0
  221. /package/{skills/conventions/references → docs/help}/lifecycle-and-savepoints.md +0 -0
  222. /package/{skills/conventions/references → docs/help}/locks-and-worktrees.md +0 -0
  223. /package/{skills/conventions/references → docs/help}/maintenance-and-revisions.md +0 -0
  224. /package/{skills/intent-executing → docs/help}/plan-reviewer-prompt.md +0 -0
@@ -29,27 +29,25 @@ written by eye:
29
29
 
30
30
  ## Binding table (intent 331f)
31
31
 
32
- Every skill that shows state names its own report verb, one row per skill and trigger. Each
33
- bound skill's file carries the SAME rule next to its verb: print the screen as the first
32
+ Every command or lead role that shows state names its own report verb, one row per binding
33
+ and trigger. Each one carries the SAME rule next to its verb: print the screen as the first
34
34
  characters of the reply, nothing before it, no fence, or the hook cannot paint it.
35
35
 
36
- | Skill | Trigger | Verb |
36
+ | Command or lead | Trigger | Verb |
37
37
  |---|---|---|
38
- | `plastic-intent-continuing` | project route (continue, load project) | `dashboard.rb ... --screen` |
39
- | `plastic-intent-continuing` | a named intent | `report-screen state` |
40
- | `plastic-intent-continuing` | "where are we" (a status ask) | `report-screen session` |
41
- | `plastic-intent-continuing` | "why so long" | `report-screen delay` |
42
- | `plastic-intent-continuing` | a roadmap route | `report-screen roadmap ... state` |
43
- | `plastic-auto` | the How boundary, before the executor | `report-screen plan` |
44
- | `plastic-auto` | each of the five triggers | `report-screen state` |
45
- | `plastic-auto` | close | `report-screen delivered` |
46
- | `plastic-intent-ending` | the close | `report-screen delivered` |
47
- | `plastic-intent-speccing` | the action files are written | `report-screen plan` |
48
- | `plastic-roadmap` | create | `report-screen roadmap ... plan` |
49
- | `plastic-roadmap` | read | `report-screen roadmap ... state` |
50
- | `plastic-roadmap` | close | `report-screen roadmap ... delivered` |
51
- | `plastic-dashboard` | any invocation | `dashboard.rb ... --screen` |
52
- | `plastic-intent-executing` | after the red commit, and after the suite | `report-screen state` |
38
+ | `plastic continue` | project route (continue, load project) | `dashboard.rb ... --screen` |
39
+ | `plastic continue` | a named intent | `report-screen state` |
40
+ | `plastic continue` | "where are we" (a status ask) | `report-screen session` |
41
+ | `plastic continue` | "why so long" | `report-screen delay` |
42
+ | `plastic continue` | a roadmap route | `report-screen roadmap ... state` |
43
+ | the auto team's lead | the How boundary, before the executor | `report-screen plan` |
44
+ | the auto team's lead | each of the five triggers | `report-screen state` |
45
+ | the auto team's lead | close | `report-screen delivered` |
46
+ | `plastic intent end` | the close | `report-screen delivered` |
47
+ | `plastic intent spec` | the action files are written | `report-screen plan` |
48
+ | `plastic roadmap show` | any invocation | `report-screen roadmap ... state` |
49
+ | `plastic status` | any invocation | in-process (`Scope#stores`) |
50
+ | `plastic intent step` | after the red commit, and after the suite | `report-screen state` |
53
51
 
54
52
  ## A roadmap's own three reports (intent 331c)
55
53
 
@@ -104,7 +102,7 @@ A delivery still ends with `outcome.md` plus one `delivered` screen.
104
102
 
105
103
  A delivery produces exactly two artifacts: `outcome.md` (generated by `scripts/end-intent`
106
104
  from `graph.md`, `nodes/`, and the ledger when the intent has one, intent 339; hand-authored
107
- by `plastic-intent-ending` otherwise) and one `delivered` screen at the End stage. No stage or skill restates a delivery already
105
+ by `plastic intent end` otherwise) and one `delivered` screen at the End stage. No stage or skill restates a delivery already
108
106
  written to `outcome.md`; point at it instead. Skills do not open with a banner that names the
109
107
  skill or restates the intent id and name the owner just typed. Announce only what the reader
110
108
  cannot already know: an error, a result, a choice with its reason, or a handoff.
@@ -6,8 +6,8 @@ This chapter holds the full roadmap file format and its relationship to INDEX.md
6
6
 
7
7
  Roadmaps exist for planned parallel delivery of intents in a coherent and organized way. A roadmap
8
8
  is a named, ordered, delivery-side collection of intents: the delivery-side counterpart to a
9
- release (completion-side, tracked in `CHANGELOG.md`). Use `plastic-roadmap` to create, order,
10
- close, and consume one.
9
+ release (completion-side, tracked in `CHANGELOG.md`). Create one by hand from the template, then
10
+ use `plastic roadmap show`, `next`, `log`, and `check` to read, drive, and audit it.
11
11
 
12
12
  File location: `roadmaps/{slug}.md`, a sibling of `INDEX.md`, wherever `INDEX.md` lives, never
13
13
  inside `store/` (store holds intent directories, not project artifacts). For a project that is its
@@ -9,7 +9,7 @@ end to end: a piece of work moved through What, Why, How, and Exec, with a finis
9
9
 
10
10
  ## Before you start
11
11
 
12
- Run `/plastic-update` first (`$plastic-update` on Codex), so the commands below match what is
12
+ Run `plastic update` first, so the commands below match what is
13
13
  actually installed.
14
14
 
15
15
  Work in a sandbox: this track always creates a global-store intent; the throwaway repo below
@@ -22,7 +22,7 @@ directory instead (see station 6). Either way, nothing in this track touches a r
22
22
 
23
23
  ### 1. Create the intent
24
24
 
25
- Type `/plastic-intent-creating` and describe the work in plain words, for example "add a
25
+ Run `plastic intent new` and describe the work in plain words, for example "add a
26
26
  short Usage section to this project's README."
27
27
 
28
28
  Artifact: a new intent directory, `{id}--slug.md`, plus the sentinel placeholder lifecycle
@@ -35,7 +35,7 @@ tool, never written by hand.
35
35
 
36
36
  ### 2. Board the intent
37
37
 
38
- Type `/plastic-intent-continuing` and name the intent.
38
+ Run `plastic continue` 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
@@ -46,13 +46,13 @@ 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-speccing` (say "grill me" for a harder, interview-style pass over
49
+ Run `plastic intent spec` (say "grill me" for a harder, interview-style pass over
50
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
54
54
  each ruling also lands as its own `## Insights` entry the moment it is made, never batched for
55
- later. This station's product is the enriched Why; it hands off to `/plastic-intent-speccing`
55
+ later. This station's product is the enriched Why; it hands off to `plastic intent spec`
56
56
  next, it does not write `spec.md` itself.
57
57
 
58
58
  Checkpoint: after two or three answers, look at the intent file. Every ruling given out loud
@@ -60,7 +60,7 @@ is already sitting in `### Decisions` and in `## Insights`, in writing.
60
60
 
61
61
  ### 4. How, write the graph
62
62
 
63
- Ask the same conversation (`/plastic-intent-speccing`) to turn the rulings into the graph.
63
+ Ask the same conversation (`plastic intent spec`) to turn the rulings into the graph.
64
64
 
65
65
  Artifact: `graph.md` (nodes, edges, dispatch policy) and one `nodes/N.md` file per node this
66
66
  small delivery needs. A delivery this size is one node; many independent tasks instead get
@@ -70,7 +70,7 @@ Checkpoint: open `graph.md` and point at the one node this worked example needs.
70
70
 
71
71
  ### 5. Exec, drive the runner loop
72
72
 
73
- Type `/plastic-intent-executing`.
73
+ Run `plastic intent step`.
74
74
 
75
75
  Teach the loop: `ruby scripts/runner step <intent_dir>` computes which nodes are ready and
76
76
  prints a spawn block to dispatch, `ruby scripts/runner status <intent_dir>` reads the
@@ -87,7 +87,7 @@ moving to station 6.
87
87
 
88
88
  ### 6. End
89
89
 
90
- Type `/plastic-intent-ending`.
90
+ Run `plastic intent end`.
91
91
 
92
92
  Artifact: a real `outcome.md` (Summary, Delivered, Verification, Follow-ups) generated by
93
93
  `scripts/outcome-report` from `graph.md` and the ledger, the intent moved from `## Active`
@@ -9,7 +9,7 @@ agent end to end, and pausing and resuming that delivery will feel familiar.
9
9
 
10
10
  ## Before you start
11
11
 
12
- Run `/plastic-update` first (`$plastic-update` on Codex), so the commands below match what is
12
+ Run `plastic update` first, so the commands below match what is
13
13
  actually installed.
14
14
 
15
15
  Work in a sandbox: a throwaway git repository, or a global-store intent. Nothing in this
@@ -19,8 +19,8 @@ track touches a real project.
19
19
 
20
20
  ### 1. Board a small intent and choose auto
21
21
 
22
- Start from an active intent (create one first with `/plastic-intent-creating` if none
23
- exists, the same way as track 1 station 1). Type `/plastic-auto`.
22
+ Start from an active intent (create one first with `plastic intent new` if none
23
+ exists, the same way as track 1 station 1). Run `plastic auto take ID`.
24
24
 
25
25
  Artifact: the delivery lock arms, and the agent announces it is taking over the intent for
26
26
  autonomous delivery.
@@ -45,7 +45,7 @@ can review how it checked, not just what it found.
45
45
  The user keeps two things: the rulings made along the way, and the review points, moments
46
46
  auto is built to pause for, such as confirming a project path or stopping before a
47
47
  destructive action with no safe way back. When auto tells you to run a command yourself
48
- ("run /plastic-intent-speccing"), that is an instruction for you to type; it is a different
48
+ ("run plastic intent spec"), that is an instruction for you to type; it is a different
49
49
  thing from the prompts auto hands to its own dispatched subagents, and the two are never
50
50
  mixed up in what it tells you.
51
51
 
@@ -74,7 +74,7 @@ line.
74
74
 
75
75
  ### 5. Continue and where-was-I after time away
76
76
 
77
- Type `/plastic-intent-continuing`.
77
+ Run `plastic continue`.
78
78
 
79
79
  Artifact: the current state, presented and then the session stops. If a specific intent is
80
80
  named, the agent reads its stage and savepoint and resumes exactly there, rather than
@@ -9,7 +9,7 @@ will exist with more than one intent inside it and a roadmap file describing the
9
9
 
10
10
  ## Before you start
11
11
 
12
- Run `/plastic-update` first (`$plastic-update` on Codex), so the commands below match what is
12
+ Run `plastic update` first, so the commands below match what is
13
13
  actually installed.
14
14
 
15
15
  Work in a sandbox: this whole track is a walked example. It creates a real project directory
@@ -20,11 +20,11 @@ one this tutorial keeps or ships.
20
20
 
21
21
  ### 1. Start from a founding implementation intent
22
22
 
23
- Create and board an intent the same way as track 1, stations 1 and 2: `/plastic-intent-creating`,
24
- then `/plastic-intent-continuing`. Describe something meant to grow into a small real project,
23
+ Create and board an intent the same way as track 1, stations 1 and 2: `plastic intent new`,
24
+ then `plastic continue`. 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-speccing` and record a couple of real rulings on this founding
27
+ Then type `plastic intent spec` 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
 
@@ -33,17 +33,21 @@ into a whole new project.
33
33
 
34
34
  ### 2. Grow it into a project
35
35
 
36
- Type `/plastic-project-creating`.
36
+ Make the project directory yourself and write its `AGENTS.md`, carrying forward at least one
37
+ decision from the founding intent. Plastic does not create the directory or fill that file;
38
+ that is ordinary agent work, done once, before the project exists. Once the directory exists,
39
+ run `plastic project new SLUG --path PATH` to register it in `projects.yml` and provision and
40
+ validate its store.
37
41
 
38
- Artifact: a new project directory, an `AGENTS.md` file carrying the founding intent's
39
- decisions, the project's own intent store, and a new entry in `projects.yml` registering it.
42
+ Artifact: a new project directory with its `AGENTS.md`, the project's own intent store, and a
43
+ new entry in `projects.yml` registering it.
40
44
 
41
45
  Checkpoint: open `AGENTS.md` and find at least one line that traces back to a decision
42
46
  recorded in the founding intent back in station 1.
43
47
 
44
48
  ### 3. Add more intents inside the project
45
49
 
46
- Type `/plastic-intent-creating` at least twice, from inside the project, describing two
50
+ Run `plastic intent new` at least twice, from inside the project, describing two
47
51
  pieces of real work, for example "add a task list model" and "add a due date field."
48
52
 
49
53
  Artifact: two or more intent directories inside the project's own store, separate from the
@@ -54,13 +58,16 @@ in the global store.
54
58
 
55
59
  ### 4. Plan a delivery batch
56
60
 
57
- Type `/plastic-roadmap`.
61
+ Copy `templates/roadmap.md` to `roadmaps/<slug>.md`, next to the project's `INDEX.md`, and fill
62
+ it by hand: a title and short meta header, a `## Goal` section in prose describing what "done"
63
+ looks like for the whole batch, a `## Batches` section (an ordered list of groups of intents;
64
+ intents inside one batch are safe to run in parallel, batches themselves run one after another),
65
+ and an append-only, dated `## Log`. `INDEX.md` stays the single source of truth for each
66
+ intent's status; the roadmap only mirrors it. List the two or more intents from station 3
67
+ across one or more batches.
58
68
 
59
- Teach the roadmap file shape exactly: a title and short meta header, a `## Goal` section in
60
- prose describing what "done" looks like for the whole batch, a `## Batches` section (an
61
- ordered list of groups of intents; intents inside one batch are safe to run in parallel,
62
- batches themselves run one after another), and an append-only, dated `## Log`. `INDEX.md`
63
- stays the single source of truth for each intent's status; the roadmap only mirrors it.
69
+ Run `plastic roadmap check <slug>` to confirm the file parses, then `plastic roadmap show
70
+ <slug>` to see it rendered as a report.
64
71
 
65
72
  Artifact: a new `roadmaps/<slug>.md` file, sitting next to the project's `INDEX.md`, listing
66
73
  the two or more intents from station 3 across one or more batches.
@@ -93,8 +100,8 @@ sections you turned into the condition above.
93
100
 
94
101
  No command run here; describe the step instead. Each delivered intent's code merges to main
95
102
  as it lands. When the batch (or a meaningful slice of it) is ready to ship, cutting a release
96
- runs through `/plastic-releasing`, which merges, bumps the version, tags, and completes the
97
- intents it collects.
103
+ is a push to `alpha`, `beta`, or `main`: the version files are bumped in that push, and CI
104
+ tags, publishes, and completes the intents it collects.
98
105
 
99
106
  Releases and any npm publish step are described here, not run: this walkthrough stays in a
100
107
  sandbox and never touches a real package registry.
@@ -108,4 +115,4 @@ This is the same What, Why, How, Exec cycle from tracks 1 and 2, repeated across
108
115
  and gathered by a roadmap. Read
109
116
  [`using-plastic-with-claude-code.md`](https://github.com/zalom/plastic/blob/main/docs/guides/using-plastic-with-claude-code.md) for roadmap-driven delivery in more depth,
110
117
  including a real worked roadmap. For the exact roadmap file format beyond what this
111
- walkthrough covers, the `plastic-roadmap` skill itself is the reference.
118
+ walkthrough covers, [`docs/help/roadmaps.md`](roadmaps.md) is the reference.
package/package.json CHANGED
@@ -1,10 +1,10 @@
1
1
  {
2
2
  "name": "@zalom/plastic",
3
- "version": "2.0.0-alpha.26",
3
+ "version": "2.0.0-alpha.28",
4
4
  "description": "Intent-driven idea development system for AI coding agents",
5
5
  "type": "module",
6
6
  "bin": {
7
- "plastic": "bin/plastic.js"
7
+ "plastic": "bin/plastic"
8
8
  },
9
9
  "engines": {
10
10
  "node": ">=18.0.0"
@@ -34,6 +34,7 @@
34
34
  "bin/",
35
35
  "scripts/",
36
36
  "skills/",
37
+ "docs/help/",
37
38
  "hooks/",
38
39
  "agents/",
39
40
  "templates/",
@@ -30,6 +30,7 @@
30
30
  # 2 - usage error, or promote/tick found nothing to address (no write happens)
31
31
  # 3 - promote/tick could not take an exclusive lock (filesystem without flock support)
32
32
 
33
+ require_relative "lib/store_layout"
33
34
  require_relative "lib/session_ledger"
34
35
  require_relative "lib/handoff"
35
36
 
@@ -162,7 +163,7 @@ def main(argv)
162
163
  usage_abort("verb must be one of #{VERBS.join(", ")}, got #{opts[:verb].inspect}") unless VERBS.include?(opts[:verb])
163
164
 
164
165
  plastic_home = expand(ENV.fetch("PLASTIC_HOME", "~/.plastic"))
165
- store = opts[:store] ? expand(opts[:store]) : File.join(plastic_home, "store")
166
+ store = opts[:store] ? expand(opts[:store]) : Plastic::StoreLayout.global_store(plastic_home)
166
167
  templates = opts[:templates] ? expand(opts[:templates]) : default_templates_dir
167
168
  usage_abort("templates dir not found: #{templates}") unless Dir.exist?(templates)
168
169
  opts[:templates] = templates
@@ -21,6 +21,7 @@
21
21
  #
22
22
  # Read-only. Never modifies files.
23
23
 
24
+ require_relative "lib/store_layout"
24
25
  require "json"
25
26
  require "yaml"
26
27
  require "date"
@@ -143,13 +144,13 @@ def completion_dates(index_path)
143
144
  end
144
145
 
145
146
  # All stores: global + every registered project. -> [{scope, store, index}]
146
- def stores
147
+ def stores(home = PLASTIC_HOME)
147
148
  list = []
148
- global = File.join(PLASTIC_HOME, "store")
149
- list << { scope: "global", store: global, index: File.join(PLASTIC_HOME, "INDEX.md") } if File.directory?(global)
150
- projects_root = File.join(PLASTIC_HOME, "projects")
149
+ global = Plastic::StoreLayout.global_store(home)
150
+ list << { scope: "global", store: global, index: File.join(Plastic::StoreLayout.global_root(home), "INDEX.md") } if File.directory?(global)
151
+ projects_root = Plastic::StoreLayout.projects_root(home)
151
152
  if File.directory?(projects_root)
152
- Dir.children(projects_root).sort.each do |proj|
153
+ Plastic::StoreLayout.project_slugs(home).each do |proj|
153
154
  store = File.join(projects_root, proj, "store")
154
155
  next unless File.directory?(store)
155
156
  list << { scope: "project:#{proj}", store: store, index: File.join(projects_root, proj, "INDEX.md") }
@@ -592,7 +593,7 @@ def render_continue(records)
592
593
  out.concat(matrix(open, scope_tag: true))
593
594
  out << ""
594
595
  out << LEGEND
595
- out << "ask for the <slug> project board · plastic-auto (works the dispatchable queue)"
596
+ out << "ask for the <slug> project board · plastic auto take ID (works the dispatchable queue)"
596
597
  out.join("\n") + "\n"
597
598
  end
598
599
 
@@ -855,7 +856,7 @@ end
855
856
  def short_description(scope)
856
857
  return "" unless scope.start_with?("project:")
857
858
  slug = scope.sub("project:", "")
858
- agents = File.join(PLASTIC_HOME, "projects", slug, "AGENTS.md")
859
+ agents = File.join(Plastic::StoreLayout.project_root(PLASTIC_HOME, slug), "AGENTS.md")
859
860
  if File.exist?(agents)
860
861
  File.readlines(agents).each do |l|
861
862
  t = l.strip
@@ -1022,7 +1023,7 @@ end
1022
1023
  # directly under PLASTIC_HOME, with no intervening "store" segment.
1023
1024
  def screen_tier_root(plastic_home, scope)
1024
1025
  return plastic_home if scope == "global"
1025
- File.join(plastic_home, "projects", screen_scope_slug(scope))
1026
+ Plastic::StoreLayout.project_root(plastic_home, screen_scope_slug(scope))
1026
1027
  end
1027
1028
 
1028
1029
  # "global" spans every store (the same aggregate render_continue and --json's
@@ -1085,7 +1086,7 @@ end
1085
1086
  # PLASTIC_HOME/store tmp root, and `session: nil` (A6) so the calling
1086
1087
  # session's own live heartbeat counts rather than being excluded as "self".
1087
1088
  def screen_sessions_count(plastic_home, now:)
1088
- store = File.join(plastic_home, "store")
1089
+ store = Plastic::StoreLayout.global_store(plastic_home)
1089
1090
  DaySummary.active_sessions(store, nil, now: now, ttl: DaySummary::HEARTBEAT_TTL).size
1090
1091
  end
1091
1092
 
@@ -14,6 +14,7 @@
14
14
  #
15
15
  # Exit codes: 0 done; 2 usage error.
16
16
 
17
+ require_relative "lib/store_layout"
17
18
  require_relative "lib/session_ledger"
18
19
  require_relative "lib/day_summary"
19
20
 
@@ -43,7 +44,7 @@ end
43
44
 
44
45
  opts = parse_args(ARGV)
45
46
  home = opts[:home] ? expand(opts[:home]) : expand(ENV.fetch("PLASTIC_HOME", "~/.plastic"))
46
- store = opts[:store] ? expand(opts[:store]) : File.join(home, "store")
47
+ store = opts[:store] ? expand(opts[:store]) : Plastic::StoreLayout.global_store(home)
47
48
  day = opts[:day] || SessionLedger.day_id
48
49
  usage_abort("--day must be eight digits parsing as a real date, got #{day.inspect}") unless SessionLedger.valid_day_id?(day)
49
50
  session = SessionLedger.short_session_id(opts[:session], ENV["CLAUDE_CODE_SESSION_ID"])