flow-workflows 0.72.0 → 0.74.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.
Files changed (27) hide show
  1. package/adapters/codex/CORE.md +13 -3
  2. package/adapters/codex/skills/flow-bug-fix/SKILL.md +3 -1
  3. package/adapters/codex/skills/flow-feat-build/SKILL.md +3 -1
  4. package/adapters/codex/skills/flow-feat-ship/SKILL.md +1 -1
  5. package/adapters/codex/skills/flow-work-README/SKILL.md +2 -2
  6. package/adapters/codex/skills/flow-work-resume/SKILL.md +1 -1
  7. package/adapters/gemini/CORE.md +13 -3
  8. package/adapters/gemini/commands/flow/bug/fix.toml +3 -1
  9. package/adapters/gemini/commands/flow/feat/build.toml +3 -1
  10. package/adapters/gemini/commands/flow/feat/ship.toml +1 -1
  11. package/adapters/gemini/commands/flow/work/README.toml +2 -2
  12. package/adapters/gemini/commands/flow/work/resume.toml +1 -1
  13. package/adapters/hermes/CORE.md +13 -3
  14. package/adapters/hermes/skills/flow-bug-fix/SKILL.md +3 -1
  15. package/adapters/hermes/skills/flow-feat-build/SKILL.md +3 -1
  16. package/adapters/hermes/skills/flow-feat-ship/SKILL.md +1 -1
  17. package/adapters/hermes/skills/flow-work-README/SKILL.md +2 -2
  18. package/adapters/hermes/skills/flow-work-resume/SKILL.md +1 -1
  19. package/adapters/opencode/CORE.md +13 -3
  20. package/adapters/opencode/commands/flow-bug-fix.md +3 -1
  21. package/adapters/opencode/commands/flow-feat-build.md +3 -1
  22. package/adapters/opencode/commands/flow-feat-ship.md +1 -1
  23. package/adapters/opencode/commands/flow-work-README.md +2 -2
  24. package/adapters/opencode/commands/flow-work-resume.md +1 -1
  25. package/package.json +1 -1
  26. package/plugins/flow/.claude-plugin/plugin.json +1 -1
  27. package/plugins/flow/CHANGELOG.md +35 -0
@@ -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.72.0`.** Compare it once, at the start of the session, against
20
+ **This file belongs to flow `0.74.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
@@ -237,7 +237,9 @@ terminal by construction, the turn is over before you notice.
237
237
  (`guided`/`auto` chaining, §2), the turn opens with the call that starts it, not with prose about
238
238
  the one that ended. **A report is never the last thing in a turn you meant to continue.**
239
239
  - **Progress belongs to the panel, not to a turn.** Someone watching reads the live panel (§4):
240
- `Now`, `Next`. Writing it costs no turn and no stop; saying it in chat costs both.
240
+ `Now`, `Next`. Writing it costs no turn and no stop; saying it in chat costs both. **An answered
241
+ question is progress too**: the `Decision` line and the panel's claim on the user go the moment
242
+ the answer arrives, before the work resumes (§4.4e).
241
243
  - **Stopping? Then say so.** `I need:` names the decision or the action you are waiting on. It
242
244
  never announces that you are continuing — if you were, you would not be writing this header.
243
245
 
@@ -259,6 +261,7 @@ I need: <one line — the decision or action you are waiting on>
259
261
  - **Out of the chat, into the artifact:** your own process, your mistakes, corrections to subagent reports, bookkeeping. Subagent completion or idle notifications never earn a turn of their own.
260
262
  - **Zero-context rule.** First mention of an identifier carries 4–6 words of what it is. Never cite a section number without naming what it is. No jargon the user has not used first.
261
263
  - **If it is a question, it is `AskUserQuestion`.** Never end a message with a question in prose. If it does not deserve the menu, it is a decision you take and record.
264
+ - **What the question is about travels with the question.** A brief, an MR/PR body, a plan, a finding: put it where the user answers it — in the question text and its options — and not only in the prose above. **Nothing runs between the two**: a tool call after that prose is what makes a terminal fold it away, and the last thing a chat UI collapses is exactly the thing they were asked to read. A gate answered without seeing what it was about is not a gate; "it is in `05-implementation.md`" is not showing it, because the answer then costs opening an editor and finding the file. Too long for the harness's question → print it as the **last** thing before asking, tool calls already done.
262
265
 
263
266
  ## 4. Live panel — over the terminal's MCP, or `panel.json`
264
267
 
@@ -306,7 +309,7 @@ prose describing a file is otherwise obeyed to the letter.
306
309
 
307
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).
308
311
  - **`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.
309
- - **`link` is a field, never a URL inside `text`.**
312
+ - **`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.
310
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).
311
314
  - **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.
312
315
 
@@ -375,6 +378,13 @@ halfway is not shown as finished. When the stretch will outlast the ~30 min stal
375
378
  `stale_after_minutes` to what it will really take; (d) wherever `## Close` updates `meta.json`. A
376
379
  held panel still goes stale: the app stamps each delivery's arrival.
377
380
 
381
+ **(e) The moment a question is answered or a gate is cleared** — before you resume the work, not at
382
+ the next stop. Drop the `Decision` line, clear `attention`, and move `Now` on: one patch, the first
383
+ thing you do with the answer. A panel still asking what the user already answered is worse than one
384
+ that never asked, because they answered it and the screen says it did not land; and an `attention`
385
+ nobody clears keeps that tab claiming them for ever. The same applies to a blocker that lifted and
386
+ to a `wait` line whose MR/PR merged.
387
+
378
388
  ### 4.5 `meta.json.cost[]` — what a phase measured, when it could
379
389
 
380
390
  A phase that can measure what it spent appends one entry: `{ "phase": "review", "at": "<ISO>",
@@ -48,7 +48,9 @@ What is NOT touched:
48
48
 
49
49
  **Ask with `AskUserQuestion`** whether this reflects the expected fix — a hard gate, **in every mode, `auto` included**: widening the fix is the main source of collateral regressions, and this is the last point to settle scope before there is a diff.
50
50
 
51
- In `auto` this is one of the only two stops of the whole flow (this one and `ship`; `guided` adds the plan of §2.0bis on a fix of more than two steps): open with the **full stop header** (flow-core §3), then the brief. Options:
51
+ In `auto` this is one of the only two stops of the whole flow (this one and `ship`; `guided` adds the plan of §2.0bis on a fix of more than two steps): open with the **full stop header** (flow-core §3), then the brief.
52
+
53
+ **The brief travels inside the question** (flow-core §3) — read in the prompt being answered, not by opening `04-fix.md` — and **nothing runs between the brief and the question**: a tool call after it is what lets a terminal fold it away. Options:
52
54
  - **Yes, go ahead** → apply the fix.
53
55
  - **No, something is missing or wrong** → adjust the brief, ask again. No code until confirmed.
54
56
 
@@ -59,7 +59,9 @@ Rules for writing it:
59
59
 
60
60
  **Ask the user with `AskUserQuestion`** whether the brief reflects what they expect — **hard gate, in every autonomy mode, `auto` included**: it is the last point where scope can be corrected before there is a diff to argue with.
61
61
 
62
- In `auto` this is one of the only two stops per MR/PR (`guided` adds the plan of §2.0ter on a big one), so it carries the **full stop header** (flow-core §3) — ticket, size, phase, `MR #<n> of <N>`, plan state — followed by the brief. Options:
62
+ In `auto` this is one of the only two stops per MR/PR (`guided` adds the plan of §2.0ter on a big one), so it carries the **full stop header** (flow-core §3) — ticket, size, phase, `MR #<n> of <N>`, plan state — followed by the brief.
63
+
64
+ **The brief travels inside the question** (flow-core §3): the user reads it in the prompt they are answering, never by opening `05-implementation.md`. Write the file, run whatever you need, and *then* open the gate — **nothing runs between the brief and the question**, because a tool call after it is what lets a terminal fold the brief into one collapsed line, and the gate is answered blind. Options:
63
65
  - **Yes, proceed** → start building.
64
66
  - **No, something is extra or missing** → the user clarifies, adjust the brief, ask again. **Do not touch code** until the brief is confirmed.
65
67
 
@@ -153,7 +153,7 @@ Description:
153
153
 
154
154
  If there is pre-deploy SQL, ask the user to **explicitly confirm that the block is complete and correct** — it will be executed in production.
155
155
 
156
- Then ask with `AskUserQuestion` (header: "Create <MR or PR>"):
156
+ The preview is the last thing before the question — **no tool call between them** (flow-core §3), or the block the user is meant to approve is the one their terminal folds away. Then ask with `AskUserQuestion` (header: "Create <MR or PR>"):
157
157
 
158
158
  - **Create with this content** → invoke §4.
159
159
  - **Edit before creating** → user says what to change (title, a section, both); adjust and return to §3 with the new preview.
@@ -185,13 +185,13 @@ This system **orchestrates** the project's existing sub-agents and skills (it do
185
185
  - **`lines`** — one entry per line. Bare string = plain line; object takes `text`, `ref`, `mark`, `link`, `style`, `indent`. Empty string = blank line **and alignment block separator** (`ref` widths per block).
186
186
  - **`mark`** — `done` · `current` · `pending` · `wait` (waiting on someone else) · `block` · `info`; the reader draws it. `style` on a marked line overrides its colour — right only when the colour *is* the information.
187
187
  - **`ref`** — the column label: `#1`, `#3–#6`, `Now`, `Next`, `Decision`.
188
- - **`link`** — URL as a **field, never pasted into `text`**; the reader shortens it to the MR/PR number and makes it clickable.
188
+ - **`link`** — URL as a **field, never pasted into `text`**; the reader shortens it to the MR/PR number and makes it clickable. Every line naming an MR/PR carries one — train entry, blocker about another MR/PR, `Now`/`Next` about the open one (flow-core §4.1).
189
189
  - **`stale_after_minutes`** — raises the 30-minute staleness threshold for a stretch known to run long.
190
190
  - **`style`** — `normal` · `dim` · `title` · `accent` · `ok` · `warn` · `error`; semantic names, the reader owns the palette.
191
191
  - **`header`** — `true` (default): the reader draws ticket, type, phase and age, which never belong in `lines`. `false` hands every line to the writer.
192
192
  - **`phase`** — the phase running **right now** (`meta.json.phase` advances only at close); the reader prefers it.
193
193
  - **`updated_at`** — local ISO-8601 with offset from the real clock, never carried over; lets the reader flag a stale snapshot. Over the tools the app stamps each delivery itself.
194
- - **`attention`** *(tools only)* — `wait` · `block` · `done`, beside `phase`, absent while simply working: the pane's claim on the user's attention, which the app never deduces from a line's `mark`. A tab's card shows the strongest claim among its panes, so an uncleared `wait` flags that tab for ever.
194
+ - **`attention`** *(tools only)* — `wait` · `block` · `done`, beside `phase`, absent while simply working: the pane's claim on the user's attention, which the app never deduces from a line's `mark`. A tab's card shows the strongest claim among its panes, so an uncleared `wait` flags that tab for ever — it goes, with the `Decision` line, the moment the question is answered (flow-core §4.4e).
195
195
  - **`key`** *(tools only)* — a unique, never-painted name on any line a later `panel_patch` may replace or delete (`title`, `mr-1`, `now`, `next`, `decision`, `block-1`).
196
196
 
197
197
  **No headings over the train.** A shipped MR/PR is *open, waiting to merge*; `mark` says it per entry — `wait` shipped, `current` being worked, `done` only merged.
@@ -117,7 +117,7 @@ After a break the panel is most likely stale, and a resumed session is exactly w
117
117
 
118
118
  - `phase` = the phase you are resuming into (`meta.json.phase` does not yet say it).
119
119
  - `Now` in prose; `Next` names the command §4 suggested.
120
- - `Decision` marked `wait` is always set after a resume — nothing is running, the next move is the user's.
120
+ - `Decision` marked `wait` is always set after a resume — nothing is running, the next move is the user's. It goes the moment they make it (flow-core §4.4e), not at the next stop.
121
121
  - `block` lines for the blockers §4 surfaced (`contract_handoff` `pending` in a sibling repo, a red pipeline, an unmerged dependency).
122
122
  - Train: one entry per `meta.json.mrs[]`, not-started collapsed into one `#a–#z` line; omit without `mrs`.
123
123
  - `updated_at` from `date -Iseconds` when the panel goes to the file; every fact from `meta.json` and the artifacts; language of the work's artifacts.
@@ -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.72.0`.** Compare it once, at the start of the session, against
19
+ **This file belongs to flow `0.74.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
@@ -236,7 +236,9 @@ terminal by construction, the turn is over before you notice.
236
236
  (`guided`/`auto` chaining, §2), the turn opens with the call that starts it, not with prose about
237
237
  the one that ended. **A report is never the last thing in a turn you meant to continue.**
238
238
  - **Progress belongs to the panel, not to a turn.** Someone watching reads the live panel (§4):
239
- `Now`, `Next`. Writing it costs no turn and no stop; saying it in chat costs both.
239
+ `Now`, `Next`. Writing it costs no turn and no stop; saying it in chat costs both. **An answered
240
+ question is progress too**: the `Decision` line and the panel's claim on the user go the moment
241
+ the answer arrives, before the work resumes (§4.4e).
240
242
  - **Stopping? Then say so.** `I need:` names the decision or the action you are waiting on. It
241
243
  never announces that you are continuing — if you were, you would not be writing this header.
242
244
 
@@ -258,6 +260,7 @@ I need: <one line — the decision or action you are waiting on>
258
260
  - **Out of the chat, into the artifact:** your own process, your mistakes, corrections to subagent reports, bookkeeping. Subagent completion or idle notifications never earn a turn of their own.
259
261
  - **Zero-context rule.** First mention of an identifier carries 4–6 words of what it is. Never cite a section number without naming what it is. No jargon the user has not used first.
260
262
  - **If it is a question, it is `AskUserQuestion`.** Never end a message with a question in prose. If it does not deserve the menu, it is a decision you take and record.
263
+ - **What the question is about travels with the question.** A brief, an MR/PR body, a plan, a finding: put it where the user answers it — in the question text and its options — and not only in the prose above. **Nothing runs between the two**: a tool call after that prose is what makes a terminal fold it away, and the last thing a chat UI collapses is exactly the thing they were asked to read. A gate answered without seeing what it was about is not a gate; "it is in `05-implementation.md`" is not showing it, because the answer then costs opening an editor and finding the file. Too long for the harness's question → print it as the **last** thing before asking, tool calls already done.
261
264
 
262
265
  ## 4. Live panel — over the terminal's MCP, or `panel.json`
263
266
 
@@ -305,7 +308,7 @@ prose describing a file is otherwise obeyed to the letter.
305
308
 
306
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).
307
310
  - **`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.
308
- - **`link` is a field, never a URL inside `text`.**
311
+ - **`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.
309
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).
310
313
  - **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.
311
314
 
@@ -374,6 +377,13 @@ halfway is not shown as finished. When the stretch will outlast the ~30 min stal
374
377
  `stale_after_minutes` to what it will really take; (d) wherever `## Close` updates `meta.json`. A
375
378
  held panel still goes stale: the app stamps each delivery's arrival.
376
379
 
380
+ **(e) The moment a question is answered or a gate is cleared** — before you resume the work, not at
381
+ the next stop. Drop the `Decision` line, clear `attention`, and move `Now` on: one patch, the first
382
+ thing you do with the answer. A panel still asking what the user already answered is worse than one
383
+ that never asked, because they answered it and the screen says it did not land; and an `attention`
384
+ nobody clears keeps that tab claiming them for ever. The same applies to a blocker that lifted and
385
+ to a `wait` line whose MR/PR merged.
386
+
377
387
  ### 4.5 `meta.json.cost[]` — what a phase measured, when it could
378
388
 
379
389
  A phase that can measure what it spent appends one entry: `{ "phase": "review", "at": "<ISO>",
@@ -44,7 +44,9 @@ What is NOT touched:
44
44
 
45
45
  **Ask with `AskUserQuestion`** whether this reflects the expected fix — a hard gate, **in every mode, `auto` included**: widening the fix is the main source of collateral regressions, and this is the last point to settle scope before there is a diff.
46
46
 
47
- In `auto` this is one of the only two stops of the whole flow (this one and `ship`; `guided` adds the plan of §2.0bis on a fix of more than two steps): open with the **full stop header** (flow-core §3), then the brief. Options:
47
+ In `auto` this is one of the only two stops of the whole flow (this one and `ship`; `guided` adds the plan of §2.0bis on a fix of more than two steps): open with the **full stop header** (flow-core §3), then the brief.
48
+
49
+ **The brief travels inside the question** (flow-core §3) — read in the prompt being answered, not by opening `04-fix.md` — and **nothing runs between the brief and the question**: a tool call after it is what lets a terminal fold it away. Options:
48
50
  - **Yes, go ahead** → apply the fix.
49
51
  - **No, something is missing or wrong** → adjust the brief, ask again. No code until confirmed.
50
52
 
@@ -55,7 +55,9 @@ Rules for writing it:
55
55
 
56
56
  **Ask the user with `AskUserQuestion`** whether the brief reflects what they expect — **hard gate, in every autonomy mode, `auto` included**: it is the last point where scope can be corrected before there is a diff to argue with.
57
57
 
58
- In `auto` this is one of the only two stops per MR/PR (`guided` adds the plan of §2.0ter on a big one), so it carries the **full stop header** (flow-core §3) — ticket, size, phase, `MR #<n> of <N>`, plan state — followed by the brief. Options:
58
+ In `auto` this is one of the only two stops per MR/PR (`guided` adds the plan of §2.0ter on a big one), so it carries the **full stop header** (flow-core §3) — ticket, size, phase, `MR #<n> of <N>`, plan state — followed by the brief.
59
+
60
+ **The brief travels inside the question** (flow-core §3): the user reads it in the prompt they are answering, never by opening `05-implementation.md`. Write the file, run whatever you need, and *then* open the gate — **nothing runs between the brief and the question**, because a tool call after it is what lets a terminal fold the brief into one collapsed line, and the gate is answered blind. Options:
59
61
  - **Yes, proceed** → start building.
60
62
  - **No, something is extra or missing** → the user clarifies, adjust the brief, ask again. **Do not touch code** until the brief is confirmed.
61
63
 
@@ -149,7 +149,7 @@ Description:
149
149
 
150
150
  If there is pre-deploy SQL, ask the user to **explicitly confirm that the block is complete and correct** — it will be executed in production.
151
151
 
152
- Then ask with `AskUserQuestion` (header: "Create <MR or PR>"):
152
+ The preview is the last thing before the question — **no tool call between them** (flow-core §3), or the block the user is meant to approve is the one their terminal folds away. Then ask with `AskUserQuestion` (header: "Create <MR or PR>"):
153
153
 
154
154
  - **Create with this content** → invoke §4.
155
155
  - **Edit before creating** → user says what to change (title, a section, both); adjust and return to §3 with the new preview.
@@ -181,13 +181,13 @@ This system **orchestrates** the project's existing sub-agents and skills (it do
181
181
  - **`lines`** — one entry per line. Bare string = plain line; object takes `text`, `ref`, `mark`, `link`, `style`, `indent`. Empty string = blank line **and alignment block separator** (`ref` widths per block).
182
182
  - **`mark`** — `done` · `current` · `pending` · `wait` (waiting on someone else) · `block` · `info`; the reader draws it. `style` on a marked line overrides its colour — right only when the colour *is* the information.
183
183
  - **`ref`** — the column label: `#1`, `#3–#6`, `Now`, `Next`, `Decision`.
184
- - **`link`** — URL as a **field, never pasted into `text`**; the reader shortens it to the MR/PR number and makes it clickable.
184
+ - **`link`** — URL as a **field, never pasted into `text`**; the reader shortens it to the MR/PR number and makes it clickable. Every line naming an MR/PR carries one — train entry, blocker about another MR/PR, `Now`/`Next` about the open one (flow-core §4.1).
185
185
  - **`stale_after_minutes`** — raises the 30-minute staleness threshold for a stretch known to run long.
186
186
  - **`style`** — `normal` · `dim` · `title` · `accent` · `ok` · `warn` · `error`; semantic names, the reader owns the palette.
187
187
  - **`header`** — `true` (default): the reader draws ticket, type, phase and age, which never belong in `lines`. `false` hands every line to the writer.
188
188
  - **`phase`** — the phase running **right now** (`meta.json.phase` advances only at close); the reader prefers it.
189
189
  - **`updated_at`** — local ISO-8601 with offset from the real clock, never carried over; lets the reader flag a stale snapshot. Over the tools the app stamps each delivery itself.
190
- - **`attention`** *(tools only)* — `wait` · `block` · `done`, beside `phase`, absent while simply working: the pane's claim on the user's attention, which the app never deduces from a line's `mark`. A tab's card shows the strongest claim among its panes, so an uncleared `wait` flags that tab for ever.
190
+ - **`attention`** *(tools only)* — `wait` · `block` · `done`, beside `phase`, absent while simply working: the pane's claim on the user's attention, which the app never deduces from a line's `mark`. A tab's card shows the strongest claim among its panes, so an uncleared `wait` flags that tab for ever — it goes, with the `Decision` line, the moment the question is answered (flow-core §4.4e).
191
191
  - **`key`** *(tools only)* — a unique, never-painted name on any line a later `panel_patch` may replace or delete (`title`, `mr-1`, `now`, `next`, `decision`, `block-1`).
192
192
 
193
193
  **No headings over the train.** A shipped MR/PR is *open, waiting to merge*; `mark` says it per entry — `wait` shipped, `current` being worked, `done` only merged.
@@ -113,7 +113,7 @@ After a break the panel is most likely stale, and a resumed session is exactly w
113
113
 
114
114
  - `phase` = the phase you are resuming into (`meta.json.phase` does not yet say it).
115
115
  - `Now` in prose; `Next` names the command §4 suggested.
116
- - `Decision` marked `wait` is always set after a resume — nothing is running, the next move is the user's.
116
+ - `Decision` marked `wait` is always set after a resume — nothing is running, the next move is the user's. It goes the moment they make it (flow-core §4.4e), not at the next stop.
117
117
  - `block` lines for the blockers §4 surfaced (`contract_handoff` `pending` in a sibling repo, a red pipeline, an unmerged dependency).
118
118
  - Train: one entry per `meta.json.mrs[]`, not-started collapsed into one `#a–#z` line; omit without `mrs`.
119
119
  - `updated_at` from `date -Iseconds` when the panel goes to the file; every fact from `meta.json` and the artifacts; language of the work's artifacts.
@@ -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.72.0`.** Compare it once, at the start of the session, against
20
+ **This file belongs to flow `0.74.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
@@ -237,7 +237,9 @@ terminal by construction, the turn is over before you notice.
237
237
  (`guided`/`auto` chaining, §2), the turn opens with the call that starts it, not with prose about
238
238
  the one that ended. **A report is never the last thing in a turn you meant to continue.**
239
239
  - **Progress belongs to the panel, not to a turn.** Someone watching reads the live panel (§4):
240
- `Now`, `Next`. Writing it costs no turn and no stop; saying it in chat costs both.
240
+ `Now`, `Next`. Writing it costs no turn and no stop; saying it in chat costs both. **An answered
241
+ question is progress too**: the `Decision` line and the panel's claim on the user go the moment
242
+ the answer arrives, before the work resumes (§4.4e).
241
243
  - **Stopping? Then say so.** `I need:` names the decision or the action you are waiting on. It
242
244
  never announces that you are continuing — if you were, you would not be writing this header.
243
245
 
@@ -259,6 +261,7 @@ I need: <one line — the decision or action you are waiting on>
259
261
  - **Out of the chat, into the artifact:** your own process, your mistakes, corrections to subagent reports, bookkeeping. Subagent completion or idle notifications never earn a turn of their own.
260
262
  - **Zero-context rule.** First mention of an identifier carries 4–6 words of what it is. Never cite a section number without naming what it is. No jargon the user has not used first.
261
263
  - **If it is a question, it is `AskUserQuestion`.** Never end a message with a question in prose. If it does not deserve the menu, it is a decision you take and record.
264
+ - **What the question is about travels with the question.** A brief, an MR/PR body, a plan, a finding: put it where the user answers it — in the question text and its options — and not only in the prose above. **Nothing runs between the two**: a tool call after that prose is what makes a terminal fold it away, and the last thing a chat UI collapses is exactly the thing they were asked to read. A gate answered without seeing what it was about is not a gate; "it is in `05-implementation.md`" is not showing it, because the answer then costs opening an editor and finding the file. Too long for the harness's question → print it as the **last** thing before asking, tool calls already done.
262
265
 
263
266
  ## 4. Live panel — over the terminal's MCP, or `panel.json`
264
267
 
@@ -306,7 +309,7 @@ prose describing a file is otherwise obeyed to the letter.
306
309
 
307
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).
308
311
  - **`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.
309
- - **`link` is a field, never a URL inside `text`.**
312
+ - **`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.
310
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).
311
314
  - **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.
312
315
 
@@ -375,6 +378,13 @@ halfway is not shown as finished. When the stretch will outlast the ~30 min stal
375
378
  `stale_after_minutes` to what it will really take; (d) wherever `## Close` updates `meta.json`. A
376
379
  held panel still goes stale: the app stamps each delivery's arrival.
377
380
 
381
+ **(e) The moment a question is answered or a gate is cleared** — before you resume the work, not at
382
+ the next stop. Drop the `Decision` line, clear `attention`, and move `Now` on: one patch, the first
383
+ thing you do with the answer. A panel still asking what the user already answered is worse than one
384
+ that never asked, because they answered it and the screen says it did not land; and an `attention`
385
+ nobody clears keeps that tab claiming them for ever. The same applies to a blocker that lifted and
386
+ to a `wait` line whose MR/PR merged.
387
+
378
388
  ### 4.5 `meta.json.cost[]` — what a phase measured, when it could
379
389
 
380
390
  A phase that can measure what it spent appends one entry: `{ "phase": "review", "at": "<ISO>",
@@ -48,7 +48,9 @@ What is NOT touched:
48
48
 
49
49
  **Ask with `AskUserQuestion`** whether this reflects the expected fix — a hard gate, **in every mode, `auto` included**: widening the fix is the main source of collateral regressions, and this is the last point to settle scope before there is a diff.
50
50
 
51
- In `auto` this is one of the only two stops of the whole flow (this one and `ship`; `guided` adds the plan of §2.0bis on a fix of more than two steps): open with the **full stop header** (flow-core §3), then the brief. Options:
51
+ In `auto` this is one of the only two stops of the whole flow (this one and `ship`; `guided` adds the plan of §2.0bis on a fix of more than two steps): open with the **full stop header** (flow-core §3), then the brief.
52
+
53
+ **The brief travels inside the question** (flow-core §3) — read in the prompt being answered, not by opening `04-fix.md` — and **nothing runs between the brief and the question**: a tool call after it is what lets a terminal fold it away. Options:
52
54
  - **Yes, go ahead** → apply the fix.
53
55
  - **No, something is missing or wrong** → adjust the brief, ask again. No code until confirmed.
54
56
 
@@ -59,7 +59,9 @@ Rules for writing it:
59
59
 
60
60
  **Ask the user with `AskUserQuestion`** whether the brief reflects what they expect — **hard gate, in every autonomy mode, `auto` included**: it is the last point where scope can be corrected before there is a diff to argue with.
61
61
 
62
- In `auto` this is one of the only two stops per MR/PR (`guided` adds the plan of §2.0ter on a big one), so it carries the **full stop header** (flow-core §3) — ticket, size, phase, `MR #<n> of <N>`, plan state — followed by the brief. Options:
62
+ In `auto` this is one of the only two stops per MR/PR (`guided` adds the plan of §2.0ter on a big one), so it carries the **full stop header** (flow-core §3) — ticket, size, phase, `MR #<n> of <N>`, plan state — followed by the brief.
63
+
64
+ **The brief travels inside the question** (flow-core §3): the user reads it in the prompt they are answering, never by opening `05-implementation.md`. Write the file, run whatever you need, and *then* open the gate — **nothing runs between the brief and the question**, because a tool call after it is what lets a terminal fold the brief into one collapsed line, and the gate is answered blind. Options:
63
65
  - **Yes, proceed** → start building.
64
66
  - **No, something is extra or missing** → the user clarifies, adjust the brief, ask again. **Do not touch code** until the brief is confirmed.
65
67
 
@@ -153,7 +153,7 @@ Description:
153
153
 
154
154
  If there is pre-deploy SQL, ask the user to **explicitly confirm that the block is complete and correct** — it will be executed in production.
155
155
 
156
- Then ask with `AskUserQuestion` (header: "Create <MR or PR>"):
156
+ The preview is the last thing before the question — **no tool call between them** (flow-core §3), or the block the user is meant to approve is the one their terminal folds away. Then ask with `AskUserQuestion` (header: "Create <MR or PR>"):
157
157
 
158
158
  - **Create with this content** → invoke §4.
159
159
  - **Edit before creating** → user says what to change (title, a section, both); adjust and return to §3 with the new preview.
@@ -185,13 +185,13 @@ This system **orchestrates** the project's existing sub-agents and skills (it do
185
185
  - **`lines`** — one entry per line. Bare string = plain line; object takes `text`, `ref`, `mark`, `link`, `style`, `indent`. Empty string = blank line **and alignment block separator** (`ref` widths per block).
186
186
  - **`mark`** — `done` · `current` · `pending` · `wait` (waiting on someone else) · `block` · `info`; the reader draws it. `style` on a marked line overrides its colour — right only when the colour *is* the information.
187
187
  - **`ref`** — the column label: `#1`, `#3–#6`, `Now`, `Next`, `Decision`.
188
- - **`link`** — URL as a **field, never pasted into `text`**; the reader shortens it to the MR/PR number and makes it clickable.
188
+ - **`link`** — URL as a **field, never pasted into `text`**; the reader shortens it to the MR/PR number and makes it clickable. Every line naming an MR/PR carries one — train entry, blocker about another MR/PR, `Now`/`Next` about the open one (flow-core §4.1).
189
189
  - **`stale_after_minutes`** — raises the 30-minute staleness threshold for a stretch known to run long.
190
190
  - **`style`** — `normal` · `dim` · `title` · `accent` · `ok` · `warn` · `error`; semantic names, the reader owns the palette.
191
191
  - **`header`** — `true` (default): the reader draws ticket, type, phase and age, which never belong in `lines`. `false` hands every line to the writer.
192
192
  - **`phase`** — the phase running **right now** (`meta.json.phase` advances only at close); the reader prefers it.
193
193
  - **`updated_at`** — local ISO-8601 with offset from the real clock, never carried over; lets the reader flag a stale snapshot. Over the tools the app stamps each delivery itself.
194
- - **`attention`** *(tools only)* — `wait` · `block` · `done`, beside `phase`, absent while simply working: the pane's claim on the user's attention, which the app never deduces from a line's `mark`. A tab's card shows the strongest claim among its panes, so an uncleared `wait` flags that tab for ever.
194
+ - **`attention`** *(tools only)* — `wait` · `block` · `done`, beside `phase`, absent while simply working: the pane's claim on the user's attention, which the app never deduces from a line's `mark`. A tab's card shows the strongest claim among its panes, so an uncleared `wait` flags that tab for ever — it goes, with the `Decision` line, the moment the question is answered (flow-core §4.4e).
195
195
  - **`key`** *(tools only)* — a unique, never-painted name on any line a later `panel_patch` may replace or delete (`title`, `mr-1`, `now`, `next`, `decision`, `block-1`).
196
196
 
197
197
  **No headings over the train.** A shipped MR/PR is *open, waiting to merge*; `mark` says it per entry — `wait` shipped, `current` being worked, `done` only merged.
@@ -117,7 +117,7 @@ After a break the panel is most likely stale, and a resumed session is exactly w
117
117
 
118
118
  - `phase` = the phase you are resuming into (`meta.json.phase` does not yet say it).
119
119
  - `Now` in prose; `Next` names the command §4 suggested.
120
- - `Decision` marked `wait` is always set after a resume — nothing is running, the next move is the user's.
120
+ - `Decision` marked `wait` is always set after a resume — nothing is running, the next move is the user's. It goes the moment they make it (flow-core §4.4e), not at the next stop.
121
121
  - `block` lines for the blockers §4 surfaced (`contract_handoff` `pending` in a sibling repo, a red pipeline, an unmerged dependency).
122
122
  - Train: one entry per `meta.json.mrs[]`, not-started collapsed into one `#a–#z` line; omit without `mrs`.
123
123
  - `updated_at` from `date -Iseconds` when the panel goes to the file; every fact from `meta.json` and the artifacts; language of the work's artifacts.
@@ -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.72.0`.** Compare it once, at the start of the session, against
19
+ **This file belongs to flow `0.74.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
@@ -236,7 +236,9 @@ terminal by construction, the turn is over before you notice.
236
236
  (`guided`/`auto` chaining, §2), the turn opens with the call that starts it, not with prose about
237
237
  the one that ended. **A report is never the last thing in a turn you meant to continue.**
238
238
  - **Progress belongs to the panel, not to a turn.** Someone watching reads the live panel (§4):
239
- `Now`, `Next`. Writing it costs no turn and no stop; saying it in chat costs both.
239
+ `Now`, `Next`. Writing it costs no turn and no stop; saying it in chat costs both. **An answered
240
+ question is progress too**: the `Decision` line and the panel's claim on the user go the moment
241
+ the answer arrives, before the work resumes (§4.4e).
240
242
  - **Stopping? Then say so.** `I need:` names the decision or the action you are waiting on. It
241
243
  never announces that you are continuing — if you were, you would not be writing this header.
242
244
 
@@ -258,6 +260,7 @@ I need: <one line — the decision or action you are waiting on>
258
260
  - **Out of the chat, into the artifact:** your own process, your mistakes, corrections to subagent reports, bookkeeping. Subagent completion or idle notifications never earn a turn of their own.
259
261
  - **Zero-context rule.** First mention of an identifier carries 4–6 words of what it is. Never cite a section number without naming what it is. No jargon the user has not used first.
260
262
  - **If it is a question, it is `AskUserQuestion`.** Never end a message with a question in prose. If it does not deserve the menu, it is a decision you take and record.
263
+ - **What the question is about travels with the question.** A brief, an MR/PR body, a plan, a finding: put it where the user answers it — in the question text and its options — and not only in the prose above. **Nothing runs between the two**: a tool call after that prose is what makes a terminal fold it away, and the last thing a chat UI collapses is exactly the thing they were asked to read. A gate answered without seeing what it was about is not a gate; "it is in `05-implementation.md`" is not showing it, because the answer then costs opening an editor and finding the file. Too long for the harness's question → print it as the **last** thing before asking, tool calls already done.
261
264
 
262
265
  ## 4. Live panel — over the terminal's MCP, or `panel.json`
263
266
 
@@ -305,7 +308,7 @@ prose describing a file is otherwise obeyed to the letter.
305
308
 
306
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).
307
310
  - **`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.
308
- - **`link` is a field, never a URL inside `text`.**
311
+ - **`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.
309
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).
310
313
  - **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.
311
314
 
@@ -374,6 +377,13 @@ halfway is not shown as finished. When the stretch will outlast the ~30 min stal
374
377
  `stale_after_minutes` to what it will really take; (d) wherever `## Close` updates `meta.json`. A
375
378
  held panel still goes stale: the app stamps each delivery's arrival.
376
379
 
380
+ **(e) The moment a question is answered or a gate is cleared** — before you resume the work, not at
381
+ the next stop. Drop the `Decision` line, clear `attention`, and move `Now` on: one patch, the first
382
+ thing you do with the answer. A panel still asking what the user already answered is worse than one
383
+ that never asked, because they answered it and the screen says it did not land; and an `attention`
384
+ nobody clears keeps that tab claiming them for ever. The same applies to a blocker that lifted and
385
+ to a `wait` line whose MR/PR merged.
386
+
377
387
  ### 4.5 `meta.json.cost[]` — what a phase measured, when it could
378
388
 
379
389
  A phase that can measure what it spent appends one entry: `{ "phase": "review", "at": "<ISO>",
@@ -46,7 +46,9 @@ What is NOT touched:
46
46
 
47
47
  **Ask with `AskUserQuestion`** whether this reflects the expected fix — a hard gate, **in every mode, `auto` included**: widening the fix is the main source of collateral regressions, and this is the last point to settle scope before there is a diff.
48
48
 
49
- In `auto` this is one of the only two stops of the whole flow (this one and `ship`; `guided` adds the plan of §2.0bis on a fix of more than two steps): open with the **full stop header** (flow-core §3), then the brief. Options:
49
+ In `auto` this is one of the only two stops of the whole flow (this one and `ship`; `guided` adds the plan of §2.0bis on a fix of more than two steps): open with the **full stop header** (flow-core §3), then the brief.
50
+
51
+ **The brief travels inside the question** (flow-core §3) — read in the prompt being answered, not by opening `04-fix.md` — and **nothing runs between the brief and the question**: a tool call after it is what lets a terminal fold it away. Options:
50
52
  - **Yes, go ahead** → apply the fix.
51
53
  - **No, something is missing or wrong** → adjust the brief, ask again. No code until confirmed.
52
54
 
@@ -57,7 +57,9 @@ Rules for writing it:
57
57
 
58
58
  **Ask the user with `AskUserQuestion`** whether the brief reflects what they expect — **hard gate, in every autonomy mode, `auto` included**: it is the last point where scope can be corrected before there is a diff to argue with.
59
59
 
60
- In `auto` this is one of the only two stops per MR/PR (`guided` adds the plan of §2.0ter on a big one), so it carries the **full stop header** (flow-core §3) — ticket, size, phase, `MR #<n> of <N>`, plan state — followed by the brief. Options:
60
+ In `auto` this is one of the only two stops per MR/PR (`guided` adds the plan of §2.0ter on a big one), so it carries the **full stop header** (flow-core §3) — ticket, size, phase, `MR #<n> of <N>`, plan state — followed by the brief.
61
+
62
+ **The brief travels inside the question** (flow-core §3): the user reads it in the prompt they are answering, never by opening `05-implementation.md`. Write the file, run whatever you need, and *then* open the gate — **nothing runs between the brief and the question**, because a tool call after it is what lets a terminal fold the brief into one collapsed line, and the gate is answered blind. Options:
61
63
  - **Yes, proceed** → start building.
62
64
  - **No, something is extra or missing** → the user clarifies, adjust the brief, ask again. **Do not touch code** until the brief is confirmed.
63
65
 
@@ -151,7 +151,7 @@ Description:
151
151
 
152
152
  If there is pre-deploy SQL, ask the user to **explicitly confirm that the block is complete and correct** — it will be executed in production.
153
153
 
154
- Then ask with `AskUserQuestion` (header: "Create <MR or PR>"):
154
+ The preview is the last thing before the question — **no tool call between them** (flow-core §3), or the block the user is meant to approve is the one their terminal folds away. Then ask with `AskUserQuestion` (header: "Create <MR or PR>"):
155
155
 
156
156
  - **Create with this content** → invoke §4.
157
157
  - **Edit before creating** → user says what to change (title, a section, both); adjust and return to §3 with the new preview.
@@ -183,13 +183,13 @@ This system **orchestrates** the project's existing sub-agents and skills (it do
183
183
  - **`lines`** — one entry per line. Bare string = plain line; object takes `text`, `ref`, `mark`, `link`, `style`, `indent`. Empty string = blank line **and alignment block separator** (`ref` widths per block).
184
184
  - **`mark`** — `done` · `current` · `pending` · `wait` (waiting on someone else) · `block` · `info`; the reader draws it. `style` on a marked line overrides its colour — right only when the colour *is* the information.
185
185
  - **`ref`** — the column label: `#1`, `#3–#6`, `Now`, `Next`, `Decision`.
186
- - **`link`** — URL as a **field, never pasted into `text`**; the reader shortens it to the MR/PR number and makes it clickable.
186
+ - **`link`** — URL as a **field, never pasted into `text`**; the reader shortens it to the MR/PR number and makes it clickable. Every line naming an MR/PR carries one — train entry, blocker about another MR/PR, `Now`/`Next` about the open one (flow-core §4.1).
187
187
  - **`stale_after_minutes`** — raises the 30-minute staleness threshold for a stretch known to run long.
188
188
  - **`style`** — `normal` · `dim` · `title` · `accent` · `ok` · `warn` · `error`; semantic names, the reader owns the palette.
189
189
  - **`header`** — `true` (default): the reader draws ticket, type, phase and age, which never belong in `lines`. `false` hands every line to the writer.
190
190
  - **`phase`** — the phase running **right now** (`meta.json.phase` advances only at close); the reader prefers it.
191
191
  - **`updated_at`** — local ISO-8601 with offset from the real clock, never carried over; lets the reader flag a stale snapshot. Over the tools the app stamps each delivery itself.
192
- - **`attention`** *(tools only)* — `wait` · `block` · `done`, beside `phase`, absent while simply working: the pane's claim on the user's attention, which the app never deduces from a line's `mark`. A tab's card shows the strongest claim among its panes, so an uncleared `wait` flags that tab for ever.
192
+ - **`attention`** *(tools only)* — `wait` · `block` · `done`, beside `phase`, absent while simply working: the pane's claim on the user's attention, which the app never deduces from a line's `mark`. A tab's card shows the strongest claim among its panes, so an uncleared `wait` flags that tab for ever — it goes, with the `Decision` line, the moment the question is answered (flow-core §4.4e).
193
193
  - **`key`** *(tools only)* — a unique, never-painted name on any line a later `panel_patch` may replace or delete (`title`, `mr-1`, `now`, `next`, `decision`, `block-1`).
194
194
 
195
195
  **No headings over the train.** A shipped MR/PR is *open, waiting to merge*; `mark` says it per entry — `wait` shipped, `current` being worked, `done` only merged.
@@ -115,7 +115,7 @@ After a break the panel is most likely stale, and a resumed session is exactly w
115
115
 
116
116
  - `phase` = the phase you are resuming into (`meta.json.phase` does not yet say it).
117
117
  - `Now` in prose; `Next` names the command §4 suggested.
118
- - `Decision` marked `wait` is always set after a resume — nothing is running, the next move is the user's.
118
+ - `Decision` marked `wait` is always set after a resume — nothing is running, the next move is the user's. It goes the moment they make it (flow-core §4.4e), not at the next stop.
119
119
  - `block` lines for the blockers §4 surfaced (`contract_handoff` `pending` in a sibling repo, a red pipeline, an unmerged dependency).
120
120
  - Train: one entry per `meta.json.mrs[]`, not-started collapsed into one `#a–#z` line; omit without `mrs`.
121
121
  - `updated_at` from `date -Iseconds` when the panel goes to the file; every fact from `meta.json` and the artifacts; language of the work's artifacts.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "flow-workflows",
3
- "version": "0.72.0",
3
+ "version": "0.74.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.72.0",
6
+ "version": "0.74.0",
7
7
  "author": {
8
8
  "name": "Alberto Vioque",
9
9
  "email": "mashware@gmail.com"
@@ -5,6 +5,41 @@ 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.74.0 — The thing you were asked to approve was the thing the terminal hid · 2026-09-22
9
+
10
+ **In short**
11
+ - **What a gate asks about now travels with the question** — the brief, the MR/PR body, the plan — so it is read in the prompt being answered instead of by opening the artifact in an editor.
12
+ - **Nothing runs between showing it and asking.** A tool call right after is what lets a terminal collapse that message into one line, and the line it collapses is exactly the one the user needed.
13
+ - Applied at the two briefs (`feat:build`, `bug:fix`) and at the MR/PR preview, the three gates that exist to catch scope before there is a diff to argue with.
14
+
15
+ The rule already said to print the brief and then ask. It never said what had to sit between them,
16
+ so a status line, a file write or a `git` call landed in the middle — and a chat UI that folds a
17
+ message once a tool call follows it turned a nine-line brief into "· summarized". What reached the
18
+ user was a one-line paraphrase above a Yes/No, and the honest way to answer it was to open
19
+ `05-implementation.md` and read the brief there, which is the cost the gate exists to avoid.
20
+
21
+ Where a harness's question cannot hold the content, it is printed as the **last** thing before
22
+ asking, with the tool calls already done.
23
+
24
+ ## v0.73.0 — The panel kept asking what you had already answered · 2026-09-22
25
+
26
+ **In short**
27
+ - **An answered question now clears the panel at once.** The `Decision` line and the pane's claim on your attention go the moment the answer arrives — before the work resumes, not at the next stop.
28
+ - **Same for a blocker that lifted** and for a `wait` line whose MR/PR merged: the panel said "waiting for you" long after nothing was.
29
+ - **Every line that names an MR/PR carries its link** — the train, a blocker about somebody else's MR/PR, a `Now` about the open one — so the reader can paint `!10327` as something you can click. A number typed into the text is a number the reader cannot use.
30
+
31
+ A panel that still asks what you answered five minutes ago is worse than one that never asked: you
32
+ answered, and the screen says it did not land. The rule that produced it was honest — publish before
33
+ a stop, before a long stretch, at every close — and an answer is none of those three: it arrives
34
+ mid-turn, between two pieces of work, and the next publication was whenever the phase happened to
35
+ end. So the claim on the user outlived the question by an entire phase, and a tab whose card shows
36
+ the strongest claim among its panes kept flagging itself.
37
+
38
+ The link rule is the same failure in the other direction. `!10327` written into a line's text reads
39
+ correctly and does nothing; the field exists so the reader can shorten a URL and make it clickable,
40
+ and flow knows the URL — it is in `meta.json`. Where nothing recorded one, the number stays plain
41
+ text and the fix is to record it.
42
+
8
43
  ## v0.72.0 — The tools were there, under a name nobody looked for · 2026-09-22
9
44
 
10
45
  **In short**