chamba 0.7.0 → 0.8.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/LICENSE +53 -14
- package/README.md +28 -8
- package/dist/commands/advanced.js +7 -278
- package/dist/commands/dev.js +11 -612
- package/dist/commands/doctor.js +1 -29
- package/dist/commands/menu.js +1 -80
- package/dist/commands/onboard.js +6 -230
- package/dist/commands/settings.js +15 -349
- package/dist/lib/agent-commands.js +2 -0
- package/dist/lib/agent-context.js +6 -210
- package/dist/lib/browser.js +1 -40
- package/dist/lib/chamba-yaml.js +10 -191
- package/dist/lib/constants.js +1 -125
- package/dist/lib/dockerfile-builder.js +41 -261
- package/dist/lib/env.js +2 -78
- package/dist/lib/git-env.js +1 -21
- package/dist/lib/global-config.js +4 -66
- package/dist/lib/pnpm-store.js +1 -19
- package/dist/lib/ports.js +1 -210
- package/dist/lib/safe-rm.js +1 -36
- package/dist/lib/sessions.js +2 -34
- package/dist/lib/shadows.js +1 -176
- package/dist/lib/skills.js +2 -0
- package/dist/lib/templates.js +1 -0
- package/dist/lib/webterm.js +1 -305
- package/dist/lib/workspace-identity.js +4 -260
- package/package.json +4 -4
- package/templates/Dockerfile +12 -19
- package/templates/claude-statusline.sh +5 -7
- package/templates/context/baseline.md +2 -0
- package/templates/pane-apps/client/assets/c-BNa-DeUl.json +3552 -0
- package/templates/pane-apps/client/assets/cpp-B-T4NRoH.json +20239 -0
- package/templates/pane-apps/client/assets/csharp-BbxHChhA.json +6010 -0
- package/templates/pane-apps/client/assets/css-CWCxuwmz.json +1860 -0
- package/templates/pane-apps/client/assets/diff-B-2N89g8.json +154 -0
- package/templates/pane-apps/client/assets/docker-DWTvYW26.json +103 -0
- package/templates/pane-apps/client/assets/files-D0nJgFAA.js +12 -0
- package/templates/pane-apps/client/assets/files-h0K1vZyQ.css +1 -0
- package/templates/pane-apps/client/assets/go-B2hyYeNg.json +3156 -0
- package/templates/pane-apps/client/assets/graphql-Z6Id2aNO.json +1292 -0
- package/templates/pane-apps/client/assets/html-BtzvlIfu.json +2627 -0
- package/templates/pane-apps/client/assets/ini-Bn3Twap1.json +108 -0
- package/templates/pane-apps/client/assets/java-C7t2dwLO.json +1885 -0
- package/templates/pane-apps/client/assets/javascript-DuC2v0C0.json +5996 -0
- package/templates/pane-apps/client/assets/json-CwdkWeV5.json +206 -0
- package/templates/pane-apps/client/assets/jsonc-MYWDbTU3.json +206 -0
- package/templates/pane-apps/client/assets/jsx-Cn8EZuIC.json +5996 -0
- package/templates/pane-apps/client/assets/kotlin-CFNOz1gw.json +580 -0
- package/templates/pane-apps/client/assets/make-BVnlFCcl.json +629 -0
- package/templates/pane-apps/client/assets/markdown-B4Xk2WM_.json +3263 -0
- package/templates/pane-apps/client/assets/php-CAQzQmmI.json +4188 -0
- package/templates/pane-apps/client/assets/python-CYQee8m4.json +4174 -0
- package/templates/pane-apps/client/assets/reviews-BsoGZ35r.css +1 -0
- package/templates/pane-apps/client/assets/reviews-iW0Mbn4e.js +153 -0
- package/templates/pane-apps/client/assets/ruby-D7R58tus.json +3114 -0
- package/templates/pane-apps/client/assets/rust-BFBbFiei.json +1103 -0
- package/templates/pane-apps/client/assets/scss-TQRhBkPG.json +1874 -0
- package/templates/pane-apps/client/assets/shellscript-DieAkC4W.json +2375 -0
- package/templates/pane-apps/client/assets/specs-D9z3neR-.js +13 -0
- package/templates/pane-apps/client/assets/sql-Bxd030LV.json +634 -0
- package/templates/pane-apps/client/assets/toml-ChrKGzsV.json +430 -0
- package/templates/pane-apps/client/assets/tsx-D2e90MFw.json +5996 -0
- package/templates/pane-apps/client/assets/typescript-DonXQ_n1.json +5747 -0
- package/templates/pane-apps/client/assets/xml-B17r2RXF.json +382 -0
- package/templates/pane-apps/client/assets/yaml-CKn4h1zy.json +627 -0
- package/templates/pane-apps/client/reviews/index.html +15 -0
- package/templates/pane-apps/client/specs/index.html +3 -2
- package/templates/pane-apps/server/reviews.mjs +20 -0
- package/templates/pane-apps/server/specs.mjs +5 -1588
- package/templates/skills/chamba-statusline/SKILL.md +7 -19
- package/templates/skills/dx-review/SKILL.md +123 -0
- package/templates/skills/dx-review/references/acts.md +162 -0
- package/templates/skills/dx-spec/SKILL.md +223 -27
- package/templates/skills/dx-spec/references/principles-template.md +2 -0
- package/templates/skills/dx-spec/references/review-guide.md +4 -50
- package/templates/skills/dx-spec/references/spec-guide.md +24 -4
- package/templates/skills/dx-spec/references/stages.md +143 -58
- package/templates/skills/dx-spec-execute/SKILL.md +148 -35
- package/templates/startup.mjs +10 -4
- package/templates/tool-helper.sh +166 -0
- package/templates/webterm/README.md +60 -26
- package/templates/webterm/color.js +61 -0
- package/templates/webterm/config.js +35 -4
- package/templates/webterm/context/claude.md +0 -1
- package/templates/webterm/public/app/alerts.js +4 -4
- package/templates/webterm/public/app/anchored.js +81 -0
- package/templates/webterm/public/app/connection.js +9 -0
- package/templates/webterm/public/app/dom.js +2 -0
- package/templates/webterm/public/app/frames.js +51 -17
- package/templates/webterm/public/app/main.js +22 -8
- package/templates/webterm/public/app/new-session.js +13 -41
- package/templates/webterm/public/app/palette.js +58 -0
- package/templates/webterm/public/app/pane-shape.js +167 -0
- package/templates/webterm/public/app/pane-shell.js +199 -134
- package/templates/webterm/public/app/pane.js +33 -24
- package/templates/webterm/public/app/reviews-host.js +15 -0
- package/templates/webterm/public/app/specs-host.js +12 -218
- package/templates/webterm/public/app/state.js +5 -0
- package/templates/webterm/public/app/tabs.js +6 -2
- package/templates/webterm/public/app/theme.js +75 -27
- package/templates/webterm/public/app/tool-host.js +302 -0
- package/templates/webterm/public/app/workspace-color.js +192 -0
- package/templates/webterm/public/index.html +17 -3
- package/templates/webterm/public/styles.css +143 -21
- package/templates/webterm/server.js +198 -150
- package/templates/webterm/tools/commands.js +61 -0
- package/templates/webterm/tools/index.js +25 -0
- package/templates/webterm/tools/mount.js +337 -0
- package/templates/webterm/tools/paths.js +34 -0
- package/templates/webterm/tools/reviews.js +133 -0
- package/templates/webterm/tools/specs.js +154 -0
- package/templates/webterm/typed-line.js +70 -7
- package/templates/context/context-usage.md +0 -1
- package/templates/context-usage.sh +0 -266
- package/templates/pane-apps/client/assets/specs-B1970L17.css +0 -1
- package/templates/pane-apps/client/assets/specs-cEee_SPn.js +0 -23
- package/templates/skills/dx-spec-config/SKILL.md +0 -313
- package/templates/skills/dx-spec-config/references/principles-template.md +0 -12
- package/templates/specs.sh +0 -106
- package/templates/webterm/specs.js +0 -358
|
@@ -16,6 +16,28 @@ The tab is where the user reads and where the user answers.
|
|
|
16
16
|
Name the artifact in a gate's `file`, and the tab opens it and puts the gate under it.
|
|
17
17
|
Say nothing about how to read a file: the user is already looking at it.
|
|
18
18
|
|
|
19
|
+
## The text of a round
|
|
20
|
+
|
|
21
|
+
The text you compose for a round must agree with the options that round offers.
|
|
22
|
+
An option that declines a step makes that step the user's choice.
|
|
23
|
+
No text beside it may say that the step happens anyway.
|
|
24
|
+
Compose the question from the options, and read the two together before you declare the round.
|
|
25
|
+
|
|
26
|
+
## Asking again
|
|
27
|
+
|
|
28
|
+
The "Needs you" list says what is genuinely open.
|
|
29
|
+
Only your own care keeps that true.
|
|
30
|
+
|
|
31
|
+
An ask the user answered leaves the list as they answer it.
|
|
32
|
+
A gate they asked for changes on is thus gone before you revise anything: declare the next one and carry on.
|
|
33
|
+
|
|
34
|
+
An ask you supersede is different, because nobody answered it.
|
|
35
|
+
You replace it with a different question, or the answer reaches you in the terminal instead.
|
|
36
|
+
The ask then stays on the list, and tells the user to answer something you know already.
|
|
37
|
+
Take it off in the same act that supersedes it, with `specs withdraw` and the reason.
|
|
38
|
+
`SKILL.md` carries the verb and its payload.
|
|
39
|
+
A gate declared again on the same artifact is the one case the tool takes back on its own.
|
|
40
|
+
|
|
19
41
|
## Applying the user's annotations
|
|
20
42
|
|
|
21
43
|
The user annotates any part of any artifact on the tab.
|
|
@@ -86,6 +108,7 @@ The file names the piece of work in `entry`, and holds one round per submit:
|
|
|
86
108
|
How to read one comment:
|
|
87
109
|
|
|
88
110
|
- `file` is relative to the spec directory.
|
|
111
|
+
- An asset's `path` is relative to the `.specs/` directory the feedback file sits in, not to the spec directory.
|
|
89
112
|
- `unit` is that path with the heading on the end, both slugified. It is the address of the exact place the annotation sits on.
|
|
90
113
|
- `kind` is `comment` or `remove`. A `remove` asks you to take that thing out, and its `text` is often empty, because pointing is the whole request.
|
|
91
114
|
- `quote` is the text the annotation was anchored on, when the user selected text. It is empty when they pointed at an image, a section or the file itself, which is what tells you the difference.
|
|
@@ -149,8 +172,18 @@ Check these categories for candidates, most important first:
|
|
|
149
172
|
- terminology
|
|
150
173
|
- how success is measured
|
|
151
174
|
|
|
152
|
-
|
|
153
|
-
|
|
175
|
+
**Theme support and the target devices.**
|
|
176
|
+
For every piece of user-facing work, pin down which themes the application draws in - dark, light, or both - and which devices it is laid out for - desktop only, responsive, or mobile-first.
|
|
177
|
+
Ask both once, in a round, whichever stages the protocol holds.
|
|
178
|
+
No form asks them, so this stage is where they are settled.
|
|
179
|
+
|
|
180
|
+
Look at the code that answers it before you ask, and mark the answer the code already gives as recommended.
|
|
181
|
+
Almost always that is the answer: the work is in an application that has a theme and a layout already, and matching them is what the work needs.
|
|
182
|
+
So the round is usually the user confirming what is there, and it stays a round because a piece of work that changes either one is exactly the piece of work an agent must not guess about.
|
|
183
|
+
Say in the option which one the code gives, in the code's own terms - "both, which is what every screen in this app draws today".
|
|
184
|
+
|
|
185
|
+
Write both answers into the `Themes and devices` section of `SPEC.md`, which the UI-mocks stage reads by name, so the stage that draws reads them from the spec rather than from a form.
|
|
186
|
+
`references/spec-guide.md` holds that section's shape.
|
|
154
187
|
|
|
155
188
|
Whatever stays open becomes a labeled assumption in `SPEC.md`, or a `[NEEDS CLARIFICATION: ...]` marker when it clears the bar in `references/spec-guide.md`.
|
|
156
189
|
The implementer has to know what was confirmed and what was assumed.
|
|
@@ -160,11 +193,23 @@ The stage ends at a gate: enough asked, or another round.
|
|
|
160
193
|
## Research
|
|
161
194
|
|
|
162
195
|
Run this stage for work that needs knowledge beyond the codebase: a protocol, a library, an algorithm, a subject area.
|
|
163
|
-
Size the research to the work.
|
|
164
|
-
Ask the user for the type and the depth in a round - a quick focused check against a thorough survey, and which sources you have.
|
|
165
|
-
Mark your pick recommended.
|
|
166
196
|
|
|
167
|
-
|
|
197
|
+
**Open with no round.**
|
|
198
|
+
The scope was settled beside this stage on the confirmation form, and it is in `stageSettings.research`.
|
|
199
|
+
Where the settings hold nothing, the steps were confirmed before the form asked: open with one round for the scope, and carry on from the answer.
|
|
200
|
+
The scope is one of three:
|
|
201
|
+
|
|
202
|
+
- `focused` - you decide what to research, sized to the work.
|
|
203
|
+
- `named` - research what `subject` names, and nothing wider.
|
|
204
|
+
- `broad` - deep research across the subjects this work touches. Use a deep-research capability where your environment offers one.
|
|
205
|
+
|
|
206
|
+
Check the scope against the code, the way **Cross-check a stored answer against the code** in `SKILL.md` says.
|
|
207
|
+
Where `broad` is plainly more than the work needs, say so in a message and offer to narrow it - the user chose it, so the choice to keep it is theirs.
|
|
208
|
+
|
|
209
|
+
Ask about sources in a round where the sources genuinely decide something: a paywalled standard, an internal document, a version you cannot reach.
|
|
210
|
+
This is a judgment call, and most research needs no such round.
|
|
211
|
+
|
|
212
|
+
Then research as settled, and write `research/RESEARCH.md`: what you learned, the options you compared, a recommendation, and the sources with links.
|
|
168
213
|
Write a finding that decides something as **Decision / Rationale / Alternatives**: what was chosen, why, and what was rejected with the reason.
|
|
169
214
|
Compare the options in a table when the comparison has more than two axes.
|
|
170
215
|
Keep the volume sized to the work. The format is the discipline, not the length.
|
|
@@ -179,7 +224,16 @@ Map the parts of the code the work touches: entry points, data shapes, the conve
|
|
|
179
224
|
Use the `Explore` agent for a broad search where you have one.
|
|
180
225
|
Write the findings into `spec/SPEC.md` with `path:line` references.
|
|
181
226
|
|
|
227
|
+
Read the project's own documents while you map the code: the README, the guides, and each document that sits beside the code the work touches.
|
|
228
|
+
Find the ones the planned work makes not correct, and write them into the `Documentation impact` section of `spec/SPEC.md`, as `references/spec-guide.md` describes it.
|
|
229
|
+
Name each document, and say which part of it the work makes not correct.
|
|
230
|
+
Where the work leaves every document correct, write that, so the stages after this one know the question was asked.
|
|
231
|
+
|
|
232
|
+
This stage is where the code is read as a whole, so it is where **Cross-check a stored answer against the code** in `SKILL.md` runs.
|
|
233
|
+
Read every answer the user has given against what the code says, and raise what disagrees: the stage settings the protocol form carries, and what a round settled earlier, the interview's own answers included.
|
|
234
|
+
|
|
182
235
|
This stage has no gate. It feeds the stages after it.
|
|
236
|
+
So it does not end your turn: write its findings, and start the next stage in the same turn.
|
|
183
237
|
A contradiction it finds becomes an interview question, a labeled assumption, or a `[NEEDS CLARIFICATION: ...]` marker.
|
|
184
238
|
|
|
185
239
|
## Technical specs
|
|
@@ -212,8 +266,13 @@ That round is the one exception to "ask nothing first".
|
|
|
212
266
|
Each mock is a complete standalone HTML document at `mocks/<mock-id>.html`, where `<mock-id>` is a kebab-case name for the screen.
|
|
213
267
|
Use inline styles, no external resources, and images as data URLs.
|
|
214
268
|
A standalone page lets the agent who builds the work open the mock on its own.
|
|
215
|
-
|
|
216
|
-
|
|
269
|
+
|
|
270
|
+
**The theme and the devices come from the `Themes and devices` section of `SPEC.md`.**
|
|
271
|
+
The interview settled both and wrote them there.
|
|
272
|
+
Read them from the spec, and ask in one round only where the spec does not say - work that reached this stage with no interview.
|
|
273
|
+
Style both `[data-theme="dark"]` and `[data-theme="light"]` on the root element for both themes, and one of them for one.
|
|
274
|
+
Lay the screen out for the devices: one desktop width for desktop only, every width from a phone up for responsive, and the phone first for mobile-first.
|
|
275
|
+
Where the code says something else than the spec does, raise it the way **Cross-check a stored answer against the code** in `SKILL.md` says before you draw.
|
|
217
276
|
|
|
218
277
|
List each mock in the `Mocks` section of `SPEC.md` as soon as the first one exists.
|
|
219
278
|
|
|
@@ -226,26 +285,13 @@ The loop:
|
|
|
226
285
|
|
|
227
286
|
## Execution plan
|
|
228
287
|
|
|
229
|
-
Ask about
|
|
230
|
-
|
|
288
|
+
**Ask nothing about how the run is shaped.**
|
|
289
|
+
The commits, the branch, where the run stops and who reviews it are settled on the execute form, in one act, when the user starts the run.
|
|
290
|
+
This stage recommends them as data, and writes none of them into `PLAN.md`.
|
|
231
291
|
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
- `commit_mode: current-branch`, `new-branch` or `no-commits` answers the commits question. `prompt` keeps it.
|
|
235
|
-
- `commit_grouping: per phase` or `single` answers the grouping question. `prompt` keeps it. With `no-commits` there is no grouping, so it is skipped either way.
|
|
236
|
-
- With `new-branch`, `branch_naming` names the branch, with `<slug>` replaced by this spec's slug. The name question is then skipped.
|
|
237
|
-
|
|
238
|
-
A saved answer skips its question, and says nothing.
|
|
239
|
-
The plan gate still shows the whole setup, so the user can make an exception for this one spec there.
|
|
240
|
-
|
|
241
|
-
Ask the commit questions in one round: whether the run commits as it goes, on the current branch or on a new one, and how the commits are grouped.
|
|
242
|
-
Ask for the branch name in the same round when a new branch is a live option.
|
|
243
|
-
|
|
244
|
-
Record the answers as `Commits: none | single | per phase` and `Branch: current | <name>` lines in `PLAN.md`.
|
|
245
|
-
|
|
246
|
-
Then break the work into phases.
|
|
292
|
+
Break the work into phases.
|
|
247
293
|
**Each phase fits one session, and leaves the repo in a working state.**
|
|
248
|
-
Write `plan/PLAN.md`: the goal,
|
|
294
|
+
Write `plan/PLAN.md`: the goal, the principles check, and the phase list with checkboxes.
|
|
249
295
|
Give each phase its goal and its definition of done.
|
|
250
296
|
Decide the phase boundaries, the goals and the definitions of done now, for every phase. They are cheap to get right in advance.
|
|
251
297
|
|
|
@@ -266,32 +312,71 @@ Every ID appears in one phase's `Covers` line at least, and a requirement may sp
|
|
|
266
312
|
An ID no phase covers means a missing phase, or scope that belongs in the non-goals.
|
|
267
313
|
Add the phase, or move the requirement, before the gate. Ask the user when the call is not yours.
|
|
268
314
|
|
|
269
|
-
**
|
|
270
|
-
|
|
315
|
+
**A phase covers each document the spec's `Documentation impact` section names.**
|
|
316
|
+
Name the document in the definition of done of the phase that changes what it describes, so the run makes the document correct as it changes the code.
|
|
317
|
+
Do not collect the documents into a phase of their own at the end.
|
|
318
|
+
|
|
319
|
+
**Post the phases as soon as `PLAN.md` is on disk:**
|
|
320
|
+
|
|
321
|
+
```
|
|
322
|
+
echo '{"kind":"plan","phases":[{"phase":"phase-01-the-state","title":"The state"},{"phase":"phase-02-the-routes","title":"The routes"}]}' | specs post <spec>
|
|
323
|
+
```
|
|
324
|
+
|
|
325
|
+
One call, holding the whole list, in plan order.
|
|
326
|
+
A phase's id is the name of the file it will be written into, without the extension, which is what the executing agent writes and ticks.
|
|
327
|
+
The execute form names phases from this list: without it the user cannot place a pause or a checkpoint at all.
|
|
328
|
+
|
|
329
|
+
Post the whole list again after each revision of the plan.
|
|
330
|
+
The list the post carries becomes the list: a phase that is gone from the plan goes from the state with it, and a phase that survives keeps the status it had.
|
|
331
|
+
This is the only write that drops a phase, so a plan the user changed at the gate leaves nothing behind for the execute form to offer.
|
|
332
|
+
|
|
333
|
+
**Then recommend how the run is shaped**, with `specs recommend`.
|
|
334
|
+
`SKILL.md` carries the payload.
|
|
335
|
+
The user decides it on the execute form; this is your reading of the work, and it binds nobody.
|
|
336
|
+
|
|
337
|
+
**The commits.**
|
|
338
|
+
Recommend `per-phase` for a plan of several phases, because a phase that is committed is a phase a later session finds finished.
|
|
339
|
+
Recommend `single` for small work that reads as one change.
|
|
340
|
+
Recommend `none` where the user is likely to want to read the whole thing before any of it lands.
|
|
341
|
+
Recommend a new branch for work of any size that touches shared code, and the current branch for a small change on a branch that is already the work's own.
|
|
342
|
+
Name the branch `spec/<slug>`, with this spec's own slug, unless a principle in the principles file names another shape.
|
|
271
343
|
|
|
272
344
|
**The pauses.**
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
Recommend a
|
|
277
|
-
Recommend
|
|
278
|
-
|
|
345
|
+
A pause is where the run stops and waits for the user.
|
|
346
|
+
The modes are `none`, `chosen` with the phases named, and `every`.
|
|
347
|
+
|
|
348
|
+
Recommend a pause only where skipping it has a real downside: a later phase builds on something the user must see or decide first.
|
|
349
|
+
Recommend `none` for every other plan, which is most of them.
|
|
350
|
+
A phase that is only visible, or only complicated, earns no pause.
|
|
351
|
+
A pause with no such downside costs the user a stop for nothing.
|
|
352
|
+
|
|
353
|
+
A pause is not a mid-run review checkpoint.
|
|
354
|
+
A checkpoint stops nobody: fresh reviewers judge the work, and the run goes on.
|
|
355
|
+
A pause needs the user, and the run waits until the user answers.
|
|
356
|
+
A phase that needs another reader gets a checkpoint.
|
|
357
|
+
A phase that needs the user's own judgment gets a pause.
|
|
358
|
+
|
|
359
|
+
Never recommend `every` yourself.
|
|
360
|
+
That mode is the user's to pick on the form, and a recommendation of it carries no reason.
|
|
361
|
+
|
|
362
|
+
**The pause reasons.**
|
|
363
|
+
Give every pause you recommend one line in `pauseReasons`, keyed by the phase it sits after.
|
|
364
|
+
Say what the later phases build on, and what goes wrong where the user does not see it first.
|
|
365
|
+
Where you recommend `none`, give `noPauseReason` one line saying why nothing needs the user before the run ends.
|
|
366
|
+
Write both to the user, in plain words.
|
|
367
|
+
The execute form shows them under the Pauses field, and they are how the user judges the stops you proposed.
|
|
279
368
|
|
|
280
369
|
**The review checkpoints.**
|
|
281
370
|
A review checkpoint is a point in the run where fresh reviewers, who did not do the work, judge what is built so far.
|
|
282
|
-
Propose concrete checkpoints
|
|
371
|
+
Propose concrete checkpoints, each with a panel of one focus per reviewer.
|
|
283
372
|
Correctness against the spec, security, performance, repo rules and docs consistency are examples, not a menu.
|
|
284
373
|
|
|
285
374
|
Where they go:
|
|
286
375
|
|
|
287
|
-
- **Every
|
|
376
|
+
- **Every recommendation carries the final checkpoint**, after the last phase. It judges the finished work as a whole, and the user may still untick it.
|
|
288
377
|
- Recommend a mid-run checkpoint only under the **dependency-risk rule**: the one risk that justifies stopping for reviewers mid-run is a phase whose wrong implementation sends later phases wrong. Review a complicated phase with no effect on later phases at the end instead. A five-phase plan with no such risk gets the final checkpoint alone.
|
|
289
|
-
-
|
|
290
|
-
|
|
291
|
-
Ask the pauses and the checkpoints in one round.
|
|
292
|
-
The user's pick is final, so a user who declines every checkpoint gets none.
|
|
293
|
-
Record the answer as a `Review checkpoints:` bullet with one sub-bullet per checkpoint: where it sits, how many reviewers, their focuses, and why it is there.
|
|
294
|
-
With no review at all, the line is `Review checkpoints: none`.
|
|
378
|
+
- Give each checkpoint a `why` of one line, saying why it sits where it does. The form shows it on a line under the checkpoint.
|
|
379
|
+
- **Include a "better ways to do this" reviewer in the final panel.**
|
|
295
380
|
|
|
296
381
|
**Write no phase file now.**
|
|
297
382
|
Each `plan/phase-NN-<slug>.md` holds a `Status:` line, tasks as checkboxes, and a **Verify** section stating how to prove the phase done.
|
|
@@ -309,13 +394,7 @@ Include the deviation table only when the plan breaks a principle, and the `Cove
|
|
|
309
394
|
|
|
310
395
|
> **For the executing agent - read this first.** Read `spec/SPEC.md` before any phase.
|
|
311
396
|
> This plan was written before the work started; check each phase against the actual code before building, and raise anything that looks off instead of pushing through.
|
|
312
|
-
|
|
313
|
-
- Commits: none | single | per phase
|
|
314
|
-
- Branch: current | <branch name>
|
|
315
|
-
- Pauses: none | after phase 2, after phase 4 | every phase
|
|
316
|
-
- Review checkpoints:
|
|
317
|
-
- after phase 3: 2 reviewers - correctness against the spec, and docs consistency. Later phases build on this one.
|
|
318
|
-
- final: 3 reviewers - correctness against the spec, docs consistency, and simpler shapes.
|
|
397
|
+
> How this run is shaped - the commits, the branch, the pauses and the review checkpoints - is in the state, decided on the execute form.
|
|
319
398
|
|
|
320
399
|
## Goal
|
|
321
400
|
|
|
@@ -340,24 +419,26 @@ Include the deviation table only when the plan breaks a principle, and the `Cove
|
|
|
340
419
|
```
|
|
341
420
|
|
|
342
421
|
Consider a visual beside the plan.
|
|
343
|
-
Then gate on `plan/PLAN.md`, saying the phases in a line each, how the
|
|
344
|
-
|
|
422
|
+
Then gate on `plan/PLAN.md`, saying the phases in a line each, how the plan honors the principles, and any deviation with its reason.
|
|
423
|
+
Say in one line what you recommended for the run, and that the user settles it when they press Execute.
|
|
424
|
+
On changes: revise the plan, post the phases again where they moved, recommend the run again where the change made the recommendation wrong, and gate again.
|
|
425
|
+
Loop until the user approves it.
|
|
426
|
+
The rule over that last part is **Keep what derives from a change true**, in `SKILL.md`.
|
|
345
427
|
|
|
346
428
|
## Quality review
|
|
347
429
|
|
|
348
430
|
This is the last stage before the coherence rewrite and finalize.
|
|
349
431
|
It reviews everything the spec produced - `spec/SPEC.md`, the research, the plan, and the mocks the spec lists - and whether those documents agree with each other.
|
|
350
432
|
Read `references/review-guide.md` when the stage starts.
|
|
351
|
-
It holds the reviewer briefs, the lenses, the severities, the report format
|
|
433
|
+
It holds the reviewer briefs, the lenses, the severities, and the report format.
|
|
352
434
|
|
|
353
435
|
**The panel.**
|
|
354
436
|
Ask who reviews the work, in a round.
|
|
355
437
|
Propose a panel sized to the work and its risk, one reviewer per focus, and mark your proposal recommended.
|
|
356
438
|
Give a short line saying what each reviewer looks at.
|
|
357
|
-
The default proposal has
|
|
358
|
-
**Include the "better ways to do this" reviewer
|
|
359
|
-
|
|
360
|
-
Bigger or riskier work may add a focus of its own - security, performance, the work's own subject - and small work may run with two reviewers and the blockers loop.
|
|
439
|
+
The default proposal has three reviewers: consistency and completeness, principles alignment, and better ways to do this.
|
|
440
|
+
**Include the "better ways to do this" reviewer in every proposal.**
|
|
441
|
+
Bigger or riskier work may add a focus of its own - security, performance, the work's own subject - and small work may run with two reviewers.
|
|
361
442
|
Always offer an option that turns the review off.
|
|
362
443
|
Say in its description that nothing gets checked independently, and that the spec goes straight to the rewrite and finalize.
|
|
363
444
|
|
|
@@ -391,9 +472,13 @@ Resolve a conflict with a principle by changing the work, never the principle.
|
|
|
391
472
|
Write `review/REVIEW.md` in the format `references/review-guide.md` defines.
|
|
392
473
|
Consider a visual beside it: where the findings fall across the artifacts is the kind of thing a figure shows faster than a list.
|
|
393
474
|
|
|
394
|
-
Declare one decision card per finding that waits on the user
|
|
475
|
+
Declare one decision card per finding that waits on the user.
|
|
476
|
+
Each card names the passage precisely: the artifact in `file`, and the `##` section in `heading`.
|
|
477
|
+
Write what was found and what each way costs into the question's own `ask`.
|
|
478
|
+
Say the proposed change as one option, in the exact words it would be done in, and the alternative as another option.
|
|
479
|
+
Mark one of them recommended.
|
|
480
|
+
The card's own box is where the user's words go, and it is already there, so write no `invite` on a card: the form draws one box for the card and gives it its own words.
|
|
395
481
|
Then gate on `review/REVIEW.md`.
|
|
396
482
|
Read the answers back, record what the user decided in the report, and apply it.
|
|
397
483
|
Then gate again.
|
|
398
484
|
A comment the user sent on a finding's section is input to that finding.
|
|
399
|
-
A user who asks for another round gets one. There is no automatic re-review loop.
|