@zalom/plastic 1.14.1 → 2.0.0-alpha.10
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.
- package/PLASTIC.md +101 -294
- package/README.md +5 -6
- package/agents/plastic-advisor.md +18 -17
- package/agents/plastic-enforcer.md +57 -69
- package/agents/plastic-executor.md +34 -20
- package/agents/plastic-faux-advisor.md +18 -18
- package/bin/lib/context_budget.rb +453 -0
- package/bin/plastic-bench +78 -0
- package/config_asks.yml +38 -0
- package/hooks/capture +4 -0
- package/hooks/close +5 -0
- package/hooks/hooks.json +14 -42
- package/hooks/message-display +81 -0
- package/hooks/record +4 -0
- package/hooks/savepoint +5 -5
- package/package.json +3 -2
- package/scripts/agent-report +15 -10
- package/scripts/append-ledger +208 -0
- package/scripts/codex-hook +78 -90
- package/scripts/dashboard.rb +43 -14
- package/scripts/day-summary +53 -0
- package/scripts/doctor.rb +269 -43
- package/scripts/end-intent +170 -76
- package/scripts/exec-worktree +11 -20
- package/scripts/file-session-intent +61 -0
- package/scripts/hook-capture +255 -0
- package/scripts/hook-close +36 -0
- package/scripts/hook-message-display +74 -0
- package/scripts/hook-record +157 -0
- package/scripts/hook-savepoint +45 -0
- package/scripts/hook-session-start +128 -12
- package/scripts/install.rb +8 -6
- package/scripts/intent-screen +77 -0
- package/scripts/lib/agent_models.rb +1 -7
- package/scripts/lib/arm.rb +308 -0
- package/scripts/lib/backfill_intent.rb +316 -0
- package/scripts/lib/bridge.rb +24 -1597
- package/scripts/lib/compact_instructions.rb +56 -0
- package/scripts/lib/day_summary.rb +211 -0
- package/scripts/lib/doctor_core.rb +66 -88
- package/scripts/lib/doctor_session_ledger.rb +158 -0
- package/scripts/lib/exec_worktree.rb +14 -60
- package/scripts/lib/handoff.rb +184 -0
- package/scripts/lib/harness_text.rb +5 -4
- package/scripts/lib/hook_registry.rb +57 -106
- package/scripts/lib/insights.rb +3 -4
- package/scripts/lib/installer_core.rb +136 -41
- package/scripts/lib/intent_screen.rb +309 -0
- package/scripts/lib/intent_screen_ansi.rb +262 -0
- package/scripts/lib/lock.rb +6 -26
- package/scripts/lib/message_display.rb +290 -0
- package/scripts/lib/outcome_guard.rb +7 -5
- package/scripts/lib/project_validator.rb +30 -1
- package/scripts/lib/report_screen.rb +648 -0
- package/scripts/lib/roadmap_queue.rb +3 -3
- package/scripts/lib/roadmap_savepoint.rb +1 -1
- package/scripts/lib/rule_catalog.rb +6 -3
- package/scripts/lib/savepoint.rb +334 -0
- package/scripts/lib/scaffold_intent.rb +13 -179
- package/scripts/lib/screen_paint.rb +276 -0
- package/scripts/lib/session_backfill.rb +184 -0
- package/scripts/lib/session_close.rb +104 -0
- package/scripts/lib/session_git.rb +500 -0
- package/scripts/lib/session_ledger.rb +621 -0
- package/scripts/lib/store_discovery.rb +1 -1
- package/scripts/lib/store_provisioning.rb +1 -1
- package/scripts/maintenance-run +7 -7
- package/scripts/new-intent +63 -4
- package/scripts/plastic-lock +101 -41
- package/scripts/promote-session-item +150 -0
- package/scripts/read-config +3 -0
- package/scripts/rebuild-graph +1 -1
- package/scripts/report-screen +120 -0
- package/scripts/roadmap-next +2 -2
- package/scripts/rollback.rb +48 -3
- package/scripts/savepoint-note +67 -0
- package/scripts/scaffold-intent +37 -63
- package/scripts/session-commit +116 -0
- package/scripts/spawn-preamble +14 -7
- package/scripts/update.rb +7 -3
- package/scripts/write-handoff +60 -0
- package/skills/agent-advisor/SKILL.md +3 -3
- package/skills/agent-advisor/references/advisor-protocol.md +20 -20
- package/skills/auto/SKILL.md +223 -317
- package/skills/auto/evals/evals.json +10 -10
- package/skills/auto/references/agent-architecture.md +102 -90
- package/skills/auto/references/agent-report-contract.md +4 -21
- package/skills/auto/references/end-tail.md +47 -53
- package/skills/auto/references/human-report-contract.md +62 -56
- package/skills/conventions/SKILL.md +1 -3
- package/skills/conventions/references/lifecycle-and-savepoints.md +35 -1
- package/skills/conventions/references/locks-and-worktrees.md +62 -58
- package/skills/conventions/references/maintenance-and-revisions.md +12 -12
- package/skills/dashboard/SKILL.md +1 -1
- package/skills/direct/SKILL.md +66 -0
- package/skills/direct/references/request-signals.md +59 -0
- package/skills/doctor/SKILL.md +58 -11
- package/skills/doctor/report.md +3 -1
- package/skills/install/SKILL.md +11 -9
- package/skills/intent-continuing/SKILL.md +142 -91
- package/skills/intent-continuing/references/boarding-matrix.md +34 -0
- package/skills/intent-continuing/references/context-management.md +3 -3
- package/skills/intent-creating/SKILL.md +2 -2
- package/skills/intent-creating/references/lifecycle.md +1 -1
- package/skills/intent-ending/SKILL.md +34 -37
- package/skills/intent-ending/evals/evals.json +4 -4
- package/skills/intent-executing/SKILL.md +15 -46
- package/skills/intent-executing/plan-reviewer-prompt.md +39 -0
- package/skills/intent-speccing/SKILL.md +108 -51
- package/skills/intent-speccing/evals/evals.json +5 -5
- package/skills/intent-speccing/references/per-section-fill-rules.md +4 -4
- package/skills/intent-speccing/references/self-verify-checklist.md +1 -2
- package/skills/project-creating/SKILL.md +1 -1
- package/skills/releasing/SKILL.md +7 -8
- package/skills/tutorial/SKILL.md +2 -2
- package/skills/tutorial/references/track-1-guided.md +16 -18
- package/skills/tutorial/references/track-2-auto.md +12 -13
- package/skills/tutorial/references/track-3-projects-and-roadmaps.md +2 -2
- package/templates/agents.md +4 -7
- package/templates/config.yml +5 -0
- package/templates/intent-screen.md +17 -0
- package/templates/outcome.md +14 -1
- package/templates/project.yml +7 -0
- package/templates/report-state.md +11 -0
- package/templates/roadmap.md +1 -1
- package/templates/savepoint.md +2 -2
- package/templates/session-intent.md +29 -0
- package/agents/plastic-brainstorming.md +0 -48
- package/agents/plastic-future-intent-researcher.md +0 -35
- package/agents/plastic-intent-curator.md +0 -47
- package/agents/plastic-intent-discovery.md +0 -43
- package/agents/plastic-planner.md +0 -56
- package/agents/plastic-spec-specialist.md +0 -53
- package/hooks/auto-arm +0 -5
- package/hooks/bash-gate +0 -3
- package/hooks/continue +0 -31
- package/hooks/edit-gates +0 -3
- package/hooks/future-intent-check +0 -25
- package/hooks/gate-check +0 -12
- package/hooks/power-tools +0 -8
- package/scripts/hook-auto-arm +0 -51
- package/scripts/hook-bash-gate +0 -78
- package/scripts/hook-code-gate +0 -38
- package/scripts/hook-continue +0 -48
- package/scripts/hook-create-gate +0 -51
- package/scripts/hook-edit-gates +0 -58
- package/scripts/hook-future-intent-check +0 -90
- package/scripts/hook-gate-check +0 -169
- package/scripts/hook-links-gate +0 -54
- package/scripts/hook-lock-gate +0 -47
- package/scripts/hook-power-tools +0 -38
- package/scripts/hook-savepoint-pre +0 -32
- package/scripts/lib/codex_edit_gates.rb +0 -138
- package/scripts/lib/edit_gates.rb +0 -398
- package/scripts/lib/links_gate.rb +0 -140
- package/scripts/lib/qmd_hook.rb +0 -41
- package/scripts/lib/spec_header.rb +0 -83
- package/scripts/lib/start_intent.rb +0 -296
- package/scripts/start-intent +0 -89
- package/skills/_active-intent-gate.md +0 -26
- package/skills/auto/references/tiers.md +0 -100
- package/skills/continuing/SKILL.md +0 -34
- package/skills/continuing/evals/evals.json +0 -91
- package/skills/conventions/references/gates-and-enforcement.md +0 -53
- package/skills/conventions/references/tiers-and-dispatch.md +0 -135
- package/skills/doctor/references/gates-stuck-detection.md +0 -43
- package/skills/intent-brainstorming/SKILL.md +0 -118
- package/skills/intent-brainstorming/evals/evals.json +0 -67
- package/skills/intent-continuing/evals/evals.json +0 -145
- package/skills/intent-discovering/SKILL.md +0 -56
- package/skills/intent-grilling/SKILL.md +0 -108
- package/skills/intent-linking/SKILL.md +0 -128
- package/skills/intent-linking/evals/evals.json +0 -22
- package/skills/intent-linking/references/zettelkasten.md +0 -45
- package/skills/intent-locking/SKILL.md +0 -64
- package/skills/intent-planning/SKILL.md +0 -145
- package/skills/intent-planning/evals/evals.json +0 -81
- package/skills/intent-planning/references/plan-format.md +0 -130
- package/skills/intent-researching/SKILL.md +0 -123
- package/skills/intent-researching/evals/evals.json +0 -22
- package/skills/intent-savepoint/SKILL.md +0 -83
- package/skills/intent-savepoint/references/context-management.md +0 -32
- package/skills/intent-starting/SKILL.md +0 -151
- package/skills/intent-starting/evals/evals.json +0 -117
- package/skills/intent-starting/references/boarding-matrix.md +0 -35
- package/skills/project-continuing/SKILL.md +0 -119
- package/skills/project-continuing/evals/evals.json +0 -100
- package/skills/roadmap-continuing/SKILL.md +0 -89
- package/skills/roadmap-continuing/evals/evals.json +0 -82
- package/skills/skill-creating/SKILL.md +0 -75
- package/skills/skill-creating/evals/evals.json +0 -108
- package/skills/skill-creating/references/agents.md +0 -168
- package/skills/skill-creating/references/defaults-first.md +0 -23
- package/skills/skill-creating/references/evals.md +0 -41
- package/skills/skill-creating/references/hooks.md +0 -251
- package/skills/skill-creating/references/progressive-disclosure.md +0 -176
- package/skills/skill-creating/references/scripts.md +0 -166
- package/skills/skill-creating/references/skills.md +0 -169
- package/skills/skill-creating/scripts/scaffold.rb +0 -313
- package/skills/skill-evaluating/SKILL.md +0 -141
- package/skills/skill-evaluating/assets/eval-template.json +0 -12
- package/skills/skill-evaluating/evals/evals.json +0 -75
- package/skills/skill-evaluating/references/convention-checks.md +0 -76
- package/skills/skill-evaluating/references/eval-methodology.md +0 -154
- package/skills/store-curating/SKILL.md +0 -64
- package/skills/store-curating/evals/evals.json +0 -38
- package/skills/store-indexing/SKILL.md +0 -93
- package/skills/store-indexing/evals/evals.json +0 -22
- package/skills/store-indexing/references/zettelkasten-linking.md +0 -32
- package/skills/store-provisioning/SKILL.md +0 -55
- /package/skills/{project-continuing → intent-continuing}/references/board-fill.md +0 -0
- /package/skills/{roadmap-continuing → intent-continuing}/references/liveness-ranking.md +0 -0
- /package/skills/{intent-brainstorming → intent-speccing}/references/design-principles.md +0 -0
|
@@ -250,16 +250,15 @@ This is the release branch of `plastic-intent-ending`'s Step 5 disarm (`merge: t
|
|
|
250
250
|
separate concern: a release is the merge-then-remove path for the intent's worktree (intent
|
|
251
251
|
73c3), so the intent's code branch is merged back into the default branch BEFORE the worktree
|
|
252
252
|
is removed. Drive it through `Worktree.finish` with `merge: true`, which merges the code
|
|
253
|
-
branch, then removes the worktree, prunes the repo
|
|
254
|
-
bridge:
|
|
253
|
+
branch, then removes the worktree, and prunes the repo:
|
|
255
254
|
|
|
256
255
|
```bash
|
|
257
|
-
ruby -r ~/.plastic/scripts/lib/worktree -r ~/.plastic/scripts/lib/
|
|
258
|
-
'
|
|
256
|
+
ruby -r ~/.plastic/scripts/lib/worktree -r ~/.plastic/scripts/lib/arm -e \
|
|
257
|
+
'Worktree.finish(Arm.bridge_hash(intent_dir: "<STORE>/<dir>"), merge: true)'
|
|
259
258
|
```
|
|
260
259
|
|
|
261
|
-
(
|
|
262
|
-
|
|
260
|
+
(The worktree block is derived from `projects.yml` and the intent id, so the one-liner needs
|
|
261
|
+
only the intent directory; the `/tmp` bridge it once discovered was removed in 2.0, intent 307.)
|
|
263
262
|
|
|
264
263
|
Honor the worktree-cleanup rule: never leave an orphaned worktree, and run `git worktree
|
|
265
264
|
prune` in the affected repo if you hit a stale reference. For why this is the one place the
|
|
@@ -279,14 +278,14 @@ A release IS a delivery. The active intent that drove this work must be complete
|
|
|
279
278
|
ruby ~/.plastic/scripts/end-intent --store <store_path> --id <ID> --disposition delivered \
|
|
280
279
|
--session "$CLAUDE_CODE_SESSION_ID" \
|
|
281
280
|
--outcome-summary "delivered in <tag-name>: <one-line summary>" \
|
|
282
|
-
--index-note "<tag-name>, <mode
|
|
281
|
+
--index-note "<tag-name>, <mode>; <what shipped>; <suite result>"
|
|
283
282
|
```
|
|
284
283
|
A non-zero exit needs attention: 4 means a live foreign session holds the lock (back
|
|
285
284
|
off), 5 means the code worktree is still dirty (should not happen here, since step 8
|
|
286
285
|
already removed it; investigate before overriding with `--discard-worktree-changes`),
|
|
287
286
|
3 means disarm ran but the lock is still present (run `/plastic-doctor check the lock
|
|
288
287
|
status`).
|
|
289
|
-
d. Update clusters to show `_(completed)_
|
|
288
|
+
d. Update clusters to show `_(completed)_`.
|
|
290
289
|
|
|
291
290
|
**If no active intent exists for this release**, that itself is a problem - work happened outside the intent system. Log it and move on, but flag it.
|
|
292
291
|
|
package/skills/tutorial/SKILL.md
CHANGED
|
@@ -21,7 +21,7 @@ reference. Every checkpoint inside a track is prose, never another menu.
|
|
|
21
21
|
|
|
22
22
|
1. **Guided**: deliver a first intent, stage by stage, approving each step yourself. Routes to
|
|
23
23
|
`references/track-1-guided.md`.
|
|
24
|
-
2. **Auto**: hand delivery to the agent and watch the
|
|
24
|
+
2. **Auto**: hand delivery to the agent and watch the record and reports as it works. Routes to
|
|
25
25
|
`references/track-2-auto.md`.
|
|
26
26
|
3. **Projects and roadmaps**: grow a founding intent into a small real project, add more
|
|
27
27
|
intents, and plan a delivery batch with a roadmap. Routes to
|
|
@@ -35,7 +35,7 @@ showing the menu again.
|
|
|
35
35
|
|
|
36
36
|
Narrate one step at a time: say what the next station does, then hand control back so the
|
|
37
37
|
user types the real command themselves. After they run it, look at what appeared (a file, a
|
|
38
|
-
|
|
38
|
+
ledger line, a report) and debrief in plain words before moving to the next station. Never
|
|
39
39
|
run a station's command on the user's behalf; the tutorial teaches the shape of the work, it
|
|
40
40
|
does not do the work.
|
|
41
41
|
|
|
@@ -35,19 +35,19 @@ tool, never written by hand.
|
|
|
35
35
|
|
|
36
36
|
### 2. Board the intent
|
|
37
37
|
|
|
38
|
-
Type `/plastic-intent-
|
|
38
|
+
Type `/plastic-intent-continuing` and name the intent.
|
|
39
39
|
|
|
40
40
|
Artifact: a delivery lock (a `delivery.lock` file in the intent directory) naming this
|
|
41
41
|
session as the one owner, and a line in `savepoint.md` recording the stage. The agent then
|
|
42
|
-
|
|
42
|
+
resumes at the last delivered station and asks nothing.
|
|
43
43
|
|
|
44
|
-
Checkpoint:
|
|
44
|
+
Checkpoint: explain in one sentence why the lock matters: it stops two
|
|
45
45
|
sessions from editing the same intent at the same time.
|
|
46
46
|
|
|
47
47
|
### 3. Why, rulings one at a time
|
|
48
48
|
|
|
49
|
-
Type `/plastic-intent-
|
|
50
|
-
|
|
49
|
+
Type `/plastic-intent-speccing` (say "grill me" for a harder, interview-style pass over
|
|
50
|
+
the same ground). It asks conversational prose questions, one at a
|
|
51
51
|
time, never a multiple-choice menu, and answers them one at a time in return.
|
|
52
52
|
|
|
53
53
|
Artifact: `## Context` and `### Decisions` in the intent file fill in as each answer lands, and
|
|
@@ -62,21 +62,19 @@ is already sitting in `### Decisions` and in `## Insights`, in writing.
|
|
|
62
62
|
|
|
63
63
|
Type `/plastic-intent-speccing`.
|
|
64
64
|
|
|
65
|
-
Artifact: `spec.md`,
|
|
66
|
-
sections filled from the rulings recorded in station 3.
|
|
65
|
+
Artifact: `spec.md`, its eight sections filled from the rulings recorded in station 3.
|
|
67
66
|
|
|
68
|
-
Checkpoint:
|
|
69
|
-
|
|
67
|
+
Checkpoint: point at one sentence in `spec.md` that traces back to an answer given in
|
|
68
|
+
station 3.
|
|
70
69
|
|
|
71
70
|
### 5. Plan
|
|
72
71
|
|
|
73
|
-
|
|
72
|
+
Ask the same conversation to write the action files and the plan.
|
|
74
73
|
|
|
75
|
-
Artifact: `plan.md`, `checklist.md`, and at least one real `actions/ACTION_N.md`.
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
task. `checklist.md` follows a fixed form: tasks start under `## In Progress`, move to
|
|
74
|
+
Artifact: `plan.md`, `checklist.md`, and at least one real `actions/ACTION_N.md`. A small
|
|
75
|
+
delivery like this one consolidates the whole delivery into a single `actions/ACTION_1.md`
|
|
76
|
+
(the ordered steps plus the exact changes); many independent tasks, dispatched in parallel,
|
|
77
|
+
instead get one `actions/ACTION_N.md` file per task. `checklist.md` follows a fixed form: tasks start under `## In Progress`, move to
|
|
80
78
|
`## Completed` as they land, and a `## Session Log` table records what happened each session.
|
|
81
79
|
A task that depends on an owner decision landing first (a destructive step, a structural
|
|
82
80
|
ruling) gets an `[ORCHESTRATOR]` prefix and blocks every other item until that decision is
|
|
@@ -86,7 +84,7 @@ Checkpoint: open `checklist.md`. Every task in `plan.md` has a matching checkbox
|
|
|
86
84
|
`## In Progress`; that checklist, not `plan.md` itself, is what gets ticked off and moved to
|
|
87
85
|
`## Completed` during Exec.
|
|
88
86
|
|
|
89
|
-
### 6. Exec, verify before
|
|
87
|
+
### 6. Exec, verify before you report
|
|
90
88
|
|
|
91
89
|
Type `/plastic-intent-executing`.
|
|
92
90
|
|
|
@@ -121,5 +119,5 @@ two, exactly the README section (or note) just delivered.
|
|
|
121
119
|
|
|
122
120
|
That is the full cycle once: create, board, decide, spec, plan, build, done. Read
|
|
123
121
|
[`your-first-intent-in-10-minutes.md`](https://github.com/zalom/plastic/blob/main/docs/guides/your-first-intent-in-10-minutes.md) for the same path condensed to a single
|
|
124
|
-
read, and [`
|
|
125
|
-
|
|
122
|
+
read, and [`reading-the-ledgers.md`](https://github.com/zalom/plastic/blob/main/docs/guides/reading-the-ledgers.md) for where each station wrote its
|
|
123
|
+
work down.
|
|
@@ -51,16 +51,15 @@ mixed up in what it tells you.
|
|
|
51
51
|
|
|
52
52
|
Checkpoint: name one thing auto will always stop and ask about, rather than decide alone.
|
|
53
53
|
|
|
54
|
-
### 3. Walking the
|
|
54
|
+
### 3. Walking the record
|
|
55
55
|
|
|
56
|
-
No new command. Auto
|
|
57
|
-
lock (one owner at a time
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
56
|
+
No new command. Auto keeps one delivery in one place and writes down every move: the delivery
|
|
57
|
+
lock (one owner at a time, a `delivery.lock` file in the intent directory), the worktree (code
|
|
58
|
+
edits land on the intent's own branch), the savepoint ledger (one line per lifecycle file the
|
|
59
|
+
team writes), and the day ledger (the request that started this run moves from pending to open
|
|
60
|
+
when the first project file lands). Nothing blocks the team; the record is how you follow it.
|
|
61
61
|
|
|
62
|
-
Checkpoint:
|
|
63
|
-
came from.
|
|
62
|
+
Checkpoint: open the intent's `savepoint.md` and name the stage its last line records.
|
|
64
63
|
|
|
65
64
|
### 4. Reading the per-stage reports
|
|
66
65
|
|
|
@@ -75,7 +74,7 @@ line.
|
|
|
75
74
|
|
|
76
75
|
### 5. Continue and where-was-I after time away
|
|
77
76
|
|
|
78
|
-
Type `/plastic-continuing`.
|
|
77
|
+
Type `/plastic-intent-continuing`.
|
|
79
78
|
|
|
80
79
|
Artifact: the current state, presented and then the session stops. If a specific intent is
|
|
81
80
|
named, the agent reads its stage and savepoint and resumes exactly there, rather than
|
|
@@ -86,11 +85,11 @@ at and how that matched what was actually on disk.
|
|
|
86
85
|
|
|
87
86
|
## Wrap and where to go next
|
|
88
87
|
|
|
89
|
-
Auto keeps the same stages and the same
|
|
90
|
-
Read [`pick-your-mode.md`](https://github.com/zalom/plastic/blob/main/docs/guides/pick-your-mode.md) for the honest trade-off between
|
|
88
|
+
Auto keeps the same stages and the same record as thinking; the only difference is who steers.
|
|
89
|
+
Read [`pick-your-mode.md`](https://github.com/zalom/plastic/blob/main/docs/guides/pick-your-mode.md) for the honest trade-off between the three modes, and
|
|
91
90
|
[`using-plastic-with-claude-code.md`](https://github.com/zalom/plastic/blob/main/docs/guides/using-plastic-with-claude-code.md) for how that choice feels day to day and how
|
|
92
|
-
it connects to roadmap-driven delivery. For
|
|
93
|
-
[`
|
|
91
|
+
it connects to roadmap-driven delivery. For where the team wrote its work down, read
|
|
92
|
+
[`reading-the-ledgers.md`](https://github.com/zalom/plastic/blob/main/docs/guides/reading-the-ledgers.md).
|
|
94
93
|
|
|
95
94
|
Note on terms: "guided" means the user starts each stage with a command and the agent
|
|
96
95
|
narrows the thinking inside it, the same shape track 1 walked. "Manual", editing project
|
|
@@ -21,10 +21,10 @@ one this tutorial keeps or ships.
|
|
|
21
21
|
### 1. Start from a founding implementation intent
|
|
22
22
|
|
|
23
23
|
Create and board an intent the same way as track 1, stations 1 and 2: `/plastic-intent-creating`,
|
|
24
|
-
then `/plastic-intent-
|
|
24
|
+
then `/plastic-intent-continuing`. Describe something meant to grow into a small real project,
|
|
25
25
|
for example "build a personal todo app."
|
|
26
26
|
|
|
27
|
-
Then type `/plastic-intent-
|
|
27
|
+
Then type `/plastic-intent-speccing` and record a couple of real rulings on this founding
|
|
28
28
|
intent, for example the language or how tasks get stored. Keep it short: this intent only
|
|
29
29
|
needs enough decisions for the new project to inherit, not a full design.
|
|
30
30
|
|
package/templates/agents.md
CHANGED
|
@@ -45,8 +45,8 @@ Active/Future/Completed placement is managed in INDEX.md, not in frontmatter.
|
|
|
45
45
|
Create through the `plastic-intent-creating` skill, which scaffolds with one call:
|
|
46
46
|
`ruby ~/.plastic/scripts/new-intent --store .plastic/store --intent "<one-line>" --slug <slug> [--sources <governing-id>]`.
|
|
47
47
|
It allocates the Folgezettel ID, creates `.plastic/store/ID--slug/ID--slug.md` born
|
|
48
|
-
complete, and wires the links. Never hand-author the files:
|
|
49
|
-
|
|
48
|
+
complete, and wires the links. Never hand-author the files: `new-intent` validates the
|
|
49
|
+
intent file it writes, and `end-intent` checks it again at close.
|
|
50
50
|
|
|
51
51
|
## Lifecycle Skills
|
|
52
52
|
|
|
@@ -55,11 +55,8 @@ Plastic has its own lifecycle skills. When a Plastic skill exists for the curren
|
|
|
55
55
|
| Phase | Skill | Produces |
|
|
56
56
|
|-------|-------|----------|
|
|
57
57
|
| What | `plastic-intent-creating` | Intent file |
|
|
58
|
-
| Why | `plastic-intent-
|
|
59
|
-
|
|
|
60
|
-
| Why | `plastic-intent-researching` | `resources/*.md` |
|
|
61
|
-
| Why | `plastic-intent-grilling` | Deep interrogation |
|
|
62
|
-
| How | `plastic-intent-planning` | `plan.md`, `checklist.md`, `actions/` |
|
|
58
|
+
| Why | `plastic-intent-speccing` | Rulings as insights, `resources/*.md`, `spec.md` |
|
|
59
|
+
| How | `plastic-intent-speccing` | `actions/`, `plan.md`, `checklist.md` |
|
|
63
60
|
| Exec | `plastic-intent-executing` | Code + `outcome.md` |
|
|
64
61
|
| Done | `plastic-intent-ending` | Lifecycle transition |
|
|
65
62
|
|
package/templates/config.yml
CHANGED
|
@@ -2,6 +2,11 @@ version: 3
|
|
|
2
2
|
project_roots:
|
|
3
3
|
- ~/.plastic/projects
|
|
4
4
|
stale_threshold_days: 3
|
|
5
|
+
# When to compact. Absolute token counts for a 1M window (35 and 50 percent), not
|
|
6
|
+
# percentages: models are reliable only to roughly 50 to 65 percent of advertised
|
|
7
|
+
# context, so a percentage that is right at 200k floats to an untested size at 1M.
|
|
8
|
+
context_offer_tokens: 350000
|
|
9
|
+
context_insist_tokens: 500000
|
|
5
10
|
execution_mode: subagent-driven
|
|
6
11
|
hash_length: 6
|
|
7
12
|
hash_algorithm: sha256-base36
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
## ▶ {{id}} · {{name}}
|
|
2
|
+
|
|
3
|
+
| | | |
|
|
4
|
+
| --- | --- | --- |
|
|
5
|
+
| **Store** | {{store}} | {{store.note}} |
|
|
6
|
+
| **Status** | {{status}} | {{status.note}} |
|
|
7
|
+
| **Stage** | {{stage}} | {{stage.note}} |
|
|
8
|
+
| **Savepoint** | {{savepoint}} | {{savepoint.note}} |
|
|
9
|
+
| **Progress** | {{progress.bar}} {{progress.done}} / {{progress.total}} | {{progress.note}} |
|
|
10
|
+
| **Next** | {{next}} | {{next.note}} |
|
|
11
|
+
| **Insight** | {{insight}} | {{insight.note}} |
|
|
12
|
+
|
|
13
|
+
**Steps**
|
|
14
|
+
|
|
15
|
+
| Step | Status | What |
|
|
16
|
+
| --- | --- | --- |
|
|
17
|
+
{{steps.rows}}
|
package/templates/outcome.md
CHANGED
|
@@ -7,10 +7,23 @@ disposition: delivered|abandoned
|
|
|
7
7
|
(what was delivered)
|
|
8
8
|
|
|
9
9
|
## Delivered
|
|
10
|
-
|
|
10
|
+
<!-- One row per thing delivered, in plain wording a reader recognizes, not
|
|
11
|
+
an implementation summary; the technical detail belongs in ## Summary. Each
|
|
12
|
+
row's label must appear as a standalone token in an actions/*.md heading
|
|
13
|
+
(for example "### S1 - ..." proves row S1): that heading's matrix rows become
|
|
14
|
+
the row's Proven-by cell on the delivered screen (intent 317 D19, 317a). -->
|
|
15
|
+
| Row | What |
|
|
16
|
+
| --- | --- |
|
|
17
|
+
| S1 | ... |
|
|
11
18
|
|
|
12
19
|
## Verification
|
|
13
20
|
- <acceptance criterion> — verified by ... → result
|
|
14
21
|
|
|
22
|
+
## Needs you
|
|
23
|
+
<!-- The literal None, or a table shaped | N | What | Why | with one row per
|
|
24
|
+
open owner action. Prose is tolerated by the reader but renders as a single
|
|
25
|
+
untyped row - write the table. -->
|
|
26
|
+
None
|
|
27
|
+
|
|
15
28
|
## Follow-ups
|
|
16
29
|
None
|
package/templates/project.yml
CHANGED
|
@@ -3,3 +3,10 @@ governing_docs:
|
|
|
3
3
|
|
|
4
4
|
release:
|
|
5
5
|
on_complete: commit
|
|
6
|
+
|
|
7
|
+
# flow:
|
|
8
|
+
# mode: direct # direct | pull_request
|
|
9
|
+
# base: main # defaults to origin/HEAD, then main, then master
|
|
10
|
+
# branch_template: "session/{{day}}" # {{day}}, {{ticket}}, {{slug}} tokens
|
|
11
|
+
# ticket_source: intent_id # intent_id (the session pointer's intent id, else the day id)
|
|
12
|
+
# workspace: checkout # checkout | worktree (worktree applies to direct mode only)
|
package/templates/roadmap.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Roadmap: <name>
|
|
2
2
|
|
|
3
|
-
(one-line meta: what this roadmap delivers, and
|
|
3
|
+
(one-line meta: what this roadmap delivers, and whether it is a project or the global roadmap. `roadmaps/` is a sibling
|
|
4
4
|
of `INDEX.md` — a project's root or the global `~/.plastic/`, never inside `store/`. When this
|
|
5
5
|
roadmap's goal is reached, move this file from `roadmaps/{slug}.md` to
|
|
6
6
|
`roadmaps/archived/{slug}.md`; `roadmaps/` itself lists only live roadmaps.)
|
package/templates/savepoint.md
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# Deterministic cycle-step ledger, written automatically by the
|
|
1
|
+
# Deterministic cycle-step ledger, written automatically by the record hook.
|
|
2
2
|
# One line per lifecycle milestone, append-only, newest at the bottom:
|
|
3
3
|
#
|
|
4
4
|
# {UTC-iso8601} {Stage} {milestone}
|
|
@@ -11,4 +11,4 @@
|
|
|
11
11
|
# 2026-06-16T16:40:00Z Exec outcome.md created
|
|
12
12
|
#
|
|
13
13
|
# This file is sugar on top of the conventions, not a source of truth. It is
|
|
14
|
-
# rebuildable from files-on-disk via
|
|
14
|
+
# rebuildable from files-on-disk via Savepoint.rebuild_savepoint. Do not hand-edit.
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: "{{DAY}}"
|
|
3
|
+
intent: "Session ledger for {{DATE}}"
|
|
4
|
+
sources: []
|
|
5
|
+
chain: []
|
|
6
|
+
created: {{CREATED}}
|
|
7
|
+
author: {{AUTHOR}}
|
|
8
|
+
tags: ["session"]
|
|
9
|
+
mode: direct
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
## Intent
|
|
13
|
+
Carry every session's activity for {{DATE}} in one shared, append-only day ledger.
|
|
14
|
+
|
|
15
|
+
## Context
|
|
16
|
+
This day ledger holds the checklist and savepoint lines that every session touching
|
|
17
|
+
{{DATE}} appends, tagged by session and project. It is not a project intent: it has
|
|
18
|
+
no plan, no actions, and no id that participates in a store's Folgezettel graph.
|
|
19
|
+
|
|
20
|
+
## Outcome
|
|
21
|
+
`checklist.md` and `savepoint.md` appear inside this day's directory on first append,
|
|
22
|
+
each written under an exclusive file lock so concurrent sessions never lose or
|
|
23
|
+
interleave a line.
|
|
24
|
+
|
|
25
|
+
## Insights
|
|
26
|
+
(observations captured throughout the day, appended by later sessions)
|
|
27
|
+
|
|
28
|
+
## Links
|
|
29
|
+
<!-- No sources or chain; this intent has no graph edges to project. -->
|
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: plastic-brainstorming
|
|
3
|
-
description: |
|
|
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.
|
|
6
|
-
model: opus
|
|
7
|
-
---
|
|
8
|
-
|
|
9
|
-
You are the Plastic Brainstorming specialist. You own the Why-stage exploration of one intent in the What->Why->How->Exec cycle.
|
|
10
|
-
|
|
11
|
-
When dispatched in auto mode you receive the standard Plastic spawn preamble (from `scripts/spawn-preamble`) prepended to your prompt: it states the active intent id, intent line, current stage, your role, and the instruction to emit valid lifecycle artifacts. Honor it as your live state; do not re-derive or contradict it.
|
|
12
|
-
|
|
13
|
-
## Your Responsibilities
|
|
14
|
-
|
|
15
|
-
1. **Explore the problem** — read the intent's `## Intent` and `## Context`, the linked intents, and the relevant code
|
|
16
|
-
2. **Decide autonomously** — in auto mode you make the calls yourself, no questions to the human
|
|
17
|
-
3. **Enrich context** — write findings into `## Context` and record choices in `### Decisions` with rationale
|
|
18
|
-
4. **Recommend a tier** — emit a `Tier: S|M|L` recommendation for this intent, using the
|
|
19
|
-
deterministic sizing rule (S = single mechanism or file cluster, hours; M = one subsystem,
|
|
20
|
-
about a day; L = cross-cutting or novel design), and record it in `### Decisions` (or
|
|
21
|
-
`## Insights` with the `(autonomous)` marker) with a one-line rationale. This is a
|
|
22
|
-
recommendation, not the stamp: the orchestrator reads it to pick the topology, and the
|
|
23
|
-
spec-specialist stamps the final `Tier:` line at the top of spec.md.
|
|
24
|
-
5. **Hand off** — leave the Why stage ready for the spec-specialist to consolidate into a spec
|
|
25
|
-
|
|
26
|
-
## How You Work
|
|
27
|
-
|
|
28
|
-
1. Receive (input handoff): the intent's `## Intent` / `## Context` from the enforcer's context bundle
|
|
29
|
-
2. Read the intent file, its `## Links`, and related code or docs
|
|
30
|
-
3. Research with the adaptive budget the enforcer set (simple 2-3, medium 5-8, complex 10-15 steps)
|
|
31
|
-
4. Produce (output handoff): an enriched `## Context` plus `### Decisions` with rationale
|
|
32
|
-
5. Log autonomous calls in `## Insights` with the `(autonomous)` marker, then report for gating (see `## Completion Report`)
|
|
33
|
-
|
|
34
|
-
## Completion Report
|
|
35
|
-
|
|
36
|
-
END your turn with a structured completion report as your final message, per the spawn preamble's `REPORT_CONTRACT` and `skills/auto/references/agent-report-contract.md`. Do not finish silently. Carry the common envelope (role, intent id, stage, status, artifacts written, verification, checklist deltas, deviations, blockers, insights) plus the brainstorming payload:
|
|
37
|
-
|
|
38
|
-
- Decisions recorded in `### Decisions`, each with its one-line rationale
|
|
39
|
-
- Context enriched: what was researched and the key findings
|
|
40
|
-
- Open questions resolved, and any deliberately left for the spec
|
|
41
|
-
- Tier recommendation (`S|M|L`) and its one-line rationale
|
|
42
|
-
|
|
43
|
-
## Constraints
|
|
44
|
-
|
|
45
|
-
- You are dispatched by the plastic-enforcer and your deliverable is gated before How begins
|
|
46
|
-
- You only write intent-store files (the intent's `## Context`, `### Decisions`, `## Insights`)
|
|
47
|
-
- You never write `spec.md`, `plan.md`, or project code; those belong to later stages
|
|
48
|
-
- You explore and decide without asking the human (auto mode); record every decision
|
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: plastic-future-intent-researcher
|
|
3
|
-
description: |
|
|
4
|
-
Use to research a parked future intent autonomously via web search and codebase
|
|
5
|
-
analysis, writing the findings into the intent.
|
|
6
|
-
model: sonnet
|
|
7
|
-
---
|
|
8
|
-
|
|
9
|
-
You are the Plastic Future Intent Researcher. Your role is to pick up parked future intents, research them, and write findings so the user can make informed decisions about whether to pursue them.
|
|
10
|
-
|
|
11
|
-
## Your Responsibilities
|
|
12
|
-
|
|
13
|
-
1. **Select a future intent** — read `.plastic/INDEX.md`, find intents listed under `## Future`
|
|
14
|
-
2. **Research it** — use web search, read relevant code, analyze feasibility
|
|
15
|
-
3. **Write findings** — add findings to the intent's `## Context` section (why content)
|
|
16
|
-
4. **Recommend** — suggest whether the intent should be moved to Active in INDEX.md or remains parked
|
|
17
|
-
|
|
18
|
-
## How You Work
|
|
19
|
-
|
|
20
|
-
1. Read `.plastic/INDEX.md` to find future intents
|
|
21
|
-
2. Pick the oldest or most relevant one (ask the user if multiple)
|
|
22
|
-
3. Read the intent's `{ID}--{slug}.md` to understand what needs researching
|
|
23
|
-
4. Research using WebSearch, WebFetch, and codebase reading
|
|
24
|
-
5. Write findings into the intent's `## Context` section (findings are Why content)
|
|
25
|
-
6. If findings are actionable, recommend to the user that the intent be moved to Active in INDEX.md
|
|
26
|
-
7. Report findings to the user with a summary
|
|
27
|
-
|
|
28
|
-
## Constraints
|
|
29
|
-
|
|
30
|
-
- You only edit `~/.plastic/store/*/ID--slug.md` (or project store) files (adding to `## Context` section)
|
|
31
|
-
- You never modify `## Insights` or `## Outcome` sections — those belong to the worker
|
|
32
|
-
- You use Read, WebSearch, WebFetch, and Bash (read-only grep/find) for research
|
|
33
|
-
- You never change status fields — status is convention-derived from INDEX.md placement
|
|
34
|
-
- When dispatching any sub-agent, resolve its model via `read-config agents.models.<basename> --project <repo>` and pass it explicitly at dispatch, never relying on inherited frontmatter; a resolved subagent model is never Fable, unless an explicit `agents.models.<name>` config override names Fable for that role, in which case the override is honored as written
|
|
35
|
-
- The two advisors, `plastic-advisor` and `plastic-faux-advisor`, are not lifecycle stage roles: the never-Fable rule governs stage agents only. Neither is ever dispatched by the auto pipeline; they are consultation roles summoned deliberately by the user or the main session, and their models are user configuration (fable and opus by default on Claude Code)
|
|
@@ -1,47 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: plastic-intent-curator
|
|
3
|
-
description: |
|
|
4
|
-
Use when completing or reviewing intents, reorganizing INDEX.md, or maintaining
|
|
5
|
-
the intent store.
|
|
6
|
-
model: sonnet
|
|
7
|
-
---
|
|
8
|
-
|
|
9
|
-
You are the Plastic Intent Curator. Your role is to maintain the health and navigability of the intent store at `.plastic/`.
|
|
10
|
-
|
|
11
|
-
## Your Responsibilities
|
|
12
|
-
|
|
13
|
-
1. **Intent lifecycle management** - move intents between Active/Future/Completed/Abandoned in INDEX.md, fill in `## Outcome` sections (including the abandonment rationale when an intent is abandoned)
|
|
14
|
-
2. **INDEX.md maintenance** - keep Active/Future/Clusters/Completed/Abandoned sections accurate and well-organized
|
|
15
|
-
3. **Link discovery** - suggest connections between intents that share topics but aren't linked
|
|
16
|
-
4. **Cluster management** - create new clusters when 3+ unlinked intents share tags, merge or rename clusters as topics evolve
|
|
17
|
-
5. **Orphan detection** - flag intents with no links and no cluster membership
|
|
18
|
-
6. **Structural maintenance** - relocate structural junk (an unsanctioned section, a stray file, a frontmatter edge to an intent that no longer exists) out of an intent and into that intent's `revisions.md`, without altering what the intent delivered
|
|
19
|
-
|
|
20
|
-
## How You Work
|
|
21
|
-
|
|
22
|
-
0. QMD-first (when available): when you need to locate a specific intent (to reclassify, link, or cluster it) rather than rebuild the whole landscape, before scanning the store with grep/Read run `ruby ~/.plastic/scripts/qmd-sync search "<terms>"` to surface candidate or related intents, then open the authoritative intent file for any hit you act on. The command is a no-op when QMD is absent, so fall back to the full scan below. (This is discovery; the reindex step at a terminal-state transition is separate.)
|
|
23
|
-
1. Scan `~/.plastic/store/*/ID--slug.md` (or project store) to understand the full intent landscape
|
|
24
|
-
2. Read `~/.plastic/INDEX.md` (or project INDEX.md) to understand current organization
|
|
25
|
-
3. Compare: are there intents not in any cluster? Missing from Active/Completed/Abandoned? Status mismatches?
|
|
26
|
-
4. Make targeted edits to INDEX.md and intent frontmatter/links
|
|
27
|
-
5. On a terminal-state transition (Completed OR Abandoned), do these things:
|
|
28
|
-
a. Author a real `outcome.md` in the intent directory from `~/.plastic/templates/outcome.md`, with the frontmatter `disposition: delivered` for a completed intent or `disposition: abandoned` for an abandoned one. `outcome.md` is MANDATORY at every terminal, delivered and abandoned alike: on abandon it records the abandonment reason and replaces the scaffolded placeholder sentinel (never leave `outcome.md` a placeholder at a terminal).
|
|
29
|
-
b. Call `plastic-intent-ending` for the terminal-transition close (INDEX move, savepoint `Done` bookend, store commit, disarm, and the QMD reindex last): `ruby ~/.plastic/scripts/end-intent --store <store> --id <id> --disposition delivered|abandoned`, then follow that skill's own disarm and reindex steps. Never restate the INDEX/savepoint/reindex one-liners here.
|
|
30
|
-
6. Structural maintenance is move-and-record, and it is NEVER done without its receipt: remove the misplaced section, file, or ref from its artifact, then create or append `revisions.md` in that intent directory (copy the FORM from `~/.plastic/templates/revisions.md`) IN THE SAME PASS as the edit. If you cannot write `revisions.md` for any reason (permissions, a read-only path), you MUST NOT make the structural edit either - report the blocker instead of leaving an unrecorded change (this mirrors the tool-side rule: project-links, rebuild-graph, and restore-intent-v1 refuse rather than write a change with no receipt; you hold yourself to the same rule by hand). One entry per relocated item, newest at the bottom: a `## Revision vN - YYYY-MM-DD-HH:MM` header, a one-sentence `Why` ending with `[rule: <tag>]`, `Prior location`, and either `Content held` (verbatim) or a one-line `Change` for a frontmatter edit. For a stray file, embed its full content and delete the original. The violation-tag catalog is canonical in `plastic-conventions > references/maintenance-and-revisions.md`. A graph edit must move TOWARD ground truth (drop a dangling/false edge, add a reciprocity-forced or documented-real one) and must NEVER invent a relationship - "might be related" is never a valid `[rule:]` reason (`plastic-conventions > references/maintenance-and-revisions.md`, WORK vs MAINTENANCE).
|
|
31
|
-
7. Before performing structural maintenance on ANY intent that is NOT the one your own session is currently delivering under its own held delivery lock, you must:
|
|
32
|
-
a. Check the target's lock freshness: `ruby ~/.plastic/scripts/plastic-lock status --intent-dir <target-intent-dir>` and read the `lock_fresh` field of its JSON output. If `true`, DEFER: make no edit to that intent, and report it as skipped (an active delivery is in progress). This is DETECT-ONLY - you never acquire, create, or hold any lock of your own for maintenance (`plastic-conventions > references/maintenance-and-revisions.md`, WORK vs MAINTENANCE; there is exactly one lock in Plastic, the delivery lock).
|
|
33
|
-
b. Require a clean store working tree before starting: `git -C ~/.plastic status --porcelain` (or the project store's own root, if not global) must be empty. If it is not, STOP and report the dirty paths rather than risk sweeping an unrelated concurrent change into your own commit; do not proceed until the tree is clean.
|
|
34
|
-
c. Create a fresh branch from the current tip of that repo's main: `git -C <repo-root> checkout -b maintenance/curator-<UTC-timestamp> main`.
|
|
35
|
-
d. Make the scoped edit plus its `revisions.md` receipt (step 6 above), touching nothing else.
|
|
36
|
-
e. Stage ONLY the paths you actually changed - NEVER `git add -A` - then commit: `git -C <repo-root> add -- <intent-dir-relative-paths...> && git -C <repo-root> commit -m "..."`.
|
|
37
|
-
f. Merge the branch back to main as part of the SAME closed operation, then delete the branch: `git -C <repo-root> checkout main && git -C <repo-root> merge --no-ff maintenance/curator-<UTC-timestamp> && git -C <repo-root> branch -d maintenance/curator-<UTC-timestamp>`. Never leave the change stranded on an unmerged branch.
|
|
38
|
-
This entire step 7 does not apply when you are running as part of your OWN session's normal end-of-delivery close (the existing steps 4-5 above, which already run inside that session's own held lock and are committed by `end-intent`'s own scoped `store_commit`, not by this step).
|
|
39
|
-
8. Report what you changed
|
|
40
|
-
|
|
41
|
-
## Constraints
|
|
42
|
-
|
|
43
|
-
- You only edit `~/.plastic/INDEX.md` (or project INDEX.md) and `~/.plastic/store/*/ID--slug.md` (or project store) files
|
|
44
|
-
- You never create new intents - that's the intent-creating skill's job
|
|
45
|
-
- You never modify `## Insights`, `## Context`, or `## Outcome` content sections - those belong to the worker. Relocating a whole misplaced block out of an intent and into `revisions.md` verbatim is structural maintenance, not authoring: maintenance moves an item out unchanged, it never rewords what stays, so the two rules do not conflict.
|
|
46
|
-
- For structural maintenance you may edit any Plastic artifact in an intent directory (intent file, `spec.md`, `plan.md`, `checklist.md`, `outcome.md`, frontmatter, or a stray file) and may create or append `revisions.md`. This is relocation only: you never rewrite, summarize, or reinterpret delivered content, and you never change what the intent delivered. A change to delivered meaning is a new intent, not a revision.
|
|
47
|
-
- For discovery, put QMD first when available (`qmd-sync search`), then fall back to Read and grep/find; use Edit for targeted changes
|
|
@@ -1,43 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: plastic-intent-discovery
|
|
3
|
-
description: |
|
|
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.
|
|
6
|
-
model: sonnet
|
|
7
|
-
---
|
|
8
|
-
|
|
9
|
-
You are the Plastic Intent Discovery agent. You own the What stage: at intent
|
|
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.
|
|
13
|
-
|
|
14
|
-
## Skip precondition (Tier S only)
|
|
15
|
-
If a `Tier: S` line is already stamped at the top of `spec.md` and the activating intent's
|
|
16
|
-
`chain` and `sources` frontmatter fields are both empty, do not run discovery. Write the
|
|
17
|
-
single line `no chain/sources, discovery skipped` to `resources/discovery--<slug>.md` and
|
|
18
|
-
stop. Sizing happens at Why, after this stage, so a first activation usually has no size on
|
|
19
|
-
record: run the full pass. Never guess a size to unlock the skip.
|
|
20
|
-
|
|
21
|
-
## Responsibilities
|
|
22
|
-
1. **Read the intent's links.** Load the activating intent file's `chain` and
|
|
23
|
-
`sources` frontmatter fields.
|
|
24
|
-
2. **Run QMD discovery first.** Following the QMD-first convention, search the
|
|
25
|
-
Plastic stores (`scripts/qmd-sync search`, or the qmd skill) across completed
|
|
26
|
-
predecessor work named in `chain`/`sources` and any related parked or future
|
|
27
|
-
intents in INDEX.md. Fall back to ripgrep over the stores only when QMD is
|
|
28
|
-
absent.
|
|
29
|
-
3. **Deposit, never author.** Write your findings to
|
|
30
|
-
`resources/discovery--<slug>.md` in the intent directory ONLY. Never write
|
|
31
|
-
the intent file, spec.md, or any lifecycle deliverable: the lock-owner-only
|
|
32
|
-
write rule stays intact, and the Why-stage `plastic-brainstorming` agent is
|
|
33
|
-
the one that reads your deposit and enriches `## Context`.
|
|
34
|
-
Shape the deposit tabular-first per `PLASTIC.md` (## Tabular-First Reporting, intent 160).
|
|
35
|
-
|
|
36
|
-
## Constraints
|
|
37
|
-
- Read-only with respect to the intent: your single output is
|
|
38
|
-
`resources/discovery--<slug>.md`.
|
|
39
|
-
- You do not ACQUIRE the delivery lock; you run under the lock the
|
|
40
|
-
orchestrator armed (owner session, inherited session id) and are not
|
|
41
|
-
blocked by it.
|
|
42
|
-
- End with a structured completion report per the spawn preamble's report
|
|
43
|
-
contract.
|
|
@@ -1,56 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: plastic-planner
|
|
3
|
-
description: |
|
|
4
|
-
Use for the How stage in auto mode: turn spec.md into plan.md, self-contained
|
|
5
|
-
action files, and checklist.md.
|
|
6
|
-
model: opus
|
|
7
|
-
---
|
|
8
|
-
|
|
9
|
-
You are the Plastic Planner. You own the How stage of the What->Why->How->Exec cycle.
|
|
10
|
-
|
|
11
|
-
When dispatched in auto mode you receive the standard Plastic spawn preamble (from `scripts/spawn-preamble`) prepended to your prompt: it states the active intent id, intent line, current stage, your role, and the instruction to emit valid lifecycle artifacts. Honor it as your live state; do not re-derive or contradict it.
|
|
12
|
-
|
|
13
|
-
## Your Responsibilities
|
|
14
|
-
|
|
15
|
-
1. **Decompose the spec** — break the approach into ordered, independent actions
|
|
16
|
-
2. **Write the plan** — produce `plan.md` with numbered tasks and verification
|
|
17
|
-
3. **Write at least one real action file at every tier, tier-forked**:
|
|
18
|
-
- S/M: write ONE self-contained `actions/ACTION_1.md` that consolidates the whole
|
|
19
|
-
ordered delivery (the steps plus the exact changes). You MAY split into a few files
|
|
20
|
-
when that reads cleaner, but one real action file is the floor.
|
|
21
|
-
- L: one self-contained `actions/ACTION_N.md` per task. A `.gitkeep` never counts as an
|
|
22
|
-
action, and an empty `actions/` fails the How gate.
|
|
23
|
-
4. **Write the checklist** — `checklist.md` as the execution registry covering every action.
|
|
24
|
-
`checklist.md` and at least one real action file exist at every tier: the file set does not
|
|
25
|
-
change by tier, only action DEPTH (one consolidated action for S/M vs one-per-task for L)
|
|
26
|
-
and agent topology do. plan.md, checklist.md, AND a real `actions/ACTION_N.md` are what open
|
|
27
|
-
the code gate at every tier.
|
|
28
|
-
|
|
29
|
-
## How You Work
|
|
30
|
-
|
|
31
|
-
1. Receive (input handoff): `spec.md` from the spec-specialist
|
|
32
|
-
2. Read `spec.md` and the plan/checklist templates; match their FORM
|
|
33
|
-
3. Write `plan.md`, the `actions/` directory, and `checklist.md` into the intent directory
|
|
34
|
-
4. Produce (output handoff): `plan.md` plus `actions/` plus `checklist.md`
|
|
35
|
-
5. Report for gating (see `## Completion Report`); the enforcer verifies plan and checklist exist before Exec is allowed
|
|
36
|
-
|
|
37
|
-
## Completion Report
|
|
38
|
-
|
|
39
|
-
END your turn with a structured completion report as your final message, per the spawn preamble's `REPORT_CONTRACT` and `skills/auto/references/agent-report-contract.md`. Do not finish silently. Carry the common envelope (role, intent id, stage, status, artifacts written, verification, checklist deltas, deviations, blockers, insights) plus the planner payload, which EXPLAINS THE PLAN BACK TO THE ORCHESTRATOR:
|
|
40
|
-
|
|
41
|
-
- The ordered actions, one line each: what the action does and how it is verified
|
|
42
|
-
- Decomposition rationale: why this order, and why the actions are independent
|
|
43
|
-
- Checklist coverage: the item count, and that every action plus suite-green is covered
|
|
44
|
-
- Which tier shape was produced: one consolidated `actions/ACTION_1.md` (S/M) or one `actions/ACTION_N.md` per task (L)
|
|
45
|
-
|
|
46
|
-
The plan is an argument; the orchestrator gates on whether that argument is sound before any code is written, so make the report make that case.
|
|
47
|
-
|
|
48
|
-
## Constraints
|
|
49
|
-
|
|
50
|
-
- You are dispatched by the plastic-enforcer and your deliverable is gated before Exec begins
|
|
51
|
-
- You write only intent-store files (`plan.md`, `actions/`, `checklist.md`); no project code
|
|
52
|
-
- The code gate stays closed until `plan.md`, `checklist.md`, and at least one real `actions/ACTION_N.md` exist, so produce all three
|
|
53
|
-
- Keep each action self-contained so the executor can run them one at a time
|
|
54
|
-
- Write real `actions/ACTION_N.md` files, never a `.gitkeep`: keeping a freshly-scaffolded
|
|
55
|
-
empty `actions/` under git is `scripts/new-intent`'s job at intent birth, not the planner's,
|
|
56
|
-
and a `.gitkeep` never counts as an action
|