flow-workflows 0.95.0 → 0.95.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/adapters/codex/CORE.md +18 -2
- package/adapters/codex/skills/flow-bug-validate/SKILL.md +1 -1
- package/adapters/codex/skills/flow-feat-review/SKILL.md +1 -1
- package/adapters/codex/skills/flow-feat-validate/SKILL.md +1 -1
- package/adapters/gemini/CORE.md +18 -2
- package/adapters/gemini/commands/flow/bug/validate.toml +1 -1
- package/adapters/gemini/commands/flow/feat/review.toml +1 -1
- package/adapters/gemini/commands/flow/feat/validate.toml +1 -1
- package/adapters/hermes/CORE.md +18 -2
- package/adapters/hermes/skills/flow-bug-validate/SKILL.md +1 -1
- package/adapters/hermes/skills/flow-feat-review/SKILL.md +1 -1
- package/adapters/hermes/skills/flow-feat-validate/SKILL.md +1 -1
- package/adapters/opencode/CORE.md +18 -2
- package/adapters/opencode/commands/flow-bug-validate.md +1 -1
- package/adapters/opencode/commands/flow-feat-review.md +1 -1
- package/adapters/opencode/commands/flow-feat-validate.md +1 -1
- package/package.json +1 -1
- package/plugins/flow/.claude-plugin/plugin.json +1 -1
- package/plugins/flow/CHANGELOG.md +16 -0
package/adapters/codex/CORE.md
CHANGED
|
@@ -17,7 +17,7 @@ Every `$flow-*` command assumes these rules. They are stated once, here, so a co
|
|
|
17
17
|
carries what is specific to its phase. Read this once per session; a command that says "load
|
|
18
18
|
`flow-core`" means this file.
|
|
19
19
|
|
|
20
|
-
**This file belongs to flow `0.95.
|
|
20
|
+
**This file belongs to flow `0.95.1`.** 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
|
|
@@ -394,6 +394,7 @@ person asking for changes, a ticket that already has code — is `$flow-work-run
|
|
|
394
394
|
| An approved study's branch (`run`, `why = start`, no build or fix begun) | record — fast-forwarded to its base when it holds no commit of its own (`$flow-work-run` §2); the base unreadable or the fast-forward failing → blocked. Not integrating: nothing of the run's is merged |
|
|
395
395
|
| Integrating the base into the MR/PR's branch (`green`) | on `why = conflict`, record — `git merge origin/<base>` as the orchestrator left it, never rebase, each conflict resolved on its merits (`$flow-work-green` §5.C); on any other `why`, blocked — the orchestrator brings the base in |
|
|
396
396
|
| Any offer about the work's own bookkeeping — a tracker issue, the first `KNOWLEDGE.md` or a knowledge save, a FLOW convention, an agent lesson or a saved specialist, the follow-up survey, carrying files over from the main checkout, a contract handoff, archiving the work | record — `Later`; nothing written outside the work folder |
|
|
397
|
+
| A wait — a suite, a quality gate, anything run in the background (`validate`, `review`) | in the turn, on its condition, with a deadline (§6.5) — never a supervisor, never a fixed-length sleep, never ending the turn to be woken |
|
|
397
398
|
| A step the command cannot complete (a red suite it cannot fix, a tool missing, auth failing, the same check failing a second time) | blocked |
|
|
398
399
|
| Anything `auto` already decides on its own (size, flow mechanics, WIP commits, the next command) | as `auto` |
|
|
399
400
|
|
|
@@ -802,7 +803,7 @@ merge now. Delegating that judgement is how a pipeline ends up declared green by
|
|
|
802
803
|
cheapest to ask, which is the one thing `$flow-work-green` exists to forbid. Delegate the waiting
|
|
803
804
|
and the evidence; the verdict stays here.
|
|
804
805
|
|
|
805
|
-
**Then end the turn
|
|
806
|
+
**Then end the turn** — except in `unattended`, below. Dispatching a supervisor and staying in a poll loop of your own pays both
|
|
806
807
|
bills and saves nothing. What wakes you is whatever the harness offers — a background task that
|
|
807
808
|
re-invokes you when it finishes, a scheduled wake-up, a message back to this thread; where it offers
|
|
808
809
|
none, the supervisor's evidence file is read at your next stop, and **you say that** rather than
|
|
@@ -819,6 +820,21 @@ moving.
|
|
|
819
820
|
than to run — the brief, the round trip and the report are the whole of the saving. And anything you
|
|
820
821
|
must *react to* mid-wait is not a wait at all: it is the work, and it stays here.
|
|
821
822
|
|
|
823
|
+
**In `unattended`, the wait stays in the turn** (§2.1). Nobody can bring back a run whose turn
|
|
824
|
+
ended, and whether a headless harness re-invokes a run when its background task finishes is not
|
|
825
|
+
something the run can count on. So no supervisor and no ending the turn: the wait is sat through
|
|
826
|
+
here, on the condition it waits for, with a deadline —
|
|
827
|
+
|
|
828
|
+
- **In the foreground**, when the command fits the harness's own limit for one call.
|
|
829
|
+
- **Otherwise launched with its exit code written to a file**, then waited on by a loop that checks
|
|
830
|
+
for that file every few seconds and stops at the deadline — one tool call per stretch, each under
|
|
831
|
+
that same limit, repeated until the file appears or the deadline passes. The loop runs inside the
|
|
832
|
+
call, so its cycles cost nothing on this thread.
|
|
833
|
+
- **Never a fixed-length sleep.** A guessed duration pays the whole sleep when the suite finished in
|
|
834
|
+
a fraction of it, and wakes before the suite when the guess is short.
|
|
835
|
+
|
|
836
|
+
The deadline reached with nothing back → `blocked`, naming the command and how long it ran.
|
|
837
|
+
|
|
822
838
|
### 6.6 — Which agent a role resolves to
|
|
823
839
|
|
|
824
840
|
**The harness already tells you which agents are installed**, each with a line on what it is for,
|
|
@@ -41,7 +41,7 @@ Read `~/.claude/flow/CORE.codex.md` first (shared rules: `FLOW.md` step 0, model
|
|
|
41
41
|
|
|
42
42
|
Then:
|
|
43
43
|
1. Run only that test with `quality.test_one` from FLOW.md; it must pass.
|
|
44
|
-
2. Run the full suite with `quality.test` to rule out collateral regressions (in the background if slow; measured in tens of minutes → delegate it as a wait to a supervisor subagent on `models.supervisors`, flow-core §6.5 — it returns the exit code and the failing output, and the reading of them stays here).
|
|
44
|
+
2. Run the full suite with `quality.test` to rule out collateral regressions (in the background if slow — in `unattended`, waited on in this turn, flow-core §6.5; otherwise, measured in tens of minutes → delegate it as a wait to a supervisor subagent on `models.supervisors`, flow-core §6.5 — it returns the exit code and the failing output, and the reading of them stays here).
|
|
45
45
|
3. DB touched → verify the schema has no unexpected differences (`quality.db_update` or the FLOW.md equivalent, if defined; in `unattended` it is never run without an answer — a schema difference to apply is question
|
|
46
46
|
`migration`, flow-core §2.1; the orchestrator's *Apply it* relaunches this phase, this site takes the
|
|
47
47
|
answer just applied and runs it, and `05-validation.md` names that answer beside the migration).
|
|
@@ -302,7 +302,7 @@ Not run for XS/S, small diffs, or fewer than 4 ambiguous findings. When skipped,
|
|
|
302
302
|
|
|
303
303
|
Read `quality.*` from `FLOW.md`. Empty → auto-discover equivalent commands (Makefile, npm/composer scripts, Gradle, dotnet, Xcode, Flutter…) and note what you use.
|
|
304
304
|
|
|
305
|
-
Launch in parallel (background if slow):
|
|
305
|
+
Launch in parallel (background if slow; in `unattended`, waited on in this turn, flow-core §6.5):
|
|
306
306
|
- `quality.style_fix`
|
|
307
307
|
- `quality.static_analysis`
|
|
308
308
|
- `quality.test_one` (if there are new tests, with the appropriate filter)
|
|
@@ -46,7 +46,7 @@ One of the three below writes and two of them read, so they do not all go at onc
|
|
|
46
46
|
|
|
47
47
|
**A green suite is not a performance result** — a tiny fixture database proves a query's **rows**, never its **plan**. If `$flow-feat-review §3.6` left any query verdict `unresolved`, or an acceptance criterion concerns speed or volume: run the measurement of **`$flow-work-query §4`** with the volumes in `data.volumes` (or a data set shaped like them — the distribution matters more than the total), record plan and timings, and gate on the result. No `data.*` configuration and the criterion cannot be measured → it is `unproven` with the reason, never silently `proven`.
|
|
48
48
|
|
|
49
|
-
3. **Full suite**: run `quality.test` from `FLOW.md` in the background; if empty, auto-discover the project's test command and note what you use. **A suite measured in tens of minutes is a wait, not a step**: hand it to a supervisor subagent on `models.supervisors` (flow-core §6.5) — it runs it, times out, and brings back the exit code plus the failing tests' output, never a reading of whether those failures matter. Short suites stay here; delegating ninety seconds costs more than running them. A repo with more than one suite chains them in that one key (`make test && make test-frontend`); when it does not and the diff touches a suite the key misses, run that one too and say so in one line.
|
|
49
|
+
3. **Full suite**: run `quality.test` from `FLOW.md` in the background (in `unattended`, waited on in this turn, flow-core §6.5); if empty, auto-discover the project's test command and note what you use. **A suite measured in tens of minutes is a wait, not a step**: hand it to a supervisor subagent on `models.supervisors` (flow-core §6.5) — it runs it, times out, and brings back the exit code plus the failing tests' output, never a reading of whether those failures matter. Short suites stay here; delegating ninety seconds costs more than running them. A repo with more than one suite chains them in that one key (`make test && make test-frontend`); when it does not and the diff touches a suite the key misses, run that one too and say so in one line.
|
|
50
50
|
|
|
51
51
|
## 3. Criteria coverage (S and larger)
|
|
52
52
|
|
package/adapters/gemini/CORE.md
CHANGED
|
@@ -16,7 +16,7 @@ Every `/flow:*` command assumes these rules. They are stated once, here, so a co
|
|
|
16
16
|
carries what is specific to its phase. Read this once per session; a command that says "load
|
|
17
17
|
`flow-core`" means this file.
|
|
18
18
|
|
|
19
|
-
**This file belongs to flow `0.95.
|
|
19
|
+
**This file belongs to flow `0.95.1`.** 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
|
|
@@ -393,6 +393,7 @@ person asking for changes, a ticket that already has code — is `/flow:work:run
|
|
|
393
393
|
| An approved study's branch (`run`, `why = start`, no build or fix begun) | record — fast-forwarded to its base when it holds no commit of its own (`/flow:work:run` §2); the base unreadable or the fast-forward failing → blocked. Not integrating: nothing of the run's is merged |
|
|
394
394
|
| Integrating the base into the MR/PR's branch (`green`) | on `why = conflict`, record — `git merge origin/<base>` as the orchestrator left it, never rebase, each conflict resolved on its merits (`/flow:work:green` §5.C); on any other `why`, blocked — the orchestrator brings the base in |
|
|
395
395
|
| Any offer about the work's own bookkeeping — a tracker issue, the first `KNOWLEDGE.md` or a knowledge save, a FLOW convention, an agent lesson or a saved specialist, the follow-up survey, carrying files over from the main checkout, a contract handoff, archiving the work | record — `Later`; nothing written outside the work folder |
|
|
396
|
+
| A wait — a suite, a quality gate, anything run in the background (`validate`, `review`) | in the turn, on its condition, with a deadline (§6.5) — never a supervisor, never a fixed-length sleep, never ending the turn to be woken |
|
|
396
397
|
| A step the command cannot complete (a red suite it cannot fix, a tool missing, auth failing, the same check failing a second time) | blocked |
|
|
397
398
|
| Anything `auto` already decides on its own (size, flow mechanics, WIP commits, the next command) | as `auto` |
|
|
398
399
|
|
|
@@ -801,7 +802,7 @@ merge now. Delegating that judgement is how a pipeline ends up declared green by
|
|
|
801
802
|
cheapest to ask, which is the one thing `/flow:work:green` exists to forbid. Delegate the waiting
|
|
802
803
|
and the evidence; the verdict stays here.
|
|
803
804
|
|
|
804
|
-
**Then end the turn
|
|
805
|
+
**Then end the turn** — except in `unattended`, below. Dispatching a supervisor and staying in a poll loop of your own pays both
|
|
805
806
|
bills and saves nothing. What wakes you is whatever the harness offers — a background task that
|
|
806
807
|
re-invokes you when it finishes, a scheduled wake-up, a message back to this thread; where it offers
|
|
807
808
|
none, the supervisor's evidence file is read at your next stop, and **you say that** rather than
|
|
@@ -818,6 +819,21 @@ moving.
|
|
|
818
819
|
than to run — the brief, the round trip and the report are the whole of the saving. And anything you
|
|
819
820
|
must *react to* mid-wait is not a wait at all: it is the work, and it stays here.
|
|
820
821
|
|
|
822
|
+
**In `unattended`, the wait stays in the turn** (§2.1). Nobody can bring back a run whose turn
|
|
823
|
+
ended, and whether a headless harness re-invokes a run when its background task finishes is not
|
|
824
|
+
something the run can count on. So no supervisor and no ending the turn: the wait is sat through
|
|
825
|
+
here, on the condition it waits for, with a deadline —
|
|
826
|
+
|
|
827
|
+
- **In the foreground**, when the command fits the harness's own limit for one call.
|
|
828
|
+
- **Otherwise launched with its exit code written to a file**, then waited on by a loop that checks
|
|
829
|
+
for that file every few seconds and stops at the deadline — one tool call per stretch, each under
|
|
830
|
+
that same limit, repeated until the file appears or the deadline passes. The loop runs inside the
|
|
831
|
+
call, so its cycles cost nothing on this thread.
|
|
832
|
+
- **Never a fixed-length sleep.** A guessed duration pays the whole sleep when the suite finished in
|
|
833
|
+
a fraction of it, and wakes before the suite when the guess is short.
|
|
834
|
+
|
|
835
|
+
The deadline reached with nothing back → `blocked`, naming the command and how long it ran.
|
|
836
|
+
|
|
821
837
|
### 6.6 — Which agent a role resolves to
|
|
822
838
|
|
|
823
839
|
**The harness already tells you which agents are installed**, each with a line on what it is for,
|
|
@@ -37,7 +37,7 @@ Read `~/.claude/flow/CORE.gemini.md` first (shared rules: `FLOW.md` step 0, mode
|
|
|
37
37
|
|
|
38
38
|
Then:
|
|
39
39
|
1. Run only that test with `quality.test_one` from FLOW.md; it must pass.
|
|
40
|
-
2. Run the full suite with `quality.test` to rule out collateral regressions (in the background if slow; measured in tens of minutes → delegate it as a wait to a supervisor subagent on `models.supervisors`, flow-core §6.5 — it returns the exit code and the failing output, and the reading of them stays here).
|
|
40
|
+
2. Run the full suite with `quality.test` to rule out collateral regressions (in the background if slow — in `unattended`, waited on in this turn, flow-core §6.5; otherwise, measured in tens of minutes → delegate it as a wait to a supervisor subagent on `models.supervisors`, flow-core §6.5 — it returns the exit code and the failing output, and the reading of them stays here).
|
|
41
41
|
3. DB touched → verify the schema has no unexpected differences (`quality.db_update` or the FLOW.md equivalent, if defined; in `unattended` it is never run without an answer — a schema difference to apply is question
|
|
42
42
|
`migration`, flow-core §2.1; the orchestrator's *Apply it* relaunches this phase, this site takes the
|
|
43
43
|
answer just applied and runs it, and `05-validation.md` names that answer beside the migration).
|
|
@@ -298,7 +298,7 @@ Not run for XS/S, small diffs, or fewer than 4 ambiguous findings. When skipped,
|
|
|
298
298
|
|
|
299
299
|
Read `quality.*` from `FLOW.md`. Empty → auto-discover equivalent commands (Makefile, npm/composer scripts, Gradle, dotnet, Xcode, Flutter…) and note what you use.
|
|
300
300
|
|
|
301
|
-
Launch in parallel (background if slow):
|
|
301
|
+
Launch in parallel (background if slow; in `unattended`, waited on in this turn, flow-core §6.5):
|
|
302
302
|
- `quality.style_fix`
|
|
303
303
|
- `quality.static_analysis`
|
|
304
304
|
- `quality.test_one` (if there are new tests, with the appropriate filter)
|
|
@@ -42,7 +42,7 @@ One of the three below writes and two of them read, so they do not all go at onc
|
|
|
42
42
|
|
|
43
43
|
**A green suite is not a performance result** — a tiny fixture database proves a query's **rows**, never its **plan**. If `/flow:feat:review §3.6` left any query verdict `unresolved`, or an acceptance criterion concerns speed or volume: run the measurement of **`/flow:work:query §4`** with the volumes in `data.volumes` (or a data set shaped like them — the distribution matters more than the total), record plan and timings, and gate on the result. No `data.*` configuration and the criterion cannot be measured → it is `unproven` with the reason, never silently `proven`.
|
|
44
44
|
|
|
45
|
-
3. **Full suite**: run `quality.test` from `FLOW.md` in the background; if empty, auto-discover the project's test command and note what you use. **A suite measured in tens of minutes is a wait, not a step**: hand it to a supervisor subagent on `models.supervisors` (flow-core §6.5) — it runs it, times out, and brings back the exit code plus the failing tests' output, never a reading of whether those failures matter. Short suites stay here; delegating ninety seconds costs more than running them. A repo with more than one suite chains them in that one key (`make test && make test-frontend`); when it does not and the diff touches a suite the key misses, run that one too and say so in one line.
|
|
45
|
+
3. **Full suite**: run `quality.test` from `FLOW.md` in the background (in `unattended`, waited on in this turn, flow-core §6.5); if empty, auto-discover the project's test command and note what you use. **A suite measured in tens of minutes is a wait, not a step**: hand it to a supervisor subagent on `models.supervisors` (flow-core §6.5) — it runs it, times out, and brings back the exit code plus the failing tests' output, never a reading of whether those failures matter. Short suites stay here; delegating ninety seconds costs more than running them. A repo with more than one suite chains them in that one key (`make test && make test-frontend`); when it does not and the diff touches a suite the key misses, run that one too and say so in one line.
|
|
46
46
|
|
|
47
47
|
## 3. Criteria coverage (S and larger)
|
|
48
48
|
|
package/adapters/hermes/CORE.md
CHANGED
|
@@ -17,7 +17,7 @@ Every `/flow-*` command assumes these rules. They are stated once, here, so a co
|
|
|
17
17
|
carries what is specific to its phase. Read this once per session; a command that says "load
|
|
18
18
|
`flow-core`" means this file.
|
|
19
19
|
|
|
20
|
-
**This file belongs to flow `0.95.
|
|
20
|
+
**This file belongs to flow `0.95.1`.** 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
|
|
@@ -394,6 +394,7 @@ person asking for changes, a ticket that already has code — is `/flow-work-run
|
|
|
394
394
|
| An approved study's branch (`run`, `why = start`, no build or fix begun) | record — fast-forwarded to its base when it holds no commit of its own (`/flow-work-run` §2); the base unreadable or the fast-forward failing → blocked. Not integrating: nothing of the run's is merged |
|
|
395
395
|
| Integrating the base into the MR/PR's branch (`green`) | on `why = conflict`, record — `git merge origin/<base>` as the orchestrator left it, never rebase, each conflict resolved on its merits (`/flow-work-green` §5.C); on any other `why`, blocked — the orchestrator brings the base in |
|
|
396
396
|
| Any offer about the work's own bookkeeping — a tracker issue, the first `KNOWLEDGE.md` or a knowledge save, a FLOW convention, an agent lesson or a saved specialist, the follow-up survey, carrying files over from the main checkout, a contract handoff, archiving the work | record — `Later`; nothing written outside the work folder |
|
|
397
|
+
| A wait — a suite, a quality gate, anything run in the background (`validate`, `review`) | in the turn, on its condition, with a deadline (§6.5) — never a supervisor, never a fixed-length sleep, never ending the turn to be woken |
|
|
397
398
|
| A step the command cannot complete (a red suite it cannot fix, a tool missing, auth failing, the same check failing a second time) | blocked |
|
|
398
399
|
| Anything `auto` already decides on its own (size, flow mechanics, WIP commits, the next command) | as `auto` |
|
|
399
400
|
|
|
@@ -802,7 +803,7 @@ merge now. Delegating that judgement is how a pipeline ends up declared green by
|
|
|
802
803
|
cheapest to ask, which is the one thing `/flow-work-green` exists to forbid. Delegate the waiting
|
|
803
804
|
and the evidence; the verdict stays here.
|
|
804
805
|
|
|
805
|
-
**Then end the turn
|
|
806
|
+
**Then end the turn** — except in `unattended`, below. Dispatching a supervisor and staying in a poll loop of your own pays both
|
|
806
807
|
bills and saves nothing. What wakes you is whatever the harness offers — a background task that
|
|
807
808
|
re-invokes you when it finishes, a scheduled wake-up, a message back to this thread; where it offers
|
|
808
809
|
none, the supervisor's evidence file is read at your next stop, and **you say that** rather than
|
|
@@ -819,6 +820,21 @@ moving.
|
|
|
819
820
|
than to run — the brief, the round trip and the report are the whole of the saving. And anything you
|
|
820
821
|
must *react to* mid-wait is not a wait at all: it is the work, and it stays here.
|
|
821
822
|
|
|
823
|
+
**In `unattended`, the wait stays in the turn** (§2.1). Nobody can bring back a run whose turn
|
|
824
|
+
ended, and whether a headless harness re-invokes a run when its background task finishes is not
|
|
825
|
+
something the run can count on. So no supervisor and no ending the turn: the wait is sat through
|
|
826
|
+
here, on the condition it waits for, with a deadline —
|
|
827
|
+
|
|
828
|
+
- **In the foreground**, when the command fits the harness's own limit for one call.
|
|
829
|
+
- **Otherwise launched with its exit code written to a file**, then waited on by a loop that checks
|
|
830
|
+
for that file every few seconds and stops at the deadline — one tool call per stretch, each under
|
|
831
|
+
that same limit, repeated until the file appears or the deadline passes. The loop runs inside the
|
|
832
|
+
call, so its cycles cost nothing on this thread.
|
|
833
|
+
- **Never a fixed-length sleep.** A guessed duration pays the whole sleep when the suite finished in
|
|
834
|
+
a fraction of it, and wakes before the suite when the guess is short.
|
|
835
|
+
|
|
836
|
+
The deadline reached with nothing back → `blocked`, naming the command and how long it ran.
|
|
837
|
+
|
|
822
838
|
### 6.6 — Which agent a role resolves to
|
|
823
839
|
|
|
824
840
|
**The harness already tells you which agents are installed**, each with a line on what it is for,
|
|
@@ -41,7 +41,7 @@ Read `~/.claude/flow/CORE.hermes.md` first (shared rules: `FLOW.md` step 0, mode
|
|
|
41
41
|
|
|
42
42
|
Then:
|
|
43
43
|
1. Run only that test with `quality.test_one` from FLOW.md; it must pass.
|
|
44
|
-
2. Run the full suite with `quality.test` to rule out collateral regressions (in the background if slow; measured in tens of minutes → delegate it as a wait to a supervisor subagent on `models.supervisors`, flow-core §6.5 — it returns the exit code and the failing output, and the reading of them stays here).
|
|
44
|
+
2. Run the full suite with `quality.test` to rule out collateral regressions (in the background if slow — in `unattended`, waited on in this turn, flow-core §6.5; otherwise, measured in tens of minutes → delegate it as a wait to a supervisor subagent on `models.supervisors`, flow-core §6.5 — it returns the exit code and the failing output, and the reading of them stays here).
|
|
45
45
|
3. DB touched → verify the schema has no unexpected differences (`quality.db_update` or the FLOW.md equivalent, if defined; in `unattended` it is never run without an answer — a schema difference to apply is question
|
|
46
46
|
`migration`, flow-core §2.1; the orchestrator's *Apply it* relaunches this phase, this site takes the
|
|
47
47
|
answer just applied and runs it, and `05-validation.md` names that answer beside the migration).
|
|
@@ -302,7 +302,7 @@ Not run for XS/S, small diffs, or fewer than 4 ambiguous findings. When skipped,
|
|
|
302
302
|
|
|
303
303
|
Read `quality.*` from `FLOW.md`. Empty → auto-discover equivalent commands (Makefile, npm/composer scripts, Gradle, dotnet, Xcode, Flutter…) and note what you use.
|
|
304
304
|
|
|
305
|
-
Launch in parallel (background if slow):
|
|
305
|
+
Launch in parallel (background if slow; in `unattended`, waited on in this turn, flow-core §6.5):
|
|
306
306
|
- `quality.style_fix`
|
|
307
307
|
- `quality.static_analysis`
|
|
308
308
|
- `quality.test_one` (if there are new tests, with the appropriate filter)
|
|
@@ -46,7 +46,7 @@ One of the three below writes and two of them read, so they do not all go at onc
|
|
|
46
46
|
|
|
47
47
|
**A green suite is not a performance result** — a tiny fixture database proves a query's **rows**, never its **plan**. If `/flow-feat-review §3.6` left any query verdict `unresolved`, or an acceptance criterion concerns speed or volume: run the measurement of **`/flow-work-query §4`** with the volumes in `data.volumes` (or a data set shaped like them — the distribution matters more than the total), record plan and timings, and gate on the result. No `data.*` configuration and the criterion cannot be measured → it is `unproven` with the reason, never silently `proven`.
|
|
48
48
|
|
|
49
|
-
3. **Full suite**: run `quality.test` from `FLOW.md` in the background; if empty, auto-discover the project's test command and note what you use. **A suite measured in tens of minutes is a wait, not a step**: hand it to a supervisor subagent on `models.supervisors` (flow-core §6.5) — it runs it, times out, and brings back the exit code plus the failing tests' output, never a reading of whether those failures matter. Short suites stay here; delegating ninety seconds costs more than running them. A repo with more than one suite chains them in that one key (`make test && make test-frontend`); when it does not and the diff touches a suite the key misses, run that one too and say so in one line.
|
|
49
|
+
3. **Full suite**: run `quality.test` from `FLOW.md` in the background (in `unattended`, waited on in this turn, flow-core §6.5); if empty, auto-discover the project's test command and note what you use. **A suite measured in tens of minutes is a wait, not a step**: hand it to a supervisor subagent on `models.supervisors` (flow-core §6.5) — it runs it, times out, and brings back the exit code plus the failing tests' output, never a reading of whether those failures matter. Short suites stay here; delegating ninety seconds costs more than running them. A repo with more than one suite chains them in that one key (`make test && make test-frontend`); when it does not and the diff touches a suite the key misses, run that one too and say so in one line.
|
|
50
50
|
|
|
51
51
|
## 3. Criteria coverage (S and larger)
|
|
52
52
|
|
|
@@ -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.95.
|
|
19
|
+
**This file belongs to flow `0.95.1`.** 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
|
|
@@ -393,6 +393,7 @@ person asking for changes, a ticket that already has code — is `/flow-work-run
|
|
|
393
393
|
| An approved study's branch (`run`, `why = start`, no build or fix begun) | record — fast-forwarded to its base when it holds no commit of its own (`/flow-work-run` §2); the base unreadable or the fast-forward failing → blocked. Not integrating: nothing of the run's is merged |
|
|
394
394
|
| Integrating the base into the MR/PR's branch (`green`) | on `why = conflict`, record — `git merge origin/<base>` as the orchestrator left it, never rebase, each conflict resolved on its merits (`/flow-work-green` §5.C); on any other `why`, blocked — the orchestrator brings the base in |
|
|
395
395
|
| Any offer about the work's own bookkeeping — a tracker issue, the first `KNOWLEDGE.md` or a knowledge save, a FLOW convention, an agent lesson or a saved specialist, the follow-up survey, carrying files over from the main checkout, a contract handoff, archiving the work | record — `Later`; nothing written outside the work folder |
|
|
396
|
+
| A wait — a suite, a quality gate, anything run in the background (`validate`, `review`) | in the turn, on its condition, with a deadline (§6.5) — never a supervisor, never a fixed-length sleep, never ending the turn to be woken |
|
|
396
397
|
| A step the command cannot complete (a red suite it cannot fix, a tool missing, auth failing, the same check failing a second time) | blocked |
|
|
397
398
|
| Anything `auto` already decides on its own (size, flow mechanics, WIP commits, the next command) | as `auto` |
|
|
398
399
|
|
|
@@ -801,7 +802,7 @@ merge now. Delegating that judgement is how a pipeline ends up declared green by
|
|
|
801
802
|
cheapest to ask, which is the one thing `/flow-work-green` exists to forbid. Delegate the waiting
|
|
802
803
|
and the evidence; the verdict stays here.
|
|
803
804
|
|
|
804
|
-
**Then end the turn
|
|
805
|
+
**Then end the turn** — except in `unattended`, below. Dispatching a supervisor and staying in a poll loop of your own pays both
|
|
805
806
|
bills and saves nothing. What wakes you is whatever the harness offers — a background task that
|
|
806
807
|
re-invokes you when it finishes, a scheduled wake-up, a message back to this thread; where it offers
|
|
807
808
|
none, the supervisor's evidence file is read at your next stop, and **you say that** rather than
|
|
@@ -818,6 +819,21 @@ moving.
|
|
|
818
819
|
than to run — the brief, the round trip and the report are the whole of the saving. And anything you
|
|
819
820
|
must *react to* mid-wait is not a wait at all: it is the work, and it stays here.
|
|
820
821
|
|
|
822
|
+
**In `unattended`, the wait stays in the turn** (§2.1). Nobody can bring back a run whose turn
|
|
823
|
+
ended, and whether a headless harness re-invokes a run when its background task finishes is not
|
|
824
|
+
something the run can count on. So no supervisor and no ending the turn: the wait is sat through
|
|
825
|
+
here, on the condition it waits for, with a deadline —
|
|
826
|
+
|
|
827
|
+
- **In the foreground**, when the command fits the harness's own limit for one call.
|
|
828
|
+
- **Otherwise launched with its exit code written to a file**, then waited on by a loop that checks
|
|
829
|
+
for that file every few seconds and stops at the deadline — one tool call per stretch, each under
|
|
830
|
+
that same limit, repeated until the file appears or the deadline passes. The loop runs inside the
|
|
831
|
+
call, so its cycles cost nothing on this thread.
|
|
832
|
+
- **Never a fixed-length sleep.** A guessed duration pays the whole sleep when the suite finished in
|
|
833
|
+
a fraction of it, and wakes before the suite when the guess is short.
|
|
834
|
+
|
|
835
|
+
The deadline reached with nothing back → `blocked`, naming the command and how long it ran.
|
|
836
|
+
|
|
821
837
|
### 6.6 — Which agent a role resolves to
|
|
822
838
|
|
|
823
839
|
**The harness already tells you which agents are installed**, each with a line on what it is for,
|
|
@@ -39,7 +39,7 @@ Read `~/.claude/flow/CORE.opencode.md` first (shared rules: `FLOW.md` step 0, mo
|
|
|
39
39
|
|
|
40
40
|
Then:
|
|
41
41
|
1. Run only that test with `quality.test_one` from FLOW.md; it must pass.
|
|
42
|
-
2. Run the full suite with `quality.test` to rule out collateral regressions (in the background if slow; measured in tens of minutes → delegate it as a wait to a supervisor subagent on `models.supervisors`, flow-core §6.5 — it returns the exit code and the failing output, and the reading of them stays here).
|
|
42
|
+
2. Run the full suite with `quality.test` to rule out collateral regressions (in the background if slow — in `unattended`, waited on in this turn, flow-core §6.5; otherwise, measured in tens of minutes → delegate it as a wait to a supervisor subagent on `models.supervisors`, flow-core §6.5 — it returns the exit code and the failing output, and the reading of them stays here).
|
|
43
43
|
3. DB touched → verify the schema has no unexpected differences (`quality.db_update` or the FLOW.md equivalent, if defined; in `unattended` it is never run without an answer — a schema difference to apply is question
|
|
44
44
|
`migration`, flow-core §2.1; the orchestrator's *Apply it* relaunches this phase, this site takes the
|
|
45
45
|
answer just applied and runs it, and `05-validation.md` names that answer beside the migration).
|
|
@@ -300,7 +300,7 @@ Not run for XS/S, small diffs, or fewer than 4 ambiguous findings. When skipped,
|
|
|
300
300
|
|
|
301
301
|
Read `quality.*` from `FLOW.md`. Empty → auto-discover equivalent commands (Makefile, npm/composer scripts, Gradle, dotnet, Xcode, Flutter…) and note what you use.
|
|
302
302
|
|
|
303
|
-
Launch in parallel (background if slow):
|
|
303
|
+
Launch in parallel (background if slow; in `unattended`, waited on in this turn, flow-core §6.5):
|
|
304
304
|
- `quality.style_fix`
|
|
305
305
|
- `quality.static_analysis`
|
|
306
306
|
- `quality.test_one` (if there are new tests, with the appropriate filter)
|
|
@@ -44,7 +44,7 @@ One of the three below writes and two of them read, so they do not all go at onc
|
|
|
44
44
|
|
|
45
45
|
**A green suite is not a performance result** — a tiny fixture database proves a query's **rows**, never its **plan**. If `/flow-feat-review §3.6` left any query verdict `unresolved`, or an acceptance criterion concerns speed or volume: run the measurement of **`/flow-work-query §4`** with the volumes in `data.volumes` (or a data set shaped like them — the distribution matters more than the total), record plan and timings, and gate on the result. No `data.*` configuration and the criterion cannot be measured → it is `unproven` with the reason, never silently `proven`.
|
|
46
46
|
|
|
47
|
-
3. **Full suite**: run `quality.test` from `FLOW.md` in the background; if empty, auto-discover the project's test command and note what you use. **A suite measured in tens of minutes is a wait, not a step**: hand it to a supervisor subagent on `models.supervisors` (flow-core §6.5) — it runs it, times out, and brings back the exit code plus the failing tests' output, never a reading of whether those failures matter. Short suites stay here; delegating ninety seconds costs more than running them. A repo with more than one suite chains them in that one key (`make test && make test-frontend`); when it does not and the diff touches a suite the key misses, run that one too and say so in one line.
|
|
47
|
+
3. **Full suite**: run `quality.test` from `FLOW.md` in the background (in `unattended`, waited on in this turn, flow-core §6.5); if empty, auto-discover the project's test command and note what you use. **A suite measured in tens of minutes is a wait, not a step**: hand it to a supervisor subagent on `models.supervisors` (flow-core §6.5) — it runs it, times out, and brings back the exit code plus the failing tests' output, never a reading of whether those failures matter. Short suites stay here; delegating ninety seconds costs more than running them. A repo with more than one suite chains them in that one key (`make test && make test-frontend`); when it does not and the diff touches a suite the key misses, run that one too and say so in one line.
|
|
48
48
|
|
|
49
49
|
## 3. Criteria coverage (S and larger)
|
|
50
50
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "flow-workflows",
|
|
3
|
-
"version": "0.95.
|
|
3
|
+
"version": "0.95.1",
|
|
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.95.
|
|
6
|
+
"version": "0.95.1",
|
|
7
7
|
"author": {
|
|
8
8
|
"name": "Alberto Vioque",
|
|
9
9
|
"email": "mashware@gmail.com"
|
|
@@ -5,6 +5,22 @@ 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.95.1 — An unattended run waits for its tests instead of sleeping a guess · 2026-10-15
|
|
9
|
+
|
|
10
|
+
**In short**
|
|
11
|
+
- **In `unattended`, a wait happens in the turn.** A suite or a quality gate run in the background
|
|
12
|
+
is waited on by a loop that ends when it finishes, with a deadline. No supervisor, and the turn
|
|
13
|
+
does not end to be woken.
|
|
14
|
+
- **Never a fixed-length sleep.** Unattended runs were guessing one — seven minutes for a suite
|
|
15
|
+
that took three — and losing up to half an hour per run.
|
|
16
|
+
- Nothing changes outside `unattended`.
|
|
17
|
+
|
|
18
|
+
The rule for waits told every run to hand the wait off and end the turn, trusting the harness to
|
|
19
|
+
wake it. A headless run cannot rely on that, so the model kept itself alive with a sleep of its
|
|
20
|
+
own choosing. flow-core §6.5 now says how an unattended run waits, the §2.1 table names the case,
|
|
21
|
+
and `validate` and `review` point to it where they launch something in the background. The
|
|
22
|
+
deadline reached with nothing back ends the run as `blocked`.
|
|
23
|
+
|
|
8
24
|
## v0.95.0 — One repo can study some works for handoff and build others here · 2026-10-15
|
|
9
25
|
|
|
10
26
|
**In short**
|