@zalom/plastic 1.0.2 → 1.1.0
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-reference.md +11 -11
- package/PLASTIC.md +37 -7
- package/README.md +47 -0
- package/agents/plastic-enforcer.md +3 -3
- package/agents/plastic-intent-curator.md +9 -10
- package/agents/plastic-intent-discovery.md +1 -0
- package/agents/plastic-spec-specialist.md +9 -6
- package/bin/plastic.js +2 -2
- package/package.json +1 -1
- package/scripts/dashboard.rb +2 -2
- package/scripts/doctor.rb +55 -7
- package/scripts/end-intent +330 -0
- package/scripts/hook-code-gate +1 -1
- package/scripts/hook-continue +1 -1
- package/scripts/hook-create-gate +2 -2
- package/scripts/hook-session-start +1 -1
- package/scripts/lib/bridge.rb +46 -13
- package/scripts/lib/dashboard_banner.rb +1 -1
- package/scripts/lib/installer_core.rb +8 -6
- package/scripts/lib/lock.rb +3 -3
- package/scripts/lib/store_provisioning.rb +1 -1
- package/scripts/new-intent +1 -1
- package/scripts/{versions.rb → rollback.rb} +33 -41
- package/scripts/update.rb +1 -1
- package/skills/_active-intent-gate.md +1 -1
- package/skills/_decision-tables.md +50 -0
- package/skills/auto/SKILL.md +48 -64
- package/skills/auto/evals/evals.json +4 -4
- package/skills/auto/references/agent-architecture.md +2 -2
- package/skills/auto/references/agent-report-contract.md +3 -0
- package/skills/dashboard/SKILL.md +3 -2
- package/skills/doctor/SKILL.md +4 -3
- package/skills/humanizer/SKILL.md +1 -0
- package/skills/install/SKILL.md +2 -1
- package/skills/{brainstorming → intent-brainstorming}/SKILL.md +44 -45
- package/skills/intent-brainstorming/evals/evals.json +67 -0
- package/skills/{brainstorming → intent-brainstorming}/references/design-principles.md +12 -17
- package/skills/{continuing → intent-continuing}/SKILL.md +4 -3
- package/skills/{continuing → intent-continuing}/evals/evals.json +24 -24
- package/skills/{creating-intent → intent-creating}/SKILL.md +4 -3
- package/skills/{creating-intent → intent-creating}/evals/evals.json +1 -1
- package/skills/{intent-discovery → intent-discovering}/SKILL.md +3 -1
- package/skills/intent-ending/SKILL.md +151 -0
- package/skills/intent-ending/evals/evals.json +74 -0
- package/skills/{executing-plan → intent-executing}/SKILL.md +76 -15
- package/skills/intent-executing/evals/evals.json +66 -0
- package/skills/{brainstorming-grill-me → intent-grilling}/SKILL.md +5 -4
- package/skills/{linking-intents → intent-linking}/SKILL.md +2 -1
- package/skills/{linking-intents → intent-linking}/evals/evals.json +1 -1
- package/skills/{lock → intent-locking}/SKILL.md +2 -1
- package/skills/{writing-plans → intent-planning}/SKILL.md +49 -20
- package/skills/intent-planning/evals/evals.json +66 -0
- package/skills/{writing-plans → intent-planning}/references/plan-format.md +31 -7
- package/skills/{research → intent-researching}/SKILL.md +5 -2
- package/skills/{research → intent-researching}/evals/evals.json +1 -1
- package/skills/{savepoint → intent-savepoint}/SKILL.md +2 -1
- package/skills/intent-speccing/SKILL.md +69 -0
- package/skills/intent-speccing/evals/evals.json +126 -0
- package/skills/intent-speccing/references/per-section-fill-rules.md +92 -0
- package/skills/intent-speccing/references/self-verify-checklist.md +38 -0
- package/skills/intent-starting/SKILL.md +3 -2
- package/skills/intent-starting/evals/evals.json +2 -2
- package/skills/{creating-project → project-creating}/SKILL.md +3 -2
- package/skills/releasing/SKILL.md +19 -14
- package/skills/roadmap/SKILL.md +1 -0
- package/skills/{versions → rollback}/SKILL.md +31 -20
- package/skills/{creating-skills → skill-creating}/SKILL.md +3 -2
- package/skills/{creating-skills → skill-creating}/evals/evals.json +5 -5
- package/skills/{creating-skills → skill-creating}/references/progressive-disclosure.md +2 -2
- package/skills/{creating-skills → skill-creating}/references/skills.md +1 -0
- package/skills/{evaluating-skills → skill-evaluating}/SKILL.md +2 -1
- package/skills/{evaluating-skills → skill-evaluating}/evals/evals.json +3 -3
- package/skills/{intent-curator → store-curating}/SKILL.md +7 -7
- package/skills/{intent-curator → store-curating}/evals/evals.json +1 -1
- package/skills/{managing-index → store-indexing}/SKILL.md +7 -7
- package/skills/{managing-index → store-indexing}/evals/evals.json +1 -1
- package/skills/{add-project-store → store-provisioning}/SKILL.md +3 -2
- package/skills/tutorial/SKILL.md +65 -0
- package/skills/tutorial/evals/evals.json +186 -0
- package/skills/tutorial/references/track-1-guided.md +123 -0
- package/skills/tutorial/references/track-2-auto.md +95 -0
- package/skills/tutorial/references/track-3-projects-and-roadmaps.md +110 -0
- package/skills/uninstall/SKILL.md +1 -0
- package/skills/update/SKILL.md +2 -1
- package/templates/agents.md +7 -7
- package/skills/brainstorming/evals/evals.json +0 -22
- /package/skills/{continuing → intent-continuing}/references/context-management.md +0 -0
- /package/skills/{creating-intent → intent-creating}/references/lifecycle.md +0 -0
- /package/skills/{creating-intent → intent-creating}/references/wikilinks.md +0 -0
- /package/skills/{executing-plan → intent-executing}/code-quality-reviewer-prompt.md +0 -0
- /package/skills/{executing-plan → intent-executing}/implementer-prompt.md +0 -0
- /package/skills/{executing-plan → intent-executing}/spec-reviewer-prompt.md +0 -0
- /package/skills/{linking-intents → intent-linking}/references/zettelkasten.md +0 -0
- /package/skills/{savepoint → intent-savepoint}/references/context-management.md +0 -0
- /package/skills/{creating-project → project-creating}/references/hubs-projects.md +0 -0
- /package/skills/{creating-project → project-creating}/references/project-scaffolding.md +0 -0
- /package/skills/{creating-skills → skill-creating}/references/agents.md +0 -0
- /package/skills/{creating-skills → skill-creating}/references/evals.md +0 -0
- /package/skills/{creating-skills → skill-creating}/references/hooks.md +0 -0
- /package/skills/{creating-skills → skill-creating}/references/scripts.md +0 -0
- /package/skills/{creating-skills → skill-creating}/scripts/scaffold.rb +0 -0
- /package/skills/{evaluating-skills → skill-evaluating}/assets/eval-template.json +0 -0
- /package/skills/{evaluating-skills → skill-evaluating}/references/convention-checks.md +0 -0
- /package/skills/{evaluating-skills → skill-evaluating}/references/eval-methodology.md +0 -0
- /package/skills/{managing-index → store-indexing}/references/zettelkasten-linking.md +0 -0
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: plastic-intent-ending
|
|
3
|
+
description: >
|
|
4
|
+
Wrap, finish, close, or mark an intent Done, delivered or abandoned. Use
|
|
5
|
+
when completing or abandoning an intent, when a checklist reaches 100
|
|
6
|
+
percent and Exec is finished, or when asked to "wrap this up".
|
|
7
|
+
user-invocable: true
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# Intent Ending
|
|
11
|
+
|
|
12
|
+
The one procedure every terminal transition routes through. Auto mode, the
|
|
13
|
+
curator path, and releasing all call this skill (or its backing script,
|
|
14
|
+
`scripts/end-intent`) for the mechanical close instead of restating the same
|
|
15
|
+
prose three times. `abandoned` is the SAME procedure as `delivered`, not a
|
|
16
|
+
failure branch: only outcome.md content and the INDEX section differ.
|
|
17
|
+
|
|
18
|
+
## The 8 steps (0-7)
|
|
19
|
+
|
|
20
|
+
| # | Step | Who does it |
|
|
21
|
+
|---|---|---|
|
|
22
|
+
| 0 | Precondition check | You, before touching outcome.md |
|
|
23
|
+
| 1 | outcome.md + intent-file `## Outcome` summary | `scripts/end-intent` |
|
|
24
|
+
| 2 | INDEX.md terminal move (Active -> Completed/Abandoned) | `scripts/end-intent` |
|
|
25
|
+
| 3 | savepoint `Done` bookend | `scripts/end-intent` |
|
|
26
|
+
| 4 | store auto-commit | `scripts/end-intent` |
|
|
27
|
+
| 5 | disarm (worktree + lock) | You, after end-intent exits 0 |
|
|
28
|
+
| 6 | QMD reindex, async, LAST | You |
|
|
29
|
+
| 7 | EM-to-CTO report | You |
|
|
30
|
+
|
|
31
|
+
Steps 1-4 are ONE callable script, not four separate one-liners: this is
|
|
32
|
+
exactly what the failure mode this intent fixes looked like (releasing hand
|
|
33
|
+
authored the close in prose and dropped the savepoint bookend for two real
|
|
34
|
+
deliveries). Never restate outcome/INDEX/savepoint prose inline again; call
|
|
35
|
+
`scripts/end-intent`.
|
|
36
|
+
|
|
37
|
+
### Step 0. Precondition (the gate is section-blind, not selective)
|
|
38
|
+
|
|
39
|
+
`Bridge.check_gate` (scripts/lib/bridge.rb) is LIVE code already wired into
|
|
40
|
+
the write-time hook. Its outcome.md rule is a blind scan of the WHOLE
|
|
41
|
+
checklist.md: `content.scan(/^- \[ \]/)` counts every unchecked box, in
|
|
42
|
+
every section, with no awareness of which section a box lives in. ANY
|
|
43
|
+
unchecked box anywhere blocks the outcome.md write; there is no exemption
|
|
44
|
+
for orchestrator-owned or completion-tracking items.
|
|
45
|
+
|
|
46
|
+
1. Read checklist.md. Tick every item as it is actually performed, including
|
|
47
|
+
an item that describes the close itself: running this very procedure IS
|
|
48
|
+
what that item describes, so tick it at the moment you begin the close,
|
|
49
|
+
before authoring outcome.md. By the time outcome.md is written,
|
|
50
|
+
checklist.md must read 100 percent checked; there is no other way past
|
|
51
|
+
the gate.
|
|
52
|
+
2. Confirm every acceptance criterion in spec.md is verifiable (tests pass,
|
|
53
|
+
or the manual check described in its HOW line was actually run).
|
|
54
|
+
3. If checklist.md still has an unchecked box, stop here. Finish it first
|
|
55
|
+
(tick it if the described work is actually done, or do the remaining
|
|
56
|
+
work); do not attempt outcome.md and fight the gate's deny.
|
|
57
|
+
|
|
58
|
+
### Step 1-4. Run `scripts/end-intent`
|
|
59
|
+
|
|
60
|
+
First author outcome.md for real (never leave the scaffold placeholder in
|
|
61
|
+
place): copy `templates/outcome.md`, set the frontmatter to
|
|
62
|
+
`disposition: delivered` or `disposition: abandoned`, and fill `## Summary`,
|
|
63
|
+
`## Delivered`, `## Verification`, `## Follow-ups`. On abandon, `## Summary`
|
|
64
|
+
states the abandonment reason and the trail (see Pivot below). Also author
|
|
65
|
+
the rich INDEX entry note now (a short line in the store's existing
|
|
66
|
+
Completed/Abandoned convention: mode/tier, what shipped or why it was
|
|
67
|
+
abandoned, suite result, merge/spawn notes); content authoring stays with
|
|
68
|
+
you, `--index-note` only appends what you write.
|
|
69
|
+
|
|
70
|
+
Then call the script once:
|
|
71
|
+
|
|
72
|
+
```bash
|
|
73
|
+
ruby ~/.plastic/scripts/end-intent \
|
|
74
|
+
--store <store_path> --id <intent_id> --disposition delivered|abandoned \
|
|
75
|
+
--outcome-summary "<one-line ## Outcome summary for the intent file>" \
|
|
76
|
+
--index-note "<rich Completed/Abandoned entry description>"
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
This does all of steps 1-4 in order: guards outcome.md (refuses a missing,
|
|
80
|
+
still-placeholder, or wrong-disposition file with exit 2 and authors
|
|
81
|
+
nothing), stamps the intent file's `## Outcome` section, moves the INDEX.md
|
|
82
|
+
line from `## Active` to `## Completed` or `## Abandoned` (dated today,
|
|
83
|
+
idempotent) with the `--index-note` text appended after the date so the
|
|
84
|
+
entry stays rich, appends the savepoint `Done` bookend, and commits the
|
|
85
|
+
store repo. Omit `--index-note` for a thin id+date entry, add `--no-commit`
|
|
86
|
+
when a separate commit step already covers the store, and `--dry-run` to
|
|
87
|
+
preview with no writes. Exit 0 is success; exit 1 is a usage or resolution
|
|
88
|
+
failure; exit 2 is the outcome.md guard refusing (fix outcome.md and re-run,
|
|
89
|
+
nothing was written).
|
|
90
|
+
|
|
91
|
+
### Step 5. Disarm (worktree + lock)
|
|
92
|
+
|
|
93
|
+
Two branches, decided by how this intent ships:
|
|
94
|
+
|
|
95
|
+
- **Shipped through a release** (the `plastic-releasing` flow reached this
|
|
96
|
+
close): merge the code branch back BEFORE removing the worktrees, via
|
|
97
|
+
`Worktree.finish(bridge_data, merge: true)`. Releasing's own workflow
|
|
98
|
+
already drives this; this skill's job here is only the outcome/INDEX/
|
|
99
|
+
savepoint/commit core above.
|
|
100
|
+
- **Auto mode or the curator path** (no release involved): plain remove,
|
|
101
|
+
branch survives for reclaim.
|
|
102
|
+
```bash
|
|
103
|
+
ruby -r ~/.plastic/scripts/lib/bridge -e \
|
|
104
|
+
'Bridge.disarm_auto(ENV["CLAUDE_CODE_SESSION_ID"], intent_id: "<ID>")'
|
|
105
|
+
```
|
|
106
|
+
`disarm_auto` releases both worktrees, clears the `delivery.lock`, and only
|
|
107
|
+
then makes the bridge purge-eligible, in that order. Never leave an
|
|
108
|
+
orphaned worktree; run `git worktree prune` on a stale reference.
|
|
109
|
+
|
|
110
|
+
### Step 6. QMD reindex, LAST
|
|
111
|
+
|
|
112
|
+
Only after step 5 has released the worktrees and cleared the lock, so the
|
|
113
|
+
index never references state about to disappear:
|
|
114
|
+
|
|
115
|
+
```bash
|
|
116
|
+
ruby ~/.plastic/scripts/qmd-sync reindex --store <store-root> --async
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
No-op when QMD is absent. Runs in the background so it never blocks the
|
|
120
|
+
turn.
|
|
121
|
+
|
|
122
|
+
### Step 7. EM-to-CTO report
|
|
123
|
+
|
|
124
|
+
Brief the human like an engineering manager to a CTO: impact and risk first,
|
|
125
|
+
in plain language, the decision left to them (merge, release, or accept).
|
|
126
|
+
See `outcome.md` for the details; do not restate it verbatim.
|
|
127
|
+
|
|
128
|
+
## Abandoned is the same procedure
|
|
129
|
+
|
|
130
|
+
`disposition: abandoned` runs the identical steps 0-7. The only differences
|
|
131
|
+
are outcome.md content (Summary states why this was abandoned, not what was
|
|
132
|
+
delivered) and the INDEX target section (`## Abandoned` instead of
|
|
133
|
+
`## Completed`). Never branch the mechanical steps by disposition; the
|
|
134
|
+
script already does that internally.
|
|
135
|
+
|
|
136
|
+
## Mid-flight pivot
|
|
137
|
+
|
|
138
|
+
When the work that shipped differs from what spec.md or plan.md originally
|
|
139
|
+
called for, do not retcon those documents. Record the decision once in
|
|
140
|
+
`## Insights`, then let outcome.md carry the truth of what actually
|
|
141
|
+
happened, including the abandoned trail when part of the work was dropped
|
|
142
|
+
mid-flight. outcome.md is truth of delivery; spec and plan stay the
|
|
143
|
+
historical record of what was planned.
|
|
144
|
+
|
|
145
|
+
## Routing
|
|
146
|
+
|
|
147
|
+
`plastic-releasing`, `plastic-auto`, the curator agent, `store-curating`, and
|
|
148
|
+
`store-indexing` all delegate their mechanical close to this skill (or call
|
|
149
|
+
`scripts/end-intent` directly for steps 1-4). None of them restate the
|
|
150
|
+
outcome/INDEX/savepoint prose inline any more; if you find one that does,
|
|
151
|
+
that surface has drifted and should route here instead.
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
{
|
|
2
|
+
"skill_name": "plastic-intent-ending",
|
|
3
|
+
"notes": "Intent 161. Scopes: description triggering (3-6) and behavior (1-2: the two mandatory D6 cases). Case B graduates into test/end_intent_test.rb (test_done_bookend_lands_once_and_is_idempotent) per evaluating-skills conventions.",
|
|
4
|
+
"evals": [
|
|
5
|
+
{
|
|
6
|
+
"id": 1,
|
|
7
|
+
"scope": "behavior",
|
|
8
|
+
"set": "train",
|
|
9
|
+
"prompt": "checklist.md has one unchecked non-completion item. Try to complete the intent.",
|
|
10
|
+
"expected_output": "Defers to the existing Bridge.check_gate hard gate rather than writing outcome.md; tells the user to finish the checklist item first instead of fighting the deny.",
|
|
11
|
+
"files": [],
|
|
12
|
+
"assertions": [
|
|
13
|
+
{ "type": "human", "check": "SKILL.md Step 0 states the gate blocks outcome.md while unchecked non-completion items remain, and instructs finishing the checklist rather than attempting the write", "result": "expect-pass" },
|
|
14
|
+
{ "type": "code", "check": "Bridge.check_gate(intent_dir, 'outcome.md') returns a non-nil block reason when checklist.md has an unchecked '- [ ]' item (scripts/lib/bridge.rb)", "result": "pass" }
|
|
15
|
+
]
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
"id": 2,
|
|
19
|
+
"scope": "behavior",
|
|
20
|
+
"set": "train",
|
|
21
|
+
"prompt": "Run the mechanical close (scripts/end-intent) for a delivered intent with a real outcome.md.",
|
|
22
|
+
"expected_output": "The savepoint Done bookend lands exactly once in savepoint.md, and a second run of the same command does not duplicate it (this is the regression the intent fixes: releasing used to skip this line entirely).",
|
|
23
|
+
"files": [],
|
|
24
|
+
"assertions": [
|
|
25
|
+
{ "type": "human", "check": "SKILL.md Step 1-4 calls scripts/end-intent as one script instead of restating the outcome/INDEX/savepoint one-liners in prose", "result": "expect-pass" },
|
|
26
|
+
{ "type": "code", "check": "test/end_intent_test.rb#test_done_bookend_lands_once_and_is_idempotent is green", "result": "pass" }
|
|
27
|
+
]
|
|
28
|
+
},
|
|
29
|
+
{
|
|
30
|
+
"id": 3,
|
|
31
|
+
"scope": "triggering",
|
|
32
|
+
"set": "train",
|
|
33
|
+
"prompt": "Mark intent 87 done, it shipped.",
|
|
34
|
+
"expected_output": "Activates plastic-intent-ending to run the mechanical close (outcome.md, INDEX move, savepoint bookend, commit, disarm, reindex, report).",
|
|
35
|
+
"files": [],
|
|
36
|
+
"assertions": [
|
|
37
|
+
{ "type": "code", "check": "router CHOICE == plastic-intent-ending", "result": "expect-pass" }
|
|
38
|
+
]
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
"id": 4,
|
|
42
|
+
"scope": "triggering",
|
|
43
|
+
"set": "train",
|
|
44
|
+
"prompt": "This one's not worth finishing, abandon it and wrap this up.",
|
|
45
|
+
"expected_output": "Activates plastic-intent-ending (indirect trigger: 'wrap this up' names no lifecycle vocabulary directly). Abandoned runs the identical procedure, only outcome.md content and the INDEX section differ.",
|
|
46
|
+
"files": [],
|
|
47
|
+
"assertions": [
|
|
48
|
+
{ "type": "code", "check": "router CHOICE == plastic-intent-ending", "result": "expect-pass" }
|
|
49
|
+
]
|
|
50
|
+
},
|
|
51
|
+
{
|
|
52
|
+
"id": 5,
|
|
53
|
+
"scope": "triggering",
|
|
54
|
+
"set": "validation",
|
|
55
|
+
"prompt": "Start work on intent 87.",
|
|
56
|
+
"expected_output": "Does NOT activate plastic-intent-ending; this is a boarding request (plastic-intent-starting), the opposite end of the lifecycle from a close.",
|
|
57
|
+
"files": [],
|
|
58
|
+
"assertions": [
|
|
59
|
+
{ "type": "code", "check": "router CHOICE != plastic-intent-ending", "result": "expect-pass" }
|
|
60
|
+
]
|
|
61
|
+
},
|
|
62
|
+
{
|
|
63
|
+
"id": 6,
|
|
64
|
+
"scope": "triggering",
|
|
65
|
+
"set": "validation",
|
|
66
|
+
"prompt": "Cut a release and tag it v1.2.0.",
|
|
67
|
+
"expected_output": "Does NOT activate plastic-intent-ending directly; activates plastic-releasing, which internally calls scripts/end-intent for the mechanical close as one of its own steps.",
|
|
68
|
+
"files": [],
|
|
69
|
+
"assertions": [
|
|
70
|
+
{ "type": "code", "check": "router CHOICE == plastic-releasing", "result": "expect-pass" }
|
|
71
|
+
]
|
|
72
|
+
}
|
|
73
|
+
]
|
|
74
|
+
}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
---
|
|
2
|
-
name: plastic-executing
|
|
2
|
+
name: plastic-intent-executing
|
|
3
3
|
description: Use when you have a written implementation plan to execute. Default mode is subagent-driven (dispatches fresh subagent per task with two-stage review). Fallback mode is inline execution for environments without subagent support. If superpowers:subagent-driven-development or superpowers:executing-plans are available, delegates to them.
|
|
4
|
+
user-invocable: true
|
|
4
5
|
---
|
|
5
6
|
|
|
6
7
|
# Executing a Plan
|
|
@@ -11,20 +12,33 @@ Load plan from the active intent's `plan.md`, execute all tasks, review between
|
|
|
11
12
|
|
|
12
13
|
**Announce at start:** "I'm using the executing-plan skill to implement this plan."
|
|
13
14
|
|
|
15
|
+
## Step 0: Sync Worktree First
|
|
16
|
+
|
|
17
|
+
Before Step 1 (Load Plan) in either workflow below, sync the code worktree with
|
|
18
|
+
main first, so no edit lands on a path a merged rename or delete already removed:
|
|
19
|
+
|
|
20
|
+
```
|
|
21
|
+
git -C <worktree> fetch origin && git -C <worktree> merge --ff-only origin/main
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
After syncing, verify the plan's target files exist at the paths plan.md names.
|
|
25
|
+
If a named file or directory is missing (renamed or removed upstream), stop and
|
|
26
|
+
report it rather than editing a stale path.
|
|
27
|
+
|
|
14
28
|
## Mode Selection
|
|
15
29
|
|
|
16
30
|
### Check for superpowers first
|
|
17
31
|
If `superpowers:subagent-driven-development` is available as a skill, delegate to it. If only `superpowers:executing-plans` is available, delegate to that. If neither is available, use Plastic's own execution engine below.
|
|
18
32
|
|
|
19
|
-
**CRITICAL
|
|
33
|
+
**CRITICAL: when delegating to superpowers:**
|
|
20
34
|
- Tell the skill that the plan is at `~/.plastic/store/ID--slug/plan.md` (not `docs/superpowers/plans/`)
|
|
21
35
|
- Tell the skill that specs live at `~/.plastic/store/ID--slug/spec.md` (not `docs/superpowers/specs/`)
|
|
22
36
|
- All meta-artifacts must stay inside `~/.plastic/store/ID--slug/`
|
|
23
37
|
- Code files go in the project tree as normal
|
|
24
|
-
- Superpowers skills respect "user preferences for plan/spec location"
|
|
38
|
+
- Superpowers skills respect "user preferences for plan/spec location"; Plastic IS that preference
|
|
25
39
|
|
|
26
40
|
### Subagent-Driven (Default)
|
|
27
|
-
Dispatches a fresh subagent per task. Controller never implements
|
|
41
|
+
Dispatches a fresh subagent per task. Controller never implements, only dispatches, reviews, and tracks progress. Two-stage review after each task: spec compliance first, then code quality.
|
|
28
42
|
|
|
29
43
|
### Inline (Fallback)
|
|
30
44
|
Executes tasks sequentially in the current session. Use when subagents aren't available or user explicitly requests inline mode.
|
|
@@ -34,13 +48,14 @@ To select: user says "inline", "execute inline", or "no subagents".
|
|
|
34
48
|
## Subagent-Driven Workflow
|
|
35
49
|
|
|
36
50
|
### Step 1: Load Plan
|
|
51
|
+
Run Step 0 (Sync Worktree First) before this step.
|
|
37
52
|
1. Read the active intent's `plan.md`
|
|
38
|
-
2. Extract ALL tasks with their full text
|
|
53
|
+
2. Extract ALL tasks with their full text, store in memory. Never make subagents read the plan file.
|
|
39
54
|
3. Create a task list to track progress
|
|
40
55
|
|
|
41
56
|
### Step 2: Execute Each Task
|
|
42
57
|
|
|
43
|
-
For each task sequentially (never parallel
|
|
58
|
+
For each task sequentially (never parallel: conflict risk):
|
|
44
59
|
|
|
45
60
|
**a. Dispatch implementer subagent**
|
|
46
61
|
Use the Agent tool with the implementer prompt template. Include:
|
|
@@ -62,7 +77,8 @@ Use the Agent tool with spec-reviewer prompt. The reviewer reads actual code and
|
|
|
62
77
|
Only after spec compliance passes. Reviews clean code, testing, architecture. Pass/fail.
|
|
63
78
|
- If fail: implementer fixes, quality reviewer re-reviews (loop until pass)
|
|
64
79
|
|
|
65
|
-
**e.
|
|
80
|
+
**e. Tick as it lands, then move to next**
|
|
81
|
+
Follow `## Tick-as-you-land` below: move the task's checklist item to `## Completed` and add a `## Session Log` row in the same edit.
|
|
66
82
|
|
|
67
83
|
### Step 3: Final Review
|
|
68
84
|
After all tasks complete, dispatch a final reviewer for the entire implementation.
|
|
@@ -74,16 +90,17 @@ Capture observations in `## Insights`. When ALL checklist items are checked:
|
|
|
74
90
|
2. Write `## Outcome` summary in the intent file (1-2 sentences)
|
|
75
91
|
3. Move intent from `## Active` to `## Completed` in INDEX.md (with today's date)
|
|
76
92
|
4. Update cluster entries to show `_(completed)_`
|
|
77
|
-
5. Auto-commit: `cd <store-root> && git add . && git commit -m "feat: complete intent <ID
|
|
93
|
+
5. Auto-commit: `cd <store-root> && git add . && git commit -m "feat: complete intent <ID>: <name>"`
|
|
78
94
|
6. QMD reindex LAST (canonical End tail). As the final End-tail step, after the terminal move and any disarm, ALWAYS refresh the QMD search index for this store (no-op when QMD is absent), running in the background so it never blocks the turn: `ruby ~/.plastic/scripts/qmd-sync reindex --store <store-root> --async`. Completion is the lifecycle event that keeps the search index fresh, and the reindex runs last so the index never references a bridge or lock that is about to disappear (see PLASTIC.md `## Delivery Isolation and the Single-Owner Lock`).
|
|
79
95
|
|
|
80
|
-
**This is NOT optional.** An intent with all checklist items done but no Outcome is a broken state. Complete the intent immediately
|
|
96
|
+
**This is NOT optional.** An intent with all checklist items done but no Outcome is a broken state. Complete the intent immediately, do not leave it for later.
|
|
81
97
|
|
|
82
98
|
## Inline Workflow
|
|
83
99
|
|
|
84
100
|
### Step 1: Load and Review Plan
|
|
101
|
+
Run Step 0 (Sync Worktree First) before this step.
|
|
85
102
|
1. Read plan file from active intent
|
|
86
|
-
2. Review critically
|
|
103
|
+
2. Review critically, raise concerns before starting
|
|
87
104
|
3. Create task list to track progress
|
|
88
105
|
|
|
89
106
|
### Step 2: Execute Tasks
|
|
@@ -91,7 +108,7 @@ For each task:
|
|
|
91
108
|
1. Mark as in_progress
|
|
92
109
|
2. Follow each step exactly
|
|
93
110
|
3. Run verifications as specified
|
|
94
|
-
4.
|
|
111
|
+
4. Tick as it lands: follow `## Tick-as-you-land` below
|
|
95
112
|
|
|
96
113
|
### Step 3: Update Intent and Complete
|
|
97
114
|
Capture observations in `## Insights`. When ALL checklist items are checked:
|
|
@@ -100,11 +117,55 @@ Capture observations in `## Insights`. When ALL checklist items are checked:
|
|
|
100
117
|
2. Write `## Outcome` summary in the intent file (1-2 sentences)
|
|
101
118
|
3. Move intent from `## Active` to `## Completed` in INDEX.md (with today's date)
|
|
102
119
|
4. Update cluster entries to show `_(completed)_`
|
|
103
|
-
5. Auto-commit: `cd <store-root> && git add . && git commit -m "feat: complete intent <ID
|
|
120
|
+
5. Auto-commit: `cd <store-root> && git add . && git commit -m "feat: complete intent <ID>: <name>"`
|
|
104
121
|
6. QMD reindex LAST (canonical End tail). As the final End-tail step, after the terminal move and any disarm, ALWAYS refresh the QMD search index for this store (no-op when QMD is absent), running in the background so it never blocks the turn: `ruby ~/.plastic/scripts/qmd-sync reindex --store <store-root> --async`. Completion is the lifecycle event that keeps the search index fresh, and the reindex runs last so the index never references a bridge or lock that is about to disappear (see PLASTIC.md `## Delivery Isolation and the Single-Owner Lock`).
|
|
105
122
|
|
|
106
123
|
**This is NOT optional.** Complete the intent immediately when work is done.
|
|
107
124
|
|
|
125
|
+
## Tick-as-you-land
|
|
126
|
+
|
|
127
|
+
As each task lands, in the same edit: move its checklist item from `## In
|
|
128
|
+
Progress` to `## Completed` in `checklist.md`, and add one `## Session Log`
|
|
129
|
+
row (Date, Items Completed, Notes). Do not batch several tasks' worth of
|
|
130
|
+
checklist updates into one later edit; tick the moment the task is verified,
|
|
131
|
+
before moving to the next task.
|
|
132
|
+
|
|
133
|
+
## Verify before every owner gate
|
|
134
|
+
|
|
135
|
+
Hard rule: before presenting any completed work to the owner, independently
|
|
136
|
+
verify it. Grep or run the artifact the work just produced (the test suite,
|
|
137
|
+
the changed file, the installed output) rather than restating the intended
|
|
138
|
+
change. Never present an unverified claim to the owner. If verification
|
|
139
|
+
fails, fix it before the gate, not after.
|
|
140
|
+
|
|
141
|
+
## Methods report (audits and sweeps)
|
|
142
|
+
|
|
143
|
+
When the work is an audit or a sweep (checking many files or many instances of
|
|
144
|
+
something rather than building one artifact), deposit a methods report to
|
|
145
|
+
`{intent_dir}/resources/` before the gate: what was checked, how it was
|
|
146
|
+
checked, and what was found. This lets the owner review the method, not just
|
|
147
|
+
the conclusion.
|
|
148
|
+
|
|
149
|
+
## Reroute vs dispatch
|
|
150
|
+
|
|
151
|
+
A human-facing instruction like "run /plastic-intent-speccing" means the user
|
|
152
|
+
types that slash command themselves; it is never handed to a
|
|
153
|
+
subagent. Agent-facing dispatch text is a prompt passed to the Agent tool for
|
|
154
|
+
a subagent to execute. Keep the two separate: do not address a slash command
|
|
155
|
+
to a subagent, and do not paste a dispatch prompt at the user.
|
|
156
|
+
|
|
157
|
+
## Owner decisions during Exec
|
|
158
|
+
|
|
159
|
+
When presenting a batch of Exec decisions for the owner to rule, read
|
|
160
|
+
`~/.plastic/_decision-tables.md` and follow the numbered-table procedure,
|
|
161
|
+
persisting each ruling with `--stage Exec`.
|
|
162
|
+
|
|
163
|
+
## Gate position
|
|
164
|
+
|
|
165
|
+
- **Before:** `plan.md` and `checklist.md` exist; the worktree is armed.
|
|
166
|
+
- **Produces:** code changes, a ticked checklist, and (for audits or sweeps) a methods report in `resources/`.
|
|
167
|
+
- **Next:** intent-ending owns `outcome.md` (see intent 161). This skill's own Update-Intent-and-Complete step above is unchanged by this note.
|
|
168
|
+
|
|
108
169
|
## Model Selection for Subagents
|
|
109
170
|
|
|
110
171
|
Match model to task complexity:
|
|
@@ -115,8 +176,8 @@ Match model to task complexity:
|
|
|
115
176
|
## Prompt Templates
|
|
116
177
|
|
|
117
178
|
Subagent prompts are in this skill's directory:
|
|
118
|
-
- `implementer-prompt.md
|
|
119
|
-
- `spec-reviewer-prompt.md
|
|
120
|
-
- `code-quality-reviewer-prompt.md
|
|
179
|
+
- `implementer-prompt.md`: template for implementer subagents
|
|
180
|
+
- `spec-reviewer-prompt.md`: template for spec compliance reviewers
|
|
181
|
+
- `code-quality-reviewer-prompt.md`: template for code quality reviewers
|
|
121
182
|
|
|
122
183
|
Read the appropriate template when dispatching each subagent type.
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
{
|
|
2
|
+
"skill_name": "plastic-intent-executing",
|
|
3
|
+
"notes": "Intent 164. New evals.json for the executing-plan skill: refuse-to-present-unverified, sync-worktree-first, and the reroute-vs-dispatch distinction. All assertions are pending a real observed run per the plastic-evaluating-skills convention.",
|
|
4
|
+
"evals": [
|
|
5
|
+
{
|
|
6
|
+
"id": 1,
|
|
7
|
+
"scope": "behavior",
|
|
8
|
+
"set": "train",
|
|
9
|
+
"prompt": "A task just landed: a new method was added and its test file was written. The agent is about to tell the owner the task is done and move to the next one.",
|
|
10
|
+
"expected_output": "Before presenting the completed task to the owner, the agent independently verifies it: greps the changed file or runs the specific test, rather than restating what it intended to do. It does not present the claim until the grep or test run has actually been observed.",
|
|
11
|
+
"files": [],
|
|
12
|
+
"assertions": [
|
|
13
|
+
{
|
|
14
|
+
"type": "human",
|
|
15
|
+
"check": "a grep or test run against the actual artifact is shown before the owner-facing claim; no claim is presented as done without that observed check",
|
|
16
|
+
"result": "expect-pass"
|
|
17
|
+
}
|
|
18
|
+
]
|
|
19
|
+
},
|
|
20
|
+
{
|
|
21
|
+
"id": 2,
|
|
22
|
+
"scope": "behavior",
|
|
23
|
+
"set": "validation",
|
|
24
|
+
"prompt": "The agent finished implementing a task and, without running anything, tells the owner \"Task 3 is complete and the tests pass.\"",
|
|
25
|
+
"expected_output": "This is a refusal case: the skill does not allow presenting a pass claim without first grepping or running the artifact. The correct behavior is to run the verification first and only then report the observed result.",
|
|
26
|
+
"files": [],
|
|
27
|
+
"assertions": [
|
|
28
|
+
{
|
|
29
|
+
"type": "human",
|
|
30
|
+
"check": "the skill's stated hard rule blocks an unverified claim like this; expected behavior is verify-then-report, not report-then-hope",
|
|
31
|
+
"result": "expect-pass"
|
|
32
|
+
}
|
|
33
|
+
]
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
"id": 3,
|
|
37
|
+
"scope": "behavior",
|
|
38
|
+
"set": "train",
|
|
39
|
+
"prompt": "Execution is starting for an intent whose plan.md was written two days ago; the code worktree has not been touched since.",
|
|
40
|
+
"expected_output": "Before Step 1 (Load Plan), the agent syncs the code worktree with main: `git -C <worktree> fetch origin && git -C <worktree> merge --ff-only origin/main`, then verifies the plan's target files exist at the paths plan.md names before editing any of them.",
|
|
41
|
+
"files": [],
|
|
42
|
+
"assertions": [
|
|
43
|
+
{
|
|
44
|
+
"type": "code",
|
|
45
|
+
"check": "the fetch-and-merge --ff-only sync command runs before Load Plan; target file existence is checked before the first edit",
|
|
46
|
+
"result": "expect-pass"
|
|
47
|
+
}
|
|
48
|
+
]
|
|
49
|
+
},
|
|
50
|
+
{
|
|
51
|
+
"id": 4,
|
|
52
|
+
"scope": "behavior",
|
|
53
|
+
"set": "validation",
|
|
54
|
+
"prompt": "The plan's next step reads \"run /plastic-intent-speccing\" as a human-facing instruction to consolidate the spec once Exec finishes an audit task.",
|
|
55
|
+
"expected_output": "The agent tells the user to type the /plastic-intent-speccing command themselves; it does not dispatch a subagent with that slash-command text as a prompt, and it does not paste an agent-facing dispatch prompt at the user instead.",
|
|
56
|
+
"files": [],
|
|
57
|
+
"assertions": [
|
|
58
|
+
{
|
|
59
|
+
"type": "human",
|
|
60
|
+
"check": "the slash-command instruction is directed at the user, not handed to the Agent tool as a subagent prompt; no dispatch-prompt text leaks into the user-facing message",
|
|
61
|
+
"result": "expect-pass"
|
|
62
|
+
}
|
|
63
|
+
]
|
|
64
|
+
}
|
|
65
|
+
]
|
|
66
|
+
}
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
---
|
|
2
|
-
name: plastic-
|
|
2
|
+
name: plastic-intent-grilling
|
|
3
3
|
description: >-
|
|
4
4
|
Deep brainstorming that interviews the user relentlessly about a plan or design until reaching shared understanding.
|
|
5
5
|
Use when user wants to stress-test a plan, get grilled on their design, or mentions "grill me".
|
|
6
|
-
Pair with plastic-brainstorming for quick ideation and use grill-me for thorough interrogation. If superpowers:brainstorming is installed it complements this skill, but it is not required.
|
|
6
|
+
Pair with plastic-intent-brainstorming for quick ideation and use grill-me for thorough interrogation. If superpowers:brainstorming is installed it complements this skill, but it is not required.
|
|
7
|
+
user-invocable: true
|
|
7
8
|
---
|
|
8
9
|
|
|
9
10
|
# Grill Me — Deep Brainstorming
|
|
@@ -94,7 +95,7 @@ This offer replaces the final question in Close Out ("Ready to plan implementati
|
|
|
94
95
|
|
|
95
96
|
## Relationship to superpowers:brainstorming
|
|
96
97
|
|
|
97
|
-
| | superpowers:brainstorming | plastic-
|
|
98
|
+
| | superpowers:brainstorming | plastic-intent-grilling |
|
|
98
99
|
|---|---|---|
|
|
99
100
|
| Speed | Quick (5-10 min) | Thorough (20-45 min) |
|
|
100
101
|
| Depth | Surface-level exploration | Exhaustive decision tree |
|
|
@@ -102,4 +103,4 @@ This offer replaces the final question in Close Out ("Ready to plan implementati
|
|
|
102
103
|
| Output | Initial spec | Battle-tested spec with all branches resolved |
|
|
103
104
|
| Style | Collaborative, exploratory | Interrogative, relentless |
|
|
104
105
|
|
|
105
|
-
Use `superpowers:brainstorming` to generate ideas. Use `plastic-
|
|
106
|
+
Use `superpowers:brainstorming` to generate ideas. Use `plastic-intent-grilling` to pressure-test them.
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
---
|
|
2
|
-
name: plastic-linking
|
|
2
|
+
name: plastic-intent-linking
|
|
3
3
|
description: Use when creating connections between intents, the user says "link" or "connect", or when discovering that two intents are related. Manages sources, chain, and cross-reference links.
|
|
4
|
+
user-invocable: false
|
|
4
5
|
---
|
|
5
6
|
|
|
6
7
|
# Linking Intents
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
{
|
|
2
|
-
"skill_name": "plastic-linking
|
|
2
|
+
"skill_name": "plastic-intent-linking",
|
|
3
3
|
"notes": "Intent 66a. Spec for the QMD-first discovery step (surface candidate/related intents to propose as sources/chain before grep/Read). Runner is intent 76; this case is a spec, not executed.",
|
|
4
4
|
"evals": [
|
|
5
5
|
{
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
---
|
|
2
|
-
name:
|
|
2
|
+
name: plastic-intent-locking
|
|
3
3
|
description: Inspect, repair, release, or reclaim an intent's delivery lock. Use when a lock-gate deny names /plastic-lock, when resuming interrupted work after a crash, reboot, or /tmp wipe, when a lock reads held or stale, or when the user says "fix the lock", "who holds the lock", or "reclaim the lock".
|
|
4
|
+
user-invocable: false
|
|
4
5
|
---
|
|
5
6
|
|
|
6
7
|
# Plastic Lock
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
---
|
|
2
|
-
name: plastic-
|
|
3
|
-
description: "Write implementation plans from a spec. Produces plan.md, checklist.md, and actions/ in the active intent directory."
|
|
2
|
+
name: plastic-intent-planning
|
|
3
|
+
description: "Write implementation plans from a spec. Produces plan.md, checklist.md, and (L tier only) actions/ in the active intent directory."
|
|
4
|
+
user-invocable: true
|
|
4
5
|
---
|
|
5
6
|
|
|
6
7
|
# Writing Plans
|
|
@@ -11,22 +12,31 @@ Write comprehensive implementation plans assuming the engineer has zero context
|
|
|
11
12
|
|
|
12
13
|
Assume they are a skilled developer, but know almost nothing about our toolset or problem domain. Assume they don't know good test design very well.
|
|
13
14
|
|
|
14
|
-
**Announce at start:** "I'm using the writing-plans skill to plan intent {id}
|
|
15
|
+
**Announce at start:** "I'm using the writing-plans skill to plan intent {id}: {name}."
|
|
15
16
|
|
|
16
17
|
## Active Intent Gate
|
|
17
18
|
|
|
18
19
|
Before proceeding, resolve the active intent:
|
|
19
20
|
|
|
20
21
|
1. **Detect store:** Read `~/.plastic/projects.yml`, match CWD against registered project paths. If match → project store at `~/.plastic/projects/{slug}/store/`. If no match → global store at `~/.plastic/store/`.
|
|
21
|
-
2. **Find active intent:** Read `INDEX.md` from the detected store. Look under `## Active`. If exactly one → use it. If multiple → ask which. If none → refuse: "No active intent. Create one first with /plastic-creating
|
|
22
|
+
2. **Find active intent:** Read `INDEX.md` from the detected store. Look under `## Active`. If exactly one → use it. If multiple → ask which. If none → refuse: "No active intent. Create one first with /plastic-intent-creating"
|
|
22
23
|
3. **Resolve intent directory:** `{store}/store/{id}--{slug}/`
|
|
23
|
-
4. **Read spec:** Load `{intent_dir}/spec.md`. If no spec exists → refuse: "No spec found. Run /plastic-
|
|
24
|
+
4. **Read spec:** Load `{intent_dir}/spec.md`. If no spec exists → refuse: "No spec found. Run /plastic-intent-speccing first."
|
|
24
25
|
|
|
25
26
|
All artifacts go to the intent directory. Never write to external paths.
|
|
26
27
|
|
|
27
28
|
## Scope Check
|
|
28
29
|
|
|
29
|
-
If the spec covers multiple independent subsystems, it should have been broken into sub-project specs during brainstorming. If it wasn't, suggest breaking this into separate plans
|
|
30
|
+
If the spec covers multiple independent subsystems, it should have been broken into sub-project specs during brainstorming. If it wasn't, suggest breaking this into separate plans, one per subsystem. Each plan should produce working, testable software on its own.
|
|
31
|
+
|
|
32
|
+
## Tier shapes
|
|
33
|
+
|
|
34
|
+
Read the spec's stamped `Tier:` line (written by intent-speccing) and pick the plan shape it calls for:
|
|
35
|
+
|
|
36
|
+
- **S or M (default):** an inline plan-as-checklist. Tasks live directly in `plan.md` with rationale inline; `checklist.md` mirrors the task list. Do NOT create any `actions/` files. Leave the `actions/` directory empty (or absent).
|
|
37
|
+
- **L (many independent tasks, dispatched in parallel):** self-contained `actions/ACTION_N.md`, one per task, each readable without the plan (see `references/plan-format.md`).
|
|
38
|
+
|
|
39
|
+
Default to inline for S and M. Reserve `actions/` for L, where tasks are independent enough to hand to separate subagents in parallel. When in doubt, prefer inline; creating unnecessary `actions/` files is a plan failure at S/M tier.
|
|
30
40
|
|
|
31
41
|
## File Structure
|
|
32
42
|
|
|
@@ -58,48 +68,67 @@ into tasks matching the Task Structure shape.
|
|
|
58
68
|
|
|
59
69
|
## No Placeholders
|
|
60
70
|
|
|
61
|
-
Every step must contain the actual content an engineer needs. These are **plan failures
|
|
71
|
+
Every step must contain the actual content an engineer needs. These are **plan failures**, never write them:
|
|
62
72
|
- "TBD", "TODO", "implement later", "fill in details"
|
|
63
73
|
- "Add appropriate error handling" / "add validation" / "handle edge cases"
|
|
64
74
|
- "Write tests for the above" (without actual test code)
|
|
65
|
-
- "Similar to Task N" (repeat the code
|
|
75
|
+
- "Similar to Task N" (repeat the code; the engineer may be reading tasks out of order)
|
|
66
76
|
- Steps that describe what to do without showing how (code blocks required for code steps)
|
|
67
77
|
- References to types, functions, or methods not defined in any task
|
|
68
78
|
|
|
69
79
|
## Remember
|
|
70
80
|
- Exact file paths always
|
|
71
|
-
- Complete code in every step
|
|
81
|
+
- Complete code in every step: if a step changes code, show the code
|
|
72
82
|
- Exact commands with expected output
|
|
73
83
|
- DRY, YAGNI, TDD, frequent commits
|
|
74
84
|
|
|
75
85
|
## Self-Review
|
|
76
86
|
|
|
77
|
-
After writing the complete plan, look at the spec with fresh eyes and check the plan against it. This is a checklist you run yourself
|
|
87
|
+
After writing the complete plan, look at the spec with fresh eyes and check the plan against it. This is a checklist you run yourself, not a subagent dispatch.
|
|
78
88
|
|
|
79
89
|
**1. Spec coverage:** Skim each section/requirement in the spec. Can you point to a task that implements it? List any gaps.
|
|
80
90
|
|
|
81
|
-
**2. Placeholder scan:** Search your plan for red flags
|
|
91
|
+
**2. Placeholder scan:** Search your plan for red flags, any of the patterns from the "No Placeholders" section above. Fix them.
|
|
82
92
|
|
|
83
93
|
**3. Type consistency:** Do the types, method signatures, and property names you used in later tasks match what you defined in earlier tasks? A function called `clear_layers` in Task 3 but `clear_full_layers` in Task 7 is a bug.
|
|
84
94
|
|
|
85
|
-
If you find issues, fix them inline. No need to re-review
|
|
95
|
+
If you find issues, fix them inline. No need to re-review, just fix and move on. If you find a spec requirement with no task, add the task.
|
|
86
96
|
|
|
87
97
|
## Plastic Artifacts
|
|
88
98
|
|
|
89
|
-
After writing `plan.md`, create
|
|
90
|
-
|
|
91
|
-
`actions/ACTION_N.md` (one self-contained file per
|
|
92
|
-
directory inside the intent directory). For
|
|
93
|
-
`
|
|
99
|
+
After writing `plan.md`, create `checklist.md` (execution registry following the
|
|
100
|
+
FORM: `## In Progress`, `## Completed`, `## Session Log`) in the intent directory.
|
|
101
|
+
For L tier only, also create `actions/ACTION_N.md` (one self-contained file per
|
|
102
|
+
task, in an `actions/` directory inside the intent directory). For S/M tier, do
|
|
103
|
+
not create `actions/` files at all (see Tier shapes above). For the exact format
|
|
104
|
+
of both, read `references/plan-format.md`.
|
|
105
|
+
|
|
106
|
+
## Owner-decision hard-gate items
|
|
107
|
+
|
|
108
|
+
When a task depends on an owner decision that must be made before any code edit
|
|
109
|
+
happens (a destructive step, a structural ruling, a merge that must land first),
|
|
110
|
+
add a checklist item prefixed `[ORCHESTRATOR]` that names the decision and states
|
|
111
|
+
plainly that it blocks all code edits until the owner rules on it. Order these
|
|
112
|
+
items first: destructive or structural rulings apply before the sweeping edits
|
|
113
|
+
that depend on them.
|
|
114
|
+
|
|
115
|
+
When collecting owner rulings for `[ORCHESTRATOR]` hard-gate items, read
|
|
116
|
+
`~/.plastic/_decision-tables.md` and follow the numbered-table procedure.
|
|
117
|
+
|
|
118
|
+
## Gate position
|
|
119
|
+
|
|
120
|
+
- **Before:** `spec.md` exists.
|
|
121
|
+
- **Produces:** `plan.md` and `checklist.md` (plus `actions/` for L tier only).
|
|
122
|
+
- **Next:** /plastic-intent-executing.
|
|
94
123
|
|
|
95
124
|
## Git Commit
|
|
96
125
|
|
|
97
|
-
After writing all artifacts (plan.md, checklist.md, actions/), commit to the store:
|
|
126
|
+
After writing all artifacts (plan.md, checklist.md, actions/ for L tier), commit to the store:
|
|
98
127
|
|
|
99
128
|
```bash
|
|
100
|
-
cd {store_root} && git add . && git commit -m "docs: plan for intent {id}
|
|
129
|
+
cd {store_root} && git add . && git commit -m "docs: plan for intent {id}: {name}"
|
|
101
130
|
```
|
|
102
131
|
|
|
103
132
|
## Execution Handoff
|
|
104
133
|
|
|
105
|
-
Plan complete. Invoke `plastic-executing
|
|
134
|
+
Plan complete. Invoke `plastic-intent-executing` to begin execution.
|