flow-workflows 0.69.0 → 0.71.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 +4 -2
- package/adapters/codex/CORE.md +84 -12
- package/adapters/codex/skills/flow-bug-fix/SKILL.md +33 -3
- package/adapters/codex/skills/flow-bug-investigate/SKILL.md +1 -1
- package/adapters/codex/skills/flow-bug-postmortem/SKILL.md +1 -1
- package/adapters/codex/skills/flow-bug-review/SKILL.md +1 -1
- package/adapters/codex/skills/flow-bug-ship/SKILL.md +3 -3
- package/adapters/codex/skills/flow-bug-start/SKILL.md +2 -2
- package/adapters/codex/skills/flow-bug-validate/SKILL.md +1 -1
- package/adapters/codex/skills/flow-doctor/SKILL.md +1 -0
- package/adapters/codex/skills/flow-feat-build/SKILL.md +38 -6
- package/adapters/codex/skills/flow-feat-design/SKILL.md +1 -1
- package/adapters/codex/skills/flow-feat-plan/SKILL.md +2 -2
- package/adapters/codex/skills/flow-feat-review/SKILL.md +1 -1
- package/adapters/codex/skills/flow-feat-ship/SKILL.md +3 -3
- package/adapters/codex/skills/flow-feat-start/SKILL.md +4 -4
- package/adapters/codex/skills/flow-feat-validate/SKILL.md +1 -1
- package/adapters/codex/skills/flow-next/SKILL.md +1 -1
- package/adapters/codex/skills/flow-work-README/SKILL.md +9 -7
- package/adapters/codex/skills/flow-work-abandon/SKILL.md +2 -2
- package/adapters/codex/skills/flow-work-clean/SKILL.md +1 -1
- package/adapters/codex/skills/flow-work-daily/SKILL.md +1 -1
- package/adapters/codex/skills/flow-work-green/SKILL.md +1 -1
- package/adapters/codex/skills/flow-work-query/SKILL.md +1 -1
- package/adapters/codex/skills/flow-work-respond/SKILL.md +1 -1
- package/adapters/codex/skills/flow-work-resume/SKILL.md +3 -3
- package/adapters/codex/skills/flow-work-status/SKILL.md +1 -1
- package/adapters/codex/skills/flow-work-try/SKILL.md +1 -1
- package/adapters/codex/skills/flow-work-watch/SKILL.md +3 -3
- package/adapters/gemini/CORE.md +84 -12
- package/adapters/gemini/commands/flow/bug/fix.toml +33 -3
- package/adapters/gemini/commands/flow/bug/investigate.toml +1 -1
- package/adapters/gemini/commands/flow/bug/postmortem.toml +1 -1
- package/adapters/gemini/commands/flow/bug/review.toml +1 -1
- package/adapters/gemini/commands/flow/bug/ship.toml +3 -3
- package/adapters/gemini/commands/flow/bug/start.toml +2 -2
- package/adapters/gemini/commands/flow/bug/validate.toml +1 -1
- package/adapters/gemini/commands/flow/doctor.toml +1 -0
- package/adapters/gemini/commands/flow/feat/build.toml +38 -6
- package/adapters/gemini/commands/flow/feat/design.toml +1 -1
- package/adapters/gemini/commands/flow/feat/plan.toml +2 -2
- package/adapters/gemini/commands/flow/feat/review.toml +1 -1
- package/adapters/gemini/commands/flow/feat/ship.toml +3 -3
- package/adapters/gemini/commands/flow/feat/start.toml +4 -4
- package/adapters/gemini/commands/flow/feat/validate.toml +1 -1
- package/adapters/gemini/commands/flow/next.toml +1 -1
- package/adapters/gemini/commands/flow/work/README.toml +9 -7
- package/adapters/gemini/commands/flow/work/abandon.toml +2 -2
- package/adapters/gemini/commands/flow/work/clean.toml +1 -1
- package/adapters/gemini/commands/flow/work/daily.toml +1 -1
- package/adapters/gemini/commands/flow/work/green.toml +1 -1
- package/adapters/gemini/commands/flow/work/query.toml +1 -1
- package/adapters/gemini/commands/flow/work/respond.toml +1 -1
- package/adapters/gemini/commands/flow/work/resume.toml +3 -3
- package/adapters/gemini/commands/flow/work/status.toml +1 -1
- package/adapters/gemini/commands/flow/work/try.toml +1 -1
- package/adapters/gemini/commands/flow/work/watch.toml +3 -3
- package/adapters/hermes/CORE.md +84 -12
- package/adapters/hermes/skills/flow-bug-fix/SKILL.md +33 -3
- package/adapters/hermes/skills/flow-bug-investigate/SKILL.md +1 -1
- package/adapters/hermes/skills/flow-bug-postmortem/SKILL.md +1 -1
- package/adapters/hermes/skills/flow-bug-review/SKILL.md +1 -1
- package/adapters/hermes/skills/flow-bug-ship/SKILL.md +3 -3
- package/adapters/hermes/skills/flow-bug-start/SKILL.md +2 -2
- package/adapters/hermes/skills/flow-bug-validate/SKILL.md +1 -1
- package/adapters/hermes/skills/flow-doctor/SKILL.md +1 -0
- package/adapters/hermes/skills/flow-feat-build/SKILL.md +38 -6
- package/adapters/hermes/skills/flow-feat-design/SKILL.md +1 -1
- package/adapters/hermes/skills/flow-feat-plan/SKILL.md +2 -2
- package/adapters/hermes/skills/flow-feat-review/SKILL.md +1 -1
- package/adapters/hermes/skills/flow-feat-ship/SKILL.md +3 -3
- package/adapters/hermes/skills/flow-feat-start/SKILL.md +4 -4
- package/adapters/hermes/skills/flow-feat-validate/SKILL.md +1 -1
- package/adapters/hermes/skills/flow-next/SKILL.md +1 -1
- package/adapters/hermes/skills/flow-work-README/SKILL.md +9 -7
- package/adapters/hermes/skills/flow-work-abandon/SKILL.md +2 -2
- package/adapters/hermes/skills/flow-work-clean/SKILL.md +1 -1
- package/adapters/hermes/skills/flow-work-daily/SKILL.md +1 -1
- package/adapters/hermes/skills/flow-work-green/SKILL.md +1 -1
- package/adapters/hermes/skills/flow-work-query/SKILL.md +1 -1
- package/adapters/hermes/skills/flow-work-respond/SKILL.md +1 -1
- package/adapters/hermes/skills/flow-work-resume/SKILL.md +3 -3
- package/adapters/hermes/skills/flow-work-status/SKILL.md +1 -1
- package/adapters/hermes/skills/flow-work-try/SKILL.md +1 -1
- package/adapters/hermes/skills/flow-work-watch/SKILL.md +3 -3
- package/adapters/opencode/CORE.md +84 -12
- package/adapters/opencode/commands/flow-bug-fix.md +33 -3
- package/adapters/opencode/commands/flow-bug-investigate.md +1 -1
- package/adapters/opencode/commands/flow-bug-postmortem.md +1 -1
- package/adapters/opencode/commands/flow-bug-review.md +1 -1
- package/adapters/opencode/commands/flow-bug-ship.md +3 -3
- package/adapters/opencode/commands/flow-bug-start.md +2 -2
- package/adapters/opencode/commands/flow-bug-validate.md +1 -1
- package/adapters/opencode/commands/flow-doctor.md +1 -0
- package/adapters/opencode/commands/flow-feat-build.md +38 -6
- package/adapters/opencode/commands/flow-feat-design.md +1 -1
- package/adapters/opencode/commands/flow-feat-plan.md +2 -2
- package/adapters/opencode/commands/flow-feat-review.md +1 -1
- package/adapters/opencode/commands/flow-feat-ship.md +3 -3
- package/adapters/opencode/commands/flow-feat-start.md +4 -4
- package/adapters/opencode/commands/flow-feat-validate.md +1 -1
- package/adapters/opencode/commands/flow-next.md +1 -1
- package/adapters/opencode/commands/flow-work-README.md +9 -7
- package/adapters/opencode/commands/flow-work-abandon.md +2 -2
- package/adapters/opencode/commands/flow-work-clean.md +1 -1
- package/adapters/opencode/commands/flow-work-daily.md +1 -1
- package/adapters/opencode/commands/flow-work-green.md +1 -1
- package/adapters/opencode/commands/flow-work-query.md +1 -1
- package/adapters/opencode/commands/flow-work-respond.md +1 -1
- package/adapters/opencode/commands/flow-work-resume.md +3 -3
- package/adapters/opencode/commands/flow-work-status.md +1 -1
- package/adapters/opencode/commands/flow-work-try.md +1 -1
- package/adapters/opencode/commands/flow-work-watch.md +3 -3
- package/package.json +1 -1
- package/plugins/flow/.claude-plugin/plugin.json +1 -1
- package/plugins/flow/CHANGELOG.md +60 -0
|
@@ -22,7 +22,7 @@ Apply the fix. **Minimum viable**: no refactor of adjacent areas. Note other pro
|
|
|
22
22
|
|
|
23
23
|
## 1. Pre-flight
|
|
24
24
|
|
|
25
|
-
Read `~/.claude/flow/CORE.hermes.md` first (shared rules: `FLOW.md` step 0, models, autonomy modes and hard gates, how a stop reads,
|
|
25
|
+
Read `~/.claude/flow/CORE.hermes.md` first (shared rules: `FLOW.md` step 0, models, autonomy modes and hard gates, how a stop reads, the live panel, `00-summary.md`) — skip if you already read it in this session. **Models: the subagents it launches take `models.agents`.**
|
|
26
26
|
|
|
27
27
|
- Read `meta.json` and `00-summary.md`; open in full only `03-investigation.md` (root cause, constraints for the fix) (minimal reproduction, root cause, constraints for the fix). (flow-core §5)
|
|
28
28
|
- `size` `XS`: may start without `investigate`, but require a 2-3 line description of the fix.
|
|
@@ -48,7 +48,7 @@ What is NOT touched:
|
|
|
48
48
|
|
|
49
49
|
**Ask with `AskUserQuestion`** whether this reflects the expected fix — a hard gate, **in every mode, `auto` included**: widening the fix is the main source of collateral regressions, and this is the last point to settle scope before there is a diff.
|
|
50
50
|
|
|
51
|
-
In `
|
|
51
|
+
In `auto` this is one of the only two stops of the whole flow (this one and `ship`; `guided` adds the plan of §2.0bis on a fix of more than two steps): open with the **full stop header** (flow-core §3), then the brief. Options:
|
|
52
52
|
- **Yes, go ahead** → apply the fix.
|
|
53
53
|
- **No, something is missing or wrong** → adjust the brief, ask again. No code until confirmed.
|
|
54
54
|
|
|
@@ -60,11 +60,38 @@ blockers lived in the half a third option let in.
|
|
|
60
60
|
|
|
61
61
|
Save the brief at the top of `04-fix.md`. Any "also fix X while we're at it" during implementation → §2.3.
|
|
62
62
|
|
|
63
|
+
## 2.0bis Plan the fix (more than 2 steps)
|
|
64
|
+
|
|
65
|
+
A fix of one or two steps is its own plan, and a planning round on it is pure friction. Past that the steps stop fitting in the brief — which says what stops happening, never in which file — and the fix starts being discovered while it is typed. **Trigger: more than 2 fix steps.** Two or fewer → skip, record one line in `04-fix.md` (`plan: skipped — 2 steps`) and go to §2.1.
|
|
66
|
+
|
|
67
|
+
The steps come from the root cause in `03-investigation.md`, not from the repo you are about to open: a step that cause never implied is either the investigation being wrong (§4.1) or scope that belongs in §2.3. **No code yet.** Under 200 words:
|
|
68
|
+
|
|
69
|
+
```markdown
|
|
70
|
+
## Plan
|
|
71
|
+
1. <step> — `<file or path>` — <the test that proves it, or "covered by step M">
|
|
72
|
+
2. …
|
|
73
|
+
|
|
74
|
+
- **Point of no return**: <the migration, contract or published event after which rollback stops being a revert — or "none">.
|
|
75
|
+
- **Out of this plan**: <the adjacent thing that will be tempting once these files are open>.
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
Rules, and the first one is the bug flow's own:
|
|
79
|
+
- **The regression test is a step, and it comes first when it can fail before the fix.** `/flow-bug-validate` is what proves the fix, and `/flow-bug-review` refuses to run without it on size ≥ S (`/flow-bug-start §2`). A plan that leaves the test until last has the one step that can still say "the cause was not this" arriving after everything is already built on the answer.
|
|
80
|
+
- **A step is a thing on disk**, not a phase of thought: "add the idempotency key on the retry path", not "look at the retry logic".
|
|
81
|
+
- **A step that widens the blast radius is not part of the minimal fix** (§2.1) — it goes to §2.3 before it is written down here, not after it is built.
|
|
82
|
+
- A fix whose plan needs more than about five steps is usually two tickets or a feature in disguise: check §4.2 before planning further.
|
|
83
|
+
|
|
84
|
+
**Present it, then behave by mode:**
|
|
85
|
+
- `manual` / `guided` → **stop**: full stop header (flow-core §3), the plan, one `AskUserQuestion` — **Approve and fix** · **Change the order or the steps**. On a bug the order is the decision: it is what settles whether the proof comes before the repair.
|
|
86
|
+
- `auto` → **do not stop**. Print the numbered steps and the point of no return, record the plan as accepted, and open the same message with the call that starts §2.1 (flow-core §3: a report is never the last thing in a turn you meant to continue).
|
|
87
|
+
|
|
88
|
+
Save it in `04-fix.md` under `## Plan`, right after the brief. **A fix that was going to be one step and turns into a third**: come back here and write it then — the trigger is the shape of the work, not the moment it was first guessed.
|
|
89
|
+
|
|
63
90
|
## 2.1 Work
|
|
64
91
|
|
|
65
92
|
- Apply the minimal fix targeting the finding of `03-investigation.md` (or the diagnosis if investigate was skipped).
|
|
66
93
|
- Sensitive area (authentication, payments, sensitive data) → consult the `agents.architecture` agent from FLOW.md to confirm the correct layer; empty → check against `conventions` in FLOW.md.
|
|
67
|
-
- More than 2 fix steps →
|
|
94
|
+
- More than 2 fix steps → the §2.0bis plan is already written: track its numbered steps with `TaskCreate` where the harness offers one, otherwise tick them off in `04-fix.md` where they stand. One task per step, same order, marked `in_progress` and `completed` as they go — not batched.
|
|
68
95
|
- **Comment discipline**: comment only a *why* the code cannot say (a non-obvious constraint, the reason for a workaround, a subtle invariant); match the surrounding file's comment density. **Never write the ticket ID or "fix for #N" into a code comment** — that lives in the commit/branch/MR-PR.
|
|
69
96
|
- Keep the log updated while editing.
|
|
70
97
|
|
|
@@ -118,6 +145,9 @@ A **product decision** the fix turns out to need is neither of these — not sco
|
|
|
118
145
|
**What is NOT touched**:
|
|
119
146
|
- <adjacent areas out of scope>
|
|
120
147
|
|
|
148
|
+
## Plan
|
|
149
|
+
<the numbered steps of §2.0bis, its point of no return and its "out of this plan" line — or one line saying the step was skipped and why (`plan: skipped — 2 steps`). What §2.1 tracks with `TaskCreate`. Steps are annotated as they are reworked, never deleted: a plan edited to match what happened records nothing.>
|
|
150
|
+
|
|
121
151
|
## Fix description
|
|
122
152
|
<one sentence: "The fix consists of …">
|
|
123
153
|
|
|
@@ -22,7 +22,7 @@ Investigation phase: reproduce the failure, then find **why it happened** — no
|
|
|
22
22
|
|
|
23
23
|
## 1. Pre-flight
|
|
24
24
|
|
|
25
|
-
Read `~/.claude/flow/CORE.hermes.md` first (shared rules: `FLOW.md` step 0, models, autonomy modes and hard gates, how a stop reads,
|
|
25
|
+
Read `~/.claude/flow/CORE.hermes.md` first (shared rules: `FLOW.md` step 0, models, autonomy modes and hard gates, how a stop reads, the live panel, `00-summary.md`) — skip if you already read it in this session. **Models: the subagents it launches take `models.agents`; its parallel rounds take `models.workers`.**
|
|
26
26
|
|
|
27
27
|
- Read `meta.json` and `00-summary.md`; open in full only `01-context.md`. (flow-core §5)
|
|
28
28
|
- `type` is not `bug` → refuse. `size` is `XS` → suggest `/flow-bug-fix` and stop.
|
|
@@ -24,7 +24,7 @@ Goal: capture lessons that prevent recurrence — not to blame anyone.
|
|
|
24
24
|
|
|
25
25
|
## 1. Pre-flight
|
|
26
26
|
|
|
27
|
-
Read `~/.claude/flow/CORE.hermes.md` first (shared rules: `FLOW.md` step 0, models, autonomy modes and hard gates, how a stop reads,
|
|
27
|
+
Read `~/.claude/flow/CORE.hermes.md` first (shared rules: `FLOW.md` step 0, models, autonomy modes and hard gates, how a stop reads, the live panel, `00-summary.md`) — skip if you already read it in this session. **Models: this command runs with the model it was launched with (no `models` key).**
|
|
28
28
|
|
|
29
29
|
- Read `meta.json` and `00-summary.md`; open in full every previous artifact (`01-context.md` … `06-review.md`) — §2 needs the whole history. (flow-core §5)
|
|
30
30
|
- Require `review` in `phases_done`.
|
|
@@ -22,7 +22,7 @@ Mandatory code review of the fix.
|
|
|
22
22
|
|
|
23
23
|
## 1. Pre-flight
|
|
24
24
|
|
|
25
|
-
Read `~/.claude/flow/CORE.hermes.md` first (shared rules: `FLOW.md` step 0, models, autonomy modes and hard gates, how a stop reads,
|
|
25
|
+
Read `~/.claude/flow/CORE.hermes.md` first (shared rules: `FLOW.md` step 0, models, autonomy modes and hard gates, how a stop reads, the live panel, `00-summary.md`) — skip if you already read it in this session. **Models: the subagents it launches take `models.agents`; its parallel rounds take `models.workers`.**
|
|
26
26
|
|
|
27
27
|
- Read `meta.json` and `00-summary.md`; open in full only `03-investigation.md` and `04-fix.md` (reviewer context, §2.1) and `05-validation.md` (regression test). (flow-core §5)
|
|
28
28
|
- **A premise left open by `fix` §2.2 is an input to this review, not a note.** Every row of "Premises the fix depends on" whose verdict is `unsettled` enters §5 as an **ambiguous finding** and is named in §7 whether or not that gate opened — in a bug it is usually the claim that the root cause was the whole cause, which is exactly what the regression test cannot prove.
|
|
@@ -25,7 +25,7 @@ Close the bug flow: commit, push, MR/PR. Same mechanics as `/flow-feat-ship`, wi
|
|
|
25
25
|
|
|
26
26
|
## 0. Pre-flight
|
|
27
27
|
|
|
28
|
-
Read `~/.claude/flow/CORE.hermes.md` first (shared rules: `FLOW.md` step 0, models, autonomy modes and hard gates, how a stop reads,
|
|
28
|
+
Read `~/.claude/flow/CORE.hermes.md` first (shared rules: `FLOW.md` step 0, models, autonomy modes and hard gates, how a stop reads, the live panel, `00-summary.md`) — skip if you already read it in this session. **Models: this command runs with the model it was launched with; the wait it delegates takes `models.supervisors`.**
|
|
29
29
|
|
|
30
30
|
- Read `meta.json` and `00-summary.md`; open in full only `04-fix.md` (the Brief), `06-review.md` (the verdict), `05-validation.md`, the §"Root cause identified" of `03-investigation.md`, and `99-postmortem.md` if it exists. (flow-core §5)
|
|
31
31
|
- Require `review` in `phases_done`; also `validate` if `size` ≥ S, and `postmortem` if `size` is M or L (the same sizes `/flow-bug-review §8` routes to postmortem — one rule). Missing → refuse and redirect to the missing step.
|
|
@@ -158,7 +158,7 @@ Only here — with the content approved in §2 — invoke `Skill commit-commands
|
|
|
158
158
|
|
|
159
159
|
Assign to `git.assignee` from FLOW.md (empty → unassigned). Squash per `git.squash`.
|
|
160
160
|
|
|
161
|
-
**Record the URL the moment it exists**: write it into `meta.json` (the `mrs` entry if there is one) and refresh
|
|
161
|
+
**Record the URL the moment it exists**: write it into `meta.json` (the `mrs` entry if there is one) and refresh the panel (flow-core §4) right here, before §3.2 and before anything else can fail.
|
|
162
162
|
|
|
163
163
|
**The pipeline the push starts is not watched from this thread — `/flow-feat-ship` §4.1, in full and unchanged**: close with CI reported as *running*, or delegate the wait to a supervisor subagent on `models.supervisors` (flow-core §6.5) with a deadline, taking back status and failing-job evidence only. A red pipeline is `/flow-work-green`'s to triage, never this command's.
|
|
164
164
|
|
|
@@ -177,7 +177,7 @@ nothing was measured. A slowness bug is the case where this comment *is* the pro
|
|
|
177
177
|
|
|
178
178
|
- **A worktree does not own the tree its tools wrote into — `/flow-feat-ship` §5.5, in full and unchanged.** First, before anything below: `meta.json.worktree` not null → read the main checkout's `git status --porcelain`, name any paths it holds in one line as what they are (in the main checkout, not in the branch just pushed, and not necessarily put there by this run), and offer once to carry them over. A fix consolidates its knowledge one phase earlier, in `/flow-bug-postmortem` §4, so by the time this runs those writes have already happened and the branch has already been pushed — which is exactly the window this check exists to close.
|
|
179
179
|
- Update `meta.json`: add `ship` to `phases_done`, update `updated_at`. **`phase` becomes `done` only once the MR/PR is confirmed merged** — creating it is not finishing it. Right after §3.1 it is open, so ask once with `AskUserQuestion` whether it has already been merged: **no** (the normal answer) → leave `phase = "ship"`; **yes** → `phase = "done"`. `/flow-work-green` and `/flow-work-respond` work on the open MR/PR; `/flow-work-clean` only sweeps what merged.
|
|
180
|
-
- Refresh
|
|
180
|
+
- Refresh the panel: while the MR/PR is open its line is `wait` with the `link`; once merged it is `done`, and only then say there is nothing left here (`mark: "info"`, `style: "ok"`). Drop the `Decision` line either way.
|
|
181
181
|
- Overwrite `00-summary.md` whole (≤15 lines, flow-core §5).
|
|
182
182
|
- **Tracker: move to done.** **Only when this ship set `phase = "done"`** (merge confirmed just above) and `tracker.tool` is not `none`/empty, `tracker.done_cmd` is set, and `meta.json.ticket` is a **real tracker id**: run `tracker.done_cmd` with `{TICKET}` = `meta.json.ticket`. Never on an open MR/PR. If the answer was "not merged", skip silently — the transition belongs to whoever confirms the merge (`/flow-work-clean` reports the branch as merged, and re-running this close is legitimate). Same contract as `/flow-bug-start §4.5`: **best-effort, idempotent, gated** (ask once in `autonomy.mode: manual`; automatic in `guided`/`auto`); failure or already-done ticket → warn and continue, never block. **Leave `tracker.done_cmd` empty on GitHub/GitLab** — `Closes #N` already auto-closes on merge; this is for Jira/Linear-style trackers.
|
|
183
183
|
- Summarize: ticket, MR/PR URL, regression test added.
|
|
@@ -25,7 +25,7 @@ Start a bug. `$ARGUMENTS` is **optional**:
|
|
|
25
25
|
|
|
26
26
|
## 0. Pre-flight
|
|
27
27
|
|
|
28
|
-
Read `~/.claude/flow/CORE.hermes.md` first (shared rules: `FLOW.md` step 0, models, autonomy modes and hard gates, how a stop reads,
|
|
28
|
+
Read `~/.claude/flow/CORE.hermes.md` first (shared rules: `FLOW.md` step 0, models, autonomy modes and hard gates, how a stop reads, the live panel, `00-summary.md`) — skip if you already read it in this session. **Models: this command runs with the model it was launched with (no `models` key).**
|
|
29
29
|
|
|
30
30
|
- Verify you are in the correct repo.
|
|
31
31
|
- **Determine the mode** from `$ARGUMENTS`: non-empty → *ticket mode* (identifier = `$ARGUMENTS`); empty → *ticket-less mode* (identifier = the slug resolved in §1.5).
|
|
@@ -162,7 +162,7 @@ Create the work directory per §0: `.claude/work/<TICKET>-<slug>/` in ticket mod
|
|
|
162
162
|
}
|
|
163
163
|
```
|
|
164
164
|
|
|
165
|
-
|
|
165
|
+
**Live panel**: publish it now (flow-core §4 — the panel tools, or `<work-dir>/panel.json`). A bug has no MR/PR train, so it is short: the title (the symptom, `style: title`), a `Now` line for what is starting, a `Next` line for the phase this size routes to, and any sibling repo from §1.6 as a `block` line. Every later phase updates it.
|
|
166
166
|
|
|
167
167
|
Populate `related_repos` from §1.6 — one `{ "repo": "<name>", "scope": "<one line>", "status": "pending", "contract_handoff": "pending" | "none" }` per *other* repo the fix touches; `[]` for a single-repo fix. `pending` only when the fix **changes a surface that sibling consumes** (a payload key, an error code, a route, an event shape); otherwise `none`.
|
|
168
168
|
|
|
@@ -22,7 +22,7 @@ Validate that the fix works and that the bug does not return.
|
|
|
22
22
|
|
|
23
23
|
## 1. Pre-flight
|
|
24
24
|
|
|
25
|
-
Read `~/.claude/flow/CORE.hermes.md` first (shared rules: `FLOW.md` step 0, models, autonomy modes and hard gates, how a stop reads,
|
|
25
|
+
Read `~/.claude/flow/CORE.hermes.md` first (shared rules: `FLOW.md` step 0, models, autonomy modes and hard gates, how a stop reads, the live panel, `00-summary.md`) — skip if you already read it in this session. **Models: the subagents it launches take `models.agents`; the wait it delegates takes `models.supervisors`.**
|
|
26
26
|
|
|
27
27
|
- Read `meta.json` and `00-summary.md`; open in full only `03-investigation.md` (§3 areas with similar risk, and the minimal reproduction) — the testing agent reads it and `04-fix.md` itself. (flow-core §5)
|
|
28
28
|
- Require `fix` in `phases_done`.
|
|
@@ -199,6 +199,7 @@ refuse) · **degraded** (it runs, quietly worse than the config promises), plus
|
|
|
199
199
|
`.agents/agents`, or a plugin. Report each missing name and that it falls back to `general-purpose`
|
|
200
200
|
(a skill: skipped) — a panel missing agents reviews less and still reports a clean pass.
|
|
201
201
|
- Harness cannot set a model per subagent → note that every `models.*` value degrades to inheritance.
|
|
202
|
+
- **Where the live panel will go this session** (flow-core §4): `panel_set` / `panel_patch` exposed → the terminal draws the panel and no `panel.json` is written; absent → the panel is that file, as before. Neither is a fault — one line saying which one this session gets.
|
|
202
203
|
|
|
203
204
|
### 2.3 Knowledge sources
|
|
204
205
|
|
|
@@ -18,7 +18,7 @@ description: "Implement the feature following the approved design and keep a run
|
|
|
18
18
|
> - `knowledge.*` roles → whatever tools `FLOW.md` names there; an MCP tool keeps its name, its server is declared under `mcp_servers` in `~/.hermes/config.yaml` (see `config.snippet.yaml`).
|
|
19
19
|
> - `$ARGUMENTS` → what the user typed after the skill name: Hermes takes everything from the first non-skill token on as the instruction.
|
|
20
20
|
|
|
21
|
-
Read `~/.claude/flow/CORE.hermes.md` first (shared rules: `FLOW.md` step 0, models, autonomy modes and hard gates, how a stop reads,
|
|
21
|
+
Read `~/.claude/flow/CORE.hermes.md` first (shared rules: `FLOW.md` step 0, models, autonomy modes and hard gates, how a stop reads, the live panel, `00-summary.md`) — skip if you already read it in this session. **Models: the subagents it launches take `models.agents`.**
|
|
22
22
|
|
|
23
23
|
Implementation phase. Code is written here.
|
|
24
24
|
|
|
@@ -59,7 +59,7 @@ Rules for writing it:
|
|
|
59
59
|
|
|
60
60
|
**Ask the user with `AskUserQuestion`** whether the brief reflects what they expect — **hard gate, in every autonomy mode, `auto` included**: it is the last point where scope can be corrected before there is a diff to argue with.
|
|
61
61
|
|
|
62
|
-
In `
|
|
62
|
+
In `auto` this is one of the only two stops per MR/PR (`guided` adds the plan of §2.0ter on a big one), so it carries the **full stop header** (flow-core §3) — ticket, size, phase, `MR #<n> of <N>`, plan state — followed by the brief. Options:
|
|
63
63
|
- **Yes, proceed** → start building.
|
|
64
64
|
- **No, something is extra or missing** → the user clarifies, adjust the brief, ask again. **Do not touch code** until the brief is confirmed.
|
|
65
65
|
|
|
@@ -84,7 +84,36 @@ Hard rules:
|
|
|
84
84
|
- **If there is a "Pattern deviation" section**: copy it too — it reminds you at coding time not to mimic the repo pattern.
|
|
85
85
|
- **If the design says "none"** (no external surfaces), skip this step and record: "## Contracts to respect — none declared in design".
|
|
86
86
|
|
|
87
|
-
Without this copy, do not proceed to §2.
|
|
87
|
+
Without this copy, do not proceed to §2.0ter.
|
|
88
|
+
|
|
89
|
+
## 2.0ter Plan this MR/PR (size-gated)
|
|
90
|
+
|
|
91
|
+
`03-design.md` §"Implementation plan (order)" is the **feature's** order, written before `/flow-feat-plan` split anything — it does not know which of its steps belong to this MR/PR. The brief above says what this MR/PR delivers in business terms; neither says which files are touched in which order. On a MR/PR big enough to lose its thread, that plan is written here.
|
|
92
|
+
|
|
93
|
+
**Gate — run this step only when the current `mrs[]` entry is big enough**: `lines_est > 150` **or** `files_est > 5`. No estimates in the entry (an older plan) → fall back to its `size`: `M`/`L` run it, `XS`/`S` skip. No `mrs[]` at all (XS/S, single MR/PR) → skip; the brief and the contracts are the whole plan, and a 30-line change does not earn a planning round. Skipped → record one line in `05-implementation.md` — the estimates that let it through (`plan: skipped — 40 lines / 2 files`), or `plan: skipped — single MR/PR` when there is no entry to read — and go to §2.1.
|
|
94
|
+
|
|
95
|
+
Write it against `03-design.md` and the contracts just copied — **no code yet, no exploratory edits**. Under 250 words, as numbered steps:
|
|
96
|
+
|
|
97
|
+
```markdown
|
|
98
|
+
## Plan MR/PR #N
|
|
99
|
+
1. <step> — `<file or path>` — <test that proves it, or "covered by step M">
|
|
100
|
+
2. …
|
|
101
|
+
|
|
102
|
+
- **Point of no return**: <the migration, contract, published event or flag after which rollback stops being a revert — or "none">.
|
|
103
|
+
- **Out of this plan**: <what belongs to a later MR/PR and will be tempting while inside these files>.
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
Rules for the steps:
|
|
107
|
+
- **A step is a thing on disk**, not a phase of thought: "add the nullable column + migration", not "analyse the schema". A step nobody can tell is finished is two steps or none.
|
|
108
|
+
- **Order by what unblocks what**, and put the point of no return as late as the design allows: everything reversible lands before it.
|
|
109
|
+
- **Every step names its test** or the step that covers it. A step that proves no acceptance criterion and guards no contract is a candidate to cut — same bar as `03-design.md` §"Planned tests".
|
|
110
|
+
- Steps come from the **design**, not from the repo you are about to open. A step the design never mentions is either a deviation to log (§3 "Deviations from design") or scope that belongs in §2.4.
|
|
111
|
+
|
|
112
|
+
**Present it, then behave by mode:**
|
|
113
|
+
- `manual` / `guided` → **stop**: full stop header (flow-core §3), the plan, and one `AskUserQuestion` — **Approve and build** · **Change the order or the steps** (the user edits, rewrite it, ask again). This is a genuine decision point: the order of an irreversible step is exactly what is expensive to argue with once there is a diff.
|
|
114
|
+
- `auto` → **do not stop**. Print the numbered steps and the point of no return, record the plan as accepted, and open the same message with the call that starts §2.1 (flow-core §3: a report is never the last thing in a turn you meant to continue).
|
|
115
|
+
|
|
116
|
+
Save it in `05-implementation.md` under `## Plan MR/PR #N`, right after the brief. It is what seeds `TaskCreate` in §2.1, and what a §2.3 hot cut splits: the steps already done stay in this MR/PR, the ones still pending move to the new entry.
|
|
88
117
|
|
|
89
118
|
## 2.1 Work
|
|
90
119
|
|
|
@@ -115,7 +144,7 @@ Execution mode:
|
|
|
115
144
|
- **Give it a bounded first step.** A piece with no natural first move ("do the whole module") produces nothing for hours; split it by file or by numbered step until it has one.
|
|
116
145
|
- **Check the round at every stop of this command**, not only at the end: an agent past `agents.stall_after_minutes` (empty → 25) with nothing written to its path is stopped, split in two and relaunched.
|
|
117
146
|
|
|
118
|
-
Use `TaskCreate` to track the steps from the
|
|
147
|
+
Use `TaskCreate` to track the steps of the **§2.0ter plan for this MR/PR** — one task per numbered step, same order. Step skipped there (small MR/PR) → seed from `03-design.md` §"Implementation plan (order)", taking only the steps this MR/PR covers per `04-mr-plan.md`; the feature's plan predates the split and carries steps that belong to siblings. Mark each step `in_progress` when starting and `completed` when done — do not batch.
|
|
119
148
|
|
|
120
149
|
### 2.1bis The premise this change rests on (any size, XS included)
|
|
121
150
|
|
|
@@ -221,7 +250,7 @@ Warning thresholds:
|
|
|
221
250
|
|
|
222
251
|
If either is exceeded, **pause** and ask the user with `AskUserQuestion` (options, in this order):
|
|
223
252
|
|
|
224
|
-
1. **Cut here (recommended if the current piece is coherent)**. What is built so far stays as this MR/PR; what remains
|
|
253
|
+
1. **Cut here (recommended if the current piece is coherent)**. What is built so far stays as this MR/PR; what remains — the §2.0ter steps still pending, or what is left of `04-mr-plan.md` where that step was skipped — goes into a new one inserted in `meta.json.mrs` right after. Zero code wasted.
|
|
225
254
|
2. **Continue and record the overrun**. When the cut would be artificial. Note the deviation in `05-implementation.md` to calibrate `/flow-feat-plan` on future tickets.
|
|
226
255
|
3. **Reopen plan**. Return to `/flow-feat-plan` to rethink the entire split. Only if the overrun shows the plan is wrong at a deeper level, not just that this MR/PR is slightly underestimated.
|
|
227
256
|
|
|
@@ -269,6 +298,9 @@ Keep `.claude/work/<TICKET>/05-implementation.md` updated as you work (not at th
|
|
|
269
298
|
**This MR/PR does NOT include**:
|
|
270
299
|
- <pieces that are out of scope>
|
|
271
300
|
|
|
301
|
+
## Plan MR/PR #N
|
|
302
|
+
<the numbered steps of §2.0ter, its point of no return and its "out of this plan" line — or one line saying the step was skipped and why (`plan: skipped — 40 lines / 2 files`). What §2.1 seeds `TaskCreate` from and what a §2.3 cut splits. Steps are struck through or annotated as they are reworked, never deleted: a plan edited to match what happened records nothing.>
|
|
303
|
+
|
|
272
304
|
## Changes per file
|
|
273
305
|
- <file> — what changed and why (1 line each)
|
|
274
306
|
|
|
@@ -360,5 +392,5 @@ If there were no copied contracts (design said "none"), skip this step and recor
|
|
|
360
392
|
- Update `meta.json`: `phase = "build"`, add to `phases_done`.
|
|
361
393
|
- Multi-MR/PR build: leave the current MR/PR `in_progress` in `meta.json.mrs` (it becomes `merged` when `/flow-feat-ship` confirms the merge). **Also add `build` to that MR/PR's own `phases_done`** (its `mrs[]` entry) — the per-MR/PR marker the downstream gates read.
|
|
362
394
|
- Overwrite `00-summary.md` whole (≤15 lines, flow-core §5).
|
|
363
|
-
- Report **following the stop header** (flow-core §3) **only when this is a stop** — `manual`, or a blocker in any mode. Then in bullets: files touched (high level), pending items, **result of §4.2 (contracts verified)**, and **any premise left unsettled by §2.1bis** — one line, in the language of what breaks if it is false. An open premise the user never hears about is an assumption they were not asked about. In `guided`/`auto` `/flow-feat-review` runs in this same turn, so there is no report here: those same points go to the phase artifact,
|
|
395
|
+
- Report **following the stop header** (flow-core §3) **only when this is a stop** — `manual`, or a blocker in any mode. Then in bullets: files touched (high level), pending items, **result of §4.2 (contracts verified)**, and **any premise left unsettled by §2.1bis** — one line, in the language of what breaks if it is false. An open premise the user never hears about is an assumption they were not asked about. In `guided`/`auto` `/flow-feat-review` runs in this same turn, so there is no report here: those same points go to the phase artifact, the panel carries `Now`/`Next`, and the turn opens with the call that chains.
|
|
364
396
|
- **Autonomy handoff.** The summary is a report, not the end of the flow. `manual`: stop and propose `/flow-feat-review` with a single `AskUserQuestion` (recommended option by default); invoke it only on confirmation, never make the user type it. `guided`/`auto`: **chain into `/flow-feat-review` automatically** in this same turn, without asking — never end the turn with the next command as a suggestion.
|
|
@@ -18,7 +18,7 @@ description: "Design the technical solution (architecture, DB, APIs, risks) befo
|
|
|
18
18
|
> - `knowledge.*` roles → whatever tools `FLOW.md` names there; an MCP tool keeps its name, its server is declared under `mcp_servers` in `~/.hermes/config.yaml` (see `config.snippet.yaml`).
|
|
19
19
|
> - `$ARGUMENTS` → what the user typed after the skill name: Hermes takes everything from the first non-skill token on as the instruction.
|
|
20
20
|
|
|
21
|
-
Read `~/.claude/flow/CORE.hermes.md` first (shared rules: `FLOW.md` step 0, models, autonomy modes and hard gates, how a stop reads,
|
|
21
|
+
Read `~/.claude/flow/CORE.hermes.md` first (shared rules: `FLOW.md` step 0, models, autonomy modes and hard gates, how a stop reads, the live panel, `00-summary.md`) — skip if you already read it in this session. **Models: the subagents it launches take `models.agents`; its parallel rounds take `models.workers`.**
|
|
22
22
|
|
|
23
23
|
Technical design phase. **Still no production code is written.** Opens the option space first (M/L), then designs the approach that was chosen. Output: a plan the next step executes.
|
|
24
24
|
|
|
@@ -18,7 +18,7 @@ description: "Split the work into small, independently mergeable MRs/PRs before
|
|
|
18
18
|
> - `knowledge.*` roles → whatever tools `FLOW.md` names there; an MCP tool keeps its name, its server is declared under `mcp_servers` in `~/.hermes/config.yaml` (see `config.snippet.yaml`).
|
|
19
19
|
> - `$ARGUMENTS` → what the user typed after the skill name: Hermes takes everything from the first non-skill token on as the instruction.
|
|
20
20
|
|
|
21
|
-
Read `~/.claude/flow/CORE.hermes.md` first (shared rules: `FLOW.md` step 0, models, autonomy modes and hard gates, how a stop reads,
|
|
21
|
+
Read `~/.claude/flow/CORE.hermes.md` first (shared rules: `FLOW.md` step 0, models, autonomy modes and hard gates, how a stop reads, the live panel, `00-summary.md`) — skip if you already read it in this session. **Models: the subagents it launches take `models.agents`.**
|
|
22
22
|
|
|
23
23
|
Delivery planning phase. **No code is written.** Splits the feature into MRs/PRs that can each live on the main branch even if the subsequent ones never land.
|
|
24
24
|
|
|
@@ -152,7 +152,7 @@ A slice landing in **another repo** is not one of *this* repo's `mrs`: record it
|
|
|
152
152
|
|
|
153
153
|
- Update `meta.json`: `phase = "plan"`, add `plan` to `phases_done`.
|
|
154
154
|
- Overwrite `00-summary.md` whole (≤15 lines, flow-core §5).
|
|
155
|
-
- Refresh
|
|
155
|
+
- Refresh the panel — a new train is a new *shape*, so republish it whole (flow-core §4): from here on it carries one line per `mrs[]` entry. Nothing is merged or open yet, so every entry carries `mark: "pending"`, the not-yet-started ones collapsed into a single `#a–#z` line, and **no heading over the train** — `mark` states each entry's real state (schema in `/flow-work-README`).
|
|
156
156
|
- **Show the plan the way it will be executed**, not just as a list: print the wave line first, then the table:
|
|
157
157
|
|
|
158
158
|
```
|
|
@@ -18,7 +18,7 @@ description: "Mandatory multi-agent code review before shipping"
|
|
|
18
18
|
> - `knowledge.*` roles → whatever tools `FLOW.md` names there; an MCP tool keeps its name, its server is declared under `mcp_servers` in `~/.hermes/config.yaml` (see `config.snippet.yaml`).
|
|
19
19
|
> - `$ARGUMENTS` → what the user typed after the skill name: Hermes takes everything from the first non-skill token on as the instruction.
|
|
20
20
|
|
|
21
|
-
Read `~/.claude/flow/CORE.hermes.md` first (shared rules: `FLOW.md` step 0, models, autonomy modes and hard gates, how a stop reads,
|
|
21
|
+
Read `~/.claude/flow/CORE.hermes.md` first (shared rules: `FLOW.md` step 0, models, autonomy modes and hard gates, how a stop reads, the live panel, `00-summary.md`) — skip if you already read it in this session. **Models: the subagents it launches take `models.agents`; its parallel rounds take `models.workers`.**
|
|
22
22
|
|
|
23
23
|
Mandatory review phase. **`/flow-feat-ship` cannot run without passing through here and resolving blockers.**
|
|
24
24
|
|
|
@@ -18,7 +18,7 @@ description: "Commit, push, MR/PR, and offer to save domain knowledge"
|
|
|
18
18
|
> - `knowledge.*` roles → whatever tools `FLOW.md` names there; an MCP tool keeps its name, its server is declared under `mcp_servers` in `~/.hermes/config.yaml` (see `config.snippet.yaml`).
|
|
19
19
|
> - `$ARGUMENTS` → what the user typed after the skill name: Hermes takes everything from the first non-skill token on as the instruction.
|
|
20
20
|
|
|
21
|
-
Read `~/.claude/flow/CORE.hermes.md` first (shared rules: `FLOW.md` step 0, models, autonomy modes and hard gates, how a stop reads,
|
|
21
|
+
Read `~/.claude/flow/CORE.hermes.md` first (shared rules: `FLOW.md` step 0, models, autonomy modes and hard gates, how a stop reads, the live panel, `00-summary.md`) — skip if you already read it in this session. **Models: this command runs with the model it was launched with; the wait it delegates takes `models.supervisors`.**
|
|
22
22
|
|
|
23
23
|
Closes the feature: commit, push, MR/PR (assigned per `git.assignee`, squash per `git.squash`, sections per `git.request_sections`) and an optional offer to consolidate knowledge.
|
|
24
24
|
|
|
@@ -179,7 +179,7 @@ Only here — with the content approved in §3 — invoke `Skill commit-commands
|
|
|
179
179
|
- `git.assignee` not empty → assign to that user. `git.squash` `true` → enable squash-before-merge.
|
|
180
180
|
- `commit-push-pr` skill unavailable → commit and push manually and create the MR/PR with the `git.cli` CLI from `FLOW.md` — always with the content confirmed in §3.
|
|
181
181
|
|
|
182
|
-
**Record the URL the moment it exists**: write it into this MR/PR's `meta.json.mrs` entry and refresh
|
|
182
|
+
**Record the URL the moment it exists**: write it into this MR/PR's `meta.json.mrs` entry and refresh the panel (flow-core §4) right here, before §4.2 and before anything else can fail.
|
|
183
183
|
|
|
184
184
|
**The push just started a pipeline, and this thread does not sit on it.** Its result belongs to `/flow-work-green`, not here, so either close the ship with CI reported as *running* — the honest state — or, when the user wants to hear how it ended, delegate the wait as any other (flow-core §6.5): one supervisor subagent on `models.supervisors`, a deadline, and back with status plus failing-job evidence. Whatever it returns, a red pipeline is triaged by `/flow-work-green`; this command never fixes CI and never closes reporting a green it did not see.
|
|
185
185
|
|
|
@@ -272,7 +272,7 @@ In every scenario:
|
|
|
272
272
|
```
|
|
273
273
|
|
|
274
274
|
Nothing back → the content is **not** on the base whatever the forge says (see §6.2.1). Do not mark the entry `merged`: leave it `in_progress` with a `note`, tell the user in one line, and recover it with a fresh MR/PR against `git.default_base` before the train moves on.
|
|
275
|
-
- Refresh
|
|
275
|
+
- Refresh the panel from the updated `meta.json`. A shipped-but-open MR/PR is a `wait` line carrying its `link`; it becomes `done` only when confirmed merged. When this ship sets `phase = "done"`, say so in plain words (`mark: "info"` with `style: "ok"`: nothing left here) and drop the `Decision` line.
|
|
276
276
|
- Overwrite `00-summary.md` whole (≤15 lines, flow-core §5).
|
|
277
277
|
|
|
278
278
|
### 6.1.1 Tracker: move to done
|
|
@@ -18,7 +18,7 @@ description: "Start a new feature (read the tracker, classify size, create branc
|
|
|
18
18
|
> - `knowledge.*` roles → whatever tools `FLOW.md` names there; an MCP tool keeps its name, its server is declared under `mcp_servers` in `~/.hermes/config.yaml` (see `config.snippet.yaml`).
|
|
19
19
|
> - `$ARGUMENTS` → what the user typed after the skill name: Hermes takes everything from the first non-skill token on as the instruction.
|
|
20
20
|
|
|
21
|
-
Read `~/.claude/flow/CORE.hermes.md` first (shared rules: `FLOW.md` step 0, models, autonomy modes and hard gates, how a stop reads,
|
|
21
|
+
Read `~/.claude/flow/CORE.hermes.md` first (shared rules: `FLOW.md` step 0, models, autonomy modes and hard gates, how a stop reads, the live panel, `00-summary.md`) — skip if you already read it in this session. **Models: this command runs with the model it was launched with (no `models` key).**
|
|
22
22
|
|
|
23
23
|
`$ARGUMENTS` is **optional**:
|
|
24
24
|
|
|
@@ -235,9 +235,9 @@ Create the work directory per §1: `.claude/work/<TICKET>-<slug>/` (ticket mode)
|
|
|
235
235
|
- `related_repos` from §3.5 — one `{ "repo": "<name>", "scope": "<one line>", "status": "pending", "contract_handoff": "pending" | "none" }` per *other* repo; `[]` for a single-repo task.
|
|
236
236
|
- **This work *is* an accepted follow-up** (the ticket came from another work's `followups[]`, flow-core §7) → set `origin: { "work": "<originating work dir>", "followup": "F<n>" }`, carry that entry's recorded `why` into `01-context.md` verbatim instead of re-deriving it, and set the originating entry to `in_progress` with `work` naming this folder. Not a follow-up → omit `origin` entirely.
|
|
237
237
|
|
|
238
|
-
###
|
|
238
|
+
### Live panel
|
|
239
239
|
|
|
240
|
-
|
|
240
|
+
Publish it now, in the flow-core §4 shape and by the transport that section selects. No train yet (`plan` has not run), so: the title (`style: title`), a `Now` line for what is starting, a `Next` line for the phase this size routes to, any §3.5 sibling repo as a `block` line. Every later phase updates it.
|
|
241
241
|
|
|
242
242
|
### `00-summary.md`
|
|
243
243
|
|
|
@@ -285,5 +285,5 @@ Run `tracker.start_cmd` with `{TICKET}` = `meta.json.ticket`, `{ASSIGNEE}` = `tr
|
|
|
285
285
|
## 7. Close
|
|
286
286
|
|
|
287
287
|
- Overwrite `00-summary.md` whole (≤15 lines, flow-core §5) — first written in §6; refresh it if §6.5 changed anything.
|
|
288
|
-
- 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
|
|
288
|
+
- 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).
|
|
289
289
|
- 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).
|
|
@@ -18,7 +18,7 @@ description: "Validate tests, edge cases, and integrity before shipping"
|
|
|
18
18
|
> - `knowledge.*` roles → whatever tools `FLOW.md` names there; an MCP tool keeps its name, its server is declared under `mcp_servers` in `~/.hermes/config.yaml` (see `config.snippet.yaml`).
|
|
19
19
|
> - `$ARGUMENTS` → what the user typed after the skill name: Hermes takes everything from the first non-skill token on as the instruction.
|
|
20
20
|
|
|
21
|
-
Read `~/.claude/flow/CORE.hermes.md` first (shared rules: `FLOW.md` step 0, models, autonomy modes and hard gates, how a stop reads,
|
|
21
|
+
Read `~/.claude/flow/CORE.hermes.md` first (shared rules: `FLOW.md` step 0, models, autonomy modes and hard gates, how a stop reads, the live panel, `00-summary.md`) — skip if you already read it in this session. **Models: the subagents it launches take `models.agents`; the wait it delegates takes `models.supervisors`.**
|
|
22
22
|
|
|
23
23
|
Verify the feature is complete: test coverage, edge cases, performance, regressions.
|
|
24
24
|
|
|
@@ -52,4 +52,4 @@ runs a phase on its own and never advances `meta.json`.
|
|
|
52
52
|
## 3. Hand over
|
|
53
53
|
|
|
54
54
|
Invoke the confirmed command with the arguments the user chose. Nothing to write, no
|
|
55
|
-
artifact, no
|
|
55
|
+
artifact, no panel: the command it hands to owns the rest.
|
|
@@ -37,9 +37,9 @@ This system **orchestrates** the project's existing sub-agents and skills (it do
|
|
|
37
37
|
## Principles
|
|
38
38
|
|
|
39
39
|
- **Shared rules live in the `flow-core` skill** (`skills/flow-core/SKILL.md`): configuration merge,
|
|
40
|
-
`models`, autonomy and hard gates, never-a-question list, stop header,
|
|
40
|
+
`models`, autonomy and hard gates, never-a-question list, stop header, the live panel,
|
|
41
41
|
`00-summary.md`. Every command loads it once per session.
|
|
42
|
-
- **One folder per ticket**: `.claude/work/{TICKET}/` holds `meta.json`, `00-summary.md`,
|
|
42
|
+
- **One folder per ticket**: `.claude/work/{TICKET}/` holds `meta.json`, `00-summary.md`, the numbered markdown artifacts and — where the terminal offers no panel tools — `panel.json`.
|
|
43
43
|
- **Numbered artifacts**: each phase writes a `NN-phase.md` that the next step reads.
|
|
44
44
|
- **`evidence/`**: what `/flow-*-validate` actually observed when it drove the running app — a screenshot, a response body, a log excerpt, one file per criterion, with a **before** where the change alters something already visible. `/flow-*-ship` attaches it to the MR/PR description. `quality.evidence: off` disables both halves.
|
|
45
45
|
- **`meta.json` is the source of truth** for state (current phase, size, branch). Without it, commands refuse to continue.
|
|
@@ -64,7 +64,7 @@ This system **orchestrates** the project's existing sub-agents and skills (it do
|
|
|
64
64
|
- **Commits follow the autonomy mode** (`/flow-feat-build` §2.2, `/flow-bug-fix` §2.1): changes **always reported before anything is recorded**. `manual`: **no `git commit` on its own**. `guided`: asks **once**. `auto`: WIP commit per step, cut by step (§2.3) — **`autonomy.mode: auto` plus typing the command is the explicit authorization**. WIP commits on the work branch **only**; push and MR/PR creation stay hard gates in every mode.
|
|
65
65
|
- **A named next command is not a handoff**: each `## Close` carries the **autonomy handoff** — `manual` proposes the next command with one `AskUserQuestion`; `guided`/`auto` **chain in the same turn**. Never chained: `ship` (hard gate in every mode) and anything downstream of a red gate.
|
|
66
66
|
- **Every stop opens with where you are** (flow-core §3): stop header, then ≤ ~10 product-altitude lines. Own process → the artifact; subagent notifications never earn a turn.
|
|
67
|
-
- **The stop is also
|
|
67
|
+
- **The stop is also published to the live panel** ([document below](#the-panel-document), flow-core §4): through the terminal's `panel_set` / `panel_patch` tools where they exist, and `.claude/work/<work>/panel.json` **overwritten whole, never patched** where they do not. Published **before** a long stretch, never after, with an honest `updated_at`.
|
|
68
68
|
- **What is never a question is as binding as what always is**: hard gates stop in **every** mode; in `guided`/`auto` flow mechanics, WIP commits, the train's next MR/PR, size confirmation and anything already decided are never asked (flow-core §2). Only new evidence reopens a decision.
|
|
69
69
|
- **A correction is a convention, and a convention is written down**: when the user overrides something a phase proposed and the same correction would apply to an unrelated ticket in this repo, it becomes a `meta.json.conventions_candidates[]` row and a `## Conventions learned` line in the phase artifact, asking nothing (flow-core §8). `review`'s idiom audit reads them in the same work; `ship` offers them to `FLOW.md` once, at Close, in every mode. What is about *this* ticket stays in the artifact and goes no further.
|
|
70
70
|
- **Work you decide not to do is recorded, not narrated**: every "idea for a separate ticket", out-of-scope piece, unmitigated risk, unchecked edge case and prevention action becomes a `meta.json.followups[]` entry (flow-core §7) alongside its artifact section. Written without asking, and only when it clears the bar of §7 (a named subject, a path someone has actually seen, waiting costing more than doing it). Triaged **once** at `ship`'s Close, behind a skeptic: 3 or more candidates go to an agent whose job is to refute that each deserves a ticket, and only the strongest `tracker.followup_ask_max` (empty → **2**) become questions (**Do it** / **Not worth it** / **Later**). The rest are logged. Published in the MR/PR description while still open, and surfaced by `status`/`daily`/`next` — from `_archive/` too — until decided. Creating the tracker issue for an accepted one is outward-facing: **asks in every mode**. Two kinds are not deferred work: a **`decision`** the diff depends on is asked when it surfaces (in every mode) and only a deferred one is recorded; a **`tooling`** gap is recorded with no question at all and never goes to the tracker.
|
|
@@ -157,9 +157,9 @@ This system **orchestrates** the project's existing sub-agents and skills (it do
|
|
|
157
157
|
|
|
158
158
|
**`00-summary.md`** (flow-core §5): **≤ 15 lines, overwritten whole at every `## Close`**, read first by every phase (with `meta.json`) before any full artifact. Contents: what the work is (one line), size and current MR/PR, standing decisions (one line each), contracts declared or received (names and where the literal shape lives), what is pending, what the next phase must open in full. Missing (older work) → read the artifacts, write it at Close.
|
|
159
159
|
|
|
160
|
-
##
|
|
160
|
+
## The panel document
|
|
161
161
|
|
|
162
|
-
`meta.json` is the *state machine*;
|
|
162
|
+
`meta.json` is the *state machine*; the panel is the *view* a reader outside the chat watches. Optional: a work that never publishes it still resolves from `meta.json` alone. Writer rules (order, when, ceiling) and the two transports — the terminal's `panel_set` / `panel_patch` / `panel_get` tools, or `.claude/work/<work>/panel.json` — are flow-core §4. The document below is the same either way.
|
|
163
163
|
|
|
164
164
|
```json
|
|
165
165
|
{
|
|
@@ -190,11 +190,13 @@ This system **orchestrates** the project's existing sub-agents and skills (it do
|
|
|
190
190
|
- **`style`** — `normal` · `dim` · `title` · `accent` · `ok` · `warn` · `error`; semantic names, the reader owns the palette.
|
|
191
191
|
- **`header`** — `true` (default): the reader draws ticket, type, phase and age, which never belong in `lines`. `false` hands every line to the writer.
|
|
192
192
|
- **`phase`** — the phase running **right now** (`meta.json.phase` advances only at close); the reader prefers it.
|
|
193
|
-
- **`updated_at`** — local ISO-8601 with offset from the real clock, never carried over; lets the reader flag a stale snapshot.
|
|
193
|
+
- **`updated_at`** — local ISO-8601 with offset from the real clock, never carried over; lets the reader flag a stale snapshot. Over the tools the app stamps each delivery itself.
|
|
194
|
+
- **`attention`** *(tools only)* — `wait` · `block` · `done`, beside `phase`, absent while simply working: the pane's claim on the user's attention, which the app never deduces from a line's `mark`. A tab's card shows the strongest claim among its panes, so an uncleared `wait` flags that tab for ever.
|
|
195
|
+
- **`key`** *(tools only)* — a unique, never-painted name on any line a later `panel_patch` may replace or delete (`title`, `mr-1`, `now`, `next`, `decision`, `block-1`).
|
|
194
196
|
|
|
195
197
|
**No headings over the train.** A shipped MR/PR is *open, waiting to merge*; `mark` says it per entry — `wait` shipped, `current` being worked, `done` only merged.
|
|
196
198
|
|
|
197
|
-
**Who
|
|
199
|
+
**Who publishes it.** The 18 phase commands (flow-core §4); `/flow-feat-ship` and `/flow-bug-ship` the instant an MR/PR URL exists; `/flow-feat-plan` when the train is populated — a new train is a new shape, so a full republish; `/flow-work-resume` (§5), after reading what is on screen; `/flow-work-watch` every cycle; `/flow-work-abandon` with a terminal state. Read-only `status`, `daily`, `config`, `doctor`, `news` never publish; `/flow-work-clean` archives the folder with any panel file inside.
|
|
198
200
|
|
|
199
201
|
## Shortcuts by size
|
|
200
202
|
|
|
@@ -18,7 +18,7 @@ description: "Close a work without shipping (discarded feature, non-issue, etc.)
|
|
|
18
18
|
> - `knowledge.*` roles → whatever tools `FLOW.md` names there; an MCP tool keeps its name, its server is declared under `mcp_servers` in `~/.hermes/config.yaml` (see `config.snippet.yaml`).
|
|
19
19
|
> - `$ARGUMENTS` → what the user typed after the skill name: Hermes takes everything from the first non-skill token on as the instruction.
|
|
20
20
|
|
|
21
|
-
Read `~/.claude/flow/CORE.hermes.md` first (shared rules: `FLOW.md` step 0, autonomy, how a stop reads,
|
|
21
|
+
Read `~/.claude/flow/CORE.hermes.md` first (shared rules: `FLOW.md` step 0, autonomy, how a stop reads, the live panel, `00-summary.md`) — skip if you already read it in this session.
|
|
22
22
|
|
|
23
23
|
Clean closure for works that will not reach the base branch: a feature discarded after `design`, a bug that is not one (expected behavior, external problem, user misconfiguration), a work absorbed by another ticket.
|
|
24
24
|
|
|
@@ -91,7 +91,7 @@ Ask the user what to do with the branch — do not decide alone:
|
|
|
91
91
|
- Update `meta.json`: `phase = "abandoned"`; `phases_done` not touched (it reflects what was actually done); `notes` += abandonment reason; `updated_at` updated.
|
|
92
92
|
- Overwrite `00-summary.md` whole (≤15 lines, flow-core §5).
|
|
93
93
|
- **Tracker: move to won't-do** (never "done" — this work did not ship). Only if `tracker.tool` is not `none`/empty, `tracker.abandon_cmd` is set, and `meta.json.ticket` is a **real tracker id** (skip for local-only slugs). Run `tracker.abandon_cmd` substituting `{TICKET}` = `meta.json.ticket`. Same contract as `/flow-feat-start §6.5`: **best-effort, idempotent, gated** (ask once in `autonomy.mode: manual`; automatic in `guided`/`auto`); failure or already-in-state ticket → warn and continue, never block. `tracker.abandon_cmd` empty → do nothing (the user closes the ticket by hand if they want).
|
|
94
|
-
-
|
|
94
|
+
- Panel published for this work (flow-core §4) → publish a terminal state before archiving: the title, one `block` line saying the work was abandoned and why, no `Decision` line, and `attention` cleared where the panel tools carry it — nothing is waiting on anyone any more.
|
|
95
95
|
- Move the folder to `.claude/work/_archive/` **keeping its directory name** (`_archive/<work-dir>/`, the folder located in §1 — e.g. `<TICKET>-<slug>`) so `/flow-work-status` no longer lists it.
|
|
96
96
|
- Report to the user: ticket abandoned, reason, what was done with the branch.
|
|
97
97
|
|
|
@@ -18,7 +18,7 @@ description: "Sweep what finished work left behind — merged worktrees, dead br
|
|
|
18
18
|
> - `knowledge.*` roles → whatever tools `FLOW.md` names there; an MCP tool keeps its name, its server is declared under `mcp_servers` in `~/.hermes/config.yaml` (see `config.snippet.yaml`).
|
|
19
19
|
> - `$ARGUMENTS` → what the user typed after the skill name: Hermes takes everything from the first non-skill token on as the instruction.
|
|
20
20
|
|
|
21
|
-
Read `~/.claude/flow/CORE.hermes.md` first (shared rules: `FLOW.md` step 0, autonomy, how a stop reads,
|
|
21
|
+
Read `~/.claude/flow/CORE.hermes.md` first (shared rules: `FLOW.md` step 0, autonomy, how a stop reads, the live panel, `00-summary.md`) — skip if you already read it in this session.
|
|
22
22
|
|
|
23
23
|
The forge (`git.cli`) is **best-effort**: CLI missing, unauthenticated, or over ~5s → fall back to the local evidence in §4 and say so in one line; never block.
|
|
24
24
|
|
|
@@ -18,7 +18,7 @@ description: "Your work assistant — a Scrum-style daily standup across all you
|
|
|
18
18
|
> - `knowledge.*` roles → whatever tools `FLOW.md` names there; an MCP tool keeps its name, its server is declared under `mcp_servers` in `~/.hermes/config.yaml` (see `config.snippet.yaml`).
|
|
19
19
|
> - `$ARGUMENTS` → what the user typed after the skill name: Hermes takes everything from the first non-skill token on as the instruction.
|
|
20
20
|
|
|
21
|
-
Read `~/.claude/flow/CORE.hermes.md` first (shared rules: `FLOW.md` step 0, autonomy, how a stop reads,
|
|
21
|
+
Read `~/.claude/flow/CORE.hermes.md` first (shared rules: `FLOW.md` step 0, autonomy, how a stop reads, the live panel, `00-summary.md`) — skip if you already read it in this session.
|
|
22
22
|
|
|
23
23
|
External sources (tracker, forge, `knowledge`) are all **best-effort**: a CLI missing/unauthenticated, an MCP failing, or a call over ~3s → continue without that source and note it in a single line; **never block**.
|
|
24
24
|
|
|
@@ -32,7 +32,7 @@ Usage: `/flow-work-green [mr-iid-or-url]` — optional; default is the MR/PR of
|
|
|
32
32
|
|
|
33
33
|
Extract from `git`: `host`, `cli` (empty → the default for that host), `default_base`. The term MR/PR follows `host`. From `tracker`: `tool`, `prefix`. From `quality`: `test`, `test_one`, `static_analysis`, `style_fix` (local reproduce/verify commands, §5; empty → auto-discover from Makefile / npm / composer scripts), `review_skill` (§5, non-trivial fixes). `agents`: expert sub-agents to delegate fixes to. `knowledge.search` set → `knowledge.search` in §3.
|
|
34
34
|
|
|
35
|
-
Read `~/.claude/flow/CORE.hermes.md` first (shared rules: `FLOW.md` step 0, models, autonomy modes and hard gates, how a stop reads,
|
|
35
|
+
Read `~/.claude/flow/CORE.hermes.md` first (shared rules: `FLOW.md` step 0, models, autonomy modes and hard gates, how a stop reads, the live panel, `00-summary.md`) — skip if you already read it in this session. **Models: the subagents it launches take `models.agents`; the wait it delegates takes `models.supervisors`.**
|
|
36
36
|
|
|
37
37
|
**Autonomy.** Modes as in flow-core §2; `guided`/`auto` record their choices in `09-ci.md` (e.g. a pure formatter auto-fix). **Hard gates — ALWAYS stop and ask, in every mode, no exceptions:**
|
|
38
38
|
1. **Any push** (§6).
|
|
@@ -18,7 +18,7 @@ description: "Put a data-access query on trial — schema, indexes, execution pl
|
|
|
18
18
|
> - `knowledge.*` roles → whatever tools `FLOW.md` names there; an MCP tool keeps its name, its server is declared under `mcp_servers` in `~/.hermes/config.yaml` (see `config.snippet.yaml`).
|
|
19
19
|
> - `$ARGUMENTS` → what the user typed after the skill name: Hermes takes everything from the first non-skill token on as the instruction.
|
|
20
20
|
|
|
21
|
-
Read `~/.claude/flow/CORE.hermes.md` first (shared rules: `FLOW.md` step 0, models, autonomy modes and hard gates, how a stop reads,
|
|
21
|
+
Read `~/.claude/flow/CORE.hermes.md` first (shared rules: `FLOW.md` step 0, models, autonomy modes and hard gates, how a stop reads, the live panel, `00-summary.md`) — skip if you already read it in this session. **Models: the subagents it launches take `models.agents`; its parallel rounds take `models.workers`.**
|
|
22
22
|
|
|
23
23
|
**A query is approved by its plan, not by prose.** Fact sheet → challenger attacks → each point settled with a **plan or a number**. **Cross-cutting** (feat or bug), **repeatable**, does **not** advance `meta.json.phase`; runs with or without a work folder.
|
|
24
24
|
|
|
@@ -28,7 +28,7 @@ Cross-cutting (`feat` or `bug` MR/PR alike), repeatable (one invocation per revi
|
|
|
28
28
|
|
|
29
29
|
Extract from `git`: `host`, `cli` (empty → the default for that host), `assignee`. The term MR/PR follows `host`. From `tracker`: `tool` and `prefix`. From `quality`: `review_skill` (§6, non-trivial rounds). If `knowledge.search` is set, `knowledge.search` runs in §3.
|
|
30
30
|
|
|
31
|
-
Read `~/.claude/flow/CORE.hermes.md` first (shared rules: `FLOW.md` step 0, models, autonomy modes and hard gates, how a stop reads,
|
|
31
|
+
Read `~/.claude/flow/CORE.hermes.md` first (shared rules: `FLOW.md` step 0, models, autonomy modes and hard gates, how a stop reads, the live panel, `00-summary.md`) — skip if you already read it in this session. **Models: this command runs with the model it was launched with (no `models` key).**
|
|
32
32
|
|
|
33
33
|
**Autonomy.** Modes as in flow-core §2 (`autonomy.mode`: `manual` | `guided` | `auto`; empty = `manual`); `guided`/`auto` record their choices in `08-feedback.md`. **Hard gates — ALWAYS stop and ask, in every mode, no exceptions:**
|
|
34
34
|
1. **Posting any comment/reply** to the MR/PR (§7).
|
|
@@ -18,7 +18,7 @@ description: "Resume the work associated with the current branch and suggest the
|
|
|
18
18
|
> - `knowledge.*` roles → whatever tools `FLOW.md` names there; an MCP tool keeps its name, its server is declared under `mcp_servers` in `~/.hermes/config.yaml` (see `config.snippet.yaml`).
|
|
19
19
|
> - `$ARGUMENTS` → what the user typed after the skill name: Hermes takes everything from the first non-skill token on as the instruction.
|
|
20
20
|
|
|
21
|
-
Read `~/.claude/flow/CORE.hermes.md` first (shared rules: `FLOW.md` step 0, autonomy, how a stop reads,
|
|
21
|
+
Read `~/.claude/flow/CORE.hermes.md` first (shared rules: `FLOW.md` step 0, autonomy, how a stop reads, the live panel, `00-summary.md`) — skip if you already read it in this session.
|
|
22
22
|
|
|
23
23
|
Use when returning to a work after a break (next morning, another session).
|
|
24
24
|
|
|
@@ -92,7 +92,7 @@ With what is new (there is already work on disk):
|
|
|
92
92
|
|
|
93
93
|
## 5. Rebuild the live panel
|
|
94
94
|
|
|
95
|
-
After a break
|
|
95
|
+
After a break the panel is most likely stale, and a resumed session is exactly where flow-core §4 asks for `panel_get` **before** publishing: read what is on screen, then publish the whole document from the state just rebuilt (`meta.json`, git, the ticket) — `panel_set` where the terminal offers the panel tools, `.claude/work/<work>/panel.json` overwritten whole where it does not:
|
|
96
96
|
|
|
97
97
|
```json
|
|
98
98
|
{
|
|
@@ -120,4 +120,4 @@ After a break `.claude/work/<work>/panel.json` is most likely stale. Overwrite i
|
|
|
120
120
|
- `Decision` marked `wait` is always set after a resume — nothing is running, the next move is the user's.
|
|
121
121
|
- `block` lines for the blockers §4 surfaced (`contract_handoff` `pending` in a sibling repo, a red pipeline, an unmerged dependency).
|
|
122
122
|
- Train: one entry per `meta.json.mrs[]`, not-started collapsed into one `#a–#z` line; omit without `mrs`.
|
|
123
|
-
- `updated_at` from `date -Iseconds
|
|
123
|
+
- `updated_at` from `date -Iseconds` when the panel goes to the file; every fact from `meta.json` and the artifacts; language of the work's artifacts.
|
|
@@ -18,7 +18,7 @@ description: "Summary of all open works in .claude/work/"
|
|
|
18
18
|
> - `knowledge.*` roles → whatever tools `FLOW.md` names there; an MCP tool keeps its name, its server is declared under `mcp_servers` in `~/.hermes/config.yaml` (see `config.snippet.yaml`).
|
|
19
19
|
> - `$ARGUMENTS` → what the user typed after the skill name: Hermes takes everything from the first non-skill token on as the instruction.
|
|
20
20
|
|
|
21
|
-
Read `~/.claude/flow/CORE.hermes.md` first (shared rules: `FLOW.md` step 0, autonomy, how a stop reads,
|
|
21
|
+
Read `~/.claude/flow/CORE.hermes.md` first (shared rules: `FLOW.md` step 0, autonomy, how a stop reads, the live panel, `00-summary.md`) — skip if you already read it in this session.
|
|
22
22
|
|
|
23
23
|
Overview of works in progress; detects divergences between artifacts and actual git state.
|
|
24
24
|
|
|
@@ -18,7 +18,7 @@ description: "Point the main checkout at a branch to test it (then return), re-s
|
|
|
18
18
|
> - `knowledge.*` roles → whatever tools `FLOW.md` names there; an MCP tool keeps its name, its server is declared under `mcp_servers` in `~/.hermes/config.yaml` (see `config.snippet.yaml`).
|
|
19
19
|
> - `$ARGUMENTS` → what the user typed after the skill name: Hermes takes everything from the first non-skill token on as the instruction.
|
|
20
20
|
|
|
21
|
-
Read `~/.claude/flow/CORE.hermes.md` first (shared rules: `FLOW.md` step 0, autonomy, how a stop reads,
|
|
21
|
+
Read `~/.claude/flow/CORE.hermes.md` first (shared rules: `FLOW.md` step 0, autonomy, how a stop reads, the live panel, `00-summary.md`) — skip if you already read it in this session.
|
|
22
22
|
|
|
23
23
|
Temporarily point the **main checkout** at another branch to test it against this checkout's live environment (running stack, DB, containers), then return — a generic `make wt-try`/`wt-back` pair. The git switch is built in; the project-specific re-sync (e.g. migrations) comes from `git.worktree_resync` in `FLOW.md`. Operates **in place**; never creates or touches worktrees.
|
|
24
24
|
|