flow-workflows 0.72.0 → 0.73.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.
@@ -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.73.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
 
@@ -306,7 +308,7 @@ prose describing a file is otherwise obeyed to the letter.
306
308
 
307
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).
308
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.
309
- - **`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.
310
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).
311
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.
312
314
 
@@ -375,6 +377,13 @@ halfway is not shown as finished. When the stretch will outlast the ~30 min stal
375
377
  `stale_after_minutes` to what it will really take; (d) wherever `## Close` updates `meta.json`. A
376
378
  held panel still goes stale: the app stamps each delivery's arrival.
377
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
+
378
387
  ### 4.5 `meta.json.cost[]` — what a phase measured, when it could
379
388
 
380
389
  A phase that can measure what it spent appends one entry: `{ "phase": "review", "at": "<ISO>",
@@ -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.73.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
 
@@ -305,7 +307,7 @@ prose describing a file is otherwise obeyed to the letter.
305
307
 
306
308
  - **`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
309
  - **`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`.**
310
+ - **`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
311
  - **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
312
  - **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
313
 
@@ -374,6 +376,13 @@ halfway is not shown as finished. When the stretch will outlast the ~30 min stal
374
376
  `stale_after_minutes` to what it will really take; (d) wherever `## Close` updates `meta.json`. A
375
377
  held panel still goes stale: the app stamps each delivery's arrival.
376
378
 
379
+ **(e) The moment a question is answered or a gate is cleared** — before you resume the work, not at
380
+ the next stop. Drop the `Decision` line, clear `attention`, and move `Now` on: one patch, the first
381
+ thing you do with the answer. A panel still asking what the user already answered is worse than one
382
+ that never asked, because they answered it and the screen says it did not land; and an `attention`
383
+ nobody clears keeps that tab claiming them for ever. The same applies to a blocker that lifted and
384
+ to a `wait` line whose MR/PR merged.
385
+
377
386
  ### 4.5 `meta.json.cost[]` — what a phase measured, when it could
378
387
 
379
388
  A phase that can measure what it spent appends one entry: `{ "phase": "review", "at": "<ISO>",
@@ -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.73.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
 
@@ -306,7 +308,7 @@ prose describing a file is otherwise obeyed to the letter.
306
308
 
307
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).
308
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.
309
- - **`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.
310
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).
311
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.
312
314
 
@@ -375,6 +377,13 @@ halfway is not shown as finished. When the stretch will outlast the ~30 min stal
375
377
  `stale_after_minutes` to what it will really take; (d) wherever `## Close` updates `meta.json`. A
376
378
  held panel still goes stale: the app stamps each delivery's arrival.
377
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
+
378
387
  ### 4.5 `meta.json.cost[]` — what a phase measured, when it could
379
388
 
380
389
  A phase that can measure what it spent appends one entry: `{ "phase": "review", "at": "<ISO>",
@@ -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.73.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
 
@@ -305,7 +307,7 @@ prose describing a file is otherwise obeyed to the letter.
305
307
 
306
308
  - **`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
309
  - **`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`.**
310
+ - **`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
311
  - **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
312
  - **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
313
 
@@ -374,6 +376,13 @@ halfway is not shown as finished. When the stretch will outlast the ~30 min stal
374
376
  `stale_after_minutes` to what it will really take; (d) wherever `## Close` updates `meta.json`. A
375
377
  held panel still goes stale: the app stamps each delivery's arrival.
376
378
 
379
+ **(e) The moment a question is answered or a gate is cleared** — before you resume the work, not at
380
+ the next stop. Drop the `Decision` line, clear `attention`, and move `Now` on: one patch, the first
381
+ thing you do with the answer. A panel still asking what the user already answered is worse than one
382
+ that never asked, because they answered it and the screen says it did not land; and an `attention`
383
+ nobody clears keeps that tab claiming them for ever. The same applies to a blocker that lifted and
384
+ to a `wait` line whose MR/PR merged.
385
+
377
386
  ### 4.5 `meta.json.cost[]` — what a phase measured, when it could
378
387
 
379
388
  A phase that can measure what it spent appends one entry: `{ "phase": "review", "at": "<ISO>",
@@ -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.73.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.73.0",
7
7
  "author": {
8
8
  "name": "Alberto Vioque",
9
9
  "email": "mashware@gmail.com"
@@ -5,6 +5,25 @@ 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.73.0 — The panel kept asking what you had already answered · 2026-09-22
9
+
10
+ **In short**
11
+ - **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.
12
+ - **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.
13
+ - **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.
14
+
15
+ A panel that still asks what you answered five minutes ago is worse than one that never asked: you
16
+ answered, and the screen says it did not land. The rule that produced it was honest — publish before
17
+ a stop, before a long stretch, at every close — and an answer is none of those three: it arrives
18
+ mid-turn, between two pieces of work, and the next publication was whenever the phase happened to
19
+ end. So the claim on the user outlived the question by an entire phase, and a tab whose card shows
20
+ the strongest claim among its panes kept flagging itself.
21
+
22
+ The link rule is the same failure in the other direction. `!10327` written into a line's text reads
23
+ correctly and does nothing; the field exists so the reader can shorten a URL and make it clickable,
24
+ and flow knows the URL — it is in `meta.json`. Where nothing recorded one, the number stays plain
25
+ text and the fix is to record it.
26
+
8
27
  ## v0.72.0 — The tools were there, under a name nobody looked for · 2026-09-22
9
28
 
10
29
  **In short**