flow-workflows 0.76.0 → 0.77.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/adapters/codex/CORE.md +10 -3
- package/adapters/codex/skills/flow-bug-fix/SKILL.md +1 -1
- package/adapters/codex/skills/flow-doctor/SKILL.md +1 -1
- package/adapters/codex/skills/flow-feat-build/SKILL.md +4 -2
- package/adapters/gemini/CORE.md +10 -3
- package/adapters/gemini/commands/flow/bug/fix.toml +1 -1
- package/adapters/gemini/commands/flow/doctor.toml +1 -1
- package/adapters/gemini/commands/flow/feat/build.toml +4 -2
- package/adapters/hermes/CORE.md +10 -3
- package/adapters/hermes/skills/flow-bug-fix/SKILL.md +1 -1
- package/adapters/hermes/skills/flow-doctor/SKILL.md +1 -1
- package/adapters/hermes/skills/flow-feat-build/SKILL.md +4 -2
- package/adapters/opencode/CORE.md +10 -3
- package/adapters/opencode/commands/flow-bug-fix.md +1 -1
- package/adapters/opencode/commands/flow-doctor.md +1 -1
- package/adapters/opencode/commands/flow-feat-build.md +4 -2
- package/package.json +1 -1
- package/plugins/flow/.claude-plugin/plugin.json +1 -1
- package/plugins/flow/CHANGELOG.md +15 -0
package/adapters/codex/CORE.md
CHANGED
|
@@ -17,7 +17,7 @@ Every `$flow-*` command assumes these rules. They are stated once, here, so a co
|
|
|
17
17
|
carries what is specific to its phase. Read this once per session; a command that says "load
|
|
18
18
|
`flow-core`" means this file.
|
|
19
19
|
|
|
20
|
-
**This file belongs to flow `0.
|
|
20
|
+
**This file belongs to flow `0.77.0`.** Compare it once, at the start of the session, against
|
|
21
21
|
`version` in `~/.claude/flow/.claude-plugin/plugin.json`. The two differing means the session
|
|
22
22
|
is running a **mixture** — the commands from one copy of the plugin, these shared rules from another
|
|
23
23
|
— which is exactly what happens when a branch or a release candidate is loaded over an installed
|
|
@@ -296,6 +296,9 @@ prose describing a file is otherwise obeyed to the letter.
|
|
|
296
296
|
"",
|
|
297
297
|
{"ref": "#1", "text": "batch read sources", "mark": "wait", "link": "https://gitlab.com/…/merge_requests/9977"},
|
|
298
298
|
{"ref": "#2", "text": "per-event and per-recipient counters", "mark": "current"},
|
|
299
|
+
{"ref": "1–2", "text": "counter columns + migration · repository query", "mark": "done", "indent": 4},
|
|
300
|
+
{"ref": "3", "text": "per-recipient aggregation in the use case", "mark": "current", "indent": 4},
|
|
301
|
+
{"ref": "4", "text": "expose both counters on the endpoint", "mark": "pending", "indent": 4},
|
|
299
302
|
{"ref": "#3–#6", "text": "channel map · use case · document detail · route", "mark": "pending"},
|
|
300
303
|
"",
|
|
301
304
|
{"ref": "Now", "text": "unit suite and the test agent over #2", "mark": "info"},
|
|
@@ -307,10 +310,10 @@ prose describing a file is otherwise obeyed to the letter.
|
|
|
307
310
|
}
|
|
308
311
|
```
|
|
309
312
|
|
|
310
|
-
- **`mark` says what a line is**; the reader draws it. `done` · `current` (at most one) · `pending` · `wait` (waiting on someone else: an open MR/PR, a user decision) · `block` · `info`. Marked lines form an aligned column: symbol, `ref`, text, link pinned right. Do not set `style` on a marked line — except `mark: "info"` + `style: ok|warn|error` when the colour *is* the information (a monitoring verdict).
|
|
313
|
+
- **`mark` says what a line is**; the reader draws it. `done` · `current` (at most one per block) · `pending` · `wait` (waiting on someone else: an open MR/PR, a user decision) · `block` · `info`. Marked lines form an aligned column: symbol, `ref`, text, link pinned right. Do not set `style` on a marked line — except `mark: "info"` + `style: ok|warn|error` when the colour *is* the information (a monitoring verdict).
|
|
311
314
|
- **`ref` need not be a number**: `#1`, `#3–#6`, `Now`, `Next`, `Decision`. Column width is per block; blocks are separated by blank lines — use them so the MR/PR train and the labels below do not drag each other wide.
|
|
312
315
|
- **`link` is a field, never a URL inside `text`** — and **every line that names an MR/PR carries it**: the train entries, a blocker about somebody else's MR/PR, a `Now` or `Next` about the open one. The URL is in `meta.json.mrs[].url` or in whatever recorded that blocker; a bare `!10327` typed into `text` is a number the reader cannot make clickable, which is the whole point of the field. No URL recorded anywhere → the number in `text` and nothing else, and go and record it.
|
|
313
|
-
- **Order:** (1) work title (`style: title`, no mark); (2) the MR/PR train, one entry per `meta.json.mrs[]` with `ref` `#n`, short title, real-state `mark`, `link` when there is a URL — not-started entries collapse into one `#a–#z` `pending` line; omit the block without `mrs`; (3) `Now` — what is running, the one fact `meta.json` cannot hold; (4) `Next`; (5) `Decision`, `mark: wait`, **only** when parked on the user — over the tools it travels with `attention: "wait"` (§4.2), and both are cleared together; (6) blockers, `mark: block` (a sibling repo with `contract_handoff: pending`, a red pipeline, an unmerged dependency).
|
|
316
|
+
- **Order:** (1) work title (`style: title`, no mark); (2) the MR/PR train, one entry per `meta.json.mrs[]` with `ref` `#n`, short title, real-state `mark`, `link` when there is a URL — not-started entries collapse into one `#a–#z` `pending` line; omit the block without `mrs`; (2b) **the plan steps of the MR/PR being built**, right under its train entry — only while `build` or `fix` is working through a written plan (`$flow-feat-build §2.0ter`, `$flow-bug-fix §2.0bis`); one line per step, `ref` its number (`1`, `2`…), `indent: 4`, `key` `step-<n>`, `mark` `done` · `current` · `pending` from the plan's ticks in the phase artifact — never ahead of them; past three finished steps they collapse into one `done` line (`1–4`, `key` `steps-done`), and past three pending ones the tail collapses the same way (`key` `steps-pending`), so the block stays at five lines or fewer; drop the block when the MR/PR's build ends. This is the step list the user watches: a harness's own task list, where there is one, is a bonus on top — the panel is what every harness can feed; (3) `Now` — what is running, the one fact `meta.json` cannot hold; (4) `Next`; (5) `Decision`, `mark: wait`, **only** when parked on the user — over the tools it travels with `attention: "wait"` (§4.2), and both are cleared together; (6) blockers, `mark: block` (a sibling repo with `contract_handoff: pending`, a red pipeline, an unmerged dependency).
|
|
314
317
|
- **Rules:** `phase` is the phase you are **running now** (not `meta.json.phase`, which advances only at Close). `header: true` means ticket, type, phase and age are drawn by the reader — do not repeat them in `lines`. Keep it under ~14 lines. Every fact from `meta.json` and the artifacts — an invented MR/PR state is worse than a blank panel. Write in the language of the work's artifacts.
|
|
315
318
|
|
|
316
319
|
### 4.2 Over the terminal's MCP — `panel_set` once, `panel_patch` from then on
|
|
@@ -385,6 +388,10 @@ that never asked, because they answered it and the screen says it did not land;
|
|
|
385
388
|
nobody clears keeps that tab claiming them for ever. The same applies to a blocker that lifted and
|
|
386
389
|
to a `wait` line whose MR/PR merged.
|
|
387
390
|
|
|
391
|
+
**(f) Each plan step that lands** (the (2b) block): one patch, the moment its tick goes into the
|
|
392
|
+
phase artifact — that step to `done`, the next to `current`, `Now` moved on. Not batched at the end
|
|
393
|
+
of the MR/PR: a list that jumps from nothing to finished told the user nothing while it mattered.
|
|
394
|
+
|
|
388
395
|
### 4.5 `meta.json.cost[]` — what a phase measured, when it could
|
|
389
396
|
|
|
390
397
|
A phase that can measure what it spent appends one entry: `{ "phase": "review", "at": "<ISO>",
|
|
@@ -95,7 +95,7 @@ Save it in `04-fix.md` under `## Plan`, right after the brief. **A fix that was
|
|
|
95
95
|
|
|
96
96
|
- Apply the minimal fix targeting the finding of `03-investigation.md` (or the diagnosis if investigate was skipped).
|
|
97
97
|
- Sensitive area (authentication, payments, sensitive data) → consult the `agents.architecture` agent from FLOW.md to confirm the correct layer; empty → check against `conventions` in FLOW.md.
|
|
98
|
-
- More than 2 fix steps → the §2.0bis plan is already written:
|
|
98
|
+
- More than 2 fix steps → the §2.0bis plan is already written: tick its numbered steps off in `04-fix.md` where they stand, and show them in the live panel's step block (flow-core §4.1 (2b), patched per §4.4 (f)); a harness task list, if there is one, goes on top as `$flow-feat-build §2.1` says. One task per step, same order, marked `in_progress` and `completed` as they go — not batched.
|
|
99
99
|
- **Comment discipline**: comment only a *why* the code cannot say (a non-obvious constraint, the reason for a workaround, a subtle invariant); match the surrounding file's comment density. **Never write the ticket ID or "fix for #N" into a code comment** — that lives in the commit/branch/MR-PR.
|
|
100
100
|
- Keep the log updated while editing.
|
|
101
101
|
|
|
@@ -235,7 +235,7 @@ refuse) · **degraded** (it runs, quietly worse than the config promises), plus
|
|
|
235
235
|
a non-negative integer (`0` = no ceiling; else the default `12` applies). Report both effective
|
|
236
236
|
numbers with the count of panel members `quality.review_skill`/`quality.reviewers` defines, so
|
|
237
237
|
the widest command's cost is visible before it is paid, not after.
|
|
238
|
-
- **A task-list tool** (`TaskCreate` on Claude Code, possibly deferred)
|
|
238
|
+
- **A task-list tool** (`TaskCreate` on Claude Code, possibly deferred) — informational only. The plan steps are shown in the live panel and recorded in the phase artifact; a harness task list is an extra. Absent on Claude Code → one line saying it is withheld from newer models unless `"CLAUDE_CODE_ENABLE_TODO_TOOLS": "true"` is set under `env`, for whoever wants it without a panel.
|
|
239
239
|
- **The `flow-workflows` CLI, which `review` reaches for before it composes a panel**:
|
|
240
240
|
`npx flow-workflows@<version> --version` answers, with `<version>` read from `version` in
|
|
241
241
|
`~/.claude/flow/.claude-plugin/plugin.json` — the same pin `review` uses, so the number that
|
|
@@ -150,7 +150,9 @@ Execution mode:
|
|
|
150
150
|
|
|
151
151
|
Use `TaskCreate` to track the steps of the **§2.0ter plan for this MR/PR** — one task per numbered step, same order. Step skipped there (small MR/PR) → seed from `03-design.md` §"Implementation plan (order)", taking only the steps this MR/PR covers per `04-mr-plan.md`; the feature's plan predates the split and carries steps that belong to siblings. Mark each step `in_progress` when starting and `completed` when done — do not batch.
|
|
152
152
|
|
|
153
|
-
**
|
|
153
|
+
**The steps go to the live panel** (flow-core §4.1 (2b), §4.4 (f)) — that is the list the user watches, whatever the harness. Publish the block when the first step starts, patch it as each one lands.
|
|
154
|
+
|
|
155
|
+
**A harness task list is optional on top.** `TaskCreate` is the Claude Code name; a harness may call it otherwise (`TodoWrite` on older builds), list it **deferred** — by name only, uncallable until its schema is loaded — or not offer it at all (Claude Code withholds it from newer models unless `CLAUDE_CODE_ENABLE_TODO_TOOLS=true`). There → seed it too; not there → nothing is missing and nothing is said. Either way the plan in `05-implementation.md` is the record: tick each step there (`- [x]`) as it lands — the panel and any task list follow the ticks, never the other way round.
|
|
154
156
|
|
|
155
157
|
### 2.1bis The premise this change rests on (any size, XS included)
|
|
156
158
|
|
|
@@ -201,7 +203,7 @@ The step's changes are **always reported before anything is recorded**. Who deci
|
|
|
201
203
|
|
|
202
204
|
**After completing each plan step**:
|
|
203
205
|
|
|
204
|
-
1. **
|
|
206
|
+
1. **Tick the step** in `05-implementation.md`, patch the panel's step block (flow-core §4.4 (f)), and mark it `completed` in the harness task list if there is one (§2.1).
|
|
205
207
|
2. **Report to the user** a step summary (≤ 5 lines):
|
|
206
208
|
```
|
|
207
209
|
Step N done: <description>
|
package/adapters/gemini/CORE.md
CHANGED
|
@@ -16,7 +16,7 @@ Every `/flow:*` command assumes these rules. They are stated once, here, so a co
|
|
|
16
16
|
carries what is specific to its phase. Read this once per session; a command that says "load
|
|
17
17
|
`flow-core`" means this file.
|
|
18
18
|
|
|
19
|
-
**This file belongs to flow `0.
|
|
19
|
+
**This file belongs to flow `0.77.0`.** Compare it once, at the start of the session, against
|
|
20
20
|
`version` in `~/.claude/flow/.claude-plugin/plugin.json`. The two differing means the session
|
|
21
21
|
is running a **mixture** — the commands from one copy of the plugin, these shared rules from another
|
|
22
22
|
— which is exactly what happens when a branch or a release candidate is loaded over an installed
|
|
@@ -295,6 +295,9 @@ prose describing a file is otherwise obeyed to the letter.
|
|
|
295
295
|
"",
|
|
296
296
|
{"ref": "#1", "text": "batch read sources", "mark": "wait", "link": "https://gitlab.com/…/merge_requests/9977"},
|
|
297
297
|
{"ref": "#2", "text": "per-event and per-recipient counters", "mark": "current"},
|
|
298
|
+
{"ref": "1–2", "text": "counter columns + migration · repository query", "mark": "done", "indent": 4},
|
|
299
|
+
{"ref": "3", "text": "per-recipient aggregation in the use case", "mark": "current", "indent": 4},
|
|
300
|
+
{"ref": "4", "text": "expose both counters on the endpoint", "mark": "pending", "indent": 4},
|
|
298
301
|
{"ref": "#3–#6", "text": "channel map · use case · document detail · route", "mark": "pending"},
|
|
299
302
|
"",
|
|
300
303
|
{"ref": "Now", "text": "unit suite and the test agent over #2", "mark": "info"},
|
|
@@ -306,10 +309,10 @@ prose describing a file is otherwise obeyed to the letter.
|
|
|
306
309
|
}
|
|
307
310
|
```
|
|
308
311
|
|
|
309
|
-
- **`mark` says what a line is**; the reader draws it. `done` · `current` (at most one) · `pending` · `wait` (waiting on someone else: an open MR/PR, a user decision) · `block` · `info`. Marked lines form an aligned column: symbol, `ref`, text, link pinned right. Do not set `style` on a marked line — except `mark: "info"` + `style: ok|warn|error` when the colour *is* the information (a monitoring verdict).
|
|
312
|
+
- **`mark` says what a line is**; the reader draws it. `done` · `current` (at most one per block) · `pending` · `wait` (waiting on someone else: an open MR/PR, a user decision) · `block` · `info`. Marked lines form an aligned column: symbol, `ref`, text, link pinned right. Do not set `style` on a marked line — except `mark: "info"` + `style: ok|warn|error` when the colour *is* the information (a monitoring verdict).
|
|
310
313
|
- **`ref` need not be a number**: `#1`, `#3–#6`, `Now`, `Next`, `Decision`. Column width is per block; blocks are separated by blank lines — use them so the MR/PR train and the labels below do not drag each other wide.
|
|
311
314
|
- **`link` is a field, never a URL inside `text`** — and **every line that names an MR/PR carries it**: the train entries, a blocker about somebody else's MR/PR, a `Now` or `Next` about the open one. The URL is in `meta.json.mrs[].url` or in whatever recorded that blocker; a bare `!10327` typed into `text` is a number the reader cannot make clickable, which is the whole point of the field. No URL recorded anywhere → the number in `text` and nothing else, and go and record it.
|
|
312
|
-
- **Order:** (1) work title (`style: title`, no mark); (2) the MR/PR train, one entry per `meta.json.mrs[]` with `ref` `#n`, short title, real-state `mark`, `link` when there is a URL — not-started entries collapse into one `#a–#z` `pending` line; omit the block without `mrs`; (3) `Now` — what is running, the one fact `meta.json` cannot hold; (4) `Next`; (5) `Decision`, `mark: wait`, **only** when parked on the user — over the tools it travels with `attention: "wait"` (§4.2), and both are cleared together; (6) blockers, `mark: block` (a sibling repo with `contract_handoff: pending`, a red pipeline, an unmerged dependency).
|
|
315
|
+
- **Order:** (1) work title (`style: title`, no mark); (2) the MR/PR train, one entry per `meta.json.mrs[]` with `ref` `#n`, short title, real-state `mark`, `link` when there is a URL — not-started entries collapse into one `#a–#z` `pending` line; omit the block without `mrs`; (2b) **the plan steps of the MR/PR being built**, right under its train entry — only while `build` or `fix` is working through a written plan (`/flow:feat:build §2.0ter`, `/flow:bug:fix §2.0bis`); one line per step, `ref` its number (`1`, `2`…), `indent: 4`, `key` `step-<n>`, `mark` `done` · `current` · `pending` from the plan's ticks in the phase artifact — never ahead of them; past three finished steps they collapse into one `done` line (`1–4`, `key` `steps-done`), and past three pending ones the tail collapses the same way (`key` `steps-pending`), so the block stays at five lines or fewer; drop the block when the MR/PR's build ends. This is the step list the user watches: a harness's own task list, where there is one, is a bonus on top — the panel is what every harness can feed; (3) `Now` — what is running, the one fact `meta.json` cannot hold; (4) `Next`; (5) `Decision`, `mark: wait`, **only** when parked on the user — over the tools it travels with `attention: "wait"` (§4.2), and both are cleared together; (6) blockers, `mark: block` (a sibling repo with `contract_handoff: pending`, a red pipeline, an unmerged dependency).
|
|
313
316
|
- **Rules:** `phase` is the phase you are **running now** (not `meta.json.phase`, which advances only at Close). `header: true` means ticket, type, phase and age are drawn by the reader — do not repeat them in `lines`. Keep it under ~14 lines. Every fact from `meta.json` and the artifacts — an invented MR/PR state is worse than a blank panel. Write in the language of the work's artifacts.
|
|
314
317
|
|
|
315
318
|
### 4.2 Over the terminal's MCP — `panel_set` once, `panel_patch` from then on
|
|
@@ -384,6 +387,10 @@ that never asked, because they answered it and the screen says it did not land;
|
|
|
384
387
|
nobody clears keeps that tab claiming them for ever. The same applies to a blocker that lifted and
|
|
385
388
|
to a `wait` line whose MR/PR merged.
|
|
386
389
|
|
|
390
|
+
**(f) Each plan step that lands** (the (2b) block): one patch, the moment its tick goes into the
|
|
391
|
+
phase artifact — that step to `done`, the next to `current`, `Now` moved on. Not batched at the end
|
|
392
|
+
of the MR/PR: a list that jumps from nothing to finished told the user nothing while it mattered.
|
|
393
|
+
|
|
387
394
|
### 4.5 `meta.json.cost[]` — what a phase measured, when it could
|
|
388
395
|
|
|
389
396
|
A phase that can measure what it spent appends one entry: `{ "phase": "review", "at": "<ISO>",
|
|
@@ -91,7 +91,7 @@ Save it in `04-fix.md` under `## Plan`, right after the brief. **A fix that was
|
|
|
91
91
|
|
|
92
92
|
- Apply the minimal fix targeting the finding of `03-investigation.md` (or the diagnosis if investigate was skipped).
|
|
93
93
|
- Sensitive area (authentication, payments, sensitive data) → consult the `agents.architecture` agent from FLOW.md to confirm the correct layer; empty → check against `conventions` in FLOW.md.
|
|
94
|
-
- More than 2 fix steps → the §2.0bis plan is already written:
|
|
94
|
+
- More than 2 fix steps → the §2.0bis plan is already written: tick its numbered steps off in `04-fix.md` where they stand, and show them in the live panel's step block (flow-core §4.1 (2b), patched per §4.4 (f)); a harness task list, if there is one, goes on top as `/flow:feat:build §2.1` says. One task per step, same order, marked `in_progress` and `completed` as they go — not batched.
|
|
95
95
|
- **Comment discipline**: comment only a *why* the code cannot say (a non-obvious constraint, the reason for a workaround, a subtle invariant); match the surrounding file's comment density. **Never write the ticket ID or "fix for #N" into a code comment** — that lives in the commit/branch/MR-PR.
|
|
96
96
|
- Keep the log updated while editing.
|
|
97
97
|
|
|
@@ -231,7 +231,7 @@ refuse) · **degraded** (it runs, quietly worse than the config promises), plus
|
|
|
231
231
|
a non-negative integer (`0` = no ceiling; else the default `12` applies). Report both effective
|
|
232
232
|
numbers with the count of panel members `quality.review_skill`/`quality.reviewers` defines, so
|
|
233
233
|
the widest command's cost is visible before it is paid, not after.
|
|
234
|
-
- **A task-list tool** (`TaskCreate` on Claude Code, possibly deferred)
|
|
234
|
+
- **A task-list tool** (`TaskCreate` on Claude Code, possibly deferred) — informational only. The plan steps are shown in the live panel and recorded in the phase artifact; a harness task list is an extra. Absent on Claude Code → one line saying it is withheld from newer models unless `"CLAUDE_CODE_ENABLE_TODO_TOOLS": "true"` is set under `env`, for whoever wants it without a panel.
|
|
235
235
|
- **The `flow-workflows` CLI, which `review` reaches for before it composes a panel**:
|
|
236
236
|
`npx flow-workflows@<version> --version` answers, with `<version>` read from `version` in
|
|
237
237
|
`~/.claude/flow/.claude-plugin/plugin.json` — the same pin `review` uses, so the number that
|
|
@@ -146,7 +146,9 @@ Execution mode:
|
|
|
146
146
|
|
|
147
147
|
Use `TaskCreate` to track the steps of the **§2.0ter plan for this MR/PR** — one task per numbered step, same order. Step skipped there (small MR/PR) → seed from `03-design.md` §"Implementation plan (order)", taking only the steps this MR/PR covers per `04-mr-plan.md`; the feature's plan predates the split and carries steps that belong to siblings. Mark each step `in_progress` when starting and `completed` when done — do not batch.
|
|
148
148
|
|
|
149
|
-
**
|
|
149
|
+
**The steps go to the live panel** (flow-core §4.1 (2b), §4.4 (f)) — that is the list the user watches, whatever the harness. Publish the block when the first step starts, patch it as each one lands.
|
|
150
|
+
|
|
151
|
+
**A harness task list is optional on top.** `TaskCreate` is the Claude Code name; a harness may call it otherwise (`TodoWrite` on older builds), list it **deferred** — by name only, uncallable until its schema is loaded — or not offer it at all (Claude Code withholds it from newer models unless `CLAUDE_CODE_ENABLE_TODO_TOOLS=true`). There → seed it too; not there → nothing is missing and nothing is said. Either way the plan in `05-implementation.md` is the record: tick each step there (`- [x]`) as it lands — the panel and any task list follow the ticks, never the other way round.
|
|
150
152
|
|
|
151
153
|
### 2.1bis The premise this change rests on (any size, XS included)
|
|
152
154
|
|
|
@@ -197,7 +199,7 @@ The step's changes are **always reported before anything is recorded**. Who deci
|
|
|
197
199
|
|
|
198
200
|
**After completing each plan step**:
|
|
199
201
|
|
|
200
|
-
1. **
|
|
202
|
+
1. **Tick the step** in `05-implementation.md`, patch the panel's step block (flow-core §4.4 (f)), and mark it `completed` in the harness task list if there is one (§2.1).
|
|
201
203
|
2. **Report to the user** a step summary (≤ 5 lines):
|
|
202
204
|
```
|
|
203
205
|
Step N done: <description>
|
package/adapters/hermes/CORE.md
CHANGED
|
@@ -17,7 +17,7 @@ Every `/flow-*` command assumes these rules. They are stated once, here, so a co
|
|
|
17
17
|
carries what is specific to its phase. Read this once per session; a command that says "load
|
|
18
18
|
`flow-core`" means this file.
|
|
19
19
|
|
|
20
|
-
**This file belongs to flow `0.
|
|
20
|
+
**This file belongs to flow `0.77.0`.** Compare it once, at the start of the session, against
|
|
21
21
|
`version` in `~/.claude/flow/.claude-plugin/plugin.json`. The two differing means the session
|
|
22
22
|
is running a **mixture** — the commands from one copy of the plugin, these shared rules from another
|
|
23
23
|
— which is exactly what happens when a branch or a release candidate is loaded over an installed
|
|
@@ -296,6 +296,9 @@ prose describing a file is otherwise obeyed to the letter.
|
|
|
296
296
|
"",
|
|
297
297
|
{"ref": "#1", "text": "batch read sources", "mark": "wait", "link": "https://gitlab.com/…/merge_requests/9977"},
|
|
298
298
|
{"ref": "#2", "text": "per-event and per-recipient counters", "mark": "current"},
|
|
299
|
+
{"ref": "1–2", "text": "counter columns + migration · repository query", "mark": "done", "indent": 4},
|
|
300
|
+
{"ref": "3", "text": "per-recipient aggregation in the use case", "mark": "current", "indent": 4},
|
|
301
|
+
{"ref": "4", "text": "expose both counters on the endpoint", "mark": "pending", "indent": 4},
|
|
299
302
|
{"ref": "#3–#6", "text": "channel map · use case · document detail · route", "mark": "pending"},
|
|
300
303
|
"",
|
|
301
304
|
{"ref": "Now", "text": "unit suite and the test agent over #2", "mark": "info"},
|
|
@@ -307,10 +310,10 @@ prose describing a file is otherwise obeyed to the letter.
|
|
|
307
310
|
}
|
|
308
311
|
```
|
|
309
312
|
|
|
310
|
-
- **`mark` says what a line is**; the reader draws it. `done` · `current` (at most one) · `pending` · `wait` (waiting on someone else: an open MR/PR, a user decision) · `block` · `info`. Marked lines form an aligned column: symbol, `ref`, text, link pinned right. Do not set `style` on a marked line — except `mark: "info"` + `style: ok|warn|error` when the colour *is* the information (a monitoring verdict).
|
|
313
|
+
- **`mark` says what a line is**; the reader draws it. `done` · `current` (at most one per block) · `pending` · `wait` (waiting on someone else: an open MR/PR, a user decision) · `block` · `info`. Marked lines form an aligned column: symbol, `ref`, text, link pinned right. Do not set `style` on a marked line — except `mark: "info"` + `style: ok|warn|error` when the colour *is* the information (a monitoring verdict).
|
|
311
314
|
- **`ref` need not be a number**: `#1`, `#3–#6`, `Now`, `Next`, `Decision`. Column width is per block; blocks are separated by blank lines — use them so the MR/PR train and the labels below do not drag each other wide.
|
|
312
315
|
- **`link` is a field, never a URL inside `text`** — and **every line that names an MR/PR carries it**: the train entries, a blocker about somebody else's MR/PR, a `Now` or `Next` about the open one. The URL is in `meta.json.mrs[].url` or in whatever recorded that blocker; a bare `!10327` typed into `text` is a number the reader cannot make clickable, which is the whole point of the field. No URL recorded anywhere → the number in `text` and nothing else, and go and record it.
|
|
313
|
-
- **Order:** (1) work title (`style: title`, no mark); (2) the MR/PR train, one entry per `meta.json.mrs[]` with `ref` `#n`, short title, real-state `mark`, `link` when there is a URL — not-started entries collapse into one `#a–#z` `pending` line; omit the block without `mrs`; (3) `Now` — what is running, the one fact `meta.json` cannot hold; (4) `Next`; (5) `Decision`, `mark: wait`, **only** when parked on the user — over the tools it travels with `attention: "wait"` (§4.2), and both are cleared together; (6) blockers, `mark: block` (a sibling repo with `contract_handoff: pending`, a red pipeline, an unmerged dependency).
|
|
316
|
+
- **Order:** (1) work title (`style: title`, no mark); (2) the MR/PR train, one entry per `meta.json.mrs[]` with `ref` `#n`, short title, real-state `mark`, `link` when there is a URL — not-started entries collapse into one `#a–#z` `pending` line; omit the block without `mrs`; (2b) **the plan steps of the MR/PR being built**, right under its train entry — only while `build` or `fix` is working through a written plan (`/flow-feat-build §2.0ter`, `/flow-bug-fix §2.0bis`); one line per step, `ref` its number (`1`, `2`…), `indent: 4`, `key` `step-<n>`, `mark` `done` · `current` · `pending` from the plan's ticks in the phase artifact — never ahead of them; past three finished steps they collapse into one `done` line (`1–4`, `key` `steps-done`), and past three pending ones the tail collapses the same way (`key` `steps-pending`), so the block stays at five lines or fewer; drop the block when the MR/PR's build ends. This is the step list the user watches: a harness's own task list, where there is one, is a bonus on top — the panel is what every harness can feed; (3) `Now` — what is running, the one fact `meta.json` cannot hold; (4) `Next`; (5) `Decision`, `mark: wait`, **only** when parked on the user — over the tools it travels with `attention: "wait"` (§4.2), and both are cleared together; (6) blockers, `mark: block` (a sibling repo with `contract_handoff: pending`, a red pipeline, an unmerged dependency).
|
|
314
317
|
- **Rules:** `phase` is the phase you are **running now** (not `meta.json.phase`, which advances only at Close). `header: true` means ticket, type, phase and age are drawn by the reader — do not repeat them in `lines`. Keep it under ~14 lines. Every fact from `meta.json` and the artifacts — an invented MR/PR state is worse than a blank panel. Write in the language of the work's artifacts.
|
|
315
318
|
|
|
316
319
|
### 4.2 Over the terminal's MCP — `panel_set` once, `panel_patch` from then on
|
|
@@ -385,6 +388,10 @@ that never asked, because they answered it and the screen says it did not land;
|
|
|
385
388
|
nobody clears keeps that tab claiming them for ever. The same applies to a blocker that lifted and
|
|
386
389
|
to a `wait` line whose MR/PR merged.
|
|
387
390
|
|
|
391
|
+
**(f) Each plan step that lands** (the (2b) block): one patch, the moment its tick goes into the
|
|
392
|
+
phase artifact — that step to `done`, the next to `current`, `Now` moved on. Not batched at the end
|
|
393
|
+
of the MR/PR: a list that jumps from nothing to finished told the user nothing while it mattered.
|
|
394
|
+
|
|
388
395
|
### 4.5 `meta.json.cost[]` — what a phase measured, when it could
|
|
389
396
|
|
|
390
397
|
A phase that can measure what it spent appends one entry: `{ "phase": "review", "at": "<ISO>",
|
|
@@ -95,7 +95,7 @@ Save it in `04-fix.md` under `## Plan`, right after the brief. **A fix that was
|
|
|
95
95
|
|
|
96
96
|
- Apply the minimal fix targeting the finding of `03-investigation.md` (or the diagnosis if investigate was skipped).
|
|
97
97
|
- Sensitive area (authentication, payments, sensitive data) → consult the `agents.architecture` agent from FLOW.md to confirm the correct layer; empty → check against `conventions` in FLOW.md.
|
|
98
|
-
- More than 2 fix steps → the §2.0bis plan is already written:
|
|
98
|
+
- More than 2 fix steps → the §2.0bis plan is already written: tick its numbered steps off in `04-fix.md` where they stand, and show them in the live panel's step block (flow-core §4.1 (2b), patched per §4.4 (f)); a harness task list, if there is one, goes on top as `/flow-feat-build §2.1` says. One task per step, same order, marked `in_progress` and `completed` as they go — not batched.
|
|
99
99
|
- **Comment discipline**: comment only a *why* the code cannot say (a non-obvious constraint, the reason for a workaround, a subtle invariant); match the surrounding file's comment density. **Never write the ticket ID or "fix for #N" into a code comment** — that lives in the commit/branch/MR-PR.
|
|
100
100
|
- Keep the log updated while editing.
|
|
101
101
|
|
|
@@ -235,7 +235,7 @@ refuse) · **degraded** (it runs, quietly worse than the config promises), plus
|
|
|
235
235
|
a non-negative integer (`0` = no ceiling; else the default `12` applies). Report both effective
|
|
236
236
|
numbers with the count of panel members `quality.review_skill`/`quality.reviewers` defines, so
|
|
237
237
|
the widest command's cost is visible before it is paid, not after.
|
|
238
|
-
- **A task-list tool** (`TaskCreate` on Claude Code, possibly deferred)
|
|
238
|
+
- **A task-list tool** (`TaskCreate` on Claude Code, possibly deferred) — informational only. The plan steps are shown in the live panel and recorded in the phase artifact; a harness task list is an extra. Absent on Claude Code → one line saying it is withheld from newer models unless `"CLAUDE_CODE_ENABLE_TODO_TOOLS": "true"` is set under `env`, for whoever wants it without a panel.
|
|
239
239
|
- **The `flow-workflows` CLI, which `review` reaches for before it composes a panel**:
|
|
240
240
|
`npx flow-workflows@<version> --version` answers, with `<version>` read from `version` in
|
|
241
241
|
`~/.claude/flow/.claude-plugin/plugin.json` — the same pin `review` uses, so the number that
|
|
@@ -150,7 +150,9 @@ Execution mode:
|
|
|
150
150
|
|
|
151
151
|
Use `TaskCreate` to track the steps of the **§2.0ter plan for this MR/PR** — one task per numbered step, same order. Step skipped there (small MR/PR) → seed from `03-design.md` §"Implementation plan (order)", taking only the steps this MR/PR covers per `04-mr-plan.md`; the feature's plan predates the split and carries steps that belong to siblings. Mark each step `in_progress` when starting and `completed` when done — do not batch.
|
|
152
152
|
|
|
153
|
-
**
|
|
153
|
+
**The steps go to the live panel** (flow-core §4.1 (2b), §4.4 (f)) — that is the list the user watches, whatever the harness. Publish the block when the first step starts, patch it as each one lands.
|
|
154
|
+
|
|
155
|
+
**A harness task list is optional on top.** `TaskCreate` is the Claude Code name; a harness may call it otherwise (`TodoWrite` on older builds), list it **deferred** — by name only, uncallable until its schema is loaded — or not offer it at all (Claude Code withholds it from newer models unless `CLAUDE_CODE_ENABLE_TODO_TOOLS=true`). There → seed it too; not there → nothing is missing and nothing is said. Either way the plan in `05-implementation.md` is the record: tick each step there (`- [x]`) as it lands — the panel and any task list follow the ticks, never the other way round.
|
|
154
156
|
|
|
155
157
|
### 2.1bis The premise this change rests on (any size, XS included)
|
|
156
158
|
|
|
@@ -201,7 +203,7 @@ The step's changes are **always reported before anything is recorded**. Who deci
|
|
|
201
203
|
|
|
202
204
|
**After completing each plan step**:
|
|
203
205
|
|
|
204
|
-
1. **
|
|
206
|
+
1. **Tick the step** in `05-implementation.md`, patch the panel's step block (flow-core §4.4 (f)), and mark it `completed` in the harness task list if there is one (§2.1).
|
|
205
207
|
2. **Report to the user** a step summary (≤ 5 lines):
|
|
206
208
|
```
|
|
207
209
|
Step N done: <description>
|
|
@@ -16,7 +16,7 @@ Every `/flow-*` command assumes these rules. They are stated once, here, so a co
|
|
|
16
16
|
carries what is specific to its phase. Read this once per session; a command that says "load
|
|
17
17
|
`flow-core`" means this file.
|
|
18
18
|
|
|
19
|
-
**This file belongs to flow `0.
|
|
19
|
+
**This file belongs to flow `0.77.0`.** Compare it once, at the start of the session, against
|
|
20
20
|
`version` in `~/.claude/flow/.claude-plugin/plugin.json`. The two differing means the session
|
|
21
21
|
is running a **mixture** — the commands from one copy of the plugin, these shared rules from another
|
|
22
22
|
— which is exactly what happens when a branch or a release candidate is loaded over an installed
|
|
@@ -295,6 +295,9 @@ prose describing a file is otherwise obeyed to the letter.
|
|
|
295
295
|
"",
|
|
296
296
|
{"ref": "#1", "text": "batch read sources", "mark": "wait", "link": "https://gitlab.com/…/merge_requests/9977"},
|
|
297
297
|
{"ref": "#2", "text": "per-event and per-recipient counters", "mark": "current"},
|
|
298
|
+
{"ref": "1–2", "text": "counter columns + migration · repository query", "mark": "done", "indent": 4},
|
|
299
|
+
{"ref": "3", "text": "per-recipient aggregation in the use case", "mark": "current", "indent": 4},
|
|
300
|
+
{"ref": "4", "text": "expose both counters on the endpoint", "mark": "pending", "indent": 4},
|
|
298
301
|
{"ref": "#3–#6", "text": "channel map · use case · document detail · route", "mark": "pending"},
|
|
299
302
|
"",
|
|
300
303
|
{"ref": "Now", "text": "unit suite and the test agent over #2", "mark": "info"},
|
|
@@ -306,10 +309,10 @@ prose describing a file is otherwise obeyed to the letter.
|
|
|
306
309
|
}
|
|
307
310
|
```
|
|
308
311
|
|
|
309
|
-
- **`mark` says what a line is**; the reader draws it. `done` · `current` (at most one) · `pending` · `wait` (waiting on someone else: an open MR/PR, a user decision) · `block` · `info`. Marked lines form an aligned column: symbol, `ref`, text, link pinned right. Do not set `style` on a marked line — except `mark: "info"` + `style: ok|warn|error` when the colour *is* the information (a monitoring verdict).
|
|
312
|
+
- **`mark` says what a line is**; the reader draws it. `done` · `current` (at most one per block) · `pending` · `wait` (waiting on someone else: an open MR/PR, a user decision) · `block` · `info`. Marked lines form an aligned column: symbol, `ref`, text, link pinned right. Do not set `style` on a marked line — except `mark: "info"` + `style: ok|warn|error` when the colour *is* the information (a monitoring verdict).
|
|
310
313
|
- **`ref` need not be a number**: `#1`, `#3–#6`, `Now`, `Next`, `Decision`. Column width is per block; blocks are separated by blank lines — use them so the MR/PR train and the labels below do not drag each other wide.
|
|
311
314
|
- **`link` is a field, never a URL inside `text`** — and **every line that names an MR/PR carries it**: the train entries, a blocker about somebody else's MR/PR, a `Now` or `Next` about the open one. The URL is in `meta.json.mrs[].url` or in whatever recorded that blocker; a bare `!10327` typed into `text` is a number the reader cannot make clickable, which is the whole point of the field. No URL recorded anywhere → the number in `text` and nothing else, and go and record it.
|
|
312
|
-
- **Order:** (1) work title (`style: title`, no mark); (2) the MR/PR train, one entry per `meta.json.mrs[]` with `ref` `#n`, short title, real-state `mark`, `link` when there is a URL — not-started entries collapse into one `#a–#z` `pending` line; omit the block without `mrs`; (3) `Now` — what is running, the one fact `meta.json` cannot hold; (4) `Next`; (5) `Decision`, `mark: wait`, **only** when parked on the user — over the tools it travels with `attention: "wait"` (§4.2), and both are cleared together; (6) blockers, `mark: block` (a sibling repo with `contract_handoff: pending`, a red pipeline, an unmerged dependency).
|
|
315
|
+
- **Order:** (1) work title (`style: title`, no mark); (2) the MR/PR train, one entry per `meta.json.mrs[]` with `ref` `#n`, short title, real-state `mark`, `link` when there is a URL — not-started entries collapse into one `#a–#z` `pending` line; omit the block without `mrs`; (2b) **the plan steps of the MR/PR being built**, right under its train entry — only while `build` or `fix` is working through a written plan (`/flow-feat-build §2.0ter`, `/flow-bug-fix §2.0bis`); one line per step, `ref` its number (`1`, `2`…), `indent: 4`, `key` `step-<n>`, `mark` `done` · `current` · `pending` from the plan's ticks in the phase artifact — never ahead of them; past three finished steps they collapse into one `done` line (`1–4`, `key` `steps-done`), and past three pending ones the tail collapses the same way (`key` `steps-pending`), so the block stays at five lines or fewer; drop the block when the MR/PR's build ends. This is the step list the user watches: a harness's own task list, where there is one, is a bonus on top — the panel is what every harness can feed; (3) `Now` — what is running, the one fact `meta.json` cannot hold; (4) `Next`; (5) `Decision`, `mark: wait`, **only** when parked on the user — over the tools it travels with `attention: "wait"` (§4.2), and both are cleared together; (6) blockers, `mark: block` (a sibling repo with `contract_handoff: pending`, a red pipeline, an unmerged dependency).
|
|
313
316
|
- **Rules:** `phase` is the phase you are **running now** (not `meta.json.phase`, which advances only at Close). `header: true` means ticket, type, phase and age are drawn by the reader — do not repeat them in `lines`. Keep it under ~14 lines. Every fact from `meta.json` and the artifacts — an invented MR/PR state is worse than a blank panel. Write in the language of the work's artifacts.
|
|
314
317
|
|
|
315
318
|
### 4.2 Over the terminal's MCP — `panel_set` once, `panel_patch` from then on
|
|
@@ -384,6 +387,10 @@ that never asked, because they answered it and the screen says it did not land;
|
|
|
384
387
|
nobody clears keeps that tab claiming them for ever. The same applies to a blocker that lifted and
|
|
385
388
|
to a `wait` line whose MR/PR merged.
|
|
386
389
|
|
|
390
|
+
**(f) Each plan step that lands** (the (2b) block): one patch, the moment its tick goes into the
|
|
391
|
+
phase artifact — that step to `done`, the next to `current`, `Now` moved on. Not batched at the end
|
|
392
|
+
of the MR/PR: a list that jumps from nothing to finished told the user nothing while it mattered.
|
|
393
|
+
|
|
387
394
|
### 4.5 `meta.json.cost[]` — what a phase measured, when it could
|
|
388
395
|
|
|
389
396
|
A phase that can measure what it spent appends one entry: `{ "phase": "review", "at": "<ISO>",
|
|
@@ -93,7 +93,7 @@ Save it in `04-fix.md` under `## Plan`, right after the brief. **A fix that was
|
|
|
93
93
|
|
|
94
94
|
- Apply the minimal fix targeting the finding of `03-investigation.md` (or the diagnosis if investigate was skipped).
|
|
95
95
|
- Sensitive area (authentication, payments, sensitive data) → consult the `agents.architecture` agent from FLOW.md to confirm the correct layer; empty → check against `conventions` in FLOW.md.
|
|
96
|
-
- More than 2 fix steps → the §2.0bis plan is already written:
|
|
96
|
+
- More than 2 fix steps → the §2.0bis plan is already written: tick its numbered steps off in `04-fix.md` where they stand, and show them in the live panel's step block (flow-core §4.1 (2b), patched per §4.4 (f)); a harness task list, if there is one, goes on top as `/flow-feat-build §2.1` says. One task per step, same order, marked `in_progress` and `completed` as they go — not batched.
|
|
97
97
|
- **Comment discipline**: comment only a *why* the code cannot say (a non-obvious constraint, the reason for a workaround, a subtle invariant); match the surrounding file's comment density. **Never write the ticket ID or "fix for #N" into a code comment** — that lives in the commit/branch/MR-PR.
|
|
98
98
|
- Keep the log updated while editing.
|
|
99
99
|
|
|
@@ -233,7 +233,7 @@ refuse) · **degraded** (it runs, quietly worse than the config promises), plus
|
|
|
233
233
|
a non-negative integer (`0` = no ceiling; else the default `12` applies). Report both effective
|
|
234
234
|
numbers with the count of panel members `quality.review_skill`/`quality.reviewers` defines, so
|
|
235
235
|
the widest command's cost is visible before it is paid, not after.
|
|
236
|
-
- **A task-list tool** (`TaskCreate` on Claude Code, possibly deferred)
|
|
236
|
+
- **A task-list tool** (`TaskCreate` on Claude Code, possibly deferred) — informational only. The plan steps are shown in the live panel and recorded in the phase artifact; a harness task list is an extra. Absent on Claude Code → one line saying it is withheld from newer models unless `"CLAUDE_CODE_ENABLE_TODO_TOOLS": "true"` is set under `env`, for whoever wants it without a panel.
|
|
237
237
|
- **The `flow-workflows` CLI, which `review` reaches for before it composes a panel**:
|
|
238
238
|
`npx flow-workflows@<version> --version` answers, with `<version>` read from `version` in
|
|
239
239
|
`~/.claude/flow/.claude-plugin/plugin.json` — the same pin `review` uses, so the number that
|
|
@@ -148,7 +148,9 @@ Execution mode:
|
|
|
148
148
|
|
|
149
149
|
Use `TaskCreate` to track the steps of the **§2.0ter plan for this MR/PR** — one task per numbered step, same order. Step skipped there (small MR/PR) → seed from `03-design.md` §"Implementation plan (order)", taking only the steps this MR/PR covers per `04-mr-plan.md`; the feature's plan predates the split and carries steps that belong to siblings. Mark each step `in_progress` when starting and `completed` when done — do not batch.
|
|
150
150
|
|
|
151
|
-
**
|
|
151
|
+
**The steps go to the live panel** (flow-core §4.1 (2b), §4.4 (f)) — that is the list the user watches, whatever the harness. Publish the block when the first step starts, patch it as each one lands.
|
|
152
|
+
|
|
153
|
+
**A harness task list is optional on top.** `TaskCreate` is the Claude Code name; a harness may call it otherwise (`TodoWrite` on older builds), list it **deferred** — by name only, uncallable until its schema is loaded — or not offer it at all (Claude Code withholds it from newer models unless `CLAUDE_CODE_ENABLE_TODO_TOOLS=true`). There → seed it too; not there → nothing is missing and nothing is said. Either way the plan in `05-implementation.md` is the record: tick each step there (`- [x]`) as it lands — the panel and any task list follow the ticks, never the other way round.
|
|
152
154
|
|
|
153
155
|
### 2.1bis The premise this change rests on (any size, XS included)
|
|
154
156
|
|
|
@@ -199,7 +201,7 @@ The step's changes are **always reported before anything is recorded**. Who deci
|
|
|
199
201
|
|
|
200
202
|
**After completing each plan step**:
|
|
201
203
|
|
|
202
|
-
1. **
|
|
204
|
+
1. **Tick the step** in `05-implementation.md`, patch the panel's step block (flow-core §4.4 (f)), and mark it `completed` in the harness task list if there is one (§2.1).
|
|
203
205
|
2. **Report to the user** a step summary (≤ 5 lines):
|
|
204
206
|
```
|
|
205
207
|
Step N done: <description>
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "flow-workflows",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.77.0",
|
|
4
4
|
"description": "Guided feat/bug workflows (start→ship), post-deploy monitoring and multi-agent code review, stack-agnostic. Each repo uses a shared FLOW.md plus optional harness overlay.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"name": "flow",
|
|
4
4
|
"displayName": "Flow — guided dev workflows",
|
|
5
5
|
"description": "Guided feat/bug workflows (start→ship), post-deploy monitoring and multi-agent code review, stack-agnostic. Each repo uses a shared FLOW.md plus optional harness overlay.",
|
|
6
|
-
"version": "0.
|
|
6
|
+
"version": "0.77.0",
|
|
7
7
|
"author": {
|
|
8
8
|
"name": "Alberto Vioque",
|
|
9
9
|
"email": "mashware@gmail.com"
|
|
@@ -5,6 +5,21 @@ plugin and is what `/flow:news` reads to show you what changed since your previo
|
|
|
5
5
|
|
|
6
6
|
The canonical, richest notes live in the [GitHub Releases](https://github.com/mashware/flow-workflows/releases).
|
|
7
7
|
|
|
8
|
+
## v0.77.0 — The steps of the MR/PR you are on are on the panel · 2026-09-22
|
|
9
|
+
|
|
10
|
+
**In short**
|
|
11
|
+
- **The live panel shows the plan steps of the MR/PR being built**, indented under its entry in the
|
|
12
|
+
train: finished, current and pending, updated as each one lands — on every harness that feeds the
|
|
13
|
+
panel, not only on the one that has a task list.
|
|
14
|
+
- **A harness task list becomes an extra.** `build` and `fix` still seed it where it exists, but
|
|
15
|
+
nothing depends on it, and `/flow:doctor` reports it as information rather than a warning.
|
|
16
|
+
|
|
17
|
+
v0.76.0 made the step list findable on Claude Code, where it only exists behind
|
|
18
|
+
`CLAUDE_CODE_ENABLE_TODO_TOOLS` and costs context in every session. The panel already had the words
|
|
19
|
+
for it (`done` · `current` · `pending`) and is fed the same way from Codex, OpenCode or zcode. The
|
|
20
|
+
ticks in the phase artifact stay the record; the panel and any task list follow them. Steps past three
|
|
21
|
+
on either side collapse into one line, so the block never takes more than five.
|
|
22
|
+
|
|
8
23
|
## v0.76.0 — The plan was written for a list the terminal was never given · 2026-09-22
|
|
9
24
|
|
|
10
25
|
**In short**
|