@zalom/plastic 2.0.0-alpha.7 → 2.0.0-alpha.9
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/hooks/message-display +9 -1
- package/package.json +1 -1
- package/scripts/agent-report +8 -2
- package/scripts/end-intent +93 -0
- package/scripts/hook-message-display +12 -5
- package/scripts/lib/day_summary.rb +7 -2
- package/scripts/lib/installer_core.rb +4 -0
- package/scripts/lib/intent_screen.rb +28 -4
- package/scripts/lib/message_display.rb +35 -127
- package/scripts/lib/report_screen.rb +648 -0
- package/scripts/lib/savepoint.rb +14 -0
- package/scripts/lib/screen_paint.rb +218 -0
- package/scripts/report-screen +120 -0
- package/scripts/savepoint-note +67 -0
- package/scripts/spawn-preamble +9 -2
- package/skills/auto/SKILL.md +10 -6
- package/skills/auto/references/human-report-contract.md +59 -53
- package/skills/conventions/references/locks-and-worktrees.md +12 -0
- package/skills/intent-continuing/SKILL.md +15 -10
- package/skills/intent-ending/SKILL.md +8 -2
- package/skills/intent-executing/SKILL.md +6 -0
- package/templates/outcome.md +14 -1
- package/templates/report-state.md +11 -0
|
@@ -103,20 +103,25 @@ For a live intent's directory:
|
|
|
103
103
|
the next thing the stage needs (see the matrix). The newest `## Insights` entry supplies
|
|
104
104
|
the human-readable context; an entry marked `(autonomous)` means an auto team was
|
|
105
105
|
delivering it, so say so and offer to hand back to `plastic-auto`.
|
|
106
|
-
5. **Print the
|
|
106
|
+
5. **Print the report screen as the first thing in the reply, then continue at that stage.**
|
|
107
107
|
The screen must open the message with nothing before it. On Claude Code, a fail-open
|
|
108
108
|
`MessageDisplay` hook recognizes a reply that opens this way and substitutes a styled ANSI
|
|
109
109
|
rendering for it there; the transcript and every other harness keep exactly this plain
|
|
110
|
-
form
|
|
111
|
-
`ruby ~/.plastic/scripts/
|
|
112
|
-
title, the field table, and the Steps table come from the record,
|
|
110
|
+
form. For "where are we" on one named intent, run
|
|
111
|
+
`ruby ~/.plastic/scripts/report-screen state <intent_dir>` and print its output as it is:
|
|
112
|
+
the title, the field table, the `Changed` row, and the Steps table come from the record,
|
|
113
|
+
never by eye. For "where are we" with no intent named, run
|
|
114
|
+
`ruby ~/.plastic/scripts/report-screen state --all <store_root>` for the roster across every
|
|
115
|
+
in-delivery intent. Route "why did X take so long" to
|
|
116
|
+
`ruby ~/.plastic/scripts/report-screen delay <intent_dir>` instead - every verb prints the
|
|
117
|
+
same plain screen on any harness, painted only where the harness supports it, with no
|
|
118
|
+
branching on harness name. Under the `state` screen
|
|
113
119
|
write **What this means** as two to four bullets in plain words (what the intent is for,
|
|
114
|
-
what has landed, what is left, any defect named by step), then close with
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
`plastic-doctor` skill's lock section repairs or reclaims it.
|
|
120
|
+
what has landed, what is left, any defect named by step), then close with **needs input:**
|
|
121
|
+
naming the first open step. Then continue the work in the
|
|
122
|
+
session's current mode. In auto mode the running team already holds the delivery lock; if a
|
|
123
|
+
lock is held by a session that is gone, the `plastic-doctor` skill's lock section repairs or
|
|
124
|
+
reclaims it.
|
|
120
125
|
|
|
121
126
|
## Roadmap route: resume the mid-flight roadmap
|
|
122
127
|
|
|
@@ -63,8 +63,14 @@ on disk is what the record becomes, so before the call:
|
|
|
63
63
|
|
|
64
64
|
Author outcome.md yourself when it deserves prose: copy `templates/outcome.md`,
|
|
65
65
|
set the frontmatter to `disposition: delivered` or `disposition: abandoned`, and
|
|
66
|
-
fill `## Summary`, `## Delivered`, `## Verification`, `## Follow-ups`.
|
|
67
|
-
|
|
66
|
+
fill `## Summary`, `## Delivered`, `## Verification`, `## Follow-ups`. `## Delivered` is a
|
|
67
|
+
`| Row | What |` table: one row per thing delivered, in plain wording a reader
|
|
68
|
+
recognizes, not a method name or an implementation summary (that detail
|
|
69
|
+
belongs in `## Summary`). Each row's label must appear as a standalone token
|
|
70
|
+
in an action-file heading (`### S1 - ...` proves row S1); that heading's
|
|
71
|
+
matrix rows become the row's Proven-by cell on `report-screen delivered`'s
|
|
72
|
+
post-delivery screen. `## Needs you` is the literal None or a
|
|
73
|
+
`| N | What | Why |` table. On abandon, `## Summary` states the abandonment reason and the trail (see Pivot
|
|
68
74
|
below). A placeholder outcome.md is backfilled from the record instead, with the
|
|
69
75
|
close's disposition and the `--outcome-summary` line as its summary. Also author
|
|
70
76
|
the rich INDEX entry note now (a short line in the store's existing
|
|
@@ -61,6 +61,8 @@ Run Step 0 (Sync Worktree First) before this step.
|
|
|
61
61
|
|
|
62
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.
|
|
63
63
|
|
|
64
|
+
After each commit lands (the red commit and every commit after it), append a `Commit` line to the savepoint ledger: `ruby ~/.plastic/scripts/savepoint-note <intent_dir> --kind Commit --text "<sha> <what it proves>"` (intent 317, D17). This is what feeds `report-screen delay`; a commit with no line is a gap the delay report cannot explain.
|
|
65
|
+
|
|
64
66
|
Read its response by code:
|
|
65
67
|
- DONE or DONE_WITH_CONCERNS → proceed to Step 3.
|
|
66
68
|
- NEEDS_CONTEXT → provide the missing context, re-dispatch the executor.
|
|
@@ -69,6 +71,10 @@ Read its response by code:
|
|
|
69
71
|
### Step 3: Review by Risk
|
|
70
72
|
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.
|
|
71
73
|
|
|
74
|
+
Whenever a review verdict returns - the plan review before code, or the post-execution review above - the lead appends a `Review` line: `ruby ~/.plastic/scripts/savepoint-note <intent_dir> --kind Review --text "<verdict, what changed>"` (intent 317, D17). This is the other half of what `report-screen delay` reads.
|
|
75
|
+
|
|
76
|
+
**The D19 heading convention.** An action file's `## Delivered` row (in `outcome.md`) is proven by whichever `actions/ACTION_N.md` heading carries that row's label as a standalone token - `### Row A -` proves row A, `### S1 -` proves row S1. Write action-file section headings so the label they prove is unambiguous (never a substring another label could also match, like `A` inside `AB`); `report-screen delivered`'s Proven-by column renders `not recorded` when no heading matches.
|
|
77
|
+
|
|
72
78
|
### Step 4: Update Intent and Complete
|
|
73
79
|
Capture observations in `## Insights`. When ALL checklist items are checked:
|
|
74
80
|
|
package/templates/outcome.md
CHANGED
|
@@ -7,10 +7,23 @@ disposition: delivered|abandoned
|
|
|
7
7
|
(what was delivered)
|
|
8
8
|
|
|
9
9
|
## Delivered
|
|
10
|
-
|
|
10
|
+
<!-- One row per thing delivered, in plain wording a reader recognizes, not
|
|
11
|
+
an implementation summary; the technical detail belongs in ## Summary. Each
|
|
12
|
+
row's label must appear as a standalone token in an actions/*.md heading
|
|
13
|
+
(for example "### S1 - ..." proves row S1): that heading's matrix rows become
|
|
14
|
+
the row's Proven-by cell on the delivered screen (intent 317 D19, 317a). -->
|
|
15
|
+
| Row | What |
|
|
16
|
+
| --- | --- |
|
|
17
|
+
| S1 | ... |
|
|
11
18
|
|
|
12
19
|
## Verification
|
|
13
20
|
- <acceptance criterion> — verified by ... → result
|
|
14
21
|
|
|
22
|
+
## Needs you
|
|
23
|
+
<!-- The literal None, or a table shaped | N | What | Why | with one row per
|
|
24
|
+
open owner action. Prose is tolerated by the reader but renders as a single
|
|
25
|
+
untyped row - write the table. -->
|
|
26
|
+
None
|
|
27
|
+
|
|
15
28
|
## Follow-ups
|
|
16
29
|
None
|