flow-workflows 0.94.1 → 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 +29 -11
- package/adapters/codex/skills/flow-bug-investigate/SKILL.md +3 -3
- package/adapters/codex/skills/flow-bug-start/SKILL.md +6 -3
- package/adapters/codex/skills/flow-bug-validate/SKILL.md +1 -1
- package/adapters/codex/skills/flow-feat-design/SKILL.md +3 -3
- package/adapters/codex/skills/flow-feat-plan/SKILL.md +3 -3
- package/adapters/codex/skills/flow-feat-review/SKILL.md +1 -1
- package/adapters/codex/skills/flow-feat-start/SKILL.md +6 -3
- package/adapters/codex/skills/flow-feat-validate/SKILL.md +1 -1
- package/adapters/codex/skills/flow-work-README/SKILL.md +1 -1
- package/adapters/codex/skills/flow-work-resume/SKILL.md +1 -1
- package/adapters/gemini/CORE.md +29 -11
- package/adapters/gemini/commands/flow/bug/investigate.toml +3 -3
- package/adapters/gemini/commands/flow/bug/start.toml +6 -3
- package/adapters/gemini/commands/flow/bug/validate.toml +1 -1
- package/adapters/gemini/commands/flow/feat/design.toml +3 -3
- package/adapters/gemini/commands/flow/feat/plan.toml +3 -3
- package/adapters/gemini/commands/flow/feat/review.toml +1 -1
- package/adapters/gemini/commands/flow/feat/start.toml +6 -3
- package/adapters/gemini/commands/flow/feat/validate.toml +1 -1
- package/adapters/gemini/commands/flow/work/README.toml +1 -1
- package/adapters/gemini/commands/flow/work/resume.toml +1 -1
- package/adapters/hermes/CORE.md +29 -11
- package/adapters/hermes/skills/flow-bug-investigate/SKILL.md +3 -3
- package/adapters/hermes/skills/flow-bug-start/SKILL.md +6 -3
- package/adapters/hermes/skills/flow-bug-validate/SKILL.md +1 -1
- package/adapters/hermes/skills/flow-feat-design/SKILL.md +3 -3
- package/adapters/hermes/skills/flow-feat-plan/SKILL.md +3 -3
- package/adapters/hermes/skills/flow-feat-review/SKILL.md +1 -1
- package/adapters/hermes/skills/flow-feat-start/SKILL.md +6 -3
- package/adapters/hermes/skills/flow-feat-validate/SKILL.md +1 -1
- package/adapters/hermes/skills/flow-work-README/SKILL.md +1 -1
- package/adapters/hermes/skills/flow-work-resume/SKILL.md +1 -1
- package/adapters/opencode/CORE.md +29 -11
- package/adapters/opencode/commands/flow-bug-investigate.md +3 -3
- package/adapters/opencode/commands/flow-bug-start.md +6 -3
- package/adapters/opencode/commands/flow-bug-validate.md +1 -1
- package/adapters/opencode/commands/flow-feat-design.md +3 -3
- package/adapters/opencode/commands/flow-feat-plan.md +3 -3
- package/adapters/opencode/commands/flow-feat-review.md +1 -1
- package/adapters/opencode/commands/flow-feat-start.md +6 -3
- package/adapters/opencode/commands/flow-feat-validate.md +1 -1
- package/adapters/opencode/commands/flow-work-README.md +1 -1
- package/adapters/opencode/commands/flow-work-resume.md +1 -1
- package/package.json +1 -1
- package/plugins/flow/.claude-plugin/plugin.json +1 -1
- package/plugins/flow/CHANGELOG.md +32 -0
- package/plugins/flow/examples/FLOW.template.md +1 -1
|
@@ -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
|
|
|
@@ -254,7 +254,7 @@ Two signals arrive on an open MR/PR, each with its own cross-cutting loop (feat
|
|
|
254
254
|
- `/flow-work-daily [question]` — the **work assistant** (daily standup), read-only. **Local** (`.claude/work/` + git) + **forge** (open MRs/PRs, reviews awaiting you, red CI, unmergeable, unresolved threads via `git.cli`) + **tracker** (assigned tickets, priority changes via `tracker.tool`); where they cross, concrete commands (`/flow-feat-start`, `/flow-work-green`, `/flow-work-respond`). No argument → *yesterday · today · blockers*; a question → just that. External sources best-effort, never blocking; the only write is a "last seen" marker, like `/flow-news`.
|
|
255
255
|
- `/flow-work-status` — all works in `.claude/work/`, current phase, divergence with git.
|
|
256
256
|
- `/flow-work-run [ticket]` — the **entry an orchestrator launches** for an `unattended` run: asks it `why` (start · study · answer · merged · review · pipeline), routes to the phase that answers it — a `study` run stops at the door to code with a summary for a person to approve — and makes no decision of its own. Refuses to run in any other mode.
|
|
257
|
-
- `/flow-work-handoff` — hands a **finished study** to whoever builds it elsewhere (an unattended server, another machine): refuses an unfinished one, pushes only this work's folder as a parentless commit to `git.handoff_branch` without touching the checkout, asks before the push, then offers a marked summary for the ticket body (`tracker.edit_cmd`).
|
|
257
|
+
- `/flow-work-handoff` — hands a **finished study** to whoever builds it elsewhere (an unattended server, another machine): refuses an unfinished one, pushes only this work's folder as a parentless commit to `git.handoff_branch` without touching the checkout, asks before the push, then offers a marked summary for the ticket body (`tracker.edit_cmd`). A work started with `/flow-feat-start --study` (or `/flow-bug-start --study`) ends its study here on its own; one started without the flag is built here, even with the key set.
|
|
258
258
|
- `/flow-work-resume` — detects the branch, reads `meta.json`, recaps, suggests the next step. **Re-reads the ticket's comment thread** (§2.5), reports only what is new since `01-context.md`, appends it to the artifact; never amends the design on its own.
|
|
259
259
|
- `/flow-work-try <branch>` / `/flow-work-try --back` — point the main checkout at a branch to test it here, then return; re-syncs per `git.worktree_resync`. Resolves the work behind the branch and, once the environment is up, **prints the manual test plan already written** (the `needs-manual`/`unproven` criteria, or the acceptance criteria when `validate` has not run) and offers to collect Pass/Fail/Blocked into the validation artifact. No work behind the branch → the plain switch, as before.
|
|
260
260
|
- `/flow-work-clean [--dry-run]` — **periodic sweep** of finished work's residue: worktree, local branch, `.claude/work/` folder (intermediate train MR/PRs never set `phase: done`, so the `ship`/`abandon` prompt never fires). Verdict per branch from **the forge** with local fallbacks, including patch-equivalence for **squash merges** (`git branch --merged` misses them); acts only on `merged`/`empty`. `unknown` never a candidate; dirty and unpushed protected; work folders **archived, never deleted**; remote never touched. **`autonomy.mode` does not authorize deletion**: `auto` confirms the list too. `--purge-archive <N>d`: separate opt-in pass over `_archive/`, only folders already committed to git.
|
|
@@ -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` — a study whose next step is `build` or `fix`: `
|
|
93
|
+
- Suggest the concrete command from `phase` and `size` — a study whose next step is `build` or `fix`: `meta.json.handoff` 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.
|
|
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.
|
|
6
|
+
"version": "0.95.1",
|
|
7
7
|
"author": {
|
|
8
8
|
"name": "Alberto Vioque",
|
|
9
9
|
"email": "mashware@gmail.com"
|
|
@@ -5,6 +5,38 @@ 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
|
+
|
|
24
|
+
## v0.95.0 — One repo can study some works for handoff and build others here · 2026-10-15
|
|
25
|
+
|
|
26
|
+
**In short**
|
|
27
|
+
- **`--study` on `/flow:feat:start` and `/flow:bug:start`** makes a work a study for someone else to
|
|
28
|
+
build: its last study phase hands it to `/flow:work:handoff`, as the key alone did until now.
|
|
29
|
+
- **Without the flag, a work is built here**, even in a repo with `git.handoff_branch` set. The key
|
|
30
|
+
only says where a study is pushed.
|
|
31
|
+
- **Change in behaviour:** a repo that set the key to send every study off now passes `--study` on
|
|
32
|
+
the works it hands off. Nothing changes in `unattended`.
|
|
33
|
+
|
|
34
|
+
The key was repo-wide, so a repo whose tickets are sometimes studied for a server and sometimes
|
|
35
|
+
built on the laptop had no way to say "build this one here": in `auto` every plan chained into the
|
|
36
|
+
handoff. The choice now belongs to the work. `start` records it as `meta.json.handoff`, and `design`,
|
|
37
|
+
`plan`, `investigate` and `resume` read the field instead of the key. `--study` with the key empty
|
|
38
|
+
says so in one line and goes on as a work built here.
|
|
39
|
+
|
|
8
40
|
## v0.94.1 — An unattended start with a study no longer stops because the container cannot fetch · 2026-10-14
|
|
9
41
|
|
|
10
42
|
**In short**
|
|
@@ -96,7 +96,7 @@ Branch and Pull/Merge Request conventions.
|
|
|
96
96
|
# - make database-update
|
|
97
97
|
# - make frontend
|
|
98
98
|
|
|
99
|
-
- `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}`.
|
|
99
|
+
- `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}`. It does not decide which works are studies: a work started with `--study` (`/flow:feat:start`, `/flow:bug:start`) ends its study phases at `/flow:work:handoff` instead of `build`/`fix` (not in `unattended`), one started without it is built here. Pair it with `autonomy.mode: auto` and a `--study` work runs on its own up to the push.
|
|
100
100
|
|
|
101
101
|
## autonomy
|
|
102
102
|
How much the flow advances on its own vs. stopping to ask you.
|