flow-workflows 0.87.0 → 0.88.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 (36) hide show
  1. package/adapters/codex/CORE.md +11 -1
  2. package/adapters/codex/skills/flow-bug-investigate/SKILL.md +3 -3
  3. package/adapters/codex/skills/flow-bug-start/SKILL.md +1 -1
  4. package/adapters/codex/skills/flow-feat-design/SKILL.md +3 -3
  5. package/adapters/codex/skills/flow-feat-plan/SKILL.md +3 -3
  6. package/adapters/codex/skills/flow-feat-start/SKILL.md +1 -1
  7. package/adapters/codex/skills/flow-work-handoff/SKILL.md +4 -0
  8. package/adapters/codex/skills/flow-work-resume/SKILL.md +1 -1
  9. package/adapters/gemini/CORE.md +11 -1
  10. package/adapters/gemini/commands/flow/bug/investigate.toml +3 -3
  11. package/adapters/gemini/commands/flow/bug/start.toml +1 -1
  12. package/adapters/gemini/commands/flow/feat/design.toml +3 -3
  13. package/adapters/gemini/commands/flow/feat/plan.toml +3 -3
  14. package/adapters/gemini/commands/flow/feat/start.toml +1 -1
  15. package/adapters/gemini/commands/flow/work/handoff.toml +4 -0
  16. package/adapters/gemini/commands/flow/work/resume.toml +1 -1
  17. package/adapters/hermes/CORE.md +11 -1
  18. package/adapters/hermes/skills/flow-bug-investigate/SKILL.md +3 -3
  19. package/adapters/hermes/skills/flow-bug-start/SKILL.md +1 -1
  20. package/adapters/hermes/skills/flow-feat-design/SKILL.md +3 -3
  21. package/adapters/hermes/skills/flow-feat-plan/SKILL.md +3 -3
  22. package/adapters/hermes/skills/flow-feat-start/SKILL.md +1 -1
  23. package/adapters/hermes/skills/flow-work-handoff/SKILL.md +4 -0
  24. package/adapters/hermes/skills/flow-work-resume/SKILL.md +1 -1
  25. package/adapters/opencode/CORE.md +11 -1
  26. package/adapters/opencode/commands/flow-bug-investigate.md +3 -3
  27. package/adapters/opencode/commands/flow-bug-start.md +1 -1
  28. package/adapters/opencode/commands/flow-feat-design.md +3 -3
  29. package/adapters/opencode/commands/flow-feat-plan.md +3 -3
  30. package/adapters/opencode/commands/flow-feat-start.md +1 -1
  31. package/adapters/opencode/commands/flow-work-handoff.md +4 -0
  32. package/adapters/opencode/commands/flow-work-resume.md +1 -1
  33. package/package.json +1 -1
  34. package/plugins/flow/.claude-plugin/plugin.json +1 -1
  35. package/plugins/flow/CHANGELOG.md +13 -0
  36. package/plugins/flow/examples/FLOW.template.md +1 -1
@@ -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.87.0`.** Compare it once, at the start of the session, against
20
+ **This file belongs to flow `0.88.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
@@ -218,6 +218,16 @@ sensible default and record it.
218
218
 
219
219
  Asking these anyway is how a run in `guided`/`auto` degrades into a manual one.
220
220
 
221
+ **A study made for handoff.** `git.handoff_branch` set and the mode not `unattended` → the study is
222
+ built somewhere else, so wherever a study phase (`start`, `design`, `plan`, `investigate`) or
223
+ `resume` would hand the work to `$flow-feat-build` or `$flow-bug-fix`, it hands it to
224
+ `$flow-work-handoff` instead. Only the target changes: a Close that asks (`manual`) offers **Hand
225
+ off the study** recommended and **Build here** second; a Close that chains (`guided`/`auto`) chains
226
+ into handoff, whose push question is the one confirmation — no stop is added. In `unattended` the
227
+ rule does not apply: the repo's `FLOW.md` reaches the server too, and a run that studies a ticket
228
+ there goes on to build it. A repo that hands its studies off pairs the key with
229
+ `autonomy.mode: auto`, and the study then runs on its own up to the push.
230
+
221
231
  ### 2.1 `unattended` — where a person would have been asked
222
232
 
223
233
  No person is there to answer a question in this mode. A question tool — `AskUserQuestion`, OpenCode's `question`,
@@ -36,7 +36,7 @@ Read `~/.claude/flow/CORE.codex.md` first (shared rules: `FLOW.md` step 0, model
36
36
  **In `unattended`, before this phase's first step, read flow-core §2.1 whole — from its heading to the next section, unless it is already in your context whole; having read parts of it does not count** — the orchestrator command, the question stop and the way its answer comes back are all in it, and a phase that reads only part of it skips them.
37
37
 
38
38
  - Read `meta.json` and `00-summary.md`; open in full only `01-context.md`. (flow-core §5)
39
- - `type` is not `bug` → refuse. `size` is `XS` → suggest `$flow-bug-fix` and stop.
39
+ - `type` is not `bug` → refuse. `size` is `XS` → suggest `$flow-bug-fix` — `git.handoff_branch` set and not `unattended` → `$flow-work-handoff` in its place, **Hand off the study** recommended and **Build here** second where it asks (flow-core §2, a study made for handoff) — and stop.
40
40
  - Require `context` in `phases_done`.
41
41
 
42
42
  ## 1.5 Reproduce — what is failing, before why
@@ -221,5 +221,5 @@ If `knowledge.stage` is set and the root cause reveals a **non-obvious "why"** a
221
221
 
222
222
  - Update `meta.json`: `phase = "investigate"`, add to `phases_done`.
223
223
  - Overwrite `00-summary.md` whole (≤15 lines, flow-core §5).
224
- - Suggest `$flow-bug-fix`.
225
- - **Autonomy handoff** (`autonomy.mode`, flow-core §2): `manual` → propose `$flow-bug-fix` with a single `AskUserQuestion`, invoke it only on confirmation; `guided`/`auto` → chain into it in this same turn.
224
+ - Suggest `$flow-bug-fix` — `git.handoff_branch` set and not `unattended` → `$flow-work-handoff` in its place, **Hand off the study** recommended and **Build here** second where it asks (flow-core §2, a study made for handoff).
225
+ - **Autonomy handoff** (`autonomy.mode`, flow-core §2): `manual` → propose `$flow-bug-fix` with a single `AskUserQuestion`, invoke it only on confirmation; `guided`/`auto` → chain into it in this same turn. Either way: `git.handoff_branch` set and not `unattended` → `$flow-work-handoff` in its place, **Hand off the study** recommended and **Build here** second where it asks (flow-core §2, a study made for handoff).
@@ -228,6 +228,6 @@ Run `tracker.start_cmd` with `{TICKET}` = `meta.json.ticket` and `{ASSIGNEE}` =
228
228
 
229
229
  ## 5. Close
230
230
 
231
- - Suggest the next command by size: `$flow-bug-fix` for XS, `$flow-bug-investigate` for the rest.
231
+ - Suggest the next command by size: `$flow-bug-fix` for XS (`git.handoff_branch` set and not `unattended` → `$flow-work-handoff` in its place, **Hand off the study** recommended and **Build here** second where it asks (flow-core §2, a study made for handoff)), `$flow-bug-investigate` for the rest.
232
232
  - Overwrite `00-summary.md` whole (≤15 lines, flow-core §5).
233
233
  - Apply `autonomy.mode`: `manual` stops and recommends; `guided`/`auto` chain into that command automatically, subject to the hard gates.
@@ -40,7 +40,7 @@ after writing each challenge's Response.
40
40
 
41
41
  - Load `meta.json` by current branch — in `unattended`, the work `$flow-work-run` found (flow-core §2.1). Missing → ask the user to start with `$flow-feat-start`.
42
42
  - Read `meta.json` and `00-summary.md`; open in full only `01-context.md` (ticket, decisions, contracts received). (flow-core §5)
43
- - `size` is `XS` → suggest jumping to `$flow-feat-build` and stop unless the user insists.
43
+ - `size` is `XS` → suggest jumping to `$flow-feat-build` — `git.handoff_branch` set and not `unattended` → `$flow-work-handoff` in its place, **Hand off the study** recommended and **Build here** second where it asks (flow-core §2, a study made for handoff) — and stop unless the user insists.
44
44
 
45
45
  ## 1.5 Approaches — open the option space first (M/L)
46
46
 
@@ -408,6 +408,6 @@ Never invoke `knowledge.save` here — the final save is in `$flow-feat-ship` af
408
408
  - **Confirm the acceptance criteria** within the design review: present the enumerated list. If every criterion is unambiguous and verifiable, the review covers them — no separate prompt. `AskUserQuestion` **only** when a criterion is ambiguous, not verifiable, or one is likely missing for today's ticket (same restraint as the challenger). Apply the user's edits to `03-design.md` before advancing.
409
409
  - **In `manual`/`guided`**, ask the user to review the design; edit the artifact on requested changes before advancing. **In `auto`, do not ask** — record it as accepted per the handoff below. Not an unconditional stop.
410
410
  - Next step by size:
411
- - **XS / S**: suggest `$flow-feat-build` (1 single MR/PR, no planned split).
411
+ - **XS / S**: suggest `$flow-feat-build` (1 single MR/PR, no planned split) — `git.handoff_branch` set and not `unattended` → `$flow-work-handoff` in its place, **Hand off the study** recommended and **Build here** second where it asks (flow-core §2, a study made for handoff).
412
412
  - **M / L**: suggest `$flow-feat-plan` to split the work into independently mergeable MRs/PRs before implementing.
413
- - **Autonomy handoff.** Design review is a genuine decision point: `manual` and `guided` ask for it before advancing. `auto` records the design as accepted in the artifact and **chains into the command for the size** in this same turn. `manual` proposes that command with a single `AskUserQuestion` (recommended option by default), never a written suggestion. Unresolved `high`-severity findings (§6) stop the flow in **every** mode — do not chain over them.
413
+ - **Autonomy handoff.** Design review is a genuine decision point: `manual` and `guided` ask for it before advancing. `auto` records the design as accepted in the artifact and **chains into the command for the size** in this same turn — `build` there: `git.handoff_branch` set and not `unattended` → `$flow-work-handoff` in its place, **Hand off the study** recommended and **Build here** second where it asks (flow-core §2, a study made for handoff). `manual` proposes that command with a single `AskUserQuestion` (recommended option by default), never a written suggestion. Unresolved `high`-severity findings (§6) stop the flow in **every** mode — do not chain over them.
@@ -31,7 +31,7 @@ Delivery planning phase. **No code is written.** Splits the feature into MRs/PRs
31
31
  - Load `meta.json` by current branch — in `unattended`, the work `$flow-work-run` found (flow-core §2.1). Missing → send the user to `$flow-feat-start`.
32
32
  - Require `design` in `phases_done`. Missing → send to `$flow-feat-design` and stop.
33
33
  - Read `meta.json` and `00-summary.md`; open in full only `03-design.md`. (flow-core §5)
34
- - **`size` `XS` or `S`** → warn that this phase does not apply (always 1 MR/PR), add `"plan:skipped"` to `phases_done`, suggest `$flow-feat-build`. Stop.
34
+ - **`size` `XS` or `S`** → warn that this phase does not apply (always 1 MR/PR), add `"plan:skipped"` to `phases_done`, suggest `$flow-feat-build` — `git.handoff_branch` set and not `unattended` → `$flow-work-handoff` in its place, **Hand off the study** recommended and **Build here** second where it asks (flow-core §2, a study made for handoff). Stop.
35
35
 
36
36
  ## 2. Work
37
37
 
@@ -165,5 +165,5 @@ A slice landing in **another repo** is not one of *this* repo's `mrs`: record it
165
165
 
166
166
  `∥` = no dependency between them, can be built in parallel or as a train; `→` = the next wave waits for the previous one to merge. Then the table with `#`, wave, `depends_on`, title and estimate. One line for the split rationale, and — when any pair was merged — one line saying how many were and what they would have cost (`merged #a into #b: would have been a wave of its own`). Nothing else — risks and discarded alternatives live in the artifact.
167
167
  - Changes requested → edit the artifact and `meta.json.mrs` before advancing.
168
- - Suggest `$flow-feat-build` to start the first MR/PR.
169
- - **Autonomy handoff.** Approving the split is a genuine decision point: in `manual` and `guided` ask before advancing. In `auto`, record the plan as accepted in `04-mr-plan.md` and **chain into `$flow-feat-build` automatically** in this same turn. In `manual`, propose it with a single `AskUserQuestion`.
168
+ - Suggest `$flow-feat-build` to start the first MR/PR — `git.handoff_branch` set and not `unattended` → `$flow-work-handoff` in its place, **Hand off the study** recommended and **Build here** second where it asks (flow-core §2, a study made for handoff).
169
+ - **Autonomy handoff.** Approving the split is a genuine decision point: in `manual` and `guided` ask before advancing. In `auto`, record the plan as accepted in `04-mr-plan.md` and **chain into `$flow-feat-build` automatically** in this same turn. In `manual`, propose it with a single `AskUserQuestion`. Either way: `git.handoff_branch` set and not `unattended` → `$flow-work-handoff` in its place, **Hand off the study** recommended and **Build here** second where it asks (flow-core §2, a study made for handoff).
@@ -309,5 +309,5 @@ Run `tracker.start_cmd` with `{TICKET}` = `meta.json.ticket`, `{ASSIGNEE}` = `tr
309
309
  ## 7. Close
310
310
 
311
311
  - Overwrite `00-summary.md` whole (≤15 lines, flow-core §5) — first written in §6; refresh it if §6.5 changed anything.
312
- - Report **following the stop header** (flow-core §3), branch added, body 2-3 lines: ticket, size, branch; recommended next command per the §4 table — in `guided`/`auto` you run it in this same turn, so there is no report and no question here: update the panel and chain (flow-core §3).
312
+ - Report **following the stop header** (flow-core §3), branch added, body 2-3 lines: ticket, size, branch; recommended next command per the §4 table (`build` on XS: `git.handoff_branch` set and not `unattended` → `$flow-work-handoff` in its place, **Hand off the study** recommended and **Build here** second where it asks (flow-core §2, a study made for handoff)) — in `guided`/`auto` you run it in this same turn, so there is no report and no question here: update the panel and chain (flow-core §3).
313
313
  - Apply `autonomy.mode`: `manual` → stop and let the user invoke the recommended command; `guided`/`auto` → chain into it, subject to the hard gates (the §5 branch-base ambiguity already stops on its own).
@@ -48,6 +48,10 @@ The builder can ask no one. Refuse — pushing nothing, naming every reason that
48
48
  - **A clarification is still open** — a question under "Decisions clarified at start" in
49
49
  `01-context.md` recorded without its answer.
50
50
 
51
+ Any refusal names the way on: finish what is missing, or **build here** (`$flow-feat-build` /
52
+ `$flow-bug-fix`) — a run that chained here (flow-core §2, a study made for handoff) must not end on
53
+ a dead end.
54
+
51
55
  Then, **before anything is pushed**: decisions this session settled while talking that no artifact
52
56
  records yet → write them where they belong now (`01-context.md` "Decisions clarified at start",
53
57
  `03-design.md` "Decisions (ADR-light)", `04-mr-plan.md`), and say which. What was decided only in
@@ -92,7 +92,7 @@ With what is new (there is already work on disk):
92
92
  ## 4. Next step
93
93
 
94
94
  - An `Unattended:` line → the question is the orchestrator's to bring back: say so, and that answering it here instead means clearing `meta.json.pending` and continuing in this session's mode; the next step itself comes from `phase` as always.
95
- - Suggest the concrete command from `phase` and `size`. Interrupted phase (e.g. `build` with an empty artifact) → suggest rerunning it with `$flow-feat-build` or `$flow-bug-fix`.
95
+ - Suggest the concrete command from `phase` and `size` — a study whose next step is `build` or `fix`: `git.handoff_branch` set and not `unattended` → `$flow-work-handoff` in its place, **Hand off the study** recommended and **Build here** second where it asks (flow-core §2, a study made for handoff). Interrupted phase (e.g. `build` with an empty artifact) → suggest rerunning it with `$flow-feat-build` or `$flow-bug-fix`.
96
96
  - §2.5 found something new → let it inform the suggestion (a contract that arrived after you left may mean rerunning `design` rather than continuing `build`); say why in one line.
97
97
  - `meta.json.related_repos` entries not `done` → remind that a **sibling repo still has a pending part** (`<repo>: <scope>`, plus `contract not handed over` when its `contract_handoff` is `pending`); suggest `$flow-feat-start <TICKET>` there. flow only reminds; it never scans or touches the other repo.
98
98
  - Do not advance on your own. The user decides.
@@ -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.87.0`.** Compare it once, at the start of the session, against
19
+ **This file belongs to flow `0.88.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
@@ -217,6 +217,16 @@ sensible default and record it.
217
217
 
218
218
  Asking these anyway is how a run in `guided`/`auto` degrades into a manual one.
219
219
 
220
+ **A study made for handoff.** `git.handoff_branch` set and the mode not `unattended` → the study is
221
+ built somewhere else, so wherever a study phase (`start`, `design`, `plan`, `investigate`) or
222
+ `resume` would hand the work to `/flow:feat:build` or `/flow:bug:fix`, it hands it to
223
+ `/flow:work:handoff` instead. Only the target changes: a Close that asks (`manual`) offers **Hand
224
+ off the study** recommended and **Build here** second; a Close that chains (`guided`/`auto`) chains
225
+ into handoff, whose push question is the one confirmation — no stop is added. In `unattended` the
226
+ rule does not apply: the repo's `FLOW.md` reaches the server too, and a run that studies a ticket
227
+ there goes on to build it. A repo that hands its studies off pairs the key with
228
+ `autonomy.mode: auto`, and the study then runs on its own up to the push.
229
+
220
230
  ### 2.1 `unattended` — where a person would have been asked
221
231
 
222
232
  No person is there to answer a question in this mode. A question tool — `AskUserQuestion`, OpenCode's `question`,
@@ -32,7 +32,7 @@ Read `~/.claude/flow/CORE.gemini.md` first (shared rules: `FLOW.md` step 0, mode
32
32
  **In `unattended`, before this phase's first step, read flow-core §2.1 whole — from its heading to the next section, unless it is already in your context whole; having read parts of it does not count** — the orchestrator command, the question stop and the way its answer comes back are all in it, and a phase that reads only part of it skips them.
33
33
 
34
34
  - Read `meta.json` and `00-summary.md`; open in full only `01-context.md`. (flow-core §5)
35
- - `type` is not `bug` → refuse. `size` is `XS` → suggest `/flow:bug:fix` and stop.
35
+ - `type` is not `bug` → refuse. `size` is `XS` → suggest `/flow:bug:fix` — `git.handoff_branch` set and not `unattended` → `/flow:work:handoff` in its place, **Hand off the study** recommended and **Build here** second where it asks (flow-core §2, a study made for handoff) — and stop.
36
36
  - Require `context` in `phases_done`.
37
37
 
38
38
  ## 1.5 Reproduce — what is failing, before why
@@ -217,6 +217,6 @@ If `knowledge.stage` is set and the root cause reveals a **non-obvious "why"** a
217
217
 
218
218
  - Update `meta.json`: `phase = "investigate"`, add to `phases_done`.
219
219
  - Overwrite `00-summary.md` whole (≤15 lines, flow-core §5).
220
- - Suggest `/flow:bug:fix`.
221
- - **Autonomy handoff** (`autonomy.mode`, flow-core §2): `manual` → propose `/flow:bug:fix` with a single `AskUserQuestion`, invoke it only on confirmation; `guided`/`auto` → chain into it in this same turn.
220
+ - Suggest `/flow:bug:fix` — `git.handoff_branch` set and not `unattended` → `/flow:work:handoff` in its place, **Hand off the study** recommended and **Build here** second where it asks (flow-core §2, a study made for handoff).
221
+ - **Autonomy handoff** (`autonomy.mode`, flow-core §2): `manual` → propose `/flow:bug:fix` with a single `AskUserQuestion`, invoke it only on confirmation; `guided`/`auto` → chain into it in this same turn. Either way: `git.handoff_branch` set and not `unattended` → `/flow:work:handoff` in its place, **Hand off the study** recommended and **Build here** second where it asks (flow-core §2, a study made for handoff).
222
222
  """
@@ -224,7 +224,7 @@ Run `tracker.start_cmd` with `{TICKET}` = `meta.json.ticket` and `{ASSIGNEE}` =
224
224
 
225
225
  ## 5. Close
226
226
 
227
- - Suggest the next command by size: `/flow:bug:fix` for XS, `/flow:bug:investigate` for the rest.
227
+ - Suggest the next command by size: `/flow:bug:fix` for XS (`git.handoff_branch` set and not `unattended` → `/flow:work:handoff` in its place, **Hand off the study** recommended and **Build here** second where it asks (flow-core §2, a study made for handoff)), `/flow:bug:investigate` for the rest.
228
228
  - Overwrite `00-summary.md` whole (≤15 lines, flow-core §5).
229
229
  - Apply `autonomy.mode`: `manual` stops and recommends; `guided`/`auto` chain into that command automatically, subject to the hard gates.
230
230
  """
@@ -36,7 +36,7 @@ after writing each challenge's Response.
36
36
 
37
37
  - Load `meta.json` by current branch — in `unattended`, the work `/flow:work:run` found (flow-core §2.1). Missing → ask the user to start with `/flow:feat:start`.
38
38
  - Read `meta.json` and `00-summary.md`; open in full only `01-context.md` (ticket, decisions, contracts received). (flow-core §5)
39
- - `size` is `XS` → suggest jumping to `/flow:feat:build` and stop unless the user insists.
39
+ - `size` is `XS` → suggest jumping to `/flow:feat:build` — `git.handoff_branch` set and not `unattended` → `/flow:work:handoff` in its place, **Hand off the study** recommended and **Build here** second where it asks (flow-core §2, a study made for handoff) — and stop unless the user insists.
40
40
 
41
41
  ## 1.5 Approaches — open the option space first (M/L)
42
42
 
@@ -404,7 +404,7 @@ Never invoke `knowledge.save` here — the final save is in `/flow:feat:ship` af
404
404
  - **Confirm the acceptance criteria** within the design review: present the enumerated list. If every criterion is unambiguous and verifiable, the review covers them — no separate prompt. `AskUserQuestion` **only** when a criterion is ambiguous, not verifiable, or one is likely missing for today's ticket (same restraint as the challenger). Apply the user's edits to `03-design.md` before advancing.
405
405
  - **In `manual`/`guided`**, ask the user to review the design; edit the artifact on requested changes before advancing. **In `auto`, do not ask** — record it as accepted per the handoff below. Not an unconditional stop.
406
406
  - Next step by size:
407
- - **XS / S**: suggest `/flow:feat:build` (1 single MR/PR, no planned split).
407
+ - **XS / S**: suggest `/flow:feat:build` (1 single MR/PR, no planned split) — `git.handoff_branch` set and not `unattended` → `/flow:work:handoff` in its place, **Hand off the study** recommended and **Build here** second where it asks (flow-core §2, a study made for handoff).
408
408
  - **M / L**: suggest `/flow:feat:plan` to split the work into independently mergeable MRs/PRs before implementing.
409
- - **Autonomy handoff.** Design review is a genuine decision point: `manual` and `guided` ask for it before advancing. `auto` records the design as accepted in the artifact and **chains into the command for the size** in this same turn. `manual` proposes that command with a single `AskUserQuestion` (recommended option by default), never a written suggestion. Unresolved `high`-severity findings (§6) stop the flow in **every** mode — do not chain over them.
409
+ - **Autonomy handoff.** Design review is a genuine decision point: `manual` and `guided` ask for it before advancing. `auto` records the design as accepted in the artifact and **chains into the command for the size** in this same turn — `build` there: `git.handoff_branch` set and not `unattended` → `/flow:work:handoff` in its place, **Hand off the study** recommended and **Build here** second where it asks (flow-core §2, a study made for handoff). `manual` proposes that command with a single `AskUserQuestion` (recommended option by default), never a written suggestion. Unresolved `high`-severity findings (§6) stop the flow in **every** mode — do not chain over them.
410
410
  """
@@ -27,7 +27,7 @@ Delivery planning phase. **No code is written.** Splits the feature into MRs/PRs
27
27
  - Load `meta.json` by current branch — in `unattended`, the work `/flow:work:run` found (flow-core §2.1). Missing → send the user to `/flow:feat:start`.
28
28
  - Require `design` in `phases_done`. Missing → send to `/flow:feat:design` and stop.
29
29
  - Read `meta.json` and `00-summary.md`; open in full only `03-design.md`. (flow-core §5)
30
- - **`size` `XS` or `S`** → warn that this phase does not apply (always 1 MR/PR), add `"plan:skipped"` to `phases_done`, suggest `/flow:feat:build`. Stop.
30
+ - **`size` `XS` or `S`** → warn that this phase does not apply (always 1 MR/PR), add `"plan:skipped"` to `phases_done`, suggest `/flow:feat:build` — `git.handoff_branch` set and not `unattended` → `/flow:work:handoff` in its place, **Hand off the study** recommended and **Build here** second where it asks (flow-core §2, a study made for handoff). Stop.
31
31
 
32
32
  ## 2. Work
33
33
 
@@ -161,6 +161,6 @@ A slice landing in **another repo** is not one of *this* repo's `mrs`: record it
161
161
 
162
162
  `∥` = no dependency between them, can be built in parallel or as a train; `→` = the next wave waits for the previous one to merge. Then the table with `#`, wave, `depends_on`, title and estimate. One line for the split rationale, and — when any pair was merged — one line saying how many were and what they would have cost (`merged #a into #b: would have been a wave of its own`). Nothing else — risks and discarded alternatives live in the artifact.
163
163
  - Changes requested → edit the artifact and `meta.json.mrs` before advancing.
164
- - Suggest `/flow:feat:build` to start the first MR/PR.
165
- - **Autonomy handoff.** Approving the split is a genuine decision point: in `manual` and `guided` ask before advancing. In `auto`, record the plan as accepted in `04-mr-plan.md` and **chain into `/flow:feat:build` automatically** in this same turn. In `manual`, propose it with a single `AskUserQuestion`.
164
+ - Suggest `/flow:feat:build` to start the first MR/PR — `git.handoff_branch` set and not `unattended` → `/flow:work:handoff` in its place, **Hand off the study** recommended and **Build here** second where it asks (flow-core §2, a study made for handoff).
165
+ - **Autonomy handoff.** Approving the split is a genuine decision point: in `manual` and `guided` ask before advancing. In `auto`, record the plan as accepted in `04-mr-plan.md` and **chain into `/flow:feat:build` automatically** in this same turn. In `manual`, propose it with a single `AskUserQuestion`. Either way: `git.handoff_branch` set and not `unattended` → `/flow:work:handoff` in its place, **Hand off the study** recommended and **Build here** second where it asks (flow-core §2, a study made for handoff).
166
166
  """
@@ -305,6 +305,6 @@ Run `tracker.start_cmd` with `{TICKET}` = `meta.json.ticket`, `{ASSIGNEE}` = `tr
305
305
  ## 7. Close
306
306
 
307
307
  - Overwrite `00-summary.md` whole (≤15 lines, flow-core §5) — first written in §6; refresh it if §6.5 changed anything.
308
- - Report **following the stop header** (flow-core §3), branch added, body 2-3 lines: ticket, size, branch; recommended next command per the §4 table — in `guided`/`auto` you run it in this same turn, so there is no report and no question here: update the panel and chain (flow-core §3).
308
+ - Report **following the stop header** (flow-core §3), branch added, body 2-3 lines: ticket, size, branch; recommended next command per the §4 table (`build` on XS: `git.handoff_branch` set and not `unattended` → `/flow:work:handoff` in its place, **Hand off the study** recommended and **Build here** second where it asks (flow-core §2, a study made for handoff)) — in `guided`/`auto` you run it in this same turn, so there is no report and no question here: update the panel and chain (flow-core §3).
309
309
  - Apply `autonomy.mode`: `manual` → stop and let the user invoke the recommended command; `guided`/`auto` → chain into it, subject to the hard gates (the §5 branch-base ambiguity already stops on its own).
310
310
  """
@@ -44,6 +44,10 @@ The builder can ask no one. Refuse — pushing nothing, naming every reason that
44
44
  - **A clarification is still open** — a question under "Decisions clarified at start" in
45
45
  `01-context.md` recorded without its answer.
46
46
 
47
+ Any refusal names the way on: finish what is missing, or **build here** (`/flow:feat:build` /
48
+ `/flow:bug:fix`) — a run that chained here (flow-core §2, a study made for handoff) must not end on
49
+ a dead end.
50
+
47
51
  Then, **before anything is pushed**: decisions this session settled while talking that no artifact
48
52
  records yet → write them where they belong now (`01-context.md` "Decisions clarified at start",
49
53
  `03-design.md` "Decisions (ADR-light)", `04-mr-plan.md`), and say which. What was decided only in
@@ -88,7 +88,7 @@ With what is new (there is already work on disk):
88
88
  ## 4. Next step
89
89
 
90
90
  - An `Unattended:` line → the question is the orchestrator's to bring back: say so, and that answering it here instead means clearing `meta.json.pending` and continuing in this session's mode; the next step itself comes from `phase` as always.
91
- - Suggest the concrete command from `phase` and `size`. Interrupted phase (e.g. `build` with an empty artifact) → suggest rerunning it with `/flow:feat:build` or `/flow:bug:fix`.
91
+ - Suggest the concrete command from `phase` and `size` — a study whose next step is `build` or `fix`: `git.handoff_branch` set and not `unattended` → `/flow:work:handoff` in its place, **Hand off the study** recommended and **Build here** second where it asks (flow-core §2, a study made for handoff). Interrupted phase (e.g. `build` with an empty artifact) → suggest rerunning it with `/flow:feat:build` or `/flow:bug:fix`.
92
92
  - §2.5 found something new → let it inform the suggestion (a contract that arrived after you left may mean rerunning `design` rather than continuing `build`); say why in one line.
93
93
  - `meta.json.related_repos` entries not `done` → remind that a **sibling repo still has a pending part** (`<repo>: <scope>`, plus `contract not handed over` when its `contract_handoff` is `pending`); suggest `/flow:feat:start <TICKET>` there. flow only reminds; it never scans or touches the other repo.
94
94
  - Do not advance on your own. The user decides.
@@ -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.87.0`.** Compare it once, at the start of the session, against
20
+ **This file belongs to flow `0.88.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
@@ -218,6 +218,16 @@ sensible default and record it.
218
218
 
219
219
  Asking these anyway is how a run in `guided`/`auto` degrades into a manual one.
220
220
 
221
+ **A study made for handoff.** `git.handoff_branch` set and the mode not `unattended` → the study is
222
+ built somewhere else, so wherever a study phase (`start`, `design`, `plan`, `investigate`) or
223
+ `resume` would hand the work to `/flow-feat-build` or `/flow-bug-fix`, it hands it to
224
+ `/flow-work-handoff` instead. Only the target changes: a Close that asks (`manual`) offers **Hand
225
+ off the study** recommended and **Build here** second; a Close that chains (`guided`/`auto`) chains
226
+ into handoff, whose push question is the one confirmation — no stop is added. In `unattended` the
227
+ rule does not apply: the repo's `FLOW.md` reaches the server too, and a run that studies a ticket
228
+ there goes on to build it. A repo that hands its studies off pairs the key with
229
+ `autonomy.mode: auto`, and the study then runs on its own up to the push.
230
+
221
231
  ### 2.1 `unattended` — where a person would have been asked
222
232
 
223
233
  No person is there to answer a question in this mode. A question tool — `AskUserQuestion`, OpenCode's `question`,
@@ -36,7 +36,7 @@ Read `~/.claude/flow/CORE.hermes.md` first (shared rules: `FLOW.md` step 0, mode
36
36
  **In `unattended`, before this phase's first step, read flow-core §2.1 whole — from its heading to the next section, unless it is already in your context whole; having read parts of it does not count** — the orchestrator command, the question stop and the way its answer comes back are all in it, and a phase that reads only part of it skips them.
37
37
 
38
38
  - Read `meta.json` and `00-summary.md`; open in full only `01-context.md`. (flow-core §5)
39
- - `type` is not `bug` → refuse. `size` is `XS` → suggest `/flow-bug-fix` and stop.
39
+ - `type` is not `bug` → refuse. `size` is `XS` → suggest `/flow-bug-fix` — `git.handoff_branch` set and not `unattended` → `/flow-work-handoff` in its place, **Hand off the study** recommended and **Build here** second where it asks (flow-core §2, a study made for handoff) — and stop.
40
40
  - Require `context` in `phases_done`.
41
41
 
42
42
  ## 1.5 Reproduce — what is failing, before why
@@ -221,5 +221,5 @@ If `knowledge.stage` is set and the root cause reveals a **non-obvious "why"** a
221
221
 
222
222
  - Update `meta.json`: `phase = "investigate"`, add to `phases_done`.
223
223
  - Overwrite `00-summary.md` whole (≤15 lines, flow-core §5).
224
- - Suggest `/flow-bug-fix`.
225
- - **Autonomy handoff** (`autonomy.mode`, flow-core §2): `manual` → propose `/flow-bug-fix` with a single `AskUserQuestion`, invoke it only on confirmation; `guided`/`auto` → chain into it in this same turn.
224
+ - Suggest `/flow-bug-fix` — `git.handoff_branch` set and not `unattended` → `/flow-work-handoff` in its place, **Hand off the study** recommended and **Build here** second where it asks (flow-core §2, a study made for handoff).
225
+ - **Autonomy handoff** (`autonomy.mode`, flow-core §2): `manual` → propose `/flow-bug-fix` with a single `AskUserQuestion`, invoke it only on confirmation; `guided`/`auto` → chain into it in this same turn. Either way: `git.handoff_branch` set and not `unattended` → `/flow-work-handoff` in its place, **Hand off the study** recommended and **Build here** second where it asks (flow-core §2, a study made for handoff).
@@ -228,6 +228,6 @@ Run `tracker.start_cmd` with `{TICKET}` = `meta.json.ticket` and `{ASSIGNEE}` =
228
228
 
229
229
  ## 5. Close
230
230
 
231
- - Suggest the next command by size: `/flow-bug-fix` for XS, `/flow-bug-investigate` for the rest.
231
+ - Suggest the next command by size: `/flow-bug-fix` for XS (`git.handoff_branch` set and not `unattended` → `/flow-work-handoff` in its place, **Hand off the study** recommended and **Build here** second where it asks (flow-core §2, a study made for handoff)), `/flow-bug-investigate` for the rest.
232
232
  - Overwrite `00-summary.md` whole (≤15 lines, flow-core §5).
233
233
  - Apply `autonomy.mode`: `manual` stops and recommends; `guided`/`auto` chain into that command automatically, subject to the hard gates.
@@ -40,7 +40,7 @@ after writing each challenge's Response.
40
40
 
41
41
  - Load `meta.json` by current branch — in `unattended`, the work `/flow-work-run` found (flow-core §2.1). Missing → ask the user to start with `/flow-feat-start`.
42
42
  - Read `meta.json` and `00-summary.md`; open in full only `01-context.md` (ticket, decisions, contracts received). (flow-core §5)
43
- - `size` is `XS` → suggest jumping to `/flow-feat-build` and stop unless the user insists.
43
+ - `size` is `XS` → suggest jumping to `/flow-feat-build` — `git.handoff_branch` set and not `unattended` → `/flow-work-handoff` in its place, **Hand off the study** recommended and **Build here** second where it asks (flow-core §2, a study made for handoff) — and stop unless the user insists.
44
44
 
45
45
  ## 1.5 Approaches — open the option space first (M/L)
46
46
 
@@ -408,6 +408,6 @@ Never invoke `knowledge.save` here — the final save is in `/flow-feat-ship` af
408
408
  - **Confirm the acceptance criteria** within the design review: present the enumerated list. If every criterion is unambiguous and verifiable, the review covers them — no separate prompt. `AskUserQuestion` **only** when a criterion is ambiguous, not verifiable, or one is likely missing for today's ticket (same restraint as the challenger). Apply the user's edits to `03-design.md` before advancing.
409
409
  - **In `manual`/`guided`**, ask the user to review the design; edit the artifact on requested changes before advancing. **In `auto`, do not ask** — record it as accepted per the handoff below. Not an unconditional stop.
410
410
  - Next step by size:
411
- - **XS / S**: suggest `/flow-feat-build` (1 single MR/PR, no planned split).
411
+ - **XS / S**: suggest `/flow-feat-build` (1 single MR/PR, no planned split) — `git.handoff_branch` set and not `unattended` → `/flow-work-handoff` in its place, **Hand off the study** recommended and **Build here** second where it asks (flow-core §2, a study made for handoff).
412
412
  - **M / L**: suggest `/flow-feat-plan` to split the work into independently mergeable MRs/PRs before implementing.
413
- - **Autonomy handoff.** Design review is a genuine decision point: `manual` and `guided` ask for it before advancing. `auto` records the design as accepted in the artifact and **chains into the command for the size** in this same turn. `manual` proposes that command with a single `AskUserQuestion` (recommended option by default), never a written suggestion. Unresolved `high`-severity findings (§6) stop the flow in **every** mode — do not chain over them.
413
+ - **Autonomy handoff.** Design review is a genuine decision point: `manual` and `guided` ask for it before advancing. `auto` records the design as accepted in the artifact and **chains into the command for the size** in this same turn — `build` there: `git.handoff_branch` set and not `unattended` → `/flow-work-handoff` in its place, **Hand off the study** recommended and **Build here** second where it asks (flow-core §2, a study made for handoff). `manual` proposes that command with a single `AskUserQuestion` (recommended option by default), never a written suggestion. Unresolved `high`-severity findings (§6) stop the flow in **every** mode — do not chain over them.
@@ -31,7 +31,7 @@ Delivery planning phase. **No code is written.** Splits the feature into MRs/PRs
31
31
  - Load `meta.json` by current branch — in `unattended`, the work `/flow-work-run` found (flow-core §2.1). Missing → send the user to `/flow-feat-start`.
32
32
  - Require `design` in `phases_done`. Missing → send to `/flow-feat-design` and stop.
33
33
  - Read `meta.json` and `00-summary.md`; open in full only `03-design.md`. (flow-core §5)
34
- - **`size` `XS` or `S`** → warn that this phase does not apply (always 1 MR/PR), add `"plan:skipped"` to `phases_done`, suggest `/flow-feat-build`. Stop.
34
+ - **`size` `XS` or `S`** → warn that this phase does not apply (always 1 MR/PR), add `"plan:skipped"` to `phases_done`, suggest `/flow-feat-build` — `git.handoff_branch` set and not `unattended` → `/flow-work-handoff` in its place, **Hand off the study** recommended and **Build here** second where it asks (flow-core §2, a study made for handoff). Stop.
35
35
 
36
36
  ## 2. Work
37
37
 
@@ -165,5 +165,5 @@ A slice landing in **another repo** is not one of *this* repo's `mrs`: record it
165
165
 
166
166
  `∥` = no dependency between them, can be built in parallel or as a train; `→` = the next wave waits for the previous one to merge. Then the table with `#`, wave, `depends_on`, title and estimate. One line for the split rationale, and — when any pair was merged — one line saying how many were and what they would have cost (`merged #a into #b: would have been a wave of its own`). Nothing else — risks and discarded alternatives live in the artifact.
167
167
  - Changes requested → edit the artifact and `meta.json.mrs` before advancing.
168
- - Suggest `/flow-feat-build` to start the first MR/PR.
169
- - **Autonomy handoff.** Approving the split is a genuine decision point: in `manual` and `guided` ask before advancing. In `auto`, record the plan as accepted in `04-mr-plan.md` and **chain into `/flow-feat-build` automatically** in this same turn. In `manual`, propose it with a single `AskUserQuestion`.
168
+ - Suggest `/flow-feat-build` to start the first MR/PR — `git.handoff_branch` set and not `unattended` → `/flow-work-handoff` in its place, **Hand off the study** recommended and **Build here** second where it asks (flow-core §2, a study made for handoff).
169
+ - **Autonomy handoff.** Approving the split is a genuine decision point: in `manual` and `guided` ask before advancing. In `auto`, record the plan as accepted in `04-mr-plan.md` and **chain into `/flow-feat-build` automatically** in this same turn. In `manual`, propose it with a single `AskUserQuestion`. Either way: `git.handoff_branch` set and not `unattended` → `/flow-work-handoff` in its place, **Hand off the study** recommended and **Build here** second where it asks (flow-core §2, a study made for handoff).
@@ -309,5 +309,5 @@ Run `tracker.start_cmd` with `{TICKET}` = `meta.json.ticket`, `{ASSIGNEE}` = `tr
309
309
  ## 7. Close
310
310
 
311
311
  - Overwrite `00-summary.md` whole (≤15 lines, flow-core §5) — first written in §6; refresh it if §6.5 changed anything.
312
- - Report **following the stop header** (flow-core §3), branch added, body 2-3 lines: ticket, size, branch; recommended next command per the §4 table — in `guided`/`auto` you run it in this same turn, so there is no report and no question here: update the panel and chain (flow-core §3).
312
+ - Report **following the stop header** (flow-core §3), branch added, body 2-3 lines: ticket, size, branch; recommended next command per the §4 table (`build` on XS: `git.handoff_branch` set and not `unattended` → `/flow-work-handoff` in its place, **Hand off the study** recommended and **Build here** second where it asks (flow-core §2, a study made for handoff)) — in `guided`/`auto` you run it in this same turn, so there is no report and no question here: update the panel and chain (flow-core §3).
313
313
  - Apply `autonomy.mode`: `manual` → stop and let the user invoke the recommended command; `guided`/`auto` → chain into it, subject to the hard gates (the §5 branch-base ambiguity already stops on its own).
@@ -48,6 +48,10 @@ The builder can ask no one. Refuse — pushing nothing, naming every reason that
48
48
  - **A clarification is still open** — a question under "Decisions clarified at start" in
49
49
  `01-context.md` recorded without its answer.
50
50
 
51
+ Any refusal names the way on: finish what is missing, or **build here** (`/flow-feat-build` /
52
+ `/flow-bug-fix`) — a run that chained here (flow-core §2, a study made for handoff) must not end on
53
+ a dead end.
54
+
51
55
  Then, **before anything is pushed**: decisions this session settled while talking that no artifact
52
56
  records yet → write them where they belong now (`01-context.md` "Decisions clarified at start",
53
57
  `03-design.md` "Decisions (ADR-light)", `04-mr-plan.md`), and say which. What was decided only in
@@ -92,7 +92,7 @@ With what is new (there is already work on disk):
92
92
  ## 4. Next step
93
93
 
94
94
  - An `Unattended:` line → the question is the orchestrator's to bring back: say so, and that answering it here instead means clearing `meta.json.pending` and continuing in this session's mode; the next step itself comes from `phase` as always.
95
- - Suggest the concrete command from `phase` and `size`. Interrupted phase (e.g. `build` with an empty artifact) → suggest rerunning it with `/flow-feat-build` or `/flow-bug-fix`.
95
+ - Suggest the concrete command from `phase` and `size` — a study whose next step is `build` or `fix`: `git.handoff_branch` set and not `unattended` → `/flow-work-handoff` in its place, **Hand off the study** recommended and **Build here** second where it asks (flow-core §2, a study made for handoff). Interrupted phase (e.g. `build` with an empty artifact) → suggest rerunning it with `/flow-feat-build` or `/flow-bug-fix`.
96
96
  - §2.5 found something new → let it inform the suggestion (a contract that arrived after you left may mean rerunning `design` rather than continuing `build`); say why in one line.
97
97
  - `meta.json.related_repos` entries not `done` → remind that a **sibling repo still has a pending part** (`<repo>: <scope>`, plus `contract not handed over` when its `contract_handoff` is `pending`); suggest `/flow-feat-start <TICKET>` there. flow only reminds; it never scans or touches the other repo.
98
98
  - Do not advance on your own. The user decides.
@@ -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.87.0`.** Compare it once, at the start of the session, against
19
+ **This file belongs to flow `0.88.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
@@ -217,6 +217,16 @@ sensible default and record it.
217
217
 
218
218
  Asking these anyway is how a run in `guided`/`auto` degrades into a manual one.
219
219
 
220
+ **A study made for handoff.** `git.handoff_branch` set and the mode not `unattended` → the study is
221
+ built somewhere else, so wherever a study phase (`start`, `design`, `plan`, `investigate`) or
222
+ `resume` would hand the work to `/flow-feat-build` or `/flow-bug-fix`, it hands it to
223
+ `/flow-work-handoff` instead. Only the target changes: a Close that asks (`manual`) offers **Hand
224
+ off the study** recommended and **Build here** second; a Close that chains (`guided`/`auto`) chains
225
+ into handoff, whose push question is the one confirmation — no stop is added. In `unattended` the
226
+ rule does not apply: the repo's `FLOW.md` reaches the server too, and a run that studies a ticket
227
+ there goes on to build it. A repo that hands its studies off pairs the key with
228
+ `autonomy.mode: auto`, and the study then runs on its own up to the push.
229
+
220
230
  ### 2.1 `unattended` — where a person would have been asked
221
231
 
222
232
  No person is there to answer a question in this mode. A question tool — `AskUserQuestion`, OpenCode's `question`,
@@ -34,7 +34,7 @@ Read `~/.claude/flow/CORE.opencode.md` first (shared rules: `FLOW.md` step 0, mo
34
34
  **In `unattended`, before this phase's first step, read flow-core §2.1 whole — from its heading to the next section, unless it is already in your context whole; having read parts of it does not count** — the orchestrator command, the question stop and the way its answer comes back are all in it, and a phase that reads only part of it skips them.
35
35
 
36
36
  - Read `meta.json` and `00-summary.md`; open in full only `01-context.md`. (flow-core §5)
37
- - `type` is not `bug` → refuse. `size` is `XS` → suggest `/flow-bug-fix` and stop.
37
+ - `type` is not `bug` → refuse. `size` is `XS` → suggest `/flow-bug-fix` — `git.handoff_branch` set and not `unattended` → `/flow-work-handoff` in its place, **Hand off the study** recommended and **Build here** second where it asks (flow-core §2, a study made for handoff) — and stop.
38
38
  - Require `context` in `phases_done`.
39
39
 
40
40
  ## 1.5 Reproduce — what is failing, before why
@@ -219,5 +219,5 @@ If `knowledge.stage` is set and the root cause reveals a **non-obvious "why"** a
219
219
 
220
220
  - Update `meta.json`: `phase = "investigate"`, add to `phases_done`.
221
221
  - Overwrite `00-summary.md` whole (≤15 lines, flow-core §5).
222
- - Suggest `/flow-bug-fix`.
223
- - **Autonomy handoff** (`autonomy.mode`, flow-core §2): `manual` → propose `/flow-bug-fix` with a single `AskUserQuestion`, invoke it only on confirmation; `guided`/`auto` → chain into it in this same turn.
222
+ - Suggest `/flow-bug-fix` — `git.handoff_branch` set and not `unattended` → `/flow-work-handoff` in its place, **Hand off the study** recommended and **Build here** second where it asks (flow-core §2, a study made for handoff).
223
+ - **Autonomy handoff** (`autonomy.mode`, flow-core §2): `manual` → propose `/flow-bug-fix` with a single `AskUserQuestion`, invoke it only on confirmation; `guided`/`auto` → chain into it in this same turn. Either way: `git.handoff_branch` set and not `unattended` → `/flow-work-handoff` in its place, **Hand off the study** recommended and **Build here** second where it asks (flow-core §2, a study made for handoff).
@@ -226,6 +226,6 @@ Run `tracker.start_cmd` with `{TICKET}` = `meta.json.ticket` and `{ASSIGNEE}` =
226
226
 
227
227
  ## 5. Close
228
228
 
229
- - Suggest the next command by size: `/flow-bug-fix` for XS, `/flow-bug-investigate` for the rest.
229
+ - Suggest the next command by size: `/flow-bug-fix` for XS (`git.handoff_branch` set and not `unattended` → `/flow-work-handoff` in its place, **Hand off the study** recommended and **Build here** second where it asks (flow-core §2, a study made for handoff)), `/flow-bug-investigate` for the rest.
230
230
  - Overwrite `00-summary.md` whole (≤15 lines, flow-core §5).
231
231
  - Apply `autonomy.mode`: `manual` stops and recommends; `guided`/`auto` chain into that command automatically, subject to the hard gates.
@@ -38,7 +38,7 @@ after writing each challenge's Response.
38
38
 
39
39
  - Load `meta.json` by current branch — in `unattended`, the work `/flow-work-run` found (flow-core §2.1). Missing → ask the user to start with `/flow-feat-start`.
40
40
  - Read `meta.json` and `00-summary.md`; open in full only `01-context.md` (ticket, decisions, contracts received). (flow-core §5)
41
- - `size` is `XS` → suggest jumping to `/flow-feat-build` and stop unless the user insists.
41
+ - `size` is `XS` → suggest jumping to `/flow-feat-build` — `git.handoff_branch` set and not `unattended` → `/flow-work-handoff` in its place, **Hand off the study** recommended and **Build here** second where it asks (flow-core §2, a study made for handoff) — and stop unless the user insists.
42
42
 
43
43
  ## 1.5 Approaches — open the option space first (M/L)
44
44
 
@@ -406,6 +406,6 @@ Never invoke `knowledge.save` here — the final save is in `/flow-feat-ship` af
406
406
  - **Confirm the acceptance criteria** within the design review: present the enumerated list. If every criterion is unambiguous and verifiable, the review covers them — no separate prompt. `AskUserQuestion` **only** when a criterion is ambiguous, not verifiable, or one is likely missing for today's ticket (same restraint as the challenger). Apply the user's edits to `03-design.md` before advancing.
407
407
  - **In `manual`/`guided`**, ask the user to review the design; edit the artifact on requested changes before advancing. **In `auto`, do not ask** — record it as accepted per the handoff below. Not an unconditional stop.
408
408
  - Next step by size:
409
- - **XS / S**: suggest `/flow-feat-build` (1 single MR/PR, no planned split).
409
+ - **XS / S**: suggest `/flow-feat-build` (1 single MR/PR, no planned split) — `git.handoff_branch` set and not `unattended` → `/flow-work-handoff` in its place, **Hand off the study** recommended and **Build here** second where it asks (flow-core §2, a study made for handoff).
410
410
  - **M / L**: suggest `/flow-feat-plan` to split the work into independently mergeable MRs/PRs before implementing.
411
- - **Autonomy handoff.** Design review is a genuine decision point: `manual` and `guided` ask for it before advancing. `auto` records the design as accepted in the artifact and **chains into the command for the size** in this same turn. `manual` proposes that command with a single `AskUserQuestion` (recommended option by default), never a written suggestion. Unresolved `high`-severity findings (§6) stop the flow in **every** mode — do not chain over them.
411
+ - **Autonomy handoff.** Design review is a genuine decision point: `manual` and `guided` ask for it before advancing. `auto` records the design as accepted in the artifact and **chains into the command for the size** in this same turn — `build` there: `git.handoff_branch` set and not `unattended` → `/flow-work-handoff` in its place, **Hand off the study** recommended and **Build here** second where it asks (flow-core §2, a study made for handoff). `manual` proposes that command with a single `AskUserQuestion` (recommended option by default), never a written suggestion. Unresolved `high`-severity findings (§6) stop the flow in **every** mode — do not chain over them.
@@ -29,7 +29,7 @@ Delivery planning phase. **No code is written.** Splits the feature into MRs/PRs
29
29
  - Load `meta.json` by current branch — in `unattended`, the work `/flow-work-run` found (flow-core §2.1). Missing → send the user to `/flow-feat-start`.
30
30
  - Require `design` in `phases_done`. Missing → send to `/flow-feat-design` and stop.
31
31
  - Read `meta.json` and `00-summary.md`; open in full only `03-design.md`. (flow-core §5)
32
- - **`size` `XS` or `S`** → warn that this phase does not apply (always 1 MR/PR), add `"plan:skipped"` to `phases_done`, suggest `/flow-feat-build`. Stop.
32
+ - **`size` `XS` or `S`** → warn that this phase does not apply (always 1 MR/PR), add `"plan:skipped"` to `phases_done`, suggest `/flow-feat-build` — `git.handoff_branch` set and not `unattended` → `/flow-work-handoff` in its place, **Hand off the study** recommended and **Build here** second where it asks (flow-core §2, a study made for handoff). Stop.
33
33
 
34
34
  ## 2. Work
35
35
 
@@ -163,5 +163,5 @@ A slice landing in **another repo** is not one of *this* repo's `mrs`: record it
163
163
 
164
164
  `∥` = no dependency between them, can be built in parallel or as a train; `→` = the next wave waits for the previous one to merge. Then the table with `#`, wave, `depends_on`, title and estimate. One line for the split rationale, and — when any pair was merged — one line saying how many were and what they would have cost (`merged #a into #b: would have been a wave of its own`). Nothing else — risks and discarded alternatives live in the artifact.
165
165
  - Changes requested → edit the artifact and `meta.json.mrs` before advancing.
166
- - Suggest `/flow-feat-build` to start the first MR/PR.
167
- - **Autonomy handoff.** Approving the split is a genuine decision point: in `manual` and `guided` ask before advancing. In `auto`, record the plan as accepted in `04-mr-plan.md` and **chain into `/flow-feat-build` automatically** in this same turn. In `manual`, propose it with a single `AskUserQuestion`.
166
+ - Suggest `/flow-feat-build` to start the first MR/PR — `git.handoff_branch` set and not `unattended` → `/flow-work-handoff` in its place, **Hand off the study** recommended and **Build here** second where it asks (flow-core §2, a study made for handoff).
167
+ - **Autonomy handoff.** Approving the split is a genuine decision point: in `manual` and `guided` ask before advancing. In `auto`, record the plan as accepted in `04-mr-plan.md` and **chain into `/flow-feat-build` automatically** in this same turn. In `manual`, propose it with a single `AskUserQuestion`. Either way: `git.handoff_branch` set and not `unattended` → `/flow-work-handoff` in its place, **Hand off the study** recommended and **Build here** second where it asks (flow-core §2, a study made for handoff).
@@ -307,5 +307,5 @@ Run `tracker.start_cmd` with `{TICKET}` = `meta.json.ticket`, `{ASSIGNEE}` = `tr
307
307
  ## 7. Close
308
308
 
309
309
  - Overwrite `00-summary.md` whole (≤15 lines, flow-core §5) — first written in §6; refresh it if §6.5 changed anything.
310
- - Report **following the stop header** (flow-core §3), branch added, body 2-3 lines: ticket, size, branch; recommended next command per the §4 table — in `guided`/`auto` you run it in this same turn, so there is no report and no question here: update the panel and chain (flow-core §3).
310
+ - Report **following the stop header** (flow-core §3), branch added, body 2-3 lines: ticket, size, branch; recommended next command per the §4 table (`build` on XS: `git.handoff_branch` set and not `unattended` → `/flow-work-handoff` in its place, **Hand off the study** recommended and **Build here** second where it asks (flow-core §2, a study made for handoff)) — in `guided`/`auto` you run it in this same turn, so there is no report and no question here: update the panel and chain (flow-core §3).
311
311
  - Apply `autonomy.mode`: `manual` → stop and let the user invoke the recommended command; `guided`/`auto` → chain into it, subject to the hard gates (the §5 branch-base ambiguity already stops on its own).
@@ -46,6 +46,10 @@ The builder can ask no one. Refuse — pushing nothing, naming every reason that
46
46
  - **A clarification is still open** — a question under "Decisions clarified at start" in
47
47
  `01-context.md` recorded without its answer.
48
48
 
49
+ Any refusal names the way on: finish what is missing, or **build here** (`/flow-feat-build` /
50
+ `/flow-bug-fix`) — a run that chained here (flow-core §2, a study made for handoff) must not end on
51
+ a dead end.
52
+
49
53
  Then, **before anything is pushed**: decisions this session settled while talking that no artifact
50
54
  records yet → write them where they belong now (`01-context.md` "Decisions clarified at start",
51
55
  `03-design.md` "Decisions (ADR-light)", `04-mr-plan.md`), and say which. What was decided only in
@@ -90,7 +90,7 @@ With what is new (there is already work on disk):
90
90
  ## 4. Next step
91
91
 
92
92
  - An `Unattended:` line → the question is the orchestrator's to bring back: say so, and that answering it here instead means clearing `meta.json.pending` and continuing in this session's mode; the next step itself comes from `phase` as always.
93
- - Suggest the concrete command from `phase` and `size`. Interrupted phase (e.g. `build` with an empty artifact) → suggest rerunning it with `/flow-feat-build` or `/flow-bug-fix`.
93
+ - Suggest the concrete command from `phase` and `size` — a study whose next step is `build` or `fix`: `git.handoff_branch` set and not `unattended` → `/flow-work-handoff` in its place, **Hand off the study** recommended and **Build here** second where it asks (flow-core §2, a study made for handoff). Interrupted phase (e.g. `build` with an empty artifact) → suggest rerunning it with `/flow-feat-build` or `/flow-bug-fix`.
94
94
  - §2.5 found something new → let it inform the suggestion (a contract that arrived after you left may mean rerunning `design` rather than continuing `build`); say why in one line.
95
95
  - `meta.json.related_repos` entries not `done` → remind that a **sibling repo still has a pending part** (`<repo>: <scope>`, plus `contract not handed over` when its `contract_handoff` is `pending`); suggest `/flow-feat-start <TICKET>` there. flow only reminds; it never scans or touches the other repo.
96
96
  - Do not advance on your own. The user decides.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "flow-workflows",
3
- "version": "0.87.0",
3
+ "version": "0.88.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.87.0",
6
+ "version": "0.88.0",
7
7
  "author": {
8
8
  "name": "Alberto Vioque",
9
9
  "email": "mashware@gmail.com"
@@ -5,6 +5,19 @@ 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.88.0 — A study made for handoff ends at the handoff, not at build · 2026-10-02
9
+
10
+ **In short**
11
+ - **With `git.handoff_branch` set, finishing a study leads to handing it off.** The plan, the design
12
+ of a small task, a bug's investigation, an XS start — and `resume` — point at
13
+ `/flow:work:handoff` instead of building here. In `manual` the question recommends **Hand off the
14
+ study** and keeps **Build here** second; `guided` and `auto` go on to the handoff by themselves,
15
+ whose push question is the only one added.
16
+ - **Pair the key with `autonomy.mode: auto`** and the whole study runs without launching each phase,
17
+ stopping only on a real doubt or a serious design finding, up to the push.
18
+ - **A refused handoff names the way on**, building here included.
19
+ - Nothing changes on the server (`unattended`) nor in repos without the key. Closes #189.
20
+
8
21
  ## v0.87.0 — A finished study is handed off from the laptop, and summarised in its ticket · 2026-10-01
9
22
 
10
23
  **In short**
@@ -87,7 +87,7 @@ Branch and Pull/Merge Request conventions.
87
87
  # - make database-update
88
88
  # - make frontend
89
89
 
90
- - `handoff_branch:` # branch `/flow:work:handoff` pushes a finished study to, holding only that work's folder. `{TICKET}` substituted. Empty = the command refuses: where a study goes is the receiver's convention. e.g. `study/{TICKET}`.
90
+ - `handoff_branch:` # branch `/flow:work:handoff` pushes a finished study to, holding only that work's folder. `{TICKET}` substituted. Empty = the command refuses: where a study goes is the receiver's convention. e.g. `study/{TICKET}`. Set → the study phases end at `/flow:work:handoff` instead of `build`/`fix` (not in `unattended`); pair it with `autonomy.mode: auto` and the study runs on its own up to the push.
91
91
 
92
92
  ## autonomy
93
93
  How much the flow advances on its own vs. stopping to ask you.