@zalom/plastic 1.14.0 → 2.0.0-alpha.1
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/config_asks.yml +38 -0
- package/hooks/capture +4 -0
- package/hooks/check-update +12 -3
- package/hooks/close +5 -0
- package/hooks/hooks.json +9 -49
- package/hooks/record +4 -0
- package/package.json +3 -2
- package/scripts/agent-report +8 -9
- package/scripts/append-ledger +195 -0
- package/scripts/codex-hook +101 -95
- package/scripts/dashboard.rb +4 -4
- package/scripts/doctor.rb +106 -43
- package/scripts/end-intent +77 -76
- package/scripts/exec-worktree +11 -20
- package/scripts/file-session-intent +61 -0
- package/scripts/hook-capture +242 -0
- package/scripts/hook-close +34 -0
- package/scripts/hook-record +149 -0
- package/scripts/hook-session-start +95 -12
- package/scripts/install.rb +8 -6
- package/scripts/lib/agent_models.rb +1 -7
- package/scripts/lib/arm.rb +283 -0
- package/scripts/lib/backfill_intent.rb +316 -0
- package/scripts/lib/bridge.rb +24 -1597
- package/scripts/lib/doctor_core.rb +17 -88
- package/scripts/lib/doctor_session_ledger.rb +106 -0
- package/scripts/lib/exec_worktree.rb +14 -60
- package/scripts/lib/harness_text.rb +5 -4
- package/scripts/lib/hook_registry.rb +44 -107
- package/scripts/lib/insights.rb +3 -4
- package/scripts/lib/installer_core.rb +19 -30
- package/scripts/lib/lock.rb +6 -26
- package/scripts/lib/outcome_guard.rb +7 -5
- package/scripts/lib/project_validator.rb +30 -1
- 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 +320 -0
- package/scripts/lib/scaffold_intent.rb +13 -179
- package/scripts/lib/session_backfill.rb +184 -0
- package/scripts/lib/session_close.rb +84 -0
- package/scripts/lib/session_git.rb +469 -0
- package/scripts/lib/session_ledger.rb +497 -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 +94 -41
- package/scripts/promote-session-item +150 -0
- package/scripts/rebuild-graph +1 -1
- package/scripts/roadmap-next +2 -2
- package/scripts/rollback.rb +42 -3
- package/scripts/scaffold-intent +37 -63
- package/scripts/session-commit +116 -0
- package/scripts/spawn-preamble +5 -5
- package/scripts/update.rb +7 -3
- package/skills/agent-advisor/SKILL.md +3 -3
- package/skills/agent-advisor/references/advisor-protocol.md +20 -20
- package/skills/auto/SKILL.md +218 -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 +8 -8
- 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 +47 -55
- 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 +131 -89
- package/skills/intent-continuing/references/boarding-matrix.md +34 -0
- package/skills/intent-continuing/references/context-management.md +2 -2
- package/skills/intent-creating/SKILL.md +2 -2
- package/skills/intent-creating/references/lifecycle.md +1 -1
- package/skills/intent-ending/SKILL.md +28 -37
- package/skills/intent-ending/evals/evals.json +4 -4
- package/skills/intent-executing/SKILL.md +12 -49
- 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/project.yml +7 -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
|
@@ -1,103 +1,145 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: plastic-intent-continuing
|
|
3
3
|
description: >-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
4
|
+
The front door for resuming work. Use when the user says "continue", "resume", "pick up
|
|
5
|
+
where we left off", "where was I", "what should I work on", names a specific intent to
|
|
6
|
+
resume (by id or description, or `--intent {id}`), or names a roadmap or delivery batch to
|
|
7
|
+
resume (`--roadmap {slug}`, "where is the roadmap", "where did that batch land"). Presents
|
|
8
|
+
state and resumes at the last delivered station; it never asks auto or guided, never boots
|
|
9
|
+
(the SessionStart hook owns boot), and never drives work autonomously (plastic-auto does).
|
|
10
|
+
Absorbs the former continuing, project-continuing, and roadmap-continuing skills and the
|
|
11
|
+
read half of the former intent-starting skill (intent 304).
|
|
10
12
|
user-invocable: true
|
|
11
13
|
---
|
|
12
14
|
|
|
13
|
-
# Continuing
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
**Boot is not this skill's job.**
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
15
|
+
# Continuing: the front door for resuming work
|
|
16
|
+
|
|
17
|
+
One skill with three routes. It reads state and presents it; the work itself continues in
|
|
18
|
+
whatever mode the session is in (direct by default, `plastic-auto` when the owner says auto).
|
|
19
|
+
There is no lock to take and no mode to ask here: locks exist only for auto teams, and the
|
|
20
|
+
mode is the owner's word, not a question this skill puts.
|
|
21
|
+
|
|
22
|
+
**Boot is not this skill's job.** `hook-session-start` runs on every session start: the core
|
|
23
|
+
health check (`doctor --core`), `PLASTIC.md` and store or project state, the
|
|
24
|
+
`Plastic Core loaded - v{version}` banner. By the time this skill runs, core is loaded and
|
|
25
|
+
healthy or the banner already warned.
|
|
26
|
+
|
|
27
|
+
## Route
|
|
28
|
+
|
|
29
|
+
| Args or context | Route |
|
|
30
|
+
|---|---|
|
|
31
|
+
| `--intent {id}`, or the user names one specific intent to resume (by id or description) | Intent route (below) |
|
|
32
|
+
| `--roadmap {slug}`, or the user asks to continue or resume a roadmap or delivery batch | Roadmap route (below) |
|
|
33
|
+
| bare "continue", "resume", "what should I work on", or no target (the default) | Project route (below) |
|
|
34
|
+
|
|
35
|
+
State the chosen route in one line before doing anything ("Landing on the project board: no
|
|
36
|
+
specific intent or roadmap named.").
|
|
37
|
+
|
|
38
|
+
## Determine store
|
|
39
|
+
|
|
40
|
+
1. A project store under `~/.plastic/projects/{slug}/` whose registered path in
|
|
41
|
+
`~/.plastic/projects.yml` matches the working directory means project mode; the
|
|
42
|
+
SessionStart hook already detected this, the slug scopes the reads below.
|
|
43
|
+
2. Otherwise the global store, `~/.plastic/store/`.
|
|
44
|
+
3. Neither exists: announce "No Plastic store found. Run /plastic-install." and stop.
|
|
45
|
+
|
|
46
|
+
## Project route: land on the board
|
|
47
|
+
|
|
48
|
+
Land on the Markdown board through the `plastic-dashboard` skill; rendering belongs there.
|
|
49
|
+
Run the data payload and fill the matching template:
|
|
50
|
+
- project loaded: `ruby ~/.plastic/scripts/dashboard.rb project <slug> --data`
|
|
51
|
+
- otherwise (the global fallback): `ruby ~/.plastic/scripts/dashboard.rb continue --data`
|
|
52
|
+
|
|
53
|
+
Fill the template from `plastic-dashboard`'s `templates/` and present the filled Markdown in
|
|
54
|
+
your reply, every time: tool-call stdout and hook context are invisible to the user. Read
|
|
55
|
+
`references/board-fill.md` for the fill mechanics and the store-health line when filling the
|
|
56
|
+
board. The board load runs the scoped store check (`doctor --store <scope>`); its result
|
|
57
|
+
arrives in the payload as `store_health` and is shown as one line of data, never a blocker.
|
|
58
|
+
|
|
59
|
+
Priority order on the board: active intents first, then project context (governing plus
|
|
60
|
+
tactical intents in a registered project), then stale future intents for triage, then fresh
|
|
61
|
+
future intents as next work. A future intent older than `stale_threshold_days` (default 3) is
|
|
62
|
+
surfaced for triage without action: activate, abandon, or leave. Activating moves it to
|
|
63
|
+
`## Active` in `INDEX.md` and auto-commits. The board's ranked next-work order is computed by
|
|
64
|
+
`dashboard.rb`; cite the rule names only (Effort, Value, Flags, Override, Caps) and read
|
|
65
|
+
`plastic-dashboard`'s `references/classification.md` for their definitions.
|
|
66
|
+
|
|
67
|
+
When the tier root (the directory holding `INDEX.md`) has a mid-flight roadmap
|
|
68
|
+
(`ruby ~/.plastic/scripts/roadmap-next --roadmaps-dir <root>/roadmaps` reports a `state`
|
|
69
|
+
other than `none`), say so in one line and offer the roadmap route; the board still presents
|
|
70
|
+
project state and stops.
|
|
71
|
+
|
|
72
|
+
Then stop: "here is the state, what next?". Do not start executing work. When the user names
|
|
73
|
+
an intent, take the intent route.
|
|
74
|
+
|
|
75
|
+
## Intent route: resume one intent from its ledger
|
|
76
|
+
|
|
77
|
+
QMD-first when the intent is named by description: run
|
|
78
|
+
`ruby ~/.plastic/scripts/qmd-sync search "<terms>"` to find the candidate, then open the
|
|
79
|
+
authoritative intent file. The command is a no-op when QMD is absent; fall back to
|
|
80
|
+
`INDEX.md`.
|
|
81
|
+
|
|
82
|
+
If the intent is terminal (`## Completed` or `## Abandoned` in `INDEX.md`): report only.
|
|
83
|
+
Summarize its `outcome.md` and ask what is next; never reopen it.
|
|
84
|
+
|
|
85
|
+
For a live intent's directory:
|
|
86
|
+
|
|
87
|
+
1. **Read `savepoint.md` first.** It is a deterministic, append-only ledger, one line per
|
|
88
|
+
event, newest at the bottom: `{utc-iso8601} {Stage} {milestone}`. Classify the station
|
|
89
|
+
from the last line alone (the table in `references/boarding-matrix.md`, read when
|
|
90
|
+
classifying), then verify only that line's artifact is real (sentinel-aware:
|
|
91
|
+
`Savepoint.stage_file_present?`). Do not re-probe every lifecycle file.
|
|
92
|
+
2. **Drift.** When the last line disagrees with the files on disk, rebuild the ledger from
|
|
93
|
+
disk and note the correction. A rebuilt ledger is the file-landing skeleton, which still
|
|
94
|
+
pins the station:
|
|
78
95
|
```bash
|
|
79
|
-
ruby -r ~/.plastic/scripts/lib/
|
|
96
|
+
ruby -r ~/.plastic/scripts/lib/savepoint -e 'Savepoint.rebuild_savepoint("<intent_dir>")'
|
|
80
97
|
```
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
98
|
+
3. **Read the hand-off.** When `resources/handoff--*.md` exists, its newest file is the prior
|
|
99
|
+
session's own account of where things stand; read it after the ledger, never instead of it.
|
|
100
|
+
4. **Derive the next step:** the first unchecked item in `checklist.md` when it exists, else
|
|
101
|
+
the next thing the station needs (see the matrix). The newest `## Insights` entry supplies
|
|
102
|
+
the human-readable context; an entry marked `(autonomous)` means an auto team was
|
|
103
|
+
delivering it, so say so and offer to hand back to `plastic-auto`.
|
|
104
|
+
5. **Announce, then continue at that station:**
|
|
87
105
|
```
|
|
88
106
|
Resuming intent [ID] - [name]
|
|
89
|
-
Store: [global | project:<slug>
|
|
90
|
-
|
|
91
|
-
Next step: [first unchecked checklist item |
|
|
92
|
-
Context: [newest ## Insights entry]
|
|
93
|
-
Drift: [none | ledger rebuilt from
|
|
107
|
+
Store: [global | project:<slug>]
|
|
108
|
+
Station: [from the ledger's last line]
|
|
109
|
+
Next step: [first unchecked checklist item | what the station needs]
|
|
110
|
+
Context: [newest ## Insights entry | hand-off summary]
|
|
111
|
+
Drift: [none | ledger rebuilt from disk]
|
|
94
112
|
```
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
113
|
+
Then continue the work in the session's current mode. In auto mode the running team
|
|
114
|
+
already holds the delivery lock; if a lock is held by a session that is gone, the
|
|
115
|
+
`plastic-doctor` skill's lock section repairs or reclaims it.
|
|
116
|
+
|
|
117
|
+
## Roadmap route: resume the mid-flight roadmap
|
|
118
|
+
|
|
119
|
+
1. Resolve the tier root (project or global) and run the shared reader in which mode:
|
|
120
|
+
```bash
|
|
121
|
+
ruby ~/.plastic/scripts/roadmap-next --roadmaps-dir <root>/roadmaps --which
|
|
122
|
+
```
|
|
123
|
+
Read `state` and the winning `roadmap`. A `tie` lists `tie_candidates` to present side by
|
|
124
|
+
side and let the user pick; never pick silently. The reader ranks liveness the way
|
|
125
|
+
`references/liveness-ranking.md` describes (read it when a ranking needs explaining): a
|
|
126
|
+
`delivering` or `blocked` entry wins, else the newest ledger or `## Log` timestamp.
|
|
127
|
+
`roadmaps/<slug>.savepoint.md` is a derived signal read here, never a status field;
|
|
128
|
+
`INDEX.md` stays the sole status writer.
|
|
129
|
+
2. **Present state:** the roadmap's `## Goal`, the current batch with each entry's mirrored
|
|
130
|
+
status, the ledger's newest line beside the newest `## Log` line. Read
|
|
131
|
+
`../plastic-conventions/references/roadmaps.md` for the file format and the status-mirror
|
|
132
|
+
rule when a roadmap file needs interpreting.
|
|
133
|
+
3. Then continue with the next dispatchable entry in the session's mode: direct work on it,
|
|
134
|
+
or `plastic-auto` when the owner says auto. The coordinator that drives a batch appends
|
|
135
|
+
to `roadmaps/<slug>.savepoint.md` at its dispatch, merge, park, and handoff points with
|
|
136
|
+
`ruby ~/.plastic/scripts/roadmap-savepoint append`; this skill only reads it.
|
|
99
137
|
|
|
100
138
|
## References
|
|
101
139
|
|
|
102
|
-
|
|
103
|
-
|
|
140
|
+
| Trigger | Read |
|
|
141
|
+
|---|---|
|
|
142
|
+
| Filling the board on the project route | `references/board-fill.md` |
|
|
143
|
+
| Classifying the station from the ledger's last line | `references/boarding-matrix.md` |
|
|
144
|
+
| Explaining why one roadmap ranked above another | `references/liveness-ranking.md` |
|
|
145
|
+
| Saving or restoring context across a long session, or debugging a resume | `references/context-management.md` |
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
# Boarding matrix: which station a resume lands at
|
|
2
|
+
|
|
3
|
+
The station is derived from `savepoint.md`'s last line plus the real artifacts on disk.
|
|
4
|
+
Classify from the last line alone, then verify only that line's artifact is real
|
|
5
|
+
(sentinel-aware). On drift, rebuild the ledger from disk and note it.
|
|
6
|
+
|
|
7
|
+
| savepoint last line | latest delivered | lands at | continue with |
|
|
8
|
+
|---|---|---|---|
|
|
9
|
+
| `What {id}--{slug}.md` (born) | What | **Why** | the thinking conversation (`plastic-intent-speccing`) or direct work |
|
|
10
|
+
| `Why started` (spec still sentinel) | What | **Why** | continue the conversation; rulings land as insights |
|
|
11
|
+
| `Why spec.md created` | Why | **How** | the action files, `plan.md`, `checklist.md` |
|
|
12
|
+
| `How started` / `How plan.md created` | (How in progress) | **How** | finish `plan.md` and `checklist.md` |
|
|
13
|
+
| `How checklist.md created` / `Exec started` | How | **Exec** | do the work, tick the checklist |
|
|
14
|
+
| `Exec outcome.md created` | Exec | **ready to complete** | the ending procedure (`plastic-intent-ending`) |
|
|
15
|
+
| `Done delivered` / `Done abandoned` | terminal | **report only** | immutable; ask what is next |
|
|
16
|
+
|
|
17
|
+
## Per-station behaviour (what "continue" means)
|
|
18
|
+
|
|
19
|
+
- **Why**: continue the conversation, or run the work directly when the request is already
|
|
20
|
+
clear; every ruling is recorded as it lands.
|
|
21
|
+
- **How**: write or finish the action files, `plan.md`, and `checklist.md`.
|
|
22
|
+
- **Exec**: verify what is delivered, then continue (or restart) the delivery or research.
|
|
23
|
+
The first unchecked `checklist.md` item is the next step; the newest `## Insights` entry
|
|
24
|
+
supplies the context.
|
|
25
|
+
- **ready to complete**: `outcome.md` is real; run the ending procedure.
|
|
26
|
+
- **Done**: terminal. Report the outcome, ask what is next. Never reopen; `INDEX.md` is
|
|
27
|
+
authoritative.
|
|
28
|
+
|
|
29
|
+
## Notes
|
|
30
|
+
|
|
31
|
+
- A Plastic 1.x ledger may carry a `Tier <letter>` line under the `Why spec.md created` line
|
|
32
|
+
(the intent tier was removed in 2.0, intent 304). It is inert: skip it when classifying.
|
|
33
|
+
- An `## Insights` entry marked `(autonomous)` means an auto team was delivering the intent;
|
|
34
|
+
say so and offer to hand back to `plastic-auto`.
|
|
@@ -20,9 +20,9 @@ step looks stale):
|
|
|
20
20
|
2. Confirm the artifact that line implies (`plan.md`, `checklist.md`, `outcome.md`, ...) is
|
|
21
21
|
present and non-empty on disk.
|
|
22
22
|
3. If the two disagree, the ledger has drifted: rebuild it rather than hand-editing:
|
|
23
|
-
`ruby -r ~/.plastic/scripts/lib/
|
|
23
|
+
`ruby -r ~/.plastic/scripts/lib/savepoint -e 'Savepoint.rebuild_savepoint("<intent_dir>")'`
|
|
24
24
|
4. Re-read the rebuilt last line and re-derive the next step from `checklist.md`'s first
|
|
25
25
|
unchecked item.
|
|
26
26
|
|
|
27
27
|
The general "land on the board / priority order / stale future intents" flow now lives in
|
|
28
|
-
`plastic-
|
|
28
|
+
`plastic-intent-continuing`; this file no longer duplicates it.
|
|
@@ -12,7 +12,7 @@ user-invocable: true
|
|
|
12
12
|
- User explicitly says "new intent" or "create intent"
|
|
13
13
|
- An agent discovers work needed during implementation
|
|
14
14
|
|
|
15
|
-
## Determine
|
|
15
|
+
## Determine the store
|
|
16
16
|
|
|
17
17
|
**Global intent** (strategic): created when working outside a registered project, or when the user expresses a high-level goal. Stored in `~/.plastic/store/`.
|
|
18
18
|
|
|
@@ -79,7 +79,7 @@ rule and the tool.
|
|
|
79
79
|
frontmatter edge and reproject. Links are decided by context influence (a `chain` edge has a high
|
|
80
80
|
bar: the candidate's context must materially help deliver this intent), not by shared files or a
|
|
81
81
|
similarity score. To gather candidates with their context and record an edge, use the
|
|
82
|
-
`
|
|
82
|
+
`scripts/link-suggest` and `scripts/project-links`.
|
|
83
83
|
|
|
84
84
|
Read `../plastic-conventions/references/knowledge-graph.md` for the full linking doctrine: the
|
|
85
85
|
tiers of influence, sources versus chain, and how the `## Links` projection is derived. This path
|
|
@@ -78,4 +78,4 @@ State is derived from what exists, not from what's declared.
|
|
|
78
78
|
|
|
79
79
|
The intent file is born complete with all five sanctioned `##` sections; the lifecycle files (`spec.md`/`plan.md`/`checklist.md`/`outcome.md`) are sentinel placeholders that read as "stage not reached" until an agent fills them and deletes the `<!-- plastic:placeholder -->` first line.
|
|
80
80
|
|
|
81
|
-
Always scaffold through `new-intent` (or this skill). Never hand-author intent files:
|
|
81
|
+
Always scaffold through `new-intent` (or this skill). Never hand-author intent files: `new-intent` validates the file it writes (`scripts/validate-intent`) and `end-intent` checks it again at close, and hand-authoring is the bypass this contract is designed to remove.
|
|
@@ -24,7 +24,7 @@ installed directory.
|
|
|
24
24
|
| # | Step | Who does it |
|
|
25
25
|
|---|---|---|
|
|
26
26
|
| 0 | Precondition check | You, before touching outcome.md |
|
|
27
|
-
| 1 | outcome
|
|
27
|
+
| 1 | backfill spec/plan/action/outcome from the record, self-check, intent-file `## Outcome` summary | `scripts/end-intent` |
|
|
28
28
|
| 2 | INDEX.md terminal move (Active -> Completed/Abandoned) | `scripts/end-intent` |
|
|
29
29
|
| 3 | savepoint `Done` bookend | `scripts/end-intent` |
|
|
30
30
|
| 4 | store auto-commit | `scripts/end-intent` |
|
|
@@ -39,45 +39,36 @@ deliveries; separately, one session delivered four intents back to back and
|
|
|
39
39
|
never ran the old step-5 one-liner at all, intent 188). Never restate
|
|
40
40
|
outcome/INDEX/savepoint/disarm prose inline again; call `scripts/end-intent`.
|
|
41
41
|
|
|
42
|
-
### Step 0. Precondition (the
|
|
42
|
+
### Step 0. Precondition (the record is what gets backfilled)
|
|
43
43
|
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
every section, with no awareness of which section a box lives in. ANY
|
|
48
|
-
unchecked box anywhere blocks the outcome.md write; there is no exemption
|
|
49
|
-
for orchestrator-owned or completion-tracking items.
|
|
44
|
+
Nothing refuses the close any more (the 1.x write-time gate and `end-intent`'s
|
|
45
|
+
exit-6 structure gate were retired in 2.0, intents 302 and 308). What you leave
|
|
46
|
+
on disk is what the record becomes, so before the call:
|
|
50
47
|
|
|
51
48
|
1. Read checklist.md. Tick every item as it is actually performed, including
|
|
52
49
|
an item that describes the close itself: running this very procedure IS
|
|
53
|
-
what that item describes
|
|
54
|
-
|
|
55
|
-
checklist.md must read 100 percent checked; there is no other way past
|
|
56
|
-
the gate.
|
|
50
|
+
what that item describes. An unchecked box is not a refusal, it is a
|
|
51
|
+
reported gap that lands verbatim in the backfilled `## Follow-ups`.
|
|
57
52
|
2. Confirm every acceptance criterion in spec.md is verifiable (tests pass,
|
|
58
53
|
or the manual check described in its HOW line was actually run).
|
|
59
|
-
3.
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
`##
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
-
|
|
66
|
-
`ruby ~/.plastic/scripts/maintenance-run --tool project-links --intent <id> --apply`.
|
|
67
|
-
- a savepoint issue - advisory only (WARN, never blocks): run
|
|
68
|
-
`plastic-intent-savepoint` to rebuild via `Bridge.rebuild_savepoint` if
|
|
69
|
-
you want it clean, but it never refuses the close on its own.
|
|
70
|
-
Then re-run `scripts/end-intent`.
|
|
54
|
+
3. Decide what you have to say. A spec.md, plan.md, action file, or outcome.md
|
|
55
|
+
left as the scaffold placeholder is written from the record by
|
|
56
|
+
`scripts/end-intent` (the intent file's `## Intent`, `### Decisions`, and
|
|
57
|
+
`## Insights`, the checklist, the diff on the intent's own worktree). A
|
|
58
|
+
file you wrote, even under a still-present sentinel, is never touched.
|
|
59
|
+
Write outcome.md yourself when the summary deserves more than the
|
|
60
|
+
`--outcome-summary` line; otherwise let the backfill carry it.
|
|
71
61
|
|
|
72
62
|
### Step 1-5. Run `scripts/end-intent`
|
|
73
63
|
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
`##
|
|
78
|
-
|
|
64
|
+
Author outcome.md yourself when it deserves prose: copy `templates/outcome.md`,
|
|
65
|
+
set the frontmatter to `disposition: delivered` or `disposition: abandoned`, and
|
|
66
|
+
fill `## Summary`, `## Delivered`, `## Verification`, `## Follow-ups`. On
|
|
67
|
+
abandon, `## Summary` states the abandonment reason and the trail (see Pivot
|
|
68
|
+
below). A placeholder outcome.md is backfilled from the record instead, with the
|
|
69
|
+
close's disposition and the `--outcome-summary` line as its summary. Also author
|
|
79
70
|
the rich INDEX entry note now (a short line in the store's existing
|
|
80
|
-
Completed/Abandoned convention: mode
|
|
71
|
+
Completed/Abandoned convention: mode, what shipped or why it was
|
|
81
72
|
abandoned, suite result, merge/spawn notes); content authoring stays with
|
|
82
73
|
you, `--index-note` only appends what you write.
|
|
83
74
|
|
|
@@ -91,9 +82,11 @@ ruby ~/.plastic/scripts/end-intent \
|
|
|
91
82
|
--index-note "<rich Completed/Abandoned entry description>"
|
|
92
83
|
```
|
|
93
84
|
|
|
94
|
-
This does all of steps 1-5 in order:
|
|
95
|
-
|
|
96
|
-
|
|
85
|
+
This does all of steps 1-5 in order: backfills every missing or placeholder
|
|
86
|
+
spec.md, plan.md, action file, and outcome.md from the record (never a file
|
|
87
|
+
you wrote), runs doctor's per-intent structure check and the outcome guard as
|
|
88
|
+
a self-check that reports on stderr and proceeds (an unchecked box, a
|
|
89
|
+
malformed intent file, a wrong-disposition outcome.md you wrote), stamps the
|
|
97
90
|
intent file's `## Outcome` section, moves the INDEX.md
|
|
98
91
|
line from `## Active` to `## Completed` or `## Abandoned` (dated today,
|
|
99
92
|
idempotent, accepting either a real em dash or a plain hyphen as the id/
|
|
@@ -127,8 +120,7 @@ correctly, for the first time on that path (D7).
|
|
|
127
120
|
|
|
128
121
|
Exit codes: 0 success (the intent is closed AND its delivery lock is gone);
|
|
129
122
|
1 a usage or resolution failure, OR an INDEX id that resolves to neither
|
|
130
|
-
`## Active` nor the terminal section;
|
|
131
|
-
outcome.md and re-run, nothing was written); 3 steps 1-4 already committed
|
|
123
|
+
`## Active` nor the terminal section; 3 steps 1-4 already committed
|
|
132
124
|
but disarm could not verify the lock is gone afterward (run `/plastic-doctor
|
|
133
125
|
check the lock status`); 4 a live foreign session holds the lock (back off);
|
|
134
126
|
5 the code worktree is dirty (commit/stash first, or pass
|
|
@@ -171,8 +163,7 @@ historical record of what was planned.
|
|
|
171
163
|
|
|
172
164
|
## Routing
|
|
173
165
|
|
|
174
|
-
`plastic-releasing`, `plastic-auto`, `plastic-intent-executing
|
|
175
|
-
agent, `store-curating`, and `store-indexing` all delegate their mechanical
|
|
166
|
+
`plastic-releasing`, `plastic-auto`, and `plastic-intent-executing` all delegate their mechanical
|
|
176
167
|
close to this skill (or call `scripts/end-intent` directly for steps 1-5).
|
|
177
168
|
None of them restate the outcome/INDEX/savepoint/disarm prose inline any
|
|
178
169
|
more; if you find one that does, that surface has drifted and should route
|
|
@@ -7,11 +7,11 @@
|
|
|
7
7
|
"scope": "behavior",
|
|
8
8
|
"set": "train",
|
|
9
9
|
"prompt": "checklist.md has one unchecked non-completion item. Try to complete the intent.",
|
|
10
|
-
"expected_output": "
|
|
10
|
+
"expected_output": "Ticks or finishes the item before calling scripts/end-intent, because an unchecked box is reported by the structure self-check and lands verbatim in the backfilled Follow-ups; never a refusal (the write-time gate was removed in 2.0, intents 302 and 308).",
|
|
11
11
|
"files": [],
|
|
12
12
|
"assertions": [
|
|
13
|
-
{ "type": "human", "check": "SKILL.md Step 0 states the
|
|
14
|
-
{ "type": "code", "check": "
|
|
13
|
+
{ "type": "human", "check": "SKILL.md Step 0 states that nothing refuses the close, that an unchecked box is a reported gap landing in Follow-ups, and instructs finishing the checklist before the call", "result": "expect-pass" },
|
|
14
|
+
{ "type": "code", "check": "scripts/end-intent exits 0 on an unchecked '- [ ]' item and prints 'structure check: intent_checklist_complete' (test/end_intent_test.rb)", "result": "pass" }
|
|
15
15
|
]
|
|
16
16
|
},
|
|
17
17
|
{
|
|
@@ -53,7 +53,7 @@
|
|
|
53
53
|
"scope": "triggering",
|
|
54
54
|
"set": "validation",
|
|
55
55
|
"prompt": "Start work on intent 87.",
|
|
56
|
-
"expected_output": "Does NOT activate plastic-intent-ending; this is a
|
|
56
|
+
"expected_output": "Does NOT activate plastic-intent-ending; this is a resume request (plastic-intent-continuing), the opposite end of the lifecycle from a close.",
|
|
57
57
|
"files": [],
|
|
58
58
|
"assertions": [
|
|
59
59
|
{ "type": "code", "check": "router CHOICE != plastic-intent-ending", "result": "expect-pass" }
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: plastic-intent-executing
|
|
3
|
-
description: Use when you have a written implementation plan to execute. Default mode is subagent-driven (
|
|
3
|
+
description: Use when you have a written implementation plan to execute. Default mode is subagent-driven (one executor dispatch for the whole consolidated action, tests first, reviewed by risk). 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
4
|
user-invocable: true
|
|
5
5
|
---
|
|
6
6
|
|
|
@@ -8,7 +8,7 @@ user-invocable: true
|
|
|
8
8
|
|
|
9
9
|
## Overview
|
|
10
10
|
|
|
11
|
-
Load plan from the active intent's `plan.md`, execute all tasks, review
|
|
11
|
+
Load plan from the active intent's `plan.md`, execute all tasks, review as below, report when complete.
|
|
12
12
|
|
|
13
13
|
## Step 0: Sync Worktree First
|
|
14
14
|
|
|
@@ -40,12 +40,9 @@ If `superpowers:subagent-driven-development` is available as a skill, delegate t
|
|
|
40
40
|
- Superpowers skills respect "user preferences for plan/spec location"; Plastic IS that preference
|
|
41
41
|
|
|
42
42
|
### Subagent-Driven (Default)
|
|
43
|
-
Dispatches subagents to do the work. The controller never implements. It dispatches, reviews, and tracks progress.
|
|
43
|
+
Dispatches subagents to do the work. The controller never implements. It dispatches, reviews, and tracks progress. One executor dispatch implements the whole consolidated action from `plan.md`, the action file's failure-mode matrix, and `checklist.md` in one pass, tests first: the matrix's tests are committed red before the code. Several independent action files are handed to the same executor in order; they are not a reason for a per-task review loop (removed in 2.0, intent 307).
|
|
44
44
|
|
|
45
|
-
-
|
|
46
|
-
- **L:** a fresh subagent per task, and a two-stage review after each task: spec compliance first, then code quality.
|
|
47
|
-
|
|
48
|
-
The final independent review in Step 3 runs at every tier. It is a separate agent with fresh context, and it is never the maker.
|
|
45
|
+
The post-execution review in Step 3 runs by risk (the rule lives in the auto skill). When it runs, the reviewer is a separate agent with fresh context, never the maker. The plan itself is reviewed before code by the adversarial plan reviewer (`plan-reviewer-prompt.md`), dispatched by the lead at How.
|
|
49
46
|
|
|
50
47
|
### Inline (Fallback)
|
|
51
48
|
Executes tasks sequentially in the current session. Use when subagents aren't available or user explicitly requests inline mode.
|
|
@@ -62,46 +59,15 @@ Run Step 0 (Sync Worktree First) before this step.
|
|
|
62
59
|
|
|
63
60
|
### Step 2: Execute Each Task
|
|
64
61
|
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
#### At S or M: one executor dispatch
|
|
68
|
-
|
|
69
|
-
Dispatch ONE executor subagent and give it the whole delivery: every task's full text from `plan.md` (pasted in, never a file reference), the checklist items it must tick, the project context from CLAUDE.md, and the active intent context from `{ID}--{slug}.md`. In auto mode this is the `plastic-executor` agent; elsewhere use the `implementer-prompt.md` template. The executor implements the consolidated action in order, ticks each item as it lands (see `## Tick-as-you-land`), and drives the test suite green.
|
|
62
|
+
Dispatch ONE executor subagent and give it the whole delivery: every task's full text from `plan.md` (pasted in, never a file reference), every action file with its failure-mode matrix, the checklist items it must tick, the project context from CLAUDE.md, the active intent context from `{ID}--{slug}.md`, and the worktree path. In auto mode this is the `plastic-executor` agent; elsewhere use the `implementer-prompt.md` template. The executor writes the matrix's tests and commits them red, implements the consolidated action in order, ticks each item as it lands (see `## Tick-as-you-land`), and drives the test suite green.
|
|
70
63
|
|
|
71
64
|
Read its response by code:
|
|
72
|
-
- DONE or DONE_WITH_CONCERNS → proceed to Step 3.
|
|
65
|
+
- DONE or DONE_WITH_CONCERNS → proceed to Step 3.
|
|
73
66
|
- NEEDS_CONTEXT → provide the missing context, re-dispatch the executor.
|
|
74
67
|
- BLOCKED → stop, report to the user, wait for resolution.
|
|
75
68
|
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
For each task sequentially (never parallel: conflict risk):
|
|
79
|
-
|
|
80
|
-
**a. Dispatch implementer subagent**
|
|
81
|
-
Use the Agent tool with the implementer prompt template. Include:
|
|
82
|
-
- Full task text (pasted in, not file reference)
|
|
83
|
-
- Project context from CLAUDE.md
|
|
84
|
-
- Active intent context from `{ID}--{slug}.md`
|
|
85
|
-
|
|
86
|
-
**b. Handle implementer response**
|
|
87
|
-
- DONE → proceed to spec review
|
|
88
|
-
- DONE_WITH_CONCERNS → note concerns, proceed to spec review
|
|
89
|
-
- NEEDS_CONTEXT → provide missing context, re-dispatch
|
|
90
|
-
- BLOCKED → stop, report to user, wait for resolution
|
|
91
|
-
|
|
92
|
-
**c. Dispatch spec compliance reviewer**
|
|
93
|
-
Use the Agent tool with spec-reviewer prompt. The reviewer reads actual code and compares against the task requirements. Pass/fail.
|
|
94
|
-
- If fail: implementer fixes, spec reviewer re-reviews (loop until pass)
|
|
95
|
-
|
|
96
|
-
**d. Dispatch code quality reviewer**
|
|
97
|
-
Only after spec compliance passes. Reviews clean code, testing, architecture. Pass/fail.
|
|
98
|
-
- If fail: implementer fixes, quality reviewer re-reviews (loop until pass)
|
|
99
|
-
|
|
100
|
-
**e. Tick as it lands, then move to next**
|
|
101
|
-
Follow `## Tick-as-you-land` below: move the task's checklist item to `## Completed` and add a `## Session Log` row in the same edit.
|
|
102
|
-
|
|
103
|
-
### Step 3: Final Review
|
|
104
|
-
After all tasks complete, dispatch a final reviewer for the entire implementation. This runs at every tier, S, M, and L. The reviewer is a separate agent with fresh context and is never the maker. At S and M this is the only review the work gets, so if it returns changes, re-dispatch the executor to fix them, then re-review.
|
|
69
|
+
### Step 3: Review by Risk
|
|
70
|
+
Apply the auto skill's risk rule to the executor's return and the diff: a matrix row no test could prove, a diff touching a hook, the lock, the worktree code, the installer, or a release file, a DONE_WITH_CONCERNS or a deviation from the matrix, or an owner-facing surface no test pins. When a rule fires, dispatch the post-execution reviewer with `code-quality-reviewer-prompt.md` (a separate agent with fresh context, never the maker); if it returns changes, re-dispatch the executor to fix them, then run the suite once more. When no rule fires, the green suite is the review.
|
|
105
71
|
|
|
106
72
|
### Step 4: Update Intent and Complete
|
|
107
73
|
Capture observations in `## Insights`. When ALL checklist items are checked:
|
|
@@ -142,22 +108,19 @@ row (Date, Items Completed, Notes). Do not batch several tasks' worth of
|
|
|
142
108
|
checklist updates into one later edit; tick the moment the task is verified,
|
|
143
109
|
before moving to the next task.
|
|
144
110
|
|
|
145
|
-
## Verify before every owner
|
|
111
|
+
## Verify before every owner review
|
|
146
112
|
|
|
147
113
|
Hard rule: before presenting any completed work to the owner, independently
|
|
148
114
|
verify it. Grep or run the artifact the work just produced (the test suite,
|
|
149
115
|
the changed file, the installed output) rather than restating the intended
|
|
150
116
|
change. Never present an unverified claim to the owner. If verification
|
|
151
|
-
fails, fix it before the
|
|
152
|
-
|
|
153
|
-
Read `../plastic-conventions/references/gates-and-enforcement.md` for the transition-gate
|
|
154
|
-
mechanics, the audited escape, and gate logging behind every owner gate named here.
|
|
117
|
+
fails, fix it before the review, not after.
|
|
155
118
|
|
|
156
119
|
## Methods report (audits and sweeps)
|
|
157
120
|
|
|
158
121
|
When the work is an audit or a sweep (checking many files or many instances of
|
|
159
122
|
something rather than building one artifact), deposit a methods report to
|
|
160
|
-
`{intent_dir}/resources/` before the
|
|
123
|
+
`{intent_dir}/resources/` before the review: what was checked, how it was
|
|
161
124
|
checked, and what was found. This lets the owner review the method, not just
|
|
162
125
|
the conclusion.
|
|
163
126
|
|
|
@@ -175,7 +138,7 @@ When presenting a batch of Exec decisions for the owner to rule, read
|
|
|
175
138
|
`~/.plastic/_decision-tables.md` and follow the numbered-table procedure,
|
|
176
139
|
persisting each ruling with `--stage Exec`.
|
|
177
140
|
|
|
178
|
-
##
|
|
141
|
+
## Position in the cycle
|
|
179
142
|
|
|
180
143
|
- **Before:** `plan.md` and `checklist.md` exist; the worktree is armed.
|
|
181
144
|
- **Produces:** code changes, a ticked checklist, and (for audits or sweeps) a methods report in `resources/`.
|