@zalom/plastic 1.8.0 → 1.10.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.md +94 -556
- package/README.md +18 -6
- package/agents/plastic-enforcer.md +3 -2
- package/agents/plastic-intent-curator.md +2 -2
- package/agents/plastic-intent-discovery.md +7 -0
- package/bin/plastic.js +17 -8
- package/deprecations.yml +10 -2
- package/hooks/auto-arm +2 -2
- package/hooks/bash-gate +1 -1
- package/hooks/check-update +1 -1
- package/hooks/continue +2 -2
- package/hooks/edit-gates +3 -0
- package/hooks/future-intent-check +2 -2
- package/hooks/gate-check +3 -3
- package/hooks/hooks.json +4 -44
- package/hooks/power-tools +8 -0
- package/hooks/session-start +1 -1
- package/package.json +1 -2
- package/scripts/codex-hook +57 -118
- package/scripts/doctor.rb +146 -1012
- package/scripts/exec-worktree +103 -0
- package/scripts/hash-intent +1 -1
- package/scripts/hook-bash-gate +19 -0
- package/scripts/hook-code-gate +16 -28
- package/scripts/hook-continue +2 -2
- package/scripts/hook-create-gate +13 -57
- package/scripts/hook-edit-gates +58 -0
- package/scripts/hook-gate-check +17 -0
- package/scripts/hook-links-gate +11 -31
- package/scripts/hook-lock-gate +19 -60
- package/scripts/hook-power-tools +38 -0
- package/scripts/hook-savepoint-pre +11 -11
- package/scripts/hook-session-start +21 -15
- package/scripts/lib/apply_patch_envelope.rb +46 -13
- package/scripts/lib/bridge.rb +85 -17
- package/scripts/lib/codex_edit_gates.rb +138 -0
- package/scripts/lib/doctor_core.rb +1087 -0
- package/scripts/lib/edit_gates.rb +398 -0
- package/scripts/lib/exec_worktree.rb +325 -0
- package/scripts/lib/harness_text.rb +57 -0
- package/scripts/lib/hook_registry.rb +64 -28
- package/scripts/lib/installer_core.rb +166 -24
- package/scripts/lib/lock.rb +196 -47
- package/scripts/lib/qmd_hook.rb +21 -41
- package/scripts/lib/qmd_sync.rb +0 -15
- package/scripts/lib/revisions_writer.rb +1 -1
- package/scripts/lib/ruby_probe.rb +60 -0
- package/scripts/lib/scaffold_intent.rb +392 -0
- package/scripts/lib/spec_header.rb +83 -0
- package/scripts/lib/start_intent.rb +296 -0
- package/scripts/lib/verify_intent.rb +262 -0
- package/scripts/lib/worktree.rb +15 -1
- package/scripts/link-suggest +1 -1
- package/scripts/maintenance-run +5 -5
- package/scripts/migrate-to-global +2 -2
- package/scripts/restore-intent-v1 +17 -12
- package/scripts/scaffold-intent +120 -0
- package/scripts/start-intent +89 -0
- package/scripts/verify-intent +73 -0
- package/skills/agent-advisor/SKILL.md +5 -5
- package/skills/auto/SKILL.md +52 -32
- package/skills/auto/evals/evals.json +2 -2
- package/skills/auto/references/agent-architecture.md +1 -1
- package/skills/auto/references/agent-report-contract.md +1 -1
- package/skills/auto/references/human-report-contract.md +22 -3
- package/skills/auto/references/tiers.md +24 -2
- package/skills/conventions/SKILL.md +31 -0
- package/skills/conventions/references/completion-and-done.md +43 -0
- package/skills/conventions/references/gates-and-enforcement.md +39 -0
- package/skills/conventions/references/knowledge-graph.md +47 -0
- package/skills/conventions/references/lifecycle-and-savepoints.md +11 -0
- package/skills/conventions/references/locks-and-worktrees.md +113 -0
- package/skills/conventions/references/maintenance-and-revisions.md +170 -0
- package/skills/conventions/references/roadmaps.md +44 -0
- package/skills/conventions/references/tiers-and-dispatch.md +135 -0
- package/skills/dashboard/SKILL.md +1 -1
- package/skills/doctor/SKILL.md +15 -6
- package/skills/doctor/references/gates-stuck-detection.md +13 -8
- package/skills/doctor/report.md +1 -1
- package/skills/install/SKILL.md +1 -1
- package/skills/intent-brainstorming/SKILL.md +4 -2
- package/skills/intent-continuing/SKILL.md +4 -0
- package/skills/intent-creating/SKILL.md +13 -8
- package/skills/intent-creating/references/lifecycle.md +1 -1
- package/skills/intent-discovering/SKILL.md +10 -3
- package/skills/intent-ending/SKILL.md +12 -7
- package/skills/intent-executing/SKILL.md +37 -19
- package/skills/intent-grilling/SKILL.md +5 -3
- package/skills/intent-linking/SKILL.md +4 -0
- package/skills/intent-locking/SKILL.md +4 -0
- package/skills/intent-planning/SKILL.md +14 -3
- package/skills/intent-researching/SKILL.md +0 -2
- package/skills/intent-savepoint/SKILL.md +4 -0
- package/skills/intent-speccing/SKILL.md +4 -0
- package/skills/intent-starting/SKILL.md +20 -2
- package/skills/project-creating/SKILL.md +0 -2
- package/skills/project-creating/references/project-scaffolding.md +3 -3
- package/skills/releasing/SKILL.md +1 -1
- package/skills/releasing/references/promotion-and-tagging.md +14 -8
- package/skills/releasing/references/release-lines.md +1 -1
- package/skills/roadmap/SKILL.md +4 -0
- package/skills/roadmap-continuing/SKILL.md +4 -0
- package/skills/skill-creating/SKILL.md +8 -2
- package/skills/skill-creating/references/defaults-first.md +23 -0
- package/skills/skill-creating/references/hooks.md +4 -1
- package/skills/store-curating/SKILL.md +8 -0
- package/skills/store-indexing/SKILL.md +16 -5
- package/skills/store-indexing/references/zettelkasten-linking.md +1 -1
- package/skills/tutorial/references/track-1-guided.md +2 -2
- package/skills/tutorial/references/track-2-auto.md +10 -8
- package/skills/tutorial/references/track-3-projects-and-roadmaps.md +1 -1
- package/skills/uninstall/SKILL.md +6 -9
- package/templates/agents.md +12 -12
- package/templates/config.yml +6 -7
- package/templates/index.md +6 -3
- package/templates/spec.md +1 -1
- package/PLASTIC-reference.md +0 -138
- package/hooks/code-gate +0 -27
- package/hooks/create-gate +0 -3
- package/hooks/links-gate +0 -3
- package/hooks/lock-gate +0 -21
- package/hooks/qmd-search +0 -8
- package/hooks/retrieval-gate +0 -10
- package/hooks/savepoint-pre +0 -10
- package/scripts/hook-qmd-search +0 -44
- package/scripts/hook-retrieval-gate +0 -148
- package/scripts/lib/retrieval_gate.rb +0 -211
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
# Tiers and Dispatch
|
|
2
|
+
|
|
3
|
+
This chapter holds tier depth beyond the S/M/L definition, the agent-model and dispatch mechanics, and the auto-mode human reporting contract.
|
|
4
|
+
|
|
5
|
+
Speed comes from two levers only: artifact content depth and agent topology. The
|
|
6
|
+
same-structure invariant holds: same file set, stage order, gates, and savepoint ledger at
|
|
7
|
+
every tier and in both modes.
|
|
8
|
+
|
|
9
|
+
S/M collapse the topology (one thinker agent writes spec.md then plan.md plus
|
|
10
|
+
checklist.md plus at least one real action file in one context, consolidated into a single
|
|
11
|
+
actions/ACTION_1.md at S/M and one file per task at L; a sonnet executor implements). L
|
|
12
|
+
keeps the full team.
|
|
13
|
+
|
|
14
|
+
Never cut at any tier: the independent reviewer, outcome.md as truth of delivery, the
|
|
15
|
+
delivery lock, worktree isolation, intent creation via skill, INDEX as status truth, the
|
|
16
|
+
QMD reindex at End.
|
|
17
|
+
|
|
18
|
+
Guided mode is unchanged: full-depth artifacts, the human at every gate.
|
|
19
|
+
|
|
20
|
+
Every lifecycle stage has exactly one dispatchable background agent, plus the enforcer that
|
|
21
|
+
orchestrates them: see PLASTIC.md's Agent Models and Dispatch table for the stage-to-agent
|
|
22
|
+
mapping (What, Why, How, Exec, Done).
|
|
23
|
+
|
|
24
|
+
Final-gate code review stays an ad-hoc subagent the enforcer dispatches at the final gate, not
|
|
25
|
+
a standing role.
|
|
26
|
+
|
|
27
|
+
**The advisor: two consultation agents, never injected (intent 185).** Neither is a stage
|
|
28
|
+
role: never in PLASTIC.md's Agent Models and Dispatch table, never dispatched by the auto
|
|
29
|
+
pipeline, and neither ever touches a user's own session. `plastic-advisor` is the real advisor, ships `model: fable`,
|
|
30
|
+
expensive, billed through usage credits. `plastic-faux-advisor` is the imitation advisor, ships
|
|
31
|
+
`model: opus`, an ordinary model carrying the Operating Manual's reasoning discipline inlined
|
|
32
|
+
in its own body (not injected into anything), so it reasons the same disciplined way at a
|
|
33
|
+
fraction of the cost. The `plastic-agent-advisor` skill is the one front door: it teaches when
|
|
34
|
+
consulting is worth the money (from the Advisor Protocol: buy one-way doors, plans, adversarial
|
|
35
|
+
review, deadlocks, ranking; never buy what a tool can answer, code volume, or confirmation of a
|
|
36
|
+
decision already made), routes to the configured agent, and can set the config on request. The
|
|
37
|
+
user or the main session states a TIER (S, M, or L) and an EFFORT line in the brief; shipped
|
|
38
|
+
effort is `xhigh` for `plastic-advisor` and `max` for `plastic-faux-advisor`.
|
|
39
|
+
|
|
40
|
+
Config is harness-scoped, keys matching `InstallerCore::DEFAULT_AGENTS` exactly (`claude`,
|
|
41
|
+
`codex`, `hermes`, never `claude_code`): `advisor.enabled` (false skips installing both agents and the
|
|
42
|
+
skill), `advisor.claude.default` (which agent the skill routes to; an agent NAME never a model
|
|
43
|
+
name, so it can point at a locally registered agent, and the only advisor routing key the
|
|
44
|
+
installer writes). Each agent's actual model is a plain `agents.models.claude.<name>`
|
|
45
|
+
override, the SAME harness-scoped mechanism every other agent uses, resolved through
|
|
46
|
+
`InstallerCore#agent_model_overrides(harness:)`; there is no separate advisor-model key.
|
|
47
|
+
`agents.models` is harness-scoped from this release (`agents.models.claude.*`,
|
|
48
|
+
`agents.models.codex.*`), with the pre-existing flat form (`agents.models.<name>: value`)
|
|
49
|
+
still honored as the claude harness and nested winning over flat. This closes a real latent
|
|
50
|
+
bug: previously the same override map fed both the Claude frontmatter rewrite and the Codex
|
|
51
|
+
TOML generator, so a literal Claude model id could leak into a Codex config; a model named
|
|
52
|
+
under `claude` is now never emitted to `codex`. Install asks which advisor is the default
|
|
53
|
+
(Claude Code only), with a plain description of each: Faux Fable (recommended, cheaper,
|
|
54
|
+
available on any plan) or Fable 5 (the frontier model, billed through credits). Update asks
|
|
55
|
+
the same question once when the key is unset, then never again. Claude-only for this release:
|
|
56
|
+
the owner has not evaluated the Codex reasoning-model ecosystem long enough to judge it, so
|
|
57
|
+
`generate_codex_agents` skips both agents by name, tracked at intent 186, not a permanent
|
|
58
|
+
exclusion.
|
|
59
|
+
|
|
60
|
+
**Auto-mode entry.** `plastic-auto` is the entry skill for autonomous delivery: it takes over How
|
|
61
|
+
and Exec, spins up the stage-agent team named in PLASTIC.md's Agent Models and Dispatch table,
|
|
62
|
+
and works the dashboard's dispatchable queue. The dashboard's
|
|
63
|
+
`--data` output splits intents into a `dispatchable_queue` (work an agent can pick up) and
|
|
64
|
+
`human_only` (intents that need a person); auto mode consumes the former.
|
|
65
|
+
|
|
66
|
+
**Model contract.** Every agent in `agents/*.md` pins an explicit Claude Code model alias in
|
|
67
|
+
its own frontmatter: `opus`, `sonnet`, or `haiku`. Never `inherit`, never Fable by default,
|
|
68
|
+
unless an explicit `agents.models.<name>` config override names Fable for that role, in which
|
|
69
|
+
case the override is honored as written. The two advisors, `plastic-advisor` and
|
|
70
|
+
`plastic-faux-advisor`, are not lifecycle stage roles: the never-Fable rule governs stage
|
|
71
|
+
agents only. Neither is ever dispatched by the auto pipeline; they are consultation roles
|
|
72
|
+
summoned deliberately by the user or the main session, and their models are user configuration
|
|
73
|
+
(fable and opus by default on Claude Code). Aliases track "latest
|
|
74
|
+
per tier" so no Plastic release is required to advance a tier. The tier by role:
|
|
75
|
+
`plastic-enforcer`, `plastic-brainstorming`, `plastic-planner` are `opus`;
|
|
76
|
+
`plastic-spec-specialist`, `plastic-executor`, `plastic-intent-curator`,
|
|
77
|
+
`plastic-future-intent-researcher`, `plastic-intent-discovery` are `sonnet`.
|
|
78
|
+
|
|
79
|
+
**Config and installer mechanism.** `agents.models.<basename>` in a project's
|
|
80
|
+
`<dir>/.plastic_store/config.yml` or the global `~/.plastic/config.yml` overrides one agent's
|
|
81
|
+
tier. Precedence is project, then global, then the shipped default, matching every other
|
|
82
|
+
`read-config` key. The installer applies the resolved override to each agent file's `model:`
|
|
83
|
+
line at copy time (install, update, and repair, across every harness target). With no override
|
|
84
|
+
configured, the shipped frontmatter passes through unchanged.
|
|
85
|
+
|
|
86
|
+
**Dispatch-time contract.** Frontmatter is primary, and Claude Code reads it at dispatch, but
|
|
87
|
+
because that read is a harness implementation detail rather than a contract Plastic controls,
|
|
88
|
+
every dispatch site also resolves the target agent's model through the config chain
|
|
89
|
+
(`read-config agents.models.<basename> --project <repo>`) and passes it explicitly at dispatch,
|
|
90
|
+
belt-and-braces on top of the frontmatter pin.
|
|
91
|
+
|
|
92
|
+
**Cross-harness portability.** The dispatch and model-tier contract above is harness-facing. The
|
|
93
|
+
adapter layer that maps Plastic's hooks and model aliases onto each supported agent runtime
|
|
94
|
+
(Claude, Codex, Hermes) is the cross-harness portability layer; see
|
|
95
|
+
[`harness-adapters.md`](https://github.com/zalom/plastic/blob/main/docs/reference/harness-adapters.md) for the adapter contract.
|
|
96
|
+
|
|
97
|
+
**Spawn preamble (intent 152).** `scripts/spawn-preamble` emits a live-state block purely from
|
|
98
|
+
filesystem state: the active intent, stage, role/cycle-step, the honor instruction, and the
|
|
99
|
+
report contract. When the intent's code worktree is resolvable and exists on disk, it also
|
|
100
|
+
appends the worktree's absolute path plus a verbatim instruction to `cd` there directly, for
|
|
101
|
+
harnesses whose `EnterWorktree` cannot discover a nested repo from a non-repo launch directory.
|
|
102
|
+
Output is byte-identical when no worktree resolves.
|
|
103
|
+
|
|
104
|
+
**Orchestrator advisory.** At auto-mode start, the orchestrator recommends once that the user
|
|
105
|
+
run the main session on the best available thinking model (Fable, Opus, or whatever supersedes
|
|
106
|
+
them). This is advisory only: it changes no behavior and blocks nothing if ignored, and it
|
|
107
|
+
concerns the human's main session, never a dispatched subagent. The two advisors,
|
|
108
|
+
`plastic-advisor` and `plastic-faux-advisor`, are not lifecycle stage roles: the never-Fable
|
|
109
|
+
rule governs stage agents only. Neither is ever dispatched by the auto pipeline; they are
|
|
110
|
+
consultation roles summoned deliberately by the user or the main session, and their models are
|
|
111
|
+
user configuration (fable and opus by default on Claude Code).
|
|
112
|
+
|
|
113
|
+
**`plastic-intent-discovery`.** The What-stage agent. It fires at intent activation, after the
|
|
114
|
+
delivery lock is armed and before Why begins, running under that lock as the owner session (it
|
|
115
|
+
does not acquire the lock itself and is not blocked by it): it reads the intent's
|
|
116
|
+
`chain`/`sources` frontmatter, runs QMD-first discovery over completed predecessor work and
|
|
117
|
+
related parked or future intents, and deposits findings to `resources/discovery--<slug>.md` in
|
|
118
|
+
the intent directory ONLY. It never writes the intent file, `spec.md`, or any other lifecycle
|
|
119
|
+
deliverable; the Why-stage `plastic-brainstorming` agent reads its deposit and enriches
|
|
120
|
+
`## Context`.
|
|
121
|
+
|
|
122
|
+
`savepoint.md`: a deterministic, append-only ledger of cycle-step milestones (one line per
|
|
123
|
+
lifecycle boundary, newest at the bottom), written automatically by the gate hook. It is
|
|
124
|
+
sugar on top of the conventions, not a source of truth: state is always derivable from
|
|
125
|
+
files-on-disk, and the ledger is rebuildable. It exists so a resuming agent reads the cycle's
|
|
126
|
+
succession at a glance (last line = where we are).
|
|
127
|
+
|
|
128
|
+
### Auto-Mode Human Reporting (intent 92)
|
|
129
|
+
|
|
130
|
+
In auto mode the orchestrator briefs the human at every lifecycle stage boundary in a fixed,
|
|
131
|
+
impact-first shape (the EM-to-CTO report contract): State, then Risk, then Call. This is the
|
|
132
|
+
depth at M and L; at S the briefing fires once, at How. It leads with
|
|
133
|
+
what changed and why it matters, names one risk, and leaves the decision to the human. Separately,
|
|
134
|
+
the `plastic-humanizer` skill cleans authored prose (specs, outcomes, READMEs, release notes) of
|
|
135
|
+
AI tells and slop; it is for documents, not for every reply.
|
|
@@ -157,7 +157,7 @@ To explain or debug a ranking or disposition, read `references/classification.md
|
|
|
157
157
|
|
|
158
158
|
The eval is the payload + golden snapshots: run the engine against the fixture store and
|
|
159
159
|
assert the `--data` payload shape/sorting/classification and the byte-identical `--json` +
|
|
160
|
-
text goldens in `test/fixtures/dashboard
|
|
160
|
+
text goldens in [`test/fixtures/dashboard/`](https://github.com/zalom/plastic/tree/main/test/fixtures/dashboard). See [`dashboard_test.rb`](https://github.com/zalom/plastic/blob/main/test/dashboard_test.rb). Drift without an
|
|
161
161
|
intentional change means the skill is broken.
|
|
162
162
|
|
|
163
163
|
## Notes
|
package/skills/doctor/SKILL.md
CHANGED
|
@@ -36,8 +36,9 @@ Each manifest maps a file path to its SHA256.
|
|
|
36
36
|
|
|
37
37
|
**On failure**, the report states this guided route, in order:
|
|
38
38
|
|
|
39
|
-
1.
|
|
40
|
-
|
|
39
|
+
1. Offer fixes in the `/plastic-doctor` conversation (the Fix all / Select individually /
|
|
40
|
+
Skip router from Steps 4-5 below); doctor itself only reports, and each chosen repair
|
|
41
|
+
is dispatched to the maintenance tool or skill that owns it.
|
|
41
42
|
2. If that does not resolve it, roll back to the last known-good version via
|
|
42
43
|
`plastic-rollback` (restores from the local, append-only `versions.json` ledger of
|
|
43
44
|
versions actually run).
|
|
@@ -85,6 +86,10 @@ per-project finding**; that is `--store <slug>`'s job (see above). This is what
|
|
|
85
86
|
- When hooks aren't firing, skills aren't loading, or something seems broken
|
|
86
87
|
- When the user says "check plastic", "diagnose", "what's wrong with plastic"
|
|
87
88
|
|
|
89
|
+
Read `../plastic-conventions/references/gates-and-enforcement.md` for the transition-gate
|
|
90
|
+
mechanics, the audited escape, and gate logging before diagnosing a stuck or misbehaving gate.
|
|
91
|
+
This path resolves relative to this skill's own installed directory.
|
|
92
|
+
|
|
88
93
|
## Procedure
|
|
89
94
|
|
|
90
95
|
### Step 1: Run the diagnostic script
|
|
@@ -155,9 +160,9 @@ Use the `fix_hint` value to determine the correct action:
|
|
|
155
160
|
| "Remove stale references from INDEX.md" | Edit INDEX.md to remove ghost references |
|
|
156
161
|
| "Inject the missing required frontmatter field(s)" | Edit the intent's `{ID}--{slug}.md` frontmatter to add the missing key (e.g. `chain: []`) without touching other keys |
|
|
157
162
|
| "Run: provision-project-store {slug}" | Run `provision-project-store <slug>` (or invoke the `plastic-store-provisioning` skill) to create the missing store |
|
|
158
|
-
| "Re-run installer" | Run `npx -y @zalom/plastic@<channel> install --
|
|
159
|
-
| "Run the Plastic installer to bootstrap the store" | Run `npx -y @zalom/plastic@<channel> install --
|
|
160
|
-
| "Dispatch plastic-store-curating ... revisions.md ..." | Invoke the `plastic-store-curating` (or the agent) to relocate the flagged section or ref into the intent's `revisions.md` via move-and-record (one dated, `[rule: <tag>]`-tagged entry per item), per
|
|
163
|
+
| "Re-run installer" | Run `npx -y @zalom/plastic@<channel> install --claude` (or `--codex`/`--hermes`/`--all` for that agent; channel: -alpha->@alpha, -beta->@beta, else @latest) |
|
|
164
|
+
| "Run the Plastic installer to bootstrap the store" | Run `npx -y @zalom/plastic@<channel> install --claude` (or `--codex`/`--hermes`/`--all`; channel: -alpha->@alpha, -beta->@beta, else @latest) to restore the global store's plastic_home directory or INDEX.md |
|
|
165
|
+
| "Dispatch plastic-store-curating ... revisions.md ..." | Invoke the `plastic-store-curating` (or the agent) to relocate the flagged section or ref into the intent's `revisions.md` via move-and-record (one dated, `[rule: <tag>]`-tagged entry per item), per plastic-conventions > references/maintenance-and-revisions.md. For a missing required section, restore or reproject it instead. |
|
|
161
166
|
| "Run scripts/project-links ... PRESERVES ... --drop-unbacked-links" | Run `ruby ~/.plastic/scripts/maintenance-run --tool project-links --intent <id> --apply` for the one flagged id (never run bare `project-links` against a real store outside the rare owner-approved batch exception, D2) |
|
|
162
167
|
|
|
163
168
|
For fixes the agent cannot handle automatically, explain what the user needs
|
|
@@ -165,6 +170,10 @@ to do manually. The `revisions.md` remedy is curator-applied (a move-and-record
|
|
|
165
170
|
relocation, not a mechanical edit) and stays human-gated by the Step 4
|
|
166
171
|
Fix / Select / Skip prompt.
|
|
167
172
|
|
|
173
|
+
Read `../plastic-conventions/references/maintenance-and-revisions.md` for WORK versus
|
|
174
|
+
MAINTENANCE, the `revisions.md` move-and-record contract, and the violation-tag catalog behind
|
|
175
|
+
the `revisions.md` remedy above.
|
|
176
|
+
|
|
168
177
|
### Step 6: Verify
|
|
169
178
|
|
|
170
179
|
After applying fixes, re-run the diagnostic script:
|
|
@@ -198,4 +207,4 @@ This keeps the update flow clean when nothing is wrong.
|
|
|
198
207
|
|
|
199
208
|
## References
|
|
200
209
|
|
|
201
|
-
- Read `references/gates-stuck-detection.md` for the full gate enforcement table, bridge file pattern, and stuck
|
|
210
|
+
- Read `references/gates-stuck-detection.md` for the full gate enforcement table, bridge file pattern, and the recorded stuck-detection signals when diagnosing gate failures or stuck agents
|
|
@@ -28,11 +28,16 @@ Hard blocking — hooks exit with code 2 when gates fail.
|
|
|
28
28
|
|
|
29
29
|
## Stuck Detection
|
|
30
30
|
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
31
|
+
No automatic stuck detector ships today: no threshold fires, and nothing forces a savepoint
|
|
32
|
+
or escalates on its own. What exists is recorded data, and reading it is the diagnosing
|
|
33
|
+
agent's judgment:
|
|
34
|
+
|
|
35
|
+
- `build.gate_failures` in the bridge file: `scripts/hook-gate-check` increments it on every
|
|
36
|
+
blocked write and resets it to 0 on a passing one. Nothing reads the counter back; a high
|
|
37
|
+
value is a signal for you, not a trigger for the system.
|
|
38
|
+
- `build.last_activity` in the bridge file: updated on passing writes. There are no
|
|
39
|
+
inactivity timers, and context pressure is not tracked anywhere.
|
|
40
|
+
|
|
41
|
+
When diagnosing, treat repeated denies of the same gate with no station progress (compare
|
|
42
|
+
the savepoint ledger) as stuck: stop, read the deny reason, and route through the resolving
|
|
43
|
+
command it names.
|
package/skills/doctor/report.md
CHANGED
|
@@ -97,4 +97,4 @@ Checked at: {{timestamp}}
|
|
|
97
97
|
FOOTER -- always include this line exactly as written.
|
|
98
98
|
===================================================================== -->
|
|
99
99
|
|
|
100
|
-
|
|
100
|
+
Doctor only reports; it never fixes anything itself. Ask me to fix these issues and I will offer Fix all / Select individually / Skip, then route each chosen repair through the tool that owns it.
|
package/skills/install/SKILL.md
CHANGED
|
@@ -187,7 +187,7 @@ Version: none -> <installed>
|
|
|
187
187
|
Doctor: <summary or "all clear">
|
|
188
188
|
```
|
|
189
189
|
|
|
190
|
-
Then: "Read `docs/guides/your-first-intent-in-10-minutes.md
|
|
190
|
+
Then: "Read [`your-first-intent-in-10-minutes.md`](https://github.com/zalom/plastic/blob/main/docs/guides/your-first-intent-in-10-minutes.md) for your first intent, start to finish."
|
|
191
191
|
|
|
192
192
|
### Local Install (testing/legacy)
|
|
193
193
|
|
|
@@ -8,8 +8,6 @@ user-invocable: true
|
|
|
8
8
|
|
|
9
9
|
Help turn ideas into fully formed designs through natural collaborative dialogue.
|
|
10
10
|
|
|
11
|
-
Announce: "I'm using the brainstorming skill to explore the design for intent {id}: {name}."
|
|
12
|
-
|
|
13
11
|
Start by understanding the current project context, then ask questions one at a time, in prose, to refine the idea. Once you understand what you're building, present the design and collect the owner's rulings on it. This skill's product is the enriched Why, not spec.md.
|
|
14
12
|
|
|
15
13
|
<HARD-GATE>
|
|
@@ -106,6 +104,10 @@ Do not author spec.md here.
|
|
|
106
104
|
- **Produces:** the enriched Why (`## Context`, `### Decisions`, one `## Insights` entry per ruling).
|
|
107
105
|
- **Next:** /plastic-intent-speccing consolidates the enriched Why into spec.md.
|
|
108
106
|
|
|
107
|
+
Read `../plastic-conventions/references/lifecycle-and-savepoints.md` for the subagent
|
|
108
|
+
report-home contract this handoff relies on. This path resolves relative to this skill's own
|
|
109
|
+
installed directory.
|
|
110
|
+
|
|
109
111
|
## Key Principles
|
|
110
112
|
|
|
111
113
|
- **One question at a time** - Don't overwhelm with multiple questions
|
|
@@ -47,6 +47,10 @@ scanning the store with grep/Read run `ruby ~/.plastic/scripts/qmd-sync search "
|
|
|
47
47
|
surface the candidate intent, then open the authoritative intent file for the hit you resume. The
|
|
48
48
|
command is a no-op when QMD is absent, so fall back to the existing INDEX.md / file scan.
|
|
49
49
|
|
|
50
|
+
Read `../plastic-conventions/references/lifecycle-and-savepoints.md` for the subagent
|
|
51
|
+
report-home contract behind the resume below. This path resolves relative to this skill's own
|
|
52
|
+
installed directory.
|
|
53
|
+
|
|
50
54
|
For that intent's directory:
|
|
51
55
|
|
|
52
56
|
1. **Read `savepoint.md` FIRST (intent 81).** It is a deterministic, append-only ledger
|
|
@@ -42,7 +42,7 @@ When creating a tactical intent in a project store:
|
|
|
42
42
|
- **Global:** `~/.plastic/store/`
|
|
43
43
|
- **Project:** `~/.plastic/projects/{slug}/store/`
|
|
44
44
|
|
|
45
|
-
###
|
|
45
|
+
### 2. Check for a Duplicate or Predecessor (QMD-first)
|
|
46
46
|
|
|
47
47
|
QMD-first (when available): before scanning the store with grep/Read, run
|
|
48
48
|
`ruby ~/.plastic/scripts/qmd-sync search "<terms>"` to surface candidate, prior, or duplicate
|
|
@@ -50,7 +50,7 @@ intents, then open the authoritative intent file for any hit you act on. The com
|
|
|
50
50
|
when QMD is absent, so fall back to the existing INDEX.md / file scan. Do this before allocating
|
|
51
51
|
the id so a near-duplicate can be reused and a true predecessor can be set in `--sources`.
|
|
52
52
|
|
|
53
|
-
###
|
|
53
|
+
### 3. Decide Branch vs Root
|
|
54
54
|
|
|
55
55
|
Decide this BEFORE scaffolding, because it sets whether you pass `--parent`.
|
|
56
56
|
Having a "parent" in mind does NOT automatically mean branch. Choose by meaning:
|
|
@@ -71,8 +71,9 @@ Having a "parent" in mind does NOT automatically mean branch. Choose by meaning:
|
|
|
71
71
|
|
|
72
72
|
When a branch intent exists because a late ruling arrived AFTER its parent was already
|
|
73
73
|
completed (the owner's late-ruling rule), the parent is restored to v1 via
|
|
74
|
-
`scripts/restore-intent-v1`, never by a hand-run `git checkout`/revert. See
|
|
75
|
-
|
|
74
|
+
`scripts/restore-intent-v1`, never by a hand-run `git checkout`/revert. See
|
|
75
|
+
`plastic-conventions > references/maintenance-and-revisions.md`, WORK vs MAINTENANCE, for the
|
|
76
|
+
rule and the tool.
|
|
76
77
|
|
|
77
78
|
`## Links` is a DERIVED view of `sources`/`chain`. Never hand-write a `## Links` line; add the
|
|
78
79
|
frontmatter edge and reproject. Links are decided by context influence (a `chain` edge has a high
|
|
@@ -80,7 +81,11 @@ bar: the candidate's context must materially help deliver this intent), not by s
|
|
|
80
81
|
similarity score. To gather candidates with their context and record an edge, use the
|
|
81
82
|
`plastic-intent-linking` skill and `scripts/link-suggest`.
|
|
82
83
|
|
|
83
|
-
|
|
84
|
+
Read `../plastic-conventions/references/knowledge-graph.md` for the full linking doctrine: the
|
|
85
|
+
tiers of influence, sources versus chain, and how the `## Links` projection is derived. This path
|
|
86
|
+
resolves relative to this skill's own installed directory.
|
|
87
|
+
|
|
88
|
+
### 4. Determine Intent Properties
|
|
84
89
|
|
|
85
90
|
Ask or infer from context:
|
|
86
91
|
- **intent**: one-line description
|
|
@@ -95,11 +100,11 @@ Ask or infer from context:
|
|
|
95
100
|
|
|
96
101
|
`chain` carries what this intent spawns AND related-but-not-spawned successors it leads to;
|
|
97
102
|
it starts empty and is populated later. See
|
|
98
|
-
`docs/concepts/how-plastic-sources-and-chains-intents.md
|
|
103
|
+
[`how-plastic-sources-and-chains-intents.md`](https://github.com/zalom/plastic/blob/main/docs/concepts/how-plastic-sources-and-chains-intents.md) for the full model.
|
|
99
104
|
Place the intent in `## Active` or `## Future` in INDEX.md (status is
|
|
100
105
|
convention-derived, not a frontmatter field).
|
|
101
106
|
|
|
102
|
-
###
|
|
107
|
+
### 5. Scaffold via new-intent (single call)
|
|
103
108
|
|
|
104
109
|
Delegate id allocation, directory and file creation, the born-complete intent
|
|
105
110
|
file, the sentinel placeholder lifecycle files, the reciprocal file links, and
|
|
@@ -107,7 +112,7 @@ self-validation to one `new-intent` invocation. Do NOT hand-author any of these
|
|
|
107
112
|
files.
|
|
108
113
|
|
|
109
114
|
```bash
|
|
110
|
-
|
|
115
|
+
ruby ~/.plastic/scripts/new-intent \
|
|
111
116
|
--store "<STORE>" --intent "<one-line>" --slug "<slug>" \
|
|
112
117
|
[--parent "<parent_id>"] [--author "<author>"] \
|
|
113
118
|
[--sources "id,id"] [--tags "project-<slug>,tag"]
|
|
@@ -73,7 +73,7 @@ State is derived from what exists, not from what's declared.
|
|
|
73
73
|
|
|
74
74
|
1. Determine the target store: `~/.plastic/store/` for global intents (default), `~/.plastic/projects/{slug}/store/` for project intents
|
|
75
75
|
2. Decide branch vs root (this sets whether you pass `--parent`)
|
|
76
|
-
3. Scaffold with one call: `
|
|
76
|
+
3. Scaffold with one call: `ruby ~/.plastic/scripts/new-intent --store <store> --intent "<one-line>" --slug <slug> [--parent <id>] [--sources id,id] [--tags ...]`. This allocates the id, creates the directory plus `actions/` and `resources/`, renders the born-complete intent file (frontmatter plus `## Intent`, `## Context`, `## Outcome`, `## Insights`, `## Links`), writes the sentinel placeholder lifecycle files, wires the reciprocal links, and self-validates.
|
|
77
77
|
4. Update the appropriate `INDEX.md` — add to Active section and appropriate cluster
|
|
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.
|
|
@@ -11,8 +11,6 @@ user-invocable: false
|
|
|
11
11
|
|
|
12
12
|
# Intent Discovery — What-stage context deposit
|
|
13
13
|
|
|
14
|
-
Announce: "Discovering context for intent [ID] — [name]."
|
|
15
|
-
|
|
16
14
|
Runs once, at intent activation, after the lock is armed and before Why. It gathers what is
|
|
17
15
|
already known so Why does not start cold, and deposits it as a resource the
|
|
18
16
|
Why-stage brainstorming agent reads.
|
|
@@ -21,9 +19,18 @@ Why-stage brainstorming agent reads.
|
|
|
21
19
|
Inside `plastic-intent-starting`, right after the bridge is armed, under the
|
|
22
20
|
lock. Dispatched as the `plastic-intent-discovery` background agent.
|
|
23
21
|
|
|
22
|
+
**Precondition for skipping: a size of S already on record, and no graph edges.** Read the
|
|
23
|
+
activating intent's `chain` and `sources` frontmatter fields first. When a `Tier: S` line is
|
|
24
|
+
already stamped at the top of `spec.md` AND both fields are empty, the pass does not run:
|
|
25
|
+
write the single line `no chain/sources, discovery skipped` to
|
|
26
|
+
`resources/discovery--<slug>.md` and stop there. Sizing happens at Why, which is after this
|
|
27
|
+
stage, so a first activation usually has no size yet and the full pass runs. Never guess a
|
|
28
|
+
size to unlock the skip. At M or L, or when either field is filled, run the full pass below.
|
|
29
|
+
|
|
24
30
|
## What it does
|
|
25
31
|
1. **Read the intent's links.** Load the activating intent file's `chain` and
|
|
26
|
-
`sources` frontmatter fields.
|
|
32
|
+
`sources` frontmatter fields. If both are empty and a size of S is already on record, apply
|
|
33
|
+
the skip above and stop.
|
|
27
34
|
2. **QMD-first discovery.** Search the Plastic stores with
|
|
28
35
|
`scripts/qmd-sync search "<terms>"` (or the `qmd` skill), scoped to the
|
|
29
36
|
relevant `plastic-*` collections, across completed predecessor work named in
|
|
@@ -15,6 +15,10 @@ curator path, and releasing all call this skill (or its backing script,
|
|
|
15
15
|
prose three times. `abandoned` is the SAME procedure as `delivered`, not a
|
|
16
16
|
failure branch: only outcome.md content and the INDEX section differ.
|
|
17
17
|
|
|
18
|
+
Read `../plastic-conventions/references/completion-and-done.md` for what "intent done" means and
|
|
19
|
+
the End-stage tail behind the steps below. This path resolves relative to this skill's own
|
|
20
|
+
installed directory.
|
|
21
|
+
|
|
18
22
|
## The 8 steps (0-7)
|
|
19
23
|
|
|
20
24
|
| # | Step | Who does it |
|
|
@@ -58,8 +62,8 @@ for orchestrator-owned or completion-tracking items.
|
|
|
58
62
|
`## Links` projection). On a refusal, fix via the OWNING tool, never a
|
|
59
63
|
hand edit of the check's own output:
|
|
60
64
|
- checklist/outcome content - finish it yourself, the same as before.
|
|
61
|
-
- links projection -
|
|
62
|
-
`maintenance-run`.
|
|
65
|
+
- links projection - run
|
|
66
|
+
`ruby ~/.plastic/scripts/maintenance-run --tool project-links --intent <id> --apply`.
|
|
63
67
|
- a savepoint issue - advisory only (WARN, never blocks): run
|
|
64
68
|
`plastic-intent-savepoint` to rebuild via `Bridge.rebuild_savepoint` if
|
|
65
69
|
you want it clean, but it never refuses the close on its own.
|
|
@@ -167,8 +171,9 @@ historical record of what was planned.
|
|
|
167
171
|
|
|
168
172
|
## Routing
|
|
169
173
|
|
|
170
|
-
`plastic-releasing`, `plastic-auto`,
|
|
171
|
-
`store-indexing` all delegate their mechanical
|
|
172
|
-
`scripts/end-intent` directly for steps 1-5).
|
|
173
|
-
outcome/INDEX/savepoint/disarm prose inline any
|
|
174
|
-
does, that surface has drifted and should route
|
|
174
|
+
`plastic-releasing`, `plastic-auto`, `plastic-intent-executing`, the curator
|
|
175
|
+
agent, `store-curating`, and `store-indexing` all delegate their mechanical
|
|
176
|
+
close to this skill (or call `scripts/end-intent` directly for steps 1-5).
|
|
177
|
+
None of them restate the outcome/INDEX/savepoint/disarm prose inline any
|
|
178
|
+
more; if you find one that does, that surface has drifted and should route
|
|
179
|
+
here instead.
|
|
@@ -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 (at L a fresh subagent per task with two-stage review, at S and M one executor dispatch for the whole consolidated action). 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,9 +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
|
|
12
|
-
|
|
13
|
-
**Announce at start:** "I'm using the executing-plan skill to implement this plan."
|
|
11
|
+
Load plan from the active intent's `plan.md`, execute all tasks, review per the tier gate below, report when complete.
|
|
14
12
|
|
|
15
13
|
## Step 0: Sync Worktree First
|
|
16
14
|
|
|
@@ -25,6 +23,10 @@ After syncing, verify the plan's target files exist at the paths plan.md names.
|
|
|
25
23
|
If a named file or directory is missing (renamed or removed upstream), stop and
|
|
26
24
|
report it rather than editing a stale path.
|
|
27
25
|
|
|
26
|
+
Read `../plastic-conventions/references/locks-and-worktrees.md` for delivery isolation: the
|
|
27
|
+
single-owner lock, claims, worktrees, solo mode, and the station ledger, before touching the
|
|
28
|
+
worktree above. This path resolves relative to this skill's own installed directory.
|
|
29
|
+
|
|
28
30
|
## Mode Selection
|
|
29
31
|
|
|
30
32
|
### Check for superpowers first
|
|
@@ -38,7 +40,12 @@ If `superpowers:subagent-driven-development` is available as a skill, delegate t
|
|
|
38
40
|
- Superpowers skills respect "user preferences for plan/spec location"; Plastic IS that preference
|
|
39
41
|
|
|
40
42
|
### Subagent-Driven (Default)
|
|
41
|
-
Dispatches
|
|
43
|
+
Dispatches subagents to do the work. The controller never implements. It dispatches, reviews, and tracks progress. How many dispatches it makes depends on the tier stamped at the top of `spec.md` (the `Tier:` line, the single authoritative record). `plan.md` carries a bold `**Tier:**` field copied from it, a convenience only:
|
|
44
|
+
|
|
45
|
+
- **S or M:** one executor dispatch implements the whole consolidated action from `plan.md` plus `checklist.md` in one pass. There is no per-task implementer-then-two-reviewers loop.
|
|
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.
|
|
42
49
|
|
|
43
50
|
### Inline (Fallback)
|
|
44
51
|
Executes tasks sequentially in the current session. Use when subagents aren't available or user explicitly requests inline mode.
|
|
@@ -55,6 +62,19 @@ Run Step 0 (Sync Worktree First) before this step.
|
|
|
55
62
|
|
|
56
63
|
### Step 2: Execute Each Task
|
|
57
64
|
|
|
65
|
+
Read the `Tier:` line stamped at the top of `spec.md` first (the authority), then follow the matching branch. `plan.md`'s bold `**Tier:**` field is a convenience copy of the same value, useful when `spec.md` is not already open.
|
|
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.
|
|
70
|
+
|
|
71
|
+
Read its response by code:
|
|
72
|
+
- DONE or DONE_WITH_CONCERNS → proceed to Step 3. Run no per-task spec review and no per-task quality review at these tiers; Step 3's final review covers the work.
|
|
73
|
+
- NEEDS_CONTEXT → provide the missing context, re-dispatch the executor.
|
|
74
|
+
- BLOCKED → stop, report to the user, wait for resolution.
|
|
75
|
+
|
|
76
|
+
#### At L: one subagent per task
|
|
77
|
+
|
|
58
78
|
For each task sequentially (never parallel: conflict risk):
|
|
59
79
|
|
|
60
80
|
**a. Dispatch implementer subagent**
|
|
@@ -81,17 +101,13 @@ Only after spec compliance passes. Reviews clean code, testing, architecture. Pa
|
|
|
81
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.
|
|
82
102
|
|
|
83
103
|
### Step 3: Final Review
|
|
84
|
-
After all tasks complete, dispatch a final reviewer for the entire implementation.
|
|
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.
|
|
85
105
|
|
|
86
106
|
### Step 4: Update Intent and Complete
|
|
87
107
|
Capture observations in `## Insights`. When ALL checklist items are checked:
|
|
88
108
|
|
|
89
|
-
1.
|
|
90
|
-
2.
|
|
91
|
-
3. Move intent from `## Active` to `## Completed` in INDEX.md (with today's date)
|
|
92
|
-
4. Update cluster entries to show `_(completed)_`
|
|
93
|
-
5. Auto-commit: `cd <store-root> && git add . && git commit -m "feat: complete intent <ID>: <name>"`
|
|
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`).
|
|
109
|
+
1. Update the intent's cluster entries in `INDEX.md` to show `_(completed)_`. Do this first, so the store auto-commit in the next step picks it up. `plastic-intent-ending` does not cover cluster maintenance (`store-indexing` and `store-curating` own it), so doing it here keeps the step from being lost.
|
|
110
|
+
2. Hand the mechanical close to `plastic-intent-ending`. It owns `outcome.md`, the intent file's `## Outcome` stamp, the INDEX terminal move, the savepoint `Done` line, the store auto-commit, disarm, the QMD reindex, and the EM-to-CTO owner report, as ONE delegation. Author the outcome.md content when that skill asks for it; do not restate the mechanical steps here.
|
|
95
111
|
|
|
96
112
|
**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.
|
|
97
113
|
|
|
@@ -113,12 +129,8 @@ For each task:
|
|
|
113
129
|
### Step 3: Update Intent and Complete
|
|
114
130
|
Capture observations in `## Insights`. When ALL checklist items are checked:
|
|
115
131
|
|
|
116
|
-
1.
|
|
117
|
-
2.
|
|
118
|
-
3. Move intent from `## Active` to `## Completed` in INDEX.md (with today's date)
|
|
119
|
-
4. Update cluster entries to show `_(completed)_`
|
|
120
|
-
5. Auto-commit: `cd <store-root> && git add . && git commit -m "feat: complete intent <ID>: <name>"`
|
|
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`).
|
|
132
|
+
1. Update the intent's cluster entries in `INDEX.md` to show `_(completed)_`. Do this first, so the store auto-commit in the next step picks it up. `plastic-intent-ending` does not cover cluster maintenance (`store-indexing` and `store-curating` own it), so doing it here keeps the step from being lost.
|
|
133
|
+
2. Hand the mechanical close to `plastic-intent-ending`. It owns `outcome.md`, the intent file's `## Outcome` stamp, the INDEX terminal move, the savepoint `Done` line, the store auto-commit, disarm, the QMD reindex, and the EM-to-CTO owner report, as ONE delegation. Author the outcome.md content when that skill asks for it; do not restate the mechanical steps here.
|
|
122
134
|
|
|
123
135
|
**This is NOT optional.** Complete the intent immediately when work is done.
|
|
124
136
|
|
|
@@ -138,6 +150,9 @@ the changed file, the installed output) rather than restating the intended
|
|
|
138
150
|
change. Never present an unverified claim to the owner. If verification
|
|
139
151
|
fails, fix it before the gate, not after.
|
|
140
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.
|
|
155
|
+
|
|
141
156
|
## Methods report (audits and sweeps)
|
|
142
157
|
|
|
143
158
|
When the work is an audit or a sweep (checking many files or many instances of
|
|
@@ -164,7 +179,10 @@ persisting each ruling with `--stage Exec`.
|
|
|
164
179
|
|
|
165
180
|
- **Before:** `plan.md` and `checklist.md` exist; the worktree is armed.
|
|
166
181
|
- **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).
|
|
182
|
+
- **Next:** `plastic-intent-ending` owns `outcome.md` and the rest of the mechanical close (see intent 161). The Update-Intent-and-Complete step above hands off to it.
|
|
183
|
+
|
|
184
|
+
Read `../plastic-conventions/references/lifecycle-and-savepoints.md` for the subagent
|
|
185
|
+
report-home contract this handoff relies on.
|
|
168
186
|
|
|
169
187
|
## Model Selection for Subagents
|
|
170
188
|
|
|
@@ -53,20 +53,22 @@ This process is thorough. It typically takes 20-45 minutes for a complex design.
|
|
|
53
53
|
|
|
54
54
|
> "We've covered [areas]. Still to explore: [areas]. Continue, or pause and capture what we have?"
|
|
55
55
|
|
|
56
|
-
If the user wants to pause, capture all decisions made so far into the active intent's
|
|
56
|
+
If the user wants to pause, capture all decisions made so far into the active intent's `## Context` / `### Decisions`, ready for /plastic-intent-speccing to consolidate later.
|
|
57
57
|
|
|
58
58
|
### 5. Close Out
|
|
59
59
|
|
|
60
60
|
When all branches are resolved:
|
|
61
61
|
|
|
62
|
-
1.
|
|
62
|
+
1. Record every ruling in the active intent's `## Context` / `### Decisions`, then hand off
|
|
63
|
+
to /plastic-intent-speccing to consolidate them into `spec.md` (that skill owns
|
|
64
|
+
`spec.md` exclusively)
|
|
63
65
|
2. List all decisions made
|
|
64
66
|
3. List any deferred items (things the user explicitly chose to decide later)
|
|
65
67
|
4. Proceed to Autonomous Handoff Offer (step 6)
|
|
66
68
|
|
|
67
69
|
### 6. Autonomous Handoff Offer
|
|
68
70
|
|
|
69
|
-
After closing out (
|
|
71
|
+
After closing out (decisions listed, spec consolidated by /plastic-intent-speccing), assess whether the agent has enough context to deliver the intent autonomously.
|
|
70
72
|
|
|
71
73
|
**Self-assessment checklist:**
|
|
72
74
|
- All key decisions resolved (no open "it depends" or "TBD")
|
|
@@ -26,6 +26,10 @@ Two distinct steps, do not conflate them:
|
|
|
26
26
|
|
|
27
27
|
## The three tiers (by context influence)
|
|
28
28
|
|
|
29
|
+
Read `../plastic-conventions/references/knowledge-graph.md` for the full linking doctrine behind
|
|
30
|
+
these tiers, the sources-versus-chain distinction, and the `## Links` projection. This path
|
|
31
|
+
resolves relative to this skill's own installed directory.
|
|
32
|
+
|
|
29
33
|
- **sources:** the foundational context that shaped this intent's CREATION (a split, an idea born
|
|
30
34
|
during development, a merge). Earns an edge. Decided by origin, never inferred.
|
|
31
35
|
- **chain:** the context that materially helps DELIVER this intent. HIGH bar: only the genuinely
|
|
@@ -12,6 +12,10 @@ session-keyed, liveness is a lease (the owner's hooks refresh the file mtime;
|
|
|
12
12
|
stale means the heartbeat is older than the TTL). The /tmp bridge is only a
|
|
13
13
|
cache; the lock file wins every disagreement.
|
|
14
14
|
|
|
15
|
+
Read `../plastic-conventions/references/locks-and-worktrees.md` for delivery isolation in full:
|
|
16
|
+
the single-owner lock, claims, worktrees, solo mode, and the station ledger behind every verb
|
|
17
|
+
below. This path resolves relative to this skill's own installed directory.
|
|
18
|
+
|
|
15
19
|
## Verbs
|
|
16
20
|
|
|
17
21
|
Run from the project (the intent resolves from this session's bridge), or pass
|