@zalom/plastic 2.0.0-alpha.27 → 2.0.0-alpha.29

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 (207) hide show
  1. package/PLASTIC.md +13 -139
  2. package/README.md +345 -133
  3. package/agents/plastic-enforcer.md +9 -10
  4. package/agents/plastic-executor.md +1 -1
  5. package/bin/crap +4 -0
  6. package/bin/lib/context_budget.rb +35 -1
  7. package/bin/lib/skill_census.rb +839 -0
  8. package/bin/plastic +6 -0
  9. package/bin/plastic-skill-census +114 -0
  10. package/bin/verify-change +345 -0
  11. package/deprecations.yml +1 -1
  12. package/{skills/agent-advisor/references → docs/help}/advisor-protocol.md +4 -7
  13. package/{skills/auto/references → docs/help}/agent-architecture.md +7 -7
  14. package/{skills/conventions/references → docs/help}/completion-and-done.md +1 -1
  15. package/{skills/auto/references → docs/help}/human-report-contract.md +17 -19
  16. package/{skills/conventions/references → docs/help}/roadmaps.md +2 -2
  17. package/{skills/tutorial/references → docs/help}/track-1-guided.md +8 -8
  18. package/{skills/tutorial/references → docs/help}/track-2-auto.md +5 -5
  19. package/{skills/tutorial/references → docs/help}/track-3-projects-and-roadmaps.md +24 -17
  20. package/package.json +3 -2
  21. package/scripts/append-ledger +2 -1
  22. package/scripts/dashboard.rb +10 -9
  23. package/scripts/day-summary +2 -1
  24. package/scripts/doctor.rb +48 -42
  25. package/scripts/end-intent +2 -8
  26. package/scripts/file-session-intent +2 -1
  27. package/scripts/hook-capture +4 -3
  28. package/scripts/hook-close +2 -1
  29. package/scripts/hook-record +3 -2
  30. package/scripts/hook-savepoint +3 -2
  31. package/scripts/hook-session-start +5 -4
  32. package/scripts/hook-stop +2 -1
  33. package/scripts/insight-append +1 -2
  34. package/scripts/install.rb +3 -1
  35. package/scripts/lib/active_delivery.rb +1 -1
  36. package/scripts/lib/arm.rb +2 -1
  37. package/scripts/lib/backup.rb +65 -0
  38. package/scripts/lib/cli/command.rb +85 -0
  39. package/scripts/lib/cli/commands/auto.rb +18 -0
  40. package/scripts/lib/cli/commands/auto_brief.rb +44 -0
  41. package/scripts/lib/cli/commands/auto_lock.rb +60 -0
  42. package/scripts/lib/cli/commands/auto_report.rb +50 -0
  43. package/scripts/lib/cli/commands/auto_take.rb +25 -0
  44. package/scripts/lib/cli/commands/backup.rb +43 -0
  45. package/scripts/lib/cli/commands/checkout.rb +25 -0
  46. package/scripts/lib/cli/commands/continue.rb +66 -0
  47. package/scripts/lib/cli/commands/doctor.rb +20 -0
  48. package/scripts/lib/cli/commands/feedback.rb +40 -0
  49. package/scripts/lib/cli/commands/help.rb +69 -0
  50. package/scripts/lib/cli/commands/hook.rb +32 -0
  51. package/scripts/lib/cli/commands/index.rb +23 -0
  52. package/scripts/lib/cli/commands/install.rb +21 -0
  53. package/scripts/lib/cli/commands/installer_verb.rb +37 -0
  54. package/scripts/lib/cli/commands/intent.rb +19 -0
  55. package/scripts/lib/cli/commands/intent_answer.rb +37 -0
  56. package/scripts/lib/cli/commands/intent_command.rb +53 -0
  57. package/scripts/lib/cli/commands/intent_end.rb +61 -0
  58. package/scripts/lib/cli/commands/intent_new.rb +62 -0
  59. package/scripts/lib/cli/commands/intent_note.rb +43 -0
  60. package/scripts/lib/cli/commands/intent_rule.rb +36 -0
  61. package/scripts/lib/cli/commands/intent_show.rb +25 -0
  62. package/scripts/lib/cli/commands/intent_spec.rb +44 -0
  63. package/scripts/lib/cli/commands/intent_step.rb +43 -0
  64. package/scripts/lib/cli/commands/intent_verify.rb +26 -0
  65. package/scripts/lib/cli/commands/migrate.rb +16 -0
  66. package/scripts/lib/cli/commands/migrate_stores.rb +31 -0
  67. package/scripts/lib/cli/commands/next.rb +49 -0
  68. package/scripts/lib/cli/commands/project.rb +19 -0
  69. package/scripts/lib/cli/commands/project_links.rb +42 -0
  70. package/scripts/lib/cli/commands/project_list.rb +20 -0
  71. package/scripts/lib/cli/commands/project_new.rb +72 -0
  72. package/scripts/lib/cli/commands/query.rb +31 -0
  73. package/scripts/lib/cli/commands/render.rb +25 -0
  74. package/scripts/lib/cli/commands/roadmap.rb +19 -0
  75. package/scripts/lib/cli/commands/roadmap_check.rb +44 -0
  76. package/scripts/lib/cli/commands/roadmap_log.rb +54 -0
  77. package/scripts/lib/cli/commands/roadmap_next.rb +34 -0
  78. package/scripts/lib/cli/commands/roadmap_show.rb +45 -0
  79. package/scripts/lib/cli/commands/rollback.rb +20 -0
  80. package/scripts/lib/cli/commands/search.rb +60 -0
  81. package/scripts/lib/cli/commands/session.rb +18 -0
  82. package/scripts/lib/cli/commands/session_commit.rb +42 -0
  83. package/scripts/lib/cli/commands/session_handoff.rb +34 -0
  84. package/scripts/lib/cli/commands/session_summary.rb +35 -0
  85. package/scripts/lib/cli/commands/status.rb +68 -0
  86. package/scripts/lib/cli/commands/subcommand_list.rb +36 -0
  87. package/scripts/lib/cli/commands/sync.rb +46 -0
  88. package/scripts/lib/cli/commands/uninstall.rb +20 -0
  89. package/scripts/lib/cli/commands/update.rb +20 -0
  90. package/scripts/lib/cli/commands/version.rb +53 -0
  91. package/scripts/lib/cli/frontier.rb +84 -0
  92. package/scripts/lib/cli/legacy.rb +50 -0
  93. package/scripts/lib/cli/output.rb +102 -0
  94. package/scripts/lib/cli/scope.rb +127 -0
  95. package/scripts/lib/cli/table.rb +64 -0
  96. package/scripts/lib/cli.rb +94 -0
  97. package/scripts/lib/compact_instructions.rb +8 -0
  98. package/scripts/lib/day_summary.rb +4 -3
  99. package/scripts/lib/doctor_core.rb +7 -32
  100. package/scripts/lib/doctor_session_ledger.rb +2 -1
  101. package/scripts/lib/feedback_report.rb +1 -1
  102. package/scripts/lib/graph_measure_models.rb +3 -1
  103. package/scripts/lib/index_entry.rb +9 -0
  104. package/scripts/lib/installer_core.rb +73 -19
  105. package/scripts/lib/intent_screen.rb +3 -3
  106. package/scripts/lib/lock.rb +2 -2
  107. package/scripts/lib/node_input.rb +3 -2
  108. package/scripts/lib/preflight.rb +4 -6
  109. package/scripts/lib/project_config.rb +2 -1
  110. package/scripts/lib/project_validator.rb +3 -2
  111. package/scripts/lib/qmd_sync.rb +8 -7
  112. package/scripts/lib/reference_archive.rb +45 -0
  113. package/scripts/lib/release_guard.rb +2 -0
  114. package/scripts/lib/report_screen.rb +4 -3
  115. package/scripts/lib/rlm/corpus.rb +13 -0
  116. package/scripts/lib/rlm/probe.rb +29 -0
  117. package/scripts/lib/rlm/query.rb +22 -0
  118. package/scripts/lib/roadmap_queue.rb +2 -2
  119. package/scripts/lib/roadmap_savepoint.rb +1 -1
  120. package/scripts/lib/runner_absorb.rb +3 -2
  121. package/scripts/lib/search_index.rb +55 -0
  122. package/scripts/lib/session_git.rb +4 -3
  123. package/scripts/lib/sqlite.rb +22 -0
  124. package/scripts/lib/store_discovery.rb +7 -6
  125. package/scripts/lib/store_layout.rb +54 -0
  126. package/scripts/lib/store_provisioning.rb +2 -1
  127. package/scripts/lib/store_sync.rb +85 -0
  128. package/scripts/lib/stores_move.rb +93 -0
  129. package/scripts/lib/verify_intent.rb +2 -7
  130. package/scripts/lib/version_number.rb +48 -0
  131. package/scripts/lib/work_graph.rb +59 -0
  132. package/scripts/lib/worktree.rb +3 -8
  133. package/scripts/lib/worktree_sweep.rb +3 -2
  134. package/scripts/link-suggest +2 -1
  135. package/scripts/migrate-to-global +1 -1
  136. package/scripts/new-intent +3 -12
  137. package/scripts/plastic-lock +3 -2
  138. package/scripts/promote-session-item +3 -2
  139. package/scripts/release-check +10 -5
  140. package/scripts/report-screen +1 -1
  141. package/scripts/session-commit +2 -1
  142. package/scripts/spawn-preamble +2 -2
  143. package/scripts/update.rb +25 -4
  144. package/scripts/write-handoff +2 -1
  145. package/templates/agents.md +6 -6
  146. package/templates/render.css +10 -0
  147. package/bin/plastic.js +0 -70
  148. package/skills/agent-advisor/SKILL.md +0 -84
  149. package/skills/auto/SKILL.md +0 -297
  150. package/skills/auto/evals/evals.json +0 -255
  151. package/skills/auto/references/end-tail.md +0 -64
  152. package/skills/conventions/SKILL.md +0 -29
  153. package/skills/dashboard/SKILL.md +0 -180
  154. package/skills/dashboard/evals/evals.json +0 -38
  155. package/skills/dashboard/references/classification.md +0 -22
  156. package/skills/dashboard/templates/dashboard-global.md +0 -20
  157. package/skills/dashboard/templates/dashboard-project.md +0 -19
  158. package/skills/direct/SKILL.md +0 -66
  159. package/skills/direct/references/request-signals.md +0 -59
  160. package/skills/doctor/SKILL.md +0 -305
  161. package/skills/doctor/report.md +0 -102
  162. package/skills/feedback/SKILL.md +0 -98
  163. package/skills/feedback/references/transport-and-privacy.md +0 -65
  164. package/skills/feedback/report.md +0 -36
  165. package/skills/install/SKILL.md +0 -215
  166. package/skills/intent-continuing/SKILL.md +0 -156
  167. package/skills/intent-continuing/references/board-fill.md +0 -52
  168. package/skills/intent-continuing/references/boarding-matrix.md +0 -35
  169. package/skills/intent-continuing/references/context-management.md +0 -28
  170. package/skills/intent-continuing/references/liveness-ranking.md +0 -57
  171. package/skills/intent-creating/SKILL.md +0 -89
  172. package/skills/intent-creating/evals/evals.json +0 -72
  173. package/skills/intent-creating/references/lifecycle.md +0 -81
  174. package/skills/intent-creating/references/wikilinks.md +0 -8
  175. package/skills/intent-ending/SKILL.md +0 -182
  176. package/skills/intent-ending/evals/evals.json +0 -74
  177. package/skills/intent-executing/SKILL.md +0 -87
  178. package/skills/intent-executing/evals/evals.json +0 -66
  179. package/skills/intent-executing/implementer-prompt.md +0 -47
  180. package/skills/intent-executing/spec-reviewer-prompt.md +0 -27
  181. package/skills/intent-speccing/SKILL.md +0 -136
  182. package/skills/intent-speccing/evals/evals.json +0 -126
  183. package/skills/intent-speccing/references/design-principles.md +0 -44
  184. package/skills/intent-speccing/references/per-section-fill-rules.md +0 -92
  185. package/skills/intent-speccing/references/self-verify-checklist.md +0 -37
  186. package/skills/project-creating/SKILL.md +0 -162
  187. package/skills/project-creating/references/hubs-projects.md +0 -55
  188. package/skills/project-creating/references/project-scaffolding.md +0 -97
  189. package/skills/releasing/SKILL.md +0 -376
  190. package/skills/releasing/references/deprecations.md +0 -60
  191. package/skills/releasing/references/promotion-and-tagging.md +0 -70
  192. package/skills/releasing/references/release-lines.md +0 -105
  193. package/skills/roadmap/SKILL.md +0 -90
  194. package/skills/roadmap/references/file-format.md +0 -134
  195. package/skills/roadmap/references/operations.md +0 -112
  196. package/skills/rollback/SKILL.md +0 -91
  197. package/skills/tutorial/SKILL.md +0 -66
  198. package/skills/tutorial/evals/evals.json +0 -186
  199. package/skills/uninstall/SKILL.md +0 -75
  200. package/skills/update/SKILL.md +0 -126
  201. /package/{skills/auto/references → docs/help}/agent-report-contract.md +0 -0
  202. /package/{skills/intent-executing → docs/help}/code-quality-reviewer-prompt.md +0 -0
  203. /package/{skills/conventions/references → docs/help}/knowledge-graph.md +0 -0
  204. /package/{skills/conventions/references → docs/help}/lifecycle-and-savepoints.md +0 -0
  205. /package/{skills/conventions/references → docs/help}/locks-and-worktrees.md +0 -0
  206. /package/{skills/conventions/references → docs/help}/maintenance-and-revisions.md +0 -0
  207. /package/{skills/intent-executing → docs/help}/plan-reviewer-prompt.md +0 -0
@@ -1,105 +0,0 @@
1
- # Release Lines and Channels
2
-
3
- The two release lanes, the version-line map, and the intent-41 re-land playbook: the deep
4
- material behind SKILL.md's "Release lines and channels" section.
5
-
6
- ## Table of Contents
7
-
8
- - [The two lanes](#the-two-lanes)
9
- - [Routing rule](#routing-rule)
10
- - [Stable-line guarantees](#stable-line-guarantees)
11
- - [Version-line map](#version-line-map)
12
- - [Intent 41 re-land playbook](#intent-41-re-land-playbook)
13
-
14
- ## The two lanes
15
-
16
- **Default lane.** Branch, merge to `main` with `--no-ff`, cut stable, publish to npm `latest`.
17
- This is the workflow SKILL.md documents step by step. It is the path for additive,
18
- suite-verifiable, low-blast-radius work: new skills, prose, deterministic scripts, anything a
19
- green Minitest run can fully vouch for.
20
-
21
- **Beta-verified lane.** Branch, merge to the `beta` branch, publish to the npm `beta` dist-tag,
22
- verify in real use, then merge `beta` into `main` and cut stable. It sits on top of the existing
23
- promotion mechanics (agent-performed channel promotion, linear only, see
24
- `promotion-and-tagging.md`); it names when to use them, not new machinery.
25
-
26
- ## Routing rule
27
-
28
- Work rides the beta-verified lane when it changes operational substrate, carries data,
29
- migration, lock, or state-format risk, or cannot be fully validated by a hermetic suite alone.
30
- Everything else merges straight to main.
31
-
32
- Intent 41's DB layer is the archetypal beta-lane case: it replaces the lock and session
33
- file formats with a new persistent SQLite substrate. A green suite proves the code correct; it
34
- cannot prove the new substrate survives real, uncontrolled usage, so real-use verification on
35
- beta comes first.
36
-
37
- The manual-first roadmap's eight 1.1.0 intents (158a, 163, 161, 164, 165, 168, 166, 159) are all
38
- default-lane: skill directory renames, prose rewrites, deterministic step scripts. Additive, and
39
- fully suite-verified.
40
-
41
- ## Stable-line guarantees
42
-
43
- What an external `latest` user can rely on:
44
-
45
- 1. `main` is always green and releasable. No pending revert awaiting re-land sits on `main`.
46
- When something needs beta verification, it comes out of `main` the same day that need is
47
- found (the 226023f precedent), never left half-landed.
48
- 2. A stable release carries no pre-release suffix, publishes to npm `latest`, and the newest
49
- stable release always carries the GitHub "Latest" badge (`gh release create --latest` on
50
- every cut).
51
- 3. The three repo version files (`package.json`, `.claude-plugin/plugin.json`,
52
- `.claude-plugin/marketplace.json`) always agree. Checked mechanically by
53
- `scripts/lib/release_guard.rb`.
54
- 4. A stable cut collects only intents that cleared their lane's bar: default-lane intents by a
55
- green suite, beta-lane intents by suite green plus their lane's own verification (real-use
56
- signal, owner sign-off).
57
- 5. Channel semantics are fixed: `latest` is stable and what an external user should run; `beta`
58
- is the verification line, published but expected to move; `alpha` is experimental,
59
- pre-verification.
60
-
61
- ## Version-line map
62
-
63
- | Line | State | What lands here |
64
- |---|---|---|
65
- | `1.1.x` | Current stable line (main) | Additive or low-risk work merged straight to main; interim stable cuts, including 171's wave-6 cut, stay in this line |
66
- | `1.2.0-beta.1` | On beta (`9ec194b`, unpublished) | Intent 41's DB layer, restored over 1.1.0 by revert-of-revert (`c48601a` then `9ec194b`) |
67
- | `1.2.0` | Reserved | The stable graduation of the DB layer, once beta verification passes; not claimed by any interim `1.1.x` cut |
68
-
69
- A beta-graduated substrate change claims its reserved minor at the moment it actually merges to
70
- main, not before. Nothing else on the `1.1.x` line is blocked waiting for `1.2.0`.
71
-
72
- ## Intent 41 re-land playbook
73
-
74
- Written for the wave-6 cut intent (171) and any future reader to pick a version without
75
- re-deriving this decision.
76
-
77
- **Current state.** The revert-of-revert already sits on the `beta` branch at `9ec194b`, on top
78
- of 1.1.0, versioned `1.2.0-beta.1` (`c48601a`). There is nothing left to execute on the git side;
79
- this playbook describes what happens next, not a pending action.
80
-
81
- **Preconditions**, both required before any publish of `1.2.0-beta.1`:
82
-
83
- - (a) One documentation pass over beta-line skills and docs for the hybrid savepoint contract:
84
- on beta, only the terminal savepoint line still writes a live `savepoint.md`; every other
85
- milestone lives in `savepoint_events` plus a committed JSONL export. Beta-line prose that
86
- still assumes an always-live ledger needs updating first, so a beta-line reader does not
87
- mistake an empty ledger for a broken one.
88
- - (b) The owner's manual verification of the DB layer in real use. This is a dogfood signal,
89
- distinct from the independently-reviewed green suite that already exists on beta.
90
-
91
- **Trigger**, owner-gated: the owner publishes `1.2.0-beta.1` to the npm `beta` dist-tag. This is
92
- explicitly not this intent's, nor any agent's, call to make.
93
-
94
- **Verification.** An external tester plus the owner verify the DB layer on the beta channel.
95
-
96
- **Completion.** Once verified, `beta` merges into `main`, `1.2.0` is cut stable, and it publishes
97
- to npm `latest`.
98
-
99
- **Version mechanics.** `1.2.0` is reserved for this graduation. The `1.1.x` line stays the
100
- stable line until `1.2.0` actually lands. `1.2.0-beta.1` graduates to `1.2.0` stable by dropping
101
- the pre-release suffix; nothing else about the version number changes.
102
-
103
- **Consumed by 171.** The wave-6 consistency-dividend cut stays in the `1.1.x` line. It does not
104
- ride intent 41 and needs no further derivation: intent 41 keeps its own `1.2.0` line on beta,
105
- independent of whatever `1.1.x` number 171 lands on.
@@ -1,90 +0,0 @@
1
- ---
2
- name: plastic-roadmap
3
- description: Use when the user wants to plan a delivery batch, order waves of intents, ship a batch of intents in one go, track a named collection of intents toward a goal, or asks for a "roadmap". Creates and maintains a roadmap file, a delivery-side collection of intents (the counterpart to a release), separate from INDEX.md status tracking.
4
- user-invocable: true
5
- ---
6
-
7
- # Roadmap
8
-
9
- A roadmap is a named, ordered, delivery-side collection of intents: the delivery-side counterpart
10
- to a release (completion-side, `CHANGELOG.md`). It lives at `roadmaps/{slug}.md`, a sibling of
11
- `INDEX.md` wherever `INDEX.md` lives: the global tier's `~/.plastic/roadmaps/` (beside
12
- `~/.plastic/INDEX.md`), or a project's root, `~/.plastic/projects/{slug}/roadmaps/` (beside that
13
- project's `INDEX.md` and `project.yml`). It never sits inside `store/`, which holds intent
14
- directories, not project artifacts.
15
-
16
- A roadmap file has four parts: a title/meta header, `## Goal` (prose), `## Batches` (ordered;
17
- entries inside a batch are parallel-safe, batches run sequentially), and an append-only dated
18
- `## Log`. A roadmap written before owner ruling 145 may instead use the legacy `## Waves` heading;
19
- reading accepts both, but every new roadmap is scaffolded with `## Batches`, and an existing
20
- roadmap file's heading is never renamed to migrate it. Each batch entry mirrors that intent's
21
- status in `INDEX.md` (`queued`/`delivering`/`delivered`/`abandoned`/`blocked`).
22
-
23
- **`INDEX.md` is the single writer of intent status; on any conflict INDEX wins and the roadmap
24
- entry is corrected to match.**
25
-
26
- The skill operates on the roadmap file directly via Read/Edit. The one deterministic helper it
27
- uses is the savepoint ledger writer (`scripts/roadmap-savepoint`, `append`/`rebuild`); every verb's
28
- closing step calls `append` after its Read/Edit, and the roadmap `.md` file itself stays
29
- Read/Edit-only.
30
-
31
- ## Verbs
32
-
33
- | Verb | When | Mechanics |
34
- |------|------|-----------|
35
- | Create | user wants to start a new roadmap / plan a delivery batch | `references/operations.md#create` |
36
- | Add / reorder entries | user wants to add intents to a batch or resequence batches | `references/operations.md#add--reorder-entries` |
37
- | Sync status mirror | an entry's status may be stale against INDEX | `references/operations.md#sync-status-mirror` |
38
- | Append log line | a roadmap event just happened (created, batch done, closed) | `references/operations.md#append-a-log-line` |
39
- | Read / consume | a human or a coordinator needs the roadmap's current state | `references/operations.md#read--consume` |
40
- | Close / archive | the roadmap's `## Goal` is reached | `references/operations.md#close--archive` |
41
-
42
- See `references/file-format.md` for the exact entry-line shape, status vocabulary, checkbox/log
43
- format, and a worked example. See `references/operations.md` for step-by-step mechanics of each
44
- verb above.
45
-
46
- ## Graph (intent 337)
47
-
48
- A roadmap may carry an optional `## Graph` section - the same `needs` edge grammar as an
49
- intent's own `graph.md` (`- <id> needs <id> <id>`, or `- <id> needs nothing` for a root). When
50
- present, batches are computed from it (`roadmap-graph check`/`render`), not hand-ordered; the
51
- template scaffolds a fenced example so a new roadmap starts with the section already in place.
52
- Three verbs, all `--dry-run`-able:
53
-
54
- | Verb | What it does |
55
- |------|--------------|
56
- | `roadmap-graph check <roadmap.md>` | Prints the computed batches, the ready set, and any dangling id (a graph names it, no batch lists it); exits 1 on a cyclic graph or a dangling id. |
57
- | `roadmap-graph render <roadmap.md>` | Writes `## Tree` (a box-drawing render of the graph) and regroups the batch/wave section from the computed batches, entry lines carried over verbatim. |
58
- | `roadmap-graph migrate <roadmap.md>` | Derives a conservative `## Graph` for a graphless roadmap from its existing batch order (batch N needs every entry of batch N-1); never overwrites an existing graph. |
59
-
60
- A roadmap with no `## Graph` section keeps working exactly as before (wave-order dispatch); the
61
- graph is additive, never required.
62
-
63
- Read `../plastic-conventions/references/roadmaps.md` for the roadmap file format, batch
64
- semantics, and the status-mirror rule that this skill's own file-format reference builds on. This
65
- path resolves relative to this skill's own installed directory.
66
-
67
- ## Reports (intent 331f)
68
-
69
- Each verb prints its report screen as the first characters of the reply: nothing before it, no
70
- fence, or the hook cannot paint it.
71
-
72
- - Create prints `ruby ~/.plastic/scripts/report-screen roadmap <roadmap.md> plan`.
73
- - Read / consume prints `ruby ~/.plastic/scripts/report-screen roadmap <roadmap.md> state`.
74
- - Close / archive prints `ruby ~/.plastic/scripts/report-screen roadmap <roadmap.md> delivered`.
75
-
76
- ## Notes
77
-
78
- - File location and the four-section shape are identical across tiers; do not invent a different
79
- layout per project. The general rule: `roadmaps/` is a sibling of `INDEX.md`, wherever `INDEX.md`
80
- lives.
81
- - `## Goal` is a checkable prose condition read by a human or agent, not an executable checker.
82
- - Batch entries render as checkboxes (`- [x] ... — delivered` / `- [ ] ... — <status>`); a human
83
- reading cold should see shipped/running/next within a minute. `## Log` lines are one-sentence,
84
- EM-to-CTO-voice, dated, and link each entry-intent's `outcome.md` (lossless-by-reference).
85
- - Additive: this skill introduces no gate, lock, or hook, and does not change `INDEX.md`'s section
86
- list or the intent frontmatter schema.
87
- - Closing a roadmap moves it to `roadmaps/archived/{slug}.md` so `roadmaps/` lists only live ones.
88
- - Every verb also appends a machine ledger line to the roadmap's name-paired
89
- `roadmaps/{slug}.savepoint.md`, the derived counterpart to the human `## Log`; see
90
- `references/file-format.md` for its shape and location.
@@ -1,134 +0,0 @@
1
- # Roadmap File Format
2
-
3
- ## Location
4
-
5
- `roadmaps/{slug}.md`, a sibling of `INDEX.md`, wherever `INDEX.md` lives. For the global tier
6
- that is `~/.plastic/roadmaps/{slug}.md` (beside `~/.plastic/INDEX.md`); for any project it is
7
- that project's root, `~/.plastic/projects/{slug}/roadmaps/{slug}.md` (beside that project's
8
- `INDEX.md` and `project.yml`). `roadmaps/` never sits inside `store/`: `store/` holds intent
9
- directories, not project artifacts. Create the `roadmaps/` directory the first time a tier gets a
10
- roadmap.
11
-
12
- `roadmaps/` lists only live (open or in-flight) roadmaps. Once a roadmap's `## Goal` is reached,
13
- its file moves to `roadmaps/archived/{slug}.md` (see Close/archive in `operations.md`); the
14
- `archived/` subdirectory is scaffolded once, alongside `roadmaps/`, with a `.gitkeep`. Its
15
- name-paired ledger, `roadmaps/{slug}.savepoint.md` (see Savepoint ledger below), moves alongside
16
- it in the same Close/archive step.
17
-
18
- ## The four sections (in order)
19
-
20
- 1. **Title/meta header** — `# Roadmap: <name>` plus a one-line meta sentence naming what the
21
- roadmap delivers and which tier (project or global) it lives in.
22
- 2. **`## Goal`** — a checkable prose condition: one or a few sentences a human or coordinator reads
23
- to decide the roadmap is done. Not an executable checker, not a list of tasks.
24
- 3. **`## Batches`** — ordered batches (`### Batch 1`, `### Batch 2`, ...). Entries inside a batch
25
- are parallel-safe (can be dispatched together); batches run top to bottom, sequentially (batch 2
26
- does not start until batch 1's entries are no longer `queued`/`delivering`). A roadmap written
27
- before owner ruling 145 may instead use `## Waves` / `### Wave N`; both headings are accepted
28
- when reading, but every new roadmap is scaffolded with `## Batches`, and an existing roadmap
29
- file's heading is never renamed to migrate it.
30
- 4. **`## Log`** — append-only, dated, one line per event. Newest entry at the bottom. Never edit or
31
- remove an existing log line.
32
-
33
- ## Entry line shape
34
-
35
- One line per intent, inside its batch (or wave, on a roadmap still using the legacy heading), as a
36
- Markdown checkbox:
37
-
38
- ```
39
- - [x] <intent-id> <title> — delivered
40
- - [ ] <intent-id> <title> — <status>
41
- ```
42
-
43
- `<intent-id>` and `<title>` match the intent's `INDEX.md` entry (terse, not a summary). The
44
- checkbox is checked (`[x]`) once `<status>` is `delivered`, unchecked (`[ ]`) for every other
45
- status. The checkbox is a rendering of the mirrored status token, not a second piece of state: a
46
- human scanning the file sees at a glance what shipped (checked) and what has not (unchecked),
47
- while the trailing token still carries the precise state (`queued`/`delivering`/`blocked`/
48
- `abandoned`) when unchecked.
49
-
50
- ## Status vocabulary
51
-
52
- `queued` | `delivering` | `delivered` | `abandoned` | `blocked`
53
-
54
- Status is a **mirror** of `INDEX.md`. `INDEX.md` is the single writer of intent status; on any
55
- conflict INDEX wins and the roadmap entry (both its token and its checkbox) is corrected to match
56
- it. The roadmap never sets a status that INDEX does not already reflect.
57
-
58
- ## Log line shape
59
-
60
- One line per event, starting `YYYY-MM-DD HH:MM UTC` (human-readable, sortable, zone-explicit so
61
- same-day parallel deliveries can still be ordered), in plain-language EM-to-CTO voice: what shipped
62
- and why it matters to a non-expert reader, no jargon or internal codenames, ending with a link to
63
- that entry-intent's `outcome.md`:
64
-
65
- ```
66
- - <YYYY-MM-DD HH:MM UTC> <one plain-language sentence: what shipped, its impact> — see store/<id>--<slug>/outcome.md
67
- ```
68
-
69
- The log line never restates `outcome.md` detail; it points at it (lossless-by-reference). This
70
- complements, and does not replace, `INDEX.md`'s `## Completed` section or `CHANGELOG.md`.
71
-
72
- ## Savepoint ledger
73
-
74
- `roadmaps/{slug}.savepoint.md` is the name-paired sibling of `roadmaps/{slug}.md`: the machine
75
- counterpart to the human `## Log`, moving to `roadmaps/archived/{slug}.savepoint.md` alongside its
76
- roadmap on close (see Close/archive). It is created lazily by the first `append` call; there is no
77
- template to scaffold.
78
-
79
- Line shape, one event per line, append-only, newest at the bottom:
80
-
81
- ```
82
- <UTC-iso8601> <event> <detail>
83
- ```
84
-
85
- Two-space fields, mirroring the intent-dir cycle-step ledger (`savepoint.md`). The controlled event
86
- vocabulary: `created`, `dispatched`, `parked`, `merged`, `release`, `handoff`, `closed`, and
87
- optionally `added`, `reordered`, `wave`, `batch`. The `(event, detail)` pair is the idempotency key,
88
- so re-appending the same pair is a no-op.
89
-
90
- `## Log` and the ledger record the same events in two voices: the Log is the dated, one-sentence,
91
- EM-to-CTO-plain-language record a human reads cold; the ledger is the terse, machine-timestamped,
92
- controlled-vocabulary record a coordinator reads at a glance. Both are append-only; neither edits
93
- the other.
94
-
95
- The ledger is derived and rebuildable (`ruby ~/.plastic/scripts/roadmap-savepoint rebuild --roadmap
96
- roadmaps/{slug}.md`, reconstructing it from `## Log`), never a status source: `INDEX.md` stays the
97
- single writer of intent status, exactly as for the roadmap file itself.
98
-
99
- ## Screens read this format (intent 331c)
100
-
101
- `report-screen roadmap <roadmap.md> plan|state|delivered` reads exactly the shapes above and
102
- nothing else: `## Goal`'s first sentence, the `## Batches` (or legacy `## Waves`) grouping and its
103
- entries (through `RoadmapQueue`'s own reconciled reader - INDEX still wins), and the events from
104
- the savepoint ledger, falling back to `## Log` classified through the same keyword vocabulary when
105
- no ledger file exists (an archived roadmap moved before intent 134 shipped, `manual-first.md`
106
- among them). A screen never invents a status, a time, or a merge sha the file, `INDEX.md`, or the
107
- ledger did not already carry - the same `not recorded` floor the intent screens use.
108
-
109
- ## Worked example
110
-
111
- ```
112
- # Roadmap: Stable 1.0
113
-
114
- Delivery-side collection of intents that close out the pre-1.0 hardening pass, plastic project store.
115
-
116
- ## Goal
117
- All intents below are delivered, the suite is green, and a 1.0.0 release is cut.
118
-
119
- ## Batches
120
- Entries in a batch are parallel-safe; batches run top to bottom. The checkbox tracks delivered/not;
121
- the token after the em-dash carries the precise mirrored status (queued | delivering | delivered |
122
- abandoned | blocked); INDEX wins on any conflict.
123
-
124
- ### Batch 1
125
- - [x] 121 Fix bash gate redirect parsing — delivered
126
- - [ ] 130 Proportional cycle tiers — delivering
127
-
128
- ### Batch 2
129
- - [x] 124 Roadmap feature — delivered
130
-
131
- ## Log
132
- - 2026-07-06 14:32 UTC Shipped the bash-gate redirect fix so quoted arrows and heredoc trailers
133
- stop blocking legitimate commits — see store/121--fix-bash-gate-redirect-parsing/outcome.md.
134
- ```
@@ -1,112 +0,0 @@
1
- # Roadmap Operations
2
-
3
- All six verbs operate on the Markdown file directly (Read/Edit). No helper script exists or is
4
- needed; the file is small and the edits are mechanical.
5
-
6
- **Human-comprehension goal.** Every operation below should leave the file such that a cold reader
7
- (no INDEX.md, no intent directories open) can answer "what's shipped, what's running, what's
8
- next" in under a minute, just from this one file.
9
-
10
- ## Create
11
-
12
- 1. Pick a `slug` (kebab-case, descriptive) and a `title`.
13
- 2. Resolve the tier root: the directory that holds `INDEX.md` (a project's root, beside
14
- `project.yml`, or `~/.plastic/` for the global tier). `roadmaps/` is always a sibling of
15
- `INDEX.md`, never inside `store/`. Create `roadmaps/` there if it does not exist yet.
16
- 3. Copy `templates/roadmap.md` to `roadmaps/{slug}.md`.
17
- 4. Fill the header (`# Roadmap: <title>` + the one-line meta) and write a real `## Goal` prose
18
- condition.
19
- 5. Add at least one `## Batches` batch with real entries (see Add / reorder below), each entry's
20
- status mirroring that intent's current `INDEX.md` status.
21
- 6. Append the first `## Log` line, a short `YYYY-MM-DD HH:MM UTC`-prefixed plain-language note
22
- that the roadmap was created.
23
- 7. Append the ledger event (derived, idempotent, safe to re-run; never writes INDEX or roadmap
24
- status; creates `roadmaps/<slug>.savepoint.md` lazily): `ruby ~/.plastic/scripts/roadmap-savepoint
25
- append --roadmap roadmaps/<slug>.md --event created --detail "<slug>: <title>"`.
26
- 8. Refresh the QMD index for this roadmap (no-op when QMD is absent), in the background so it
27
- never blocks: `ruby ~/.plastic/scripts/qmd-sync reindex --store <roadmaps-dir> --async`.
28
-
29
- ## Add / reorder entries
30
-
31
- - **Add**: append an entry line (`- <intent-id> <title> — <status>`) to the target batch. Pick the
32
- intent's title and status straight from `INDEX.md`.
33
- - **New batch**: add a new `### Batch N` heading after the last batch; entries in it are gated
34
- behind every earlier batch's entries leaving `queued`/`delivering`. A roadmap still on the legacy
35
- `## Waves` heading keeps using `### Wave N` for a new entry; never migrate an existing roadmap's
36
- heading to add one.
37
- - **Reorder**: move an entry line to a different batch, or move a `### Batch` (or, on a legacy
38
- roadmap, `### Wave`) heading (with its entries) earlier or later. Reordering never changes an
39
- entry's status; it only changes when the entry is eligible to run.
40
- - After any add/reorder, append a `## Log` line describing the change (e.g.
41
- `- <YYYY-MM-DD HH:MM UTC> added 132 to batch 2`).
42
- - Append the ledger event (derived, idempotent, safe to re-run; never writes INDEX or roadmap
43
- status): `ruby ~/.plastic/scripts/roadmap-savepoint append --roadmap roadmaps/<slug>.md --event
44
- added --detail "<id> to batch N"` for an add, or `--event reordered` for a reorder (describe the
45
- move in `<detail>`).
46
- - Refresh the QMD index for this roadmap (no-op when QMD is absent), in the background so it
47
- never blocks: `ruby ~/.plastic/scripts/qmd-sync reindex --store <roadmaps-dir> --async`.
48
-
49
- ## Sync status mirror
50
-
51
- 1. Read the intent's real status from `INDEX.md` (`## Active`, `## Future`, `## Completed`, or
52
- `## Abandoned`).
53
- 2. Compare to the roadmap entry's `<status>` token.
54
- 3. If they differ, **INDEX wins**: rewrite the roadmap entry's status token to match INDEX, and
55
- flip its checkbox in the same edit (`[x]` when the new status is `delivered`, `[ ]` otherwise).
56
- Never edit INDEX.md from the roadmap skill; the roadmap is a mirror, not a second writer.
57
- 4. Append a `## Log` line recording the change. When the new status is `delivered`, write the
58
- one-line EM-to-CTO entry described in `file-format.md` (date, what shipped and its impact in
59
- plain language, then a link to that intent's `outcome.md`). For other transitions, write a
60
- short dated plain-language line (no codenames, no jargon).
61
- 5. Append the ledger event, only when the status token actually changed (derived, idempotent,
62
- never writes INDEX or roadmap status): map the new status to its mechanized event (`delivered`
63
- -> `merged`, `delivering` -> `dispatched`, `blocked`/`abandoned` -> `parked`), then `ruby
64
- ~/.plastic/scripts/roadmap-savepoint append --roadmap roadmaps/<slug>.md --event <event>
65
- --detail "<intent-id>"` (add a sha in `<detail>` when one is known).
66
- 6. Refresh the QMD index for this roadmap (no-op when QMD is absent), in the background so it
67
- never blocks: `ruby ~/.plastic/scripts/qmd-sync reindex --store <roadmaps-dir> --async`.
68
-
69
- ## Append a log line
70
-
71
- - One line per event, starting `YYYY-MM-DD HH:MM UTC`, appended at the bottom of `## Log`. Never
72
- edit or delete an existing line (append-only).
73
- - Every line is plain language a non-expert can read, never a codename or a raw `field -> value`.
74
- A delivery event follows the EM-to-CTO one-line shape with an `outcome.md` link (see
75
- `file-format.md`); bookkeeping events (created, an intent added to a batch, a batch completed, a
76
- roadmap closed) are short dated plain-language lines.
77
- - Append the matching ledger event (derived, idempotent, never writes INDEX or roadmap status):
78
- when the line records a release cut, `ruby ~/.plastic/scripts/roadmap-savepoint append --roadmap
79
- roadmaps/<slug>.md --event release --detail "<version>"`; otherwise append the mechanized event
80
- matching the bookkeeping line just written (see the per-verb event mapping on this page).
81
- - Refresh the QMD index for this roadmap (no-op when QMD is absent), in the background so it
82
- never blocks: `ruby ~/.plastic/scripts/qmd-sync reindex --store <roadmaps-dir> --async`.
83
-
84
- ## Read / consume
85
-
86
- - A human reading the file gets the current picture directly: `## Goal` for the target, `## Batches`
87
- (or, on a roadmap still using the legacy `## Waves` heading, that section instead) for what is
88
- queued/delivering/delivered per batch (checkboxes give the shipped/not-shipped view at a glance),
89
- `## Log` for a one-line, plain-language history with a link into each intent's `outcome.md` for
90
- detail.
91
- - A future coordinator (for example, an auto-mode dispatcher) reads the grouping section
92
- (`## Batches`, or legacy `## Waves`) top to bottom: a batch is eligible to dispatch once every
93
- entry in the previous batch is no longer `queued`/`delivering`; within an eligible batch, entries
94
- still `queued` are parallel-dispatchable. Always re-sync against `INDEX.md` before dispatch
95
- decisions, since INDEX is the source of truth.
96
-
97
- ## Close / archive
98
-
99
- 1. Confirm the roadmap's `## Goal` prose condition is met (every entry `delivered` or explicitly
100
- `abandoned` with a recorded reason, plus whatever else the goal states).
101
- 2. Create `roadmaps/archived/` beside `roadmaps/` (both siblings of `INDEX.md`) if it does not
102
- exist yet.
103
- 3. Append the ledger closed event, while the roadmap is still at its live path (derived,
104
- idempotent, never writes INDEX or roadmap status): `ruby ~/.plastic/scripts/roadmap-savepoint
105
- append --roadmap roadmaps/<slug>.md --event closed --detail "<slug>"`.
106
- 4. Move BOTH files: `roadmaps/{slug}.md` -> `roadmaps/archived/{slug}.md` AND
107
- `roadmaps/{slug}.savepoint.md` -> `roadmaps/archived/{slug}.savepoint.md`. `roadmaps/` itself
108
- then lists only live (open or in-flight) roadmaps.
109
- 5. Append the final `## Log` line before or as part of the move:
110
- `- <YYYY-MM-DD HH:MM UTC> roadmap closed`.
111
- 6. Refresh the QMD index for this roadmap (no-op when QMD is absent), in the background so it
112
- never blocks: `ruby ~/.plastic/scripts/qmd-sync reindex --store <roadmaps-dir> --async`.
@@ -1,91 +0,0 @@
1
- ---
2
- name: plastic-rollback
3
- description: Use when the user wants to see their Plastic version history or roll back to a previously-installed version after a bad release. Manages the local, append-only versions.json ledger and steps between versions the user has actually run. For moving to a brand-new release, use plastic-update instead.
4
- user-invocable: true
5
- ---
6
-
7
- # Plastic Rollback: local version time-machine
8
-
9
- ## When to Use
10
- - "show plastic versions", "version history", "what versions have I run"
11
- - "roll back plastic", "downgrade", "go back to the version that worked", "revert plastic"
12
- - A new version broke something and the user wants their last known-good build
13
-
14
- For upgrading to a **new** release, use `plastic-update`. This skill only navigates
15
- versions you have **already installed**, the ones recorded in the ledger.
16
-
17
- ## Read-only by default
18
-
19
- A flagless run only prints the version history table. It never switches, never prompts,
20
- and never offers to keep going further back. Switching a version always needs an
21
- explicit target, named with `--version`.
22
-
23
- ## Channel rule
24
-
25
- `rollback` restores whichever build you name from the ledger, it does not take a channel
26
- flag for the target. The pinned `<channel>` below is only the npx invocation itself:
27
- derive it from `~/.plastic/VERSION` the same way as the other lifecycle skills,
28
- `-alpha` to `@alpha`, `-beta` to `@beta`, otherwise `@latest`.
29
-
30
- ## The ledger
31
-
32
- `~/.plastic/versions.json` is an **append-only JSONL** ledger, one line per version
33
- change, never modified or deleted:
34
-
35
- ```json
36
- {"version":"1.0.0-alpha.17","action":"install","at":"..."}
37
- {"version":"1.0.0-alpha.18","action":"update","at":"..."}
38
- ```
39
-
40
- `action` is one of `install`, `reinstall`, `update`, `downgrade` (derived from version
41
- direction; the channel is derived from the version string, never stored). It is a
42
- troubleshooting record.
43
-
44
- ## Procedure
45
-
46
- ### Show history (read-only, no switch)
47
-
48
- ```bash
49
- npx -y @zalom/plastic@<channel> rollback
50
- ```
51
-
52
- Prints the table with the currently-installed version marked. Never switches, never
53
- prompts, no matter what the last recorded action was.
54
-
55
- ### Switch to a specific version
56
-
57
- ```bash
58
- npx -y @zalom/plastic@<channel> rollback --version 1.0.0-alpha.15
59
- ```
60
-
61
- The only way to actually switch. The target must be a version you have actually run (the
62
- ledger); the direction (upgrade or downgrade) is derived automatically by comparing the
63
- target to the installed version.
64
-
65
- `--downgrade --version V` and `--upgrade --version V` are accepted as explicit-target
66
- synonyms of `--version V`, the direction flag is descriptive only:
67
-
68
- ```bash
69
- npx -y @zalom/plastic@<channel> rollback --downgrade --version 1.0.0-alpha.15
70
- npx -y @zalom/plastic@<channel> rollback --upgrade --version 1.0.0-alpha.18
71
- ```
72
-
73
- A bare `--downgrade` or `--upgrade` with no `--version` is an error: it prints a message
74
- asking for an explicit target and performs no switch.
75
-
76
- ### After any change
77
-
78
- Run `plastic-doctor` to confirm health, then emit the reporting block and suggest
79
- `/clear` so the session picks up the swapped conventions:
80
-
81
- ```
82
- Plastic rollback (<channel>)
83
- Command: npx -y @zalom/plastic@<channel> rollback <flags>
84
- Version: <before> -> <after>
85
- Doctor: <summary or "all clear">
86
- ```
87
-
88
- ## Notes
89
- - The ledger is **never** edited or pruned, it is the audit trail.
90
- - Switching cannot un-migrate a store-format change; if a warning appears, surface it to
91
- the user rather than forcing the switch.
@@ -1,66 +0,0 @@
1
- ---
2
- name: plastic-tutorial
3
- description: >-
4
- Teach a new user how Plastic works through one of three hands-on tracks: deliver a first
5
- intent stage by stage, hand delivery to the agent in auto mode, or grow a founding intent
6
- into a small project with a roadmap. Use when the user says "tutorial", "teach me Plastic",
7
- "walk me through Plastic", "how do I use Plastic", or asks what Plastic can actually do
8
- before trying it on real work.
9
- user-invocable: true
10
- ---
11
-
12
- # Plastic Tutorial
13
-
14
- An interactive coach, not an automator. It walks one of three tracks, one step at a time, and
15
- keeps no state of its own: the intent being used for the walkthrough is the progress bar.
16
-
17
- ## The three tracks
18
-
19
- This is the one menu in the whole skill. Offer it, then route into the picked track's
20
- reference. Every checkpoint inside a track is prose, never another menu.
21
-
22
- 1. **Guided**: deliver a first intent, stage by stage, approving each step yourself. Routes to
23
- `references/track-1-guided.md`.
24
- 2. **Auto**: create the intent, write its `graph.md`, then hand it to `scripts/runner step` to
25
- drive every node to the end, watching the record and reports as it works. Routes to
26
- `references/track-2-auto.md`.
27
- 3. **Projects and roadmaps**: grow a founding intent into a small real project, add more
28
- intents, and plan a delivery batch with a roadmap. Routes to
29
- `references/track-3-projects-and-roadmaps.md`.
30
-
31
- If the user names what they want instead of picking a number ("show me auto mode", "I want a
32
- roadmap", "walk me through my first intent"), route straight to the matching track without
33
- showing the menu again.
34
-
35
- ## The coach contract
36
-
37
- Narrate one step at a time: say what the next station does, then hand control back so the
38
- user types the real command themselves. After they run it, look at what appeared (a file, a
39
- ledger line, a report) and debrief in plain words before moving to the next station. Never
40
- run a station's command on the user's behalf; the tutorial teaches the shape of the work, it
41
- does not do the work.
42
-
43
- Keep no new state. The intent's own lifecycle stage and savepoint are the only progress
44
- record. This skill never writes a "tutorial progress" file of its own.
45
-
46
- ## The resume rule
47
-
48
- To pause, the user says "continue the tutorial." Read the walkthrough intent's current stage
49
- and savepoint (for track 3, check which project-scaffolding steps are already on disk) and
50
- resume at the matching station. Do not restart from station one, and do not ask the user to
51
- remember where they left off.
52
-
53
- ## Routing table
54
-
55
- | Trigger | Reference |
56
- |---|---|
57
- | User picks "guided", or names their first intent, a first delivery, or learning the stages one at a time | `references/track-1-guided.md` |
58
- | User picks "auto", or says "hand it to the agent", "run the whole thing", "show me auto mode" | `references/track-2-auto.md` |
59
- | User picks "projects and roadmaps", or says "start a project", "I want a roadmap", "plan a batch of work" | `references/track-3-projects-and-roadmaps.md` |
60
-
61
- ## Before any track
62
-
63
- Every track opens with the same two checks: run `/plastic-update` first (`$plastic-update` on
64
- Codex), so the walkthrough matches what is actually installed, and work in a sandbox (a
65
- throwaway repo, or a global-store intent) so nothing real is touched by mistake. Each reference
66
- restates this briefly; do not skip it even if the user seems experienced.