@zalom/plastic 1.0.0-beta.34 → 1.0.0-beta.36

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 (38) hide show
  1. package/PLASTIC-reference.md +133 -0
  2. package/PLASTIC.md +29 -151
  3. package/agents/plastic-brainstorming.md +2 -6
  4. package/agents/plastic-enforcer.md +11 -6
  5. package/agents/plastic-executor.md +2 -6
  6. package/agents/plastic-future-intent-researcher.md +2 -7
  7. package/agents/plastic-intent-curator.md +2 -10
  8. package/agents/plastic-intent-discovery.md +8 -10
  9. package/agents/plastic-planner.md +2 -6
  10. package/agents/plastic-spec-specialist.md +2 -6
  11. package/bin/plastic.js +7 -3
  12. package/package.json +2 -1
  13. package/scripts/install.rb +42 -6
  14. package/scripts/lib/bridge.rb +84 -5
  15. package/scripts/lib/installer_core.rb +40 -6
  16. package/scripts/lib/power_tools.rb +18 -16
  17. package/scripts/lib/preflight.rb +79 -0
  18. package/skills/auto/SKILL.md +40 -38
  19. package/skills/auto/references/end-tail.md +56 -0
  20. package/skills/auto/references/human-report-contract.md +55 -0
  21. package/skills/brainstorming/SKILL.md +7 -34
  22. package/skills/brainstorming/references/design-principles.md +49 -0
  23. package/skills/creating-intent/SKILL.md +5 -26
  24. package/skills/creating-project/SKILL.md +11 -74
  25. package/skills/creating-project/references/project-scaffolding.md +97 -0
  26. package/skills/dashboard/SKILL.md +2 -17
  27. package/skills/dashboard/references/classification.md +22 -0
  28. package/skills/doctor/SKILL.md +6 -6
  29. package/skills/install/SKILL.md +75 -84
  30. package/skills/intent-discovery/SKILL.md +8 -7
  31. package/skills/intent-starting/SKILL.md +11 -8
  32. package/skills/releasing/SKILL.md +14 -46
  33. package/skills/releasing/references/promotion-and-tagging.md +60 -0
  34. package/skills/uninstall/SKILL.md +29 -11
  35. package/skills/update/SKILL.md +34 -23
  36. package/skills/versions/SKILL.md +27 -12
  37. package/skills/writing-plans/SKILL.md +10 -88
  38. package/skills/writing-plans/references/plan-format.md +102 -0
@@ -0,0 +1,133 @@
1
+ # Plastic - Reference
2
+
3
+ > **This file is maintained by Plastic.** It will be overwritten when the
4
+ > plugin is updated. It holds reference material: read it on demand, it is
5
+ > not injected at session start.
6
+
7
+ ### Structural maintenance and revisions.md
8
+
9
+ When a delivered intent accumulates structural junk (an unsanctioned section, a stray file, a
10
+ frontmatter edge to an intent that no longer exists), the intent-curator relocates it into
11
+ `revisions.md` instead of reopening the work. Each entry is a versioned, dated header
12
+ (`## Revision vN - YYYY-MM-DD-HH:MM`) plus `Why` (one sentence naming the broken rule, ending
13
+ with `[rule: <tag>]`), `Prior location`, and either `Content held` (the verbatim removed
14
+ content) or, for a frontmatter edit, a one-line `Change` (before and after). A stray file has
15
+ its full content embedded and the original is deleted.
16
+
17
+ Violation tags (starter set, free-text tags allowed):
18
+ - `unsanctioned-section`: a top-level section the sanctioned-section rule now rejects
19
+ - `phantom-section`: a section referenced but not present or not sanctioned
20
+ - `stray-file`: a file that does not belong in the intent directory
21
+ - `dangling-ref`: a link or reference to something that no longer exists
22
+ - `broken-chain`: a chain frontmatter edge to an intent that no longer exists
23
+ - `broken-source`: a sources frontmatter edge to an intent that no longer exists
24
+ - `misplaced-content`: content that belongs in a different artifact or section
25
+
26
+ ## Two Processes
27
+
28
+ | Process | Scope | Type | Actor |
29
+ |---|---|---|---|
30
+ | **Build → Observe → Repeat** | The system | Continuous loop | Coordinator |
31
+ | **What → Why → How → Exec** | One intent | Finite lifecycle | Agent |
32
+
33
+ B→O→R is the Coordinator's heartbeat. W→W→H→E is what happens inside each intent.
34
+ The connection: an intent's `## Insights` feeds the Coordinator's Observe phase.
35
+
36
+ ## Defaults-First
37
+
38
+ Plastic stands on its own. Skills and agents use Plastic's own defaults; an
39
+ external skill (for example `superpowers:*`) is opt-in, never load-bearing.
40
+
41
+ - **Default to Plastic, delegate by exception.** Name the Plastic-native path as
42
+ the default. Delegate to an external skill only when (a) it is available in the
43
+ harness, or (b) the user explicitly asks for it. A user without that plugin must
44
+ still get the core behavior.
45
+ - **Phrase external skills as enhancements.** Write "use Plastic's native X by
46
+ default; if `superpowers:<skill>` is available, or the user prefers it, delegate
47
+ to it" never "delegate to `superpowers:<skill>`" as the only path.
48
+ - **Optional dependencies detect then degrade.** `qmd` is the reference shape:
49
+ `scripts/lib/qmd_sync.rb` detects the binary first and every verb no-ops cleanly
50
+ when it is absent (see `scripts/qmd-sync`). Optional CLIs and MCP servers follow
51
+ the same detect-then-skip pattern, so a missing tool never crashes a session.
52
+ - **Legitimate hard dependencies are exempt.** Ruby, Node, git, and POSIX tools are
53
+ the cost of running Plastic, not silent coupling. The principle targets accidental
54
+ dependence on external skills doing work Plastic should do itself.
55
+
56
+ ## Roadmaps
57
+
58
+ Roadmaps exist for planned parallel delivery of intents in a coherent and organized way. A roadmap
59
+ is a named, ordered, delivery-side collection of intents: the delivery-side counterpart to a
60
+ release (completion-side, tracked in `CHANGELOG.md`). Use `plastic-roadmap` to create, order,
61
+ close, and consume one.
62
+
63
+ File location: `roadmaps/{slug}.md`, a sibling of `INDEX.md`, wherever `INDEX.md` lives, never
64
+ inside `store/` (store holds intent directories, not project artifacts). For a project that is its
65
+ root, `~/.plastic/projects/{slug}/roadmaps/`, beside `project.yml`; for the global tier it is
66
+ `~/.plastic/roadmaps/`, beside `~/.plastic/INDEX.md`. `roadmaps/` lists only live (open or
67
+ in-flight) roadmaps: once a roadmap's goal is reached, it moves to `roadmaps/archived/{slug}.md`,
68
+ a sibling subdirectory scaffolded once with a `.gitkeep`.
69
+
70
+ A roadmap file has four sections, in order: a title/meta header, `## Goal`, `## Waves`, and an
71
+ append-only dated `## Log`. `## Goal` is a checkable prose condition read by a human or agent, not
72
+ an executable checker. `## Waves` holds ordered waves; entries inside a wave are parallel-safe,
73
+ waves run sequentially, top to bottom.
74
+
75
+ Each wave entry carries a status token (`queued`/`delivering`/`delivered`/`abandoned`/`blocked`)
76
+ that mirrors that intent's status in `INDEX.md`. `INDEX.md` is the single writer of intent status;
77
+ on any conflict INDEX wins and the roadmap entry is corrected to match.
78
+
79
+ **Human-comprehension surface.** A roadmap is also written to be read cold. Wave entries render as
80
+ checkboxes (checked once delivered, unchecked otherwise) next to the status token, and each `## Log`
81
+ line is one plain-language sentence, starting `YYYY-MM-DD HH:MM UTC`, written the way an
82
+ engineering manager would brief a non-expert executive: what shipped and why it matters, no jargon
83
+ or codenames, ending with a link
84
+ to that intent's `outcome.md`. The log points at the detail instead of repeating it, so a person
85
+ opening the file with no other context can tell what shipped, what is running now, and what is
86
+ next in under a minute.
87
+
88
+ **Relationship to loop engineering (intent 69).** A roadmap is the planning half of the work; the
89
+ loop is its runtime. Waves lay out the parallelism plan: what can run together, and in what order.
90
+ Loop engineering (intent 69, not yet delivered) is expected to consume that plan and supply the
91
+ running parts, the heartbeat, how many dispatches run at once, checking the goal, and resuming
92
+ after a stop. This section only states the relationship and points to intent 69 as the future
93
+ consumer; it does not change intent 69's own design.
94
+
95
+ ## Context-economy measurement buckets (84a)
96
+
97
+ Intent 84 defines three buckets for sibling 84a to audit against; 84 does not run the audit.
98
+
99
+ - (a) gate-hook prose tokens: the per-transition narration emitted by the gate hook.
100
+ - (b) main-loop store-read tokens: tokens the main agent spends reading or grepping the store
101
+ in the transcript.
102
+ - (c) authored-section sizes: sizes of authored artifacts (INDEX entries and the like).
103
+
104
+ ## Deprecation Process
105
+
106
+ Deprecations live in `deprecations.yml` and are shown at SessionStart. While Plastic is
107
+ pre-1.0, a satisfied deprecation (its migration is already done on installed machines) may be
108
+ removed immediately instead of waiting for its declared `removal` version. From `1.0.0` on,
109
+ the steady-state grace rule applies (removal at least two minors ahead). For the full process,
110
+ severity levels, and the pre-1.0 exception, see the `plastic-releasing` skill.
111
+
112
+ ## Skills Reference
113
+
114
+ Detailed conventions live inside the skills that use them, not in this file.
115
+
116
+ | Topic | Skill | References in skill |
117
+ |-------|-------|-------------------|
118
+ | Creating intents, lifecycle | `plastic-creating-intent` | lifecycle, wikilinks |
119
+ | Brainstorming, spec writing | `plastic-brainstorming` | — |
120
+ | Planning, actions | `plastic-writing-plans` | — |
121
+ | Execution, delivery | `plastic-executing-plan` | — |
122
+ | Autonomous delivery | `plastic-auto` | agent architecture |
123
+ | Save/restore state | `plastic-savepoint`, `plastic-continuing` | context management |
124
+ | Knowledge graph, linking | `plastic-linking-intents` | zettelkasten, wikilinks |
125
+ | Projects, hubs | `plastic-creating-project` | hubs, project stores |
126
+ | Provision a project store | `plastic-add-project-store` | project stores |
127
+ | Index maintenance | `plastic-managing-index` | — |
128
+ | Releases, deprecations | `plastic-releasing` | deprecation process |
129
+ | Health diagnostics | `plastic-doctor` | three scopes: `--core` (binary install-integrity check, runs on SessionStart), `--store [global\|<slug>]` (per-store check, runs on dashboard load), no flag = full check (runs after every update); gate enforcement, stuck detection |
130
+ | Authoring skills, agents, hooks | `plastic-creating-skills` | progressive disclosure, agentskills.io spec |
131
+ | Evaluating skills, evals | `plastic-evaluating-skills` | eval methodology, convention checks |
132
+ | Create, order, and consume a roadmap of intents | `plastic-roadmap` | file format, operations |
133
+
package/PLASTIC.md CHANGED
@@ -1,31 +1,33 @@
1
- # Plastic Conventions
1
+ # Plastic: Conventions
2
2
 
3
3
  > **This file is maintained by Plastic.** It will be overwritten when the
4
- > plugin is updated. Do not modify your changes will be lost.
4
+ > plugin is updated. Do not modify it: your changes will be lost.
5
5
  > For project-specific rules, use `AGENTS.md` instead.
6
6
 
7
+ See `PLASTIC-reference.md` for reference material: read it on demand, it is not injected at session start.
8
+
7
9
  ## What is an Intent
8
10
 
9
11
  A directory in the store containing `{ID}--{slug}.md` and optional supporting files.
10
- It represents a desire something a human or agent wants to accomplish, explore, or understand.
12
+ It represents a desire: something a human or agent wants to accomplish, explore, or understand.
11
13
 
12
14
  ```
13
15
  store/
14
16
  ID--three-to-five-words/
15
- {ID}--{slug}.md # required the intent itself
16
- spec.md # optional specification (Why deliverable)
17
- plan.md # optional implementation plan (How deliverable)
18
- checklist.md # optional execution registry (How deliverable)
19
- outcome.md # optional detailed result (Exec deliverable)
20
- actions/ # optional individual work items
21
- resources/ # optional research, references, screenshots, diagrams
22
- savepoint.md # optional deterministic cycle-step ledger (auto-written)
17
+ {ID}--{slug}.md # required - the intent itself
18
+ spec.md # optional - specification (Why deliverable)
19
+ plan.md # optional - implementation plan (How deliverable)
20
+ checklist.md # optional - execution registry (How deliverable)
21
+ outcome.md # optional - detailed result (Exec deliverable)
22
+ actions/ # optional - individual work items
23
+ resources/ # optional - research, references, screenshots, diagrams
24
+ savepoint.md # optional - deterministic cycle-step ledger (auto-written)
23
25
  revisions.md # optional - append-only structural-maintenance audit trail
24
26
  ```
25
27
 
26
28
  Lifecycle files (`spec.md`, `plan.md`, `checklist.md`, `outcome.md`) have defined
27
- roles. Supporting artifacts that aren't lifecycle deliverables research reports,
28
- reference docs, external API snapshots, screenshots, diagrams go in `resources/`.
29
+ roles. Supporting artifacts that aren't lifecycle deliverables (research reports,
30
+ reference docs, external API snapshots, screenshots, diagrams) go in `resources/`.
29
31
  Name files inside as `{type}--{description}.md` (e.g., `deep-research--gsd-core.md`).
30
32
 
31
33
  `revisions.md` is an optional, append-only structural-maintenance audit trail. It is not a
@@ -36,25 +38,6 @@ inside `revisions.md` (newest entry at the bottom, one entry per relocated item)
36
38
  lost and the delivered meaning is never altered. Changing what an intent delivered is a new intent,
37
39
  not a revision.
38
40
 
39
- ### Structural maintenance and revisions.md
40
-
41
- When a delivered intent accumulates structural junk (an unsanctioned section, a stray file, a
42
- frontmatter edge to an intent that no longer exists), the intent-curator relocates it into
43
- `revisions.md` instead of reopening the work. Each entry is a versioned, dated header
44
- (`## Revision vN - YYYY-MM-DD-HH:MM`) plus `Why` (one sentence naming the broken rule, ending
45
- with `[rule: <tag>]`), `Prior location`, and either `Content held` (the verbatim removed
46
- content) or, for a frontmatter edit, a one-line `Change` (before and after). A stray file has
47
- its full content embedded and the original is deleted.
48
-
49
- Violation tags (starter set, free-text tags allowed):
50
- - `unsanctioned-section`: a top-level section the sanctioned-section rule now rejects
51
- - `phantom-section`: a section referenced but not present or not sanctioned
52
- - `stray-file`: a file that does not belong in the intent directory
53
- - `dangling-ref`: a link or reference to something that no longer exists
54
- - `broken-chain`: a chain frontmatter edge to an intent that no longer exists
55
- - `broken-source`: a sources frontmatter edge to an intent that no longer exists
56
- - `misplaced-content`: content that belongs in a different artifact or section
57
-
58
41
  ## Frontmatter
59
42
 
60
43
  Identity and knowledge graph only. Nothing operational.
@@ -106,16 +89,6 @@ tags: [plastic, architecture]
106
89
  - IDs use Luhmann's alternating convention: `1` → `1a` → `1a1` → `1a1a`
107
90
  - Multiple branches increment: `1a`, `1b`, `1c`
108
91
 
109
- ## Two Processes
110
-
111
- | Process | Scope | Type | Actor |
112
- |---|---|---|---|
113
- | **Build → Observe → Repeat** | The system | Continuous loop | Coordinator |
114
- | **What → Why → How → Exec** | One intent | Finite lifecycle | Agent |
115
-
116
- B→O→R is the Coordinator's heartbeat. W→W→H→E is what happens inside each intent.
117
- The connection: an intent's `## Insights` feeds the Coordinator's Observe phase.
118
-
119
92
  ## Lifecycle Stages
120
93
 
121
94
  | Stage | Section | Deliverable | Detail |
@@ -213,14 +186,16 @@ run the main session on the best available thinking model (Fable, Opus, or whate
213
186
  them). This is advisory only: it changes no behavior and blocks nothing if ignored, and it
214
187
  concerns the human's main session, never a dispatched subagent.
215
188
 
216
- **`plastic-intent-discovery`.** The What-stage agent. It fires at intent activation, before the
217
- delivery lock is armed and Why begins: it reads the intent's `chain`/`sources` frontmatter,
218
- runs QMD-first discovery over completed predecessor work and related parked or future intents,
219
- and deposits findings to `resources/discovery--<slug>.md` in the intent directory ONLY. It
220
- never writes the intent file, `spec.md`, or any other lifecycle deliverable; the Why-stage
221
- `plastic-brainstorming` agent reads its deposit and enriches `## Context`.
189
+ **`plastic-intent-discovery`.** The What-stage agent. It fires at intent activation, after the
190
+ delivery lock is armed and before Why begins, running under that lock as the owner session (it
191
+ does not acquire the lock itself and is not blocked by it): it reads the intent's
192
+ `chain`/`sources` frontmatter, runs QMD-first discovery over completed predecessor work and
193
+ related parked or future intents, and deposits findings to `resources/discovery--<slug>.md` in
194
+ the intent directory ONLY. It never writes the intent file, `spec.md`, or any other lifecycle
195
+ deliverable; the Why-stage `plastic-brainstorming` agent reads its deposit and enriches
196
+ `## Context`.
222
197
 
223
- `savepoint.md` a deterministic, append-only ledger of cycle-step milestones (one line per
198
+ `savepoint.md`: a deterministic, append-only ledger of cycle-step milestones (one line per
224
199
  lifecycle boundary, newest at the bottom), written automatically by the gate hook. It is
225
200
  sugar on top of the conventions, not a source of truth: state is always derivable from
226
201
  files-on-disk, and the ledger is rebuildable. It exists so a resuming agent reads the cycle's
@@ -232,7 +207,7 @@ succession at a glance (last line = where we are).
232
207
  `docs/specs/`, `researches/`, or similar. All meta-artifacts go in
233
208
  `~/.plastic/store/ID--slug/` or the project store equivalent.
234
209
  - **Code goes in the project. Everything else goes in the intent.**
235
- Plans, specs, checklists, savepoints all in the intent directory.
210
+ Plans, specs, checklists, savepoints: all in the intent directory.
236
211
  - **The global store is never pushed.** `~/.plastic/` is git-tracked locally
237
212
  but contains sensitive data. Never push to a remote.
238
213
  - **Agent-created repos are private by default.** Use `gh repo create --private`.
@@ -245,26 +220,6 @@ succession at a glance (last line = where we are).
245
220
  brainstorming, writing-plans, etc., Plastic's directory rules override
246
221
  their default output paths.
247
222
 
248
- ## Defaults-First
249
-
250
- Plastic stands on its own. Skills and agents use Plastic's own defaults; an
251
- external skill (for example `superpowers:*`) is opt-in, never load-bearing.
252
-
253
- - **Default to Plastic, delegate by exception.** Name the Plastic-native path as
254
- the default. Delegate to an external skill only when (a) it is available in the
255
- harness, or (b) the user explicitly asks for it. A user without that plugin must
256
- still get the core behavior.
257
- - **Phrase external skills as enhancements.** Write "use Plastic's native X by
258
- default; if `superpowers:<skill>` is available, or the user prefers it, delegate
259
- to it" never "delegate to `superpowers:<skill>`" as the only path.
260
- - **Optional dependencies detect then degrade.** `qmd` is the reference shape:
261
- `scripts/lib/qmd_sync.rb` detects the binary first and every verb no-ops cleanly
262
- when it is absent (see `scripts/qmd-sync`). Optional CLIs and MCP servers follow
263
- the same detect-then-skip pattern, so a missing tool never crashes a session.
264
- - **Legitimate hard dependencies are exempt.** Ruby, Node, git, and POSIX tools are
265
- the cost of running Plastic, not silent coupling. The principle targets accidental
266
- dependence on external skills doing work Plastic should do itself.
267
-
268
223
  ## State System
269
224
 
270
225
  ```
@@ -298,10 +253,10 @@ Format: `ID--three-to-five-words` (all stores).
298
253
  - Intent file matches directory: `1a1--slug/1a1--slug.md`
299
254
  - Next ID: `"${CLAUDE_PLUGIN_ROOT}/scripts/folgezettel-id" <parent_id> <store_path>`
300
255
 
301
- **Branch vs root the semantic decision.** The numbering is mechanics; choosing
256
+ **Branch vs root: the semantic decision.** The numbering is mechanics; choosing
302
257
  *whether* to branch is meaning:
303
258
 
304
- - **Branch (`14a`, `14b`)** a sub-task, refinement, or direct continuation of the
259
+ - **Branch (`14a`, `14b`):** a sub-task, refinement, or direct continuation of the
305
260
  parent. It cannot stand on its own; it only makes sense as part of the parent's work.
306
261
  - **Root (`15`, `16`)**: an independent thought, even if inspired by another intent.
307
262
  Reserve `sources` for true created-from provenance (intents this was built out of). An
@@ -322,45 +277,6 @@ One-line entry convention. Each index entry is ONE line: `- [<id> <terse title>]
322
277
  The title is the title, not a summary: aim for about 80 characters, no multi-sentence
323
278
  descriptions. This is a self-check, not a gate.
324
279
 
325
- ## Roadmaps
326
-
327
- Roadmaps exist for planned parallel delivery of intents in a coherent and organized way. A roadmap
328
- is a named, ordered, delivery-side collection of intents: the delivery-side counterpart to a
329
- release (completion-side, tracked in `CHANGELOG.md`). Use `plastic-roadmap` to create, order,
330
- close, and consume one.
331
-
332
- File location: `roadmaps/{slug}.md`, a sibling of `INDEX.md`, wherever `INDEX.md` lives, never
333
- inside `store/` (store holds intent directories, not project artifacts). For a project that is its
334
- root, `~/.plastic/projects/{slug}/roadmaps/`, beside `project.yml`; for the global tier it is
335
- `~/.plastic/roadmaps/`, beside `~/.plastic/INDEX.md`. `roadmaps/` lists only live (open or
336
- in-flight) roadmaps: once a roadmap's goal is reached, it moves to `roadmaps/archived/{slug}.md`,
337
- a sibling subdirectory scaffolded once with a `.gitkeep`.
338
-
339
- A roadmap file has four sections, in order: a title/meta header, `## Goal`, `## Waves`, and an
340
- append-only dated `## Log`. `## Goal` is a checkable prose condition read by a human or agent, not
341
- an executable checker. `## Waves` holds ordered waves; entries inside a wave are parallel-safe,
342
- waves run sequentially, top to bottom.
343
-
344
- Each wave entry carries a status token (`queued`/`delivering`/`delivered`/`abandoned`/`blocked`)
345
- that mirrors that intent's status in `INDEX.md`. `INDEX.md` is the single writer of intent status;
346
- on any conflict INDEX wins and the roadmap entry is corrected to match.
347
-
348
- **Human-comprehension surface.** A roadmap is also written to be read cold. Wave entries render as
349
- checkboxes (checked once delivered, unchecked otherwise) next to the status token, and each `## Log`
350
- line is one plain-language sentence, starting `YYYY-MM-DD HH:MM UTC`, written the way an
351
- engineering manager would brief a non-expert executive: what shipped and why it matters, no jargon
352
- or codenames, ending with a link
353
- to that intent's `outcome.md`. The log points at the detail instead of repeating it, so a person
354
- opening the file with no other context can tell what shipped, what is running now, and what is
355
- next in under a minute.
356
-
357
- **Relationship to loop engineering (intent 69).** A roadmap is the planning half of the work; the
358
- loop is its runtime. Waves lay out the parallelism plan: what can run together, and in what order.
359
- Loop engineering (intent 69, not yet delivered) is expected to consume that plan and supply the
360
- running parts, the heartbeat, how many dispatches run at once, checking the goal, and resuming
361
- after a stop. This section only states the relationship and points to intent 69 as the future
362
- consumer; it does not change intent 69's own design.
363
-
364
280
  ## Rules for Skills
365
281
 
366
282
  ALL work flows through intents.
@@ -402,25 +318,16 @@ one recommendation line per present tool. The legacy trailing `# qmd-ok` token i
402
318
  accepted on Bash commands and simply silences the hint. Scope stays the agent's own tool
403
319
  calls; Ruby `File.read` inside a script is invisible to the hook by design.
404
320
 
405
- ## Context-economy measurement buckets (84a)
406
-
407
- Intent 84 defines three buckets for sibling 84a to audit against; 84 does not run the audit.
408
-
409
- - (a) gate-hook prose tokens: the per-transition narration emitted by the gate hook.
410
- - (b) main-loop store-read tokens: tokens the main agent spends reading or grepping the store
411
- in the transcript.
412
- - (c) authored-section sizes: sizes of authored artifacts (INDEX entries and the like).
413
-
414
321
  ## Transition Gates
415
322
 
416
323
  | Transition | Trigger | Gate |
417
324
  |---|---|---|
418
- | What → Why | `spec.md` written | |
325
+ | What → Why | `spec.md` written | (none) |
419
326
  | Why → How | `plan.md` + `actions/` + `checklist.md` | `spec.md` must exist |
420
327
  | How → Exec | Checklist has items | Plan triplet must exist |
421
328
  | Exec → Done | `outcome.md` written | All checklist items checked |
422
329
 
423
- Hard blocking hooks exit code 2 on gate failure.
330
+ Hard blocking: hooks exit code 2 on gate failure.
424
331
 
425
332
  ## Delivery Isolation and the Single-Owner Lock
426
333
 
@@ -545,32 +452,3 @@ liveness surface, the lock-issue message, orchestrator auto-repair, and the fail
545
452
  behavior itself. Intent 112 owns the maintenance lock and the immutability gate (it inherits
546
453
  fail-open from 111). Intent 4a1b1 owns deep agent stuck-detection and is not superseded.
547
454
 
548
- ## Deprecation Process
549
-
550
- Deprecations live in `deprecations.yml` and are shown at SessionStart. While Plastic is
551
- pre-1.0, a satisfied deprecation (its migration is already done on installed machines) may be
552
- removed immediately instead of waiting for its declared `removal` version. From `1.0.0` on,
553
- the steady-state grace rule applies (removal at least two minors ahead). For the full process,
554
- severity levels, and the pre-1.0 exception, see the `plastic-releasing` skill.
555
-
556
- ## Skills Reference
557
-
558
- Detailed conventions live inside the skills that use them, not in this file.
559
-
560
- | Topic | Skill | References in skill |
561
- |-------|-------|-------------------|
562
- | Creating intents, lifecycle | `plastic-creating-intent` | lifecycle, wikilinks |
563
- | Brainstorming, spec writing | `plastic-brainstorming` | — |
564
- | Planning, actions | `plastic-writing-plans` | — |
565
- | Execution, delivery | `plastic-executing-plan` | — |
566
- | Autonomous delivery | `plastic-auto` | agent architecture |
567
- | Save/restore state | `plastic-savepoint`, `plastic-continuing` | context management |
568
- | Knowledge graph, linking | `plastic-linking-intents` | zettelkasten, wikilinks |
569
- | Projects, hubs | `plastic-creating-project` | hubs, project stores |
570
- | Provision a project store | `plastic-add-project-store` | project stores |
571
- | Index maintenance | `plastic-managing-index` | — |
572
- | Releases, deprecations | `plastic-releasing` | deprecation process |
573
- | Health diagnostics | `plastic-doctor` | three scopes: `--core` (binary install-integrity check, runs on SessionStart), `--store [global\|<slug>]` (per-store check, runs on dashboard load), no flag = full check (runs after every update); gate enforcement, stuck detection |
574
- | Authoring skills, agents, hooks | `plastic-creating-skills` | progressive disclosure, agentskills.io spec |
575
- | Evaluating skills, evals | `plastic-evaluating-skills` | eval methodology, convention checks |
576
- | Create, order, and consume a roadmap of intents | `plastic-roadmap` | file format, operations |
@@ -1,12 +1,8 @@
1
1
  ---
2
2
  name: plastic-brainstorming
3
3
  description: |
4
- Use this agent for the Why-stage exploration of an active intent in auto mode:
5
- it enriches context and records decisions before a spec is written. Examples:
6
- <example>Context: An intent has a What but a thin Why.
7
- user: "Explore the requirements for the active intent"
8
- assistant: "I'll use the brainstorming agent to enrich Context and record Decisions"
9
- <commentary>Why-stage exploration runs before the spec-specialist.</commentary></example>
4
+ Use for the Why-stage exploration of an active intent in auto mode: enrich the
5
+ intent's Context and record its Decisions before the spec is written.
10
6
  model: opus
11
7
  ---
12
8
 
@@ -1,12 +1,8 @@
1
1
  ---
2
2
  name: plastic-enforcer
3
3
  description: |
4
- Use this agent as the auto-mode orchestrator: it spins up the team, sequences the
5
- specialists, owns every gate, and runs the final review. Examples:
6
- <example>Context: User triggers auto on an active intent.
7
- user: "auto"
8
- assistant: "I'll use the plastic-enforcer to orchestrate the team through the cycle"
9
- <commentary>The enforcer IS the orchestrator and gates each stage transition.</commentary></example>
4
+ Use as the auto-mode orchestrator: it spins up the team, sequences the
5
+ specialists, owns every gate, and runs the final review.
10
6
  model: opus
11
7
  ---
12
8
 
@@ -63,6 +59,15 @@ ceremony, never these guarantees.
63
59
  4. Dispatch and review by default through Plastic's native engine, `plastic-executing-plan` (implementer plus two-stage review, no external plugin). If `superpowers:subagent-driven-development` and `superpowers:dispatching-parallel-agents` are available, or the user asks for them, delegate to them as an enhancement
64
60
  5. At the final gate, dispatch an independent reviewer subagent, then complete the intent
65
61
 
62
+ ## Human-facing stage reporting
63
+
64
+ At each gate, the orchestrator briefs the human in EM-to-CTO voice: impact first, the one risk
65
+ that matters, then the decision left to them. The shape and per-stage content live in
66
+ `skills/auto/references/human-report-contract.md`; follow it rather than improvising a report.
67
+ This is separate from the intent 74 report contract (`skills/auto/references/agent-report-contract.md`),
68
+ which is the internal, structured handoff a dispatched specialist sends back to the orchestrator.
69
+ The orchestrator consumes that internal report to write the human briefing; the two never merge.
70
+
66
71
  ## Constraints
67
72
 
68
73
  - Enforce gates manually; do not rely on hooks, because the session id may be unset in headless or background runs
@@ -1,12 +1,8 @@
1
1
  ---
2
2
  name: plastic-executor
3
3
  description: |
4
- Use this agent for the Exec stage in auto mode: it implements the actions, checks
5
- off the checklist, and drives the test suite green. Examples:
6
- <example>Context: plan.md and checklist.md exist for the active intent.
7
- user: "Execute the plan for the active intent"
8
- assistant: "I'll use the executor to implement each action and run the suite green"
9
- <commentary>Exec turns the plan into code, one action at a time.</commentary></example>
4
+ Use for the Exec stage in auto mode: implement the actions, check off the
5
+ checklist, and drive the test suite green.
10
6
  model: sonnet
11
7
  ---
12
8
 
@@ -1,13 +1,8 @@
1
1
  ---
2
2
  name: plastic-future-intent-researcher
3
3
  description: |
4
- Use this agent to research future intents autonomously. Picks up parked
5
- intents from INDEX.md, investigates them via web search and codebase analysis,
6
- and writes findings into the intent. Examples:
7
- <example>Context: There are future intents parked in the index.
8
- user: "Research my future intents"
9
- assistant: "I'll use the future-intent-researcher to pick up a parked intent and investigate it"
10
- <commentary>Agent autonomously researches a future intent and writes findings.</commentary></example>
4
+ Use to research a parked future intent autonomously via web search and codebase
5
+ analysis, writing the findings into the intent.
11
6
  model: sonnet
12
7
  ---
13
8
 
@@ -1,16 +1,8 @@
1
1
  ---
2
2
  name: plastic-intent-curator
3
3
  description: |
4
- Use this agent when completing or reviewing intents, reorganizing the index,
5
- or when the intent store needs maintenance. Examples:
6
- <example>Context: User has finished implementing a feature.
7
- user: "This intent is done, clean up the index"
8
- assistant: "I'll use the intent-curator agent to update the intent status and reorganize INDEX.md"
9
- <commentary>Intent lifecycle change triggers curator for index maintenance.</commentary></example>
10
- <example>Context: The intent store has grown and clusters need review.
11
- user: "Organize the intents"
12
- assistant: "I'll use the intent-curator to review clusters, flag orphans, and suggest connections"
13
- <commentary>Periodic maintenance of the Zettelkasten structure.</commentary></example>
4
+ Use when completing or reviewing intents, reorganizing INDEX.md, or maintaining
5
+ the intent store.
14
6
  model: sonnet
15
7
  ---
16
8
 
@@ -1,19 +1,15 @@
1
1
  ---
2
2
  name: plastic-intent-discovery
3
3
  description: |
4
- Use this agent for the What-stage context deposit when an intent is
5
- activated: it primes Why with fresh QMD-sourced context before the spec is
6
- written, and never writes the intent file itself. Examples:
7
- <example>Context: An intent is being moved from Future to Active.
8
- user: "Board this intent and gather what we already know"
9
- assistant: "I'll use the intent-discovery agent to run QMD discovery and deposit findings to resources/"
10
- <commentary>What-stage discovery runs at activation, before the lock and Why.</commentary></example>
4
+ Use for the What-stage context deposit when an intent is activated: run QMD
5
+ discovery and write findings to resources/, never the intent file itself.
11
6
  model: sonnet
12
7
  ---
13
8
 
14
9
  You are the Plastic Intent Discovery agent. You own the What stage: at intent
15
- activation, before the lock is armed and Why begins, you gather the context
16
- that already exists and deposit it for the Why stage to consume.
10
+ activation, after the lock is armed and before Why begins, under the lock as
11
+ the owner session, you gather the context that already exists and deposit it
12
+ for the Why stage to consume.
17
13
 
18
14
  ## Responsibilities
19
15
  1. **Read the intent's links.** Load the activating intent file's `chain` and
@@ -32,6 +28,8 @@ that already exists and deposit it for the Why stage to consume.
32
28
  ## Constraints
33
29
  - Read-only with respect to the intent: your single output is
34
30
  `resources/discovery--<slug>.md`.
35
- - Never take the delivery lock; you run before it is armed.
31
+ - You do not ACQUIRE the delivery lock; you run under the lock the
32
+ orchestrator armed (owner session, inherited session id) and are not
33
+ blocked by it.
36
34
  - End with a structured completion report per the spawn preamble's report
37
35
  contract.
@@ -1,12 +1,8 @@
1
1
  ---
2
2
  name: plastic-planner
3
3
  description: |
4
- Use this agent for the How stage in auto mode: it turns a spec.md into a plan,
5
- self-contained action files, and a checklist. Examples:
6
- <example>Context: spec.md exists and the intent is ready to plan.
7
- user: "Plan the work for the active intent"
8
- assistant: "I'll use the planner to write plan.md, actions/, and checklist.md"
9
- <commentary>The plan and checklist unlock the code gate for Exec.</commentary></example>
4
+ Use for the How stage in auto mode: turn spec.md into plan.md, self-contained
5
+ action files, and checklist.md.
10
6
  model: opus
11
7
  ---
12
8
 
@@ -1,12 +1,8 @@
1
1
  ---
2
2
  name: plastic-spec-specialist
3
3
  description: |
4
- Use this agent at the Why-to-How boundary in auto mode: it consolidates an
5
- enriched Why into a spec.md from the spec template. Examples:
6
- <example>Context: Why exploration is complete and decisions are recorded.
7
- user: "Write the spec for the active intent"
8
- assistant: "I'll use the spec-specialist to produce spec.md from the template"
9
- <commentary>The spec is the deliverable that gates the move into How.</commentary></example>
4
+ Use at the Why-to-How boundary in auto mode: consolidate the enriched Why into
5
+ spec.md from the spec template.
10
6
  model: sonnet
11
7
  ---
12
8
 
package/bin/plastic.js CHANGED
@@ -50,8 +50,12 @@ try {
50
50
  })
51
51
  } catch (err) {
52
52
  if (err.status) process.exit(err.status)
53
- console.error('Error: Ruby is required to run Plastic.')
54
- console.error(' macOS: Ruby is pre-installed')
55
- console.error(' Linux: sudo apt install ruby / dnf install ruby')
53
+ // Ruby cannot run to print its own message when it is missing, so this
54
+ // mirrors scripts/lib/preflight.rb's FATAL block word for word.
55
+ console.error('Plastic needs Ruby 3.0.0 or newer to run its scripts (found not found).')
56
+ console.error('Install a pinned Ruby with mise:')
57
+ console.error(' curl https://mise.run | sh # only if mise is not installed yet')
58
+ console.error(' mise use --global ruby@3.3')
59
+ console.error('Then re-run the Plastic installer.')
56
60
  process.exit(1)
57
61
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zalom/plastic",
3
- "version": "1.0.0-beta.34",
3
+ "version": "1.0.0-beta.36",
4
4
  "description": "Intent-driven idea development system for AI coding agents",
5
5
  "type": "module",
6
6
  "bin": {
@@ -38,6 +38,7 @@
38
38
  "agents/",
39
39
  "templates/",
40
40
  "PLASTIC.md",
41
+ "PLASTIC-reference.md",
41
42
  "deprecations.yml"
42
43
  ]
43
44
  }