flow-workflows 0.67.0 → 0.69.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.
- package/README.md +1 -0
- package/adapters/codex/CORE.md +65 -5
- package/adapters/codex/skills/flow-bug-ship/SKILL.md +3 -1
- package/adapters/codex/skills/flow-bug-validate/SKILL.md +2 -2
- package/adapters/codex/skills/flow-doctor/SKILL.md +11 -5
- package/adapters/codex/skills/flow-feat-ship/SKILL.md +3 -1
- package/adapters/codex/skills/flow-feat-validate/SKILL.md +2 -2
- package/adapters/codex/skills/flow-work-green/SKILL.md +3 -3
- package/adapters/codex/skills/flow-work-watch/SKILL.md +2 -2
- package/adapters/gemini/CORE.md +65 -5
- package/adapters/gemini/commands/flow/bug/ship.toml +3 -1
- package/adapters/gemini/commands/flow/bug/validate.toml +2 -2
- package/adapters/gemini/commands/flow/doctor.toml +11 -5
- package/adapters/gemini/commands/flow/feat/ship.toml +3 -1
- package/adapters/gemini/commands/flow/feat/validate.toml +2 -2
- package/adapters/gemini/commands/flow/work/green.toml +3 -3
- package/adapters/gemini/commands/flow/work/watch.toml +2 -2
- package/adapters/hermes/CORE.md +65 -5
- package/adapters/hermes/skills/flow-bug-ship/SKILL.md +3 -1
- package/adapters/hermes/skills/flow-bug-validate/SKILL.md +2 -2
- package/adapters/hermes/skills/flow-doctor/SKILL.md +11 -5
- package/adapters/hermes/skills/flow-feat-ship/SKILL.md +3 -1
- package/adapters/hermes/skills/flow-feat-validate/SKILL.md +2 -2
- package/adapters/hermes/skills/flow-work-green/SKILL.md +3 -3
- package/adapters/hermes/skills/flow-work-watch/SKILL.md +2 -2
- package/adapters/opencode/CORE.md +65 -5
- package/adapters/opencode/commands/flow-bug-ship.md +3 -1
- package/adapters/opencode/commands/flow-bug-validate.md +2 -2
- package/adapters/opencode/commands/flow-doctor.md +11 -5
- package/adapters/opencode/commands/flow-feat-ship.md +3 -1
- package/adapters/opencode/commands/flow-feat-validate.md +2 -2
- package/adapters/opencode/commands/flow-work-green.md +3 -3
- package/adapters/opencode/commands/flow-work-watch.md +2 -2
- package/bin/cli.mjs +15 -0
- package/package.json +1 -1
- package/plugins/flow/.claude-plugin/plugin.json +1 -1
- package/plugins/flow/CHANGELOG.md +58 -0
- package/plugins/flow/examples/FLOW.template.md +14 -6
|
@@ -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.69.0",
|
|
7
7
|
"author": {
|
|
8
8
|
"name": "Alberto Vioque",
|
|
9
9
|
"email": "mashware@gmail.com"
|
|
@@ -5,6 +5,64 @@ 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.69.0 — Waiting on the pipeline was paid for at the main thread's price · 2026-09-21
|
|
9
|
+
|
|
10
|
+
**In short**
|
|
11
|
+
- **A wait is delegated now, not sat through.** A running pipeline, a deploy that has not landed and a suite measured in tens of minutes go to one supervisor subagent with an interval, a deadline and every terminal state; this thread ends its turn instead of polling.
|
|
12
|
+
- **What comes back is evidence, never a verdict** — failing job names, exit codes, the log tail, the run URL, the SHA it watched. Whether a red job is flaky, whether a threshold is close enough, whether the branch can merge is still decided on the main thread.
|
|
13
|
+
- **`models.supervisors`** names the model for it, falling back to `models.agents` and then to inheritance. An empty section behaves exactly as before, and the dispatch says in one line that the wait inherits this thread's model — an unattended wait is where an unpriced default runs longest.
|
|
14
|
+
- **Applied where the flow actually waits**: `/flow:work:green` §2.3 and its re-trigger, `/flow:work:watch` §1, both `validate` commands for a long suite, and both `ship` commands for the pipeline the push starts.
|
|
15
|
+
- **Delegating a wait is mechanics**, so it is on the never-ask list: `manual` still asks whatever the evidence turns out to call for, once it is back.
|
|
16
|
+
|
|
17
|
+
Every command that waited, waited on the thread holding the whole conversation. `green` offered to
|
|
18
|
+
poll a running pipeline every two or three minutes; `watch` polled for a deploy that had not landed
|
|
19
|
+
yet; `validate` ran the full suite in the background and stayed with it. None of that reads a diff
|
|
20
|
+
or weighs a finding — it reads `pending` — and each cycle resends the entire context to do it. A
|
|
21
|
+
forty-minute pipeline could cost more to watch than the diff cost to write, and the cost was
|
|
22
|
+
invisible because waiting looks like nothing happening.
|
|
23
|
+
|
|
24
|
+
The delegation is bounded on purpose. The brief names the exact run rather than "the CI", every
|
|
25
|
+
terminal state rather than the first red job, and a deadline after which the supervisor returns what
|
|
26
|
+
it has instead of waiting forever. It writes its evidence to a path before it replies, like every
|
|
27
|
+
other brief, so a report lost in transit is recoverable for the cost of one `ls`. And it counts
|
|
28
|
+
against `agents.budget_max` like any other subagent, relaunches included.
|
|
29
|
+
|
|
30
|
+
What it must never do is rule. Handing the judgement to whoever is cheapest to ask is how a pipeline
|
|
31
|
+
ends up declared green by a model that was hired to watch a clock — the machine version of the
|
|
32
|
+
green-washing `/flow:work:green` refuses in every autonomy mode. The supervisor reports; the triage,
|
|
33
|
+
the merge verdict and the decision to push stay exactly where they were.
|
|
34
|
+
|
|
35
|
+
Not every wait is worth a brief either: a suite that finishes in ninety seconds costs more to
|
|
36
|
+
delegate than to run, and anything the phase must react to mid-wait was never a wait — it is the
|
|
37
|
+
work.
|
|
38
|
+
|
|
39
|
+
## v0.68.0 — The block written to be pasted was the configuration · 2026-09-21
|
|
40
|
+
|
|
41
|
+
**In short**
|
|
42
|
+
- **A fenced block in a FLOW file is an example again.** `- key:` lines inside triple backticks (or tildes) are skipped by `bin/cli.mjs` and by flow-core §0, so the two resolve the same configuration. Until now they were read as the config they illustrate.
|
|
43
|
+
- **This was found in a live repo, not imagined.** `agents.exec_cmd` was set from the fenced example of a file whose prose argued, at length, that it was deliberately unset — so every review round took the one-shot path that prose warned against, and nothing anywhere said so.
|
|
44
|
+
- **`/flow:doctor` reports keys found inside a fence**, names the file and says what to do: move the line out to make it real, leave it to keep it an illustration.
|
|
45
|
+
- **`script/tests/flow-config.sh`** pins it — fenced values never leak, `~~~` and four-backtick blocks are fences, a closed fence does not swallow the keys after it. Every case fails against the old reader.
|
|
46
|
+
- **Two tests now actually run in CI**: the new one and `tier.sh`, which existed and was wired into nothing.
|
|
47
|
+
|
|
48
|
+
A `FLOW.md` is prose with keys in it, and that is the point of it: the keys are the contract, the
|
|
49
|
+
prose is why the value is what it is. What decides which is which is shape alone — a `- key:` line
|
|
50
|
+
under a `## section` — and shape is exactly what a documented example shares with the thing it
|
|
51
|
+
documents. `docs/CONFIGURATION.md` teaches keys in fenced blocks. The template's own comments do.
|
|
52
|
+
So does every real `FLOW.md` that explains an option before enabling it.
|
|
53
|
+
|
|
54
|
+
The repo where this surfaced had a Claude overlay with three paragraphs on why `agents.exec_cmd`
|
|
55
|
+
stays unset — cost against the panel that had been finding the defects — followed by a block
|
|
56
|
+
introduced with *"to try it once, add both blocks below and take them out again afterwards"*. The
|
|
57
|
+
block was live from the moment it was written: `exec_cmd` set, `quality.reviewers` masked with four
|
|
58
|
+
role descriptions instead of the four agents the base names. The file and its configuration said
|
|
59
|
+
opposite things, and both looked right.
|
|
60
|
+
|
|
61
|
+
Nothing warns about that class of mistake, because the file is valid and the round it produces is
|
|
62
|
+
green. So the reader changes: fenced regions are skipped, by the CLI and by the command pages that
|
|
63
|
+
read the file themselves, and `doctor` reports what it found in one — a reader who pasted a block
|
|
64
|
+
to enable it needs to be told why it does nothing, which is the mirror of the same problem.
|
|
65
|
+
|
|
8
66
|
## v0.67.0 — Every layer of the review was argued from judgement, and none was ever checked · 2026-09-21
|
|
9
67
|
|
|
10
68
|
**In short**
|
|
@@ -239,11 +239,19 @@ subagent ignores the value and the step says so once, in one line.
|
|
|
239
239
|
- `workers:` # the parallel fan-out rounds ONLY: approach panel (design §1.5.3), hypothesis sweep
|
|
240
240
|
# (investigate §3.A), finding skeptics (review §6 / §5), the deferred-work skeptic
|
|
241
241
|
# (ship). Empty = falls back to `agents`, then to what the command runs on.
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
242
|
+
- `supervisors:` # the ONE subagent a command hands a long wait to instead of polling it from the main thread
|
|
243
|
+
# (flow-core §6.5): a running pipeline (green §2.3, §6), a deploy that has not landed yet
|
|
244
|
+
# (watch §1), a suite measured in tens of minutes (validate §2). It watches, times out and
|
|
245
|
+
# brings back status plus evidence — job names, exit codes, log tail, run URL — and never
|
|
246
|
+
# rules on it: triage and the merge verdict stay on the main thread whatever this says.
|
|
247
|
+
# Empty = falls back to `agents`, then to what the command runs on, and the dispatch says so
|
|
248
|
+
# in one line — an unattended wait is the one place an unpriced default runs longest.
|
|
249
|
+
|
|
250
|
+
**Three keys, one per kind of subagent — not one per kind of step.** There used to be five —
|
|
251
|
+
`study`, `code`, `test`, `review` — named after phases. They promised a granularity no harness
|
|
252
|
+
delivers: the main agent cannot switch its own model, so the phases those keys named ran on whatever
|
|
253
|
+
you launched, and the value only ever reached the subagents. These three name what can actually be
|
|
254
|
+
set: the improvised agent, the fan-out round, and the wait.
|
|
247
255
|
|
|
248
256
|
Two limits, stated here because they bound what these keys can promise:
|
|
249
257
|
|
|
@@ -255,7 +263,7 @@ question in `guided`/`auto` and never a gate.
|
|
|
255
263
|
|
|
256
264
|
**A named agent keeps its own model.** If `agents.<role>` names a real agent, that agent's own
|
|
257
265
|
definition wins — you configured it, and it is not overridden from two places. `/flow:doctor` prints
|
|
258
|
-
|
|
266
|
+
the three keys resolved, with who decided each.
|
|
259
267
|
|
|
260
268
|
## data
|
|
261
269
|
How this repo lets you look at a query's **plan** instead of arguing about it. Read by
|