flow-workflows 0.82.0 → 0.82.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.
@@ -17,7 +17,7 @@ Every `$flow-*` command assumes these rules. They are stated once, here, so a co
17
17
  carries what is specific to its phase. Read this once per session; a command that says "load
18
18
  `flow-core`" means this file.
19
19
 
20
- **This file belongs to flow `0.82.0`.** Compare it once, at the start of the session, against
20
+ **This file belongs to flow `0.82.1`.** Compare it once, at the start of the session, against
21
21
  `version` in `~/.claude/flow/.claude-plugin/plugin.json`. The two differing means the session
22
22
  is running a **mixture** — the commands from one copy of the plugin, these shared rules from another
23
23
  — which is exactly what happens when a branch or a release candidate is loaded over an installed
@@ -246,7 +246,7 @@ The §3 stop header is still printed at every stop — a log is the only screen
246
246
  | Push and MR/PR creation (`ship`) | `autonomy.unattended_ship: draft` → push the work branch and create the MR/PR **as draft**; never merge, never mark it ready; the forge refusing a draft → blocked, never retried as a normal one. Empty or `stop` → question `ship` |
247
247
  | Writing a DB schema change, index or migration — in any phase, a review's own fixes included — or applying one (`validate`) | question `migration`, before the first line of it is written or run |
248
248
  | `review` with blockers or high-severity findings | question `high_findings` |
249
- | `validate` with a red suite or a criterion `unproven` | blocked — the phase does not advance and does not chain |
249
+ | `validate` with a red suite or a criterion `unproven` | blocked — the phase does not advance and does not chain. **One exception, and it is measured, never judged**: every failing test also fails, under the same name, on the base (`git merge-base HEAD <git.default_base>`, run in a detached worktree), none of them lives in a file this diff touches, and none is the test that proves an acceptance criterion → record `{"key":"unattended:validate-red-base","default":"<n> red on HEAD and on base <short sha>: <test names>","phase":"validate"}` and advance; `ship` lists those tests under "Not verified — needs a human". Short of all three — a failure the base does not reproduce, a base that cannot be run, a test this diff touched — blocked |
250
250
  | A product decision (§7 `decision`) | question `decision` |
251
251
  | Clarifying questions on the ticket (`start`) | question `clarify` — after the branch and the work folder exist, with the questions also written to `01-context.md` |
252
252
  | An unanswered high-severity challenge (`design`, `investigate`) | question `design_challenge` / `investigation_challenge` |
@@ -93,7 +93,7 @@ this is the same gate as a red test.
93
93
 
94
94
  ## 5. Close
95
95
 
96
- - Red test, regressions, **or the original symptom still reproducible in §2.5** → `phase` stays at `fix`; the user iterates. A red gate stops in every mode (in `unattended`, the run ends `blocked` with the failing test named, flow-core §2.1).
96
+ - Red test, regressions, **or the original symptom still reproducible in §2.5** → `phase` stays at `fix`; the user iterates. A red gate stops in every mode (in `unattended`, the run ends `blocked` with the failing test named, flow-core §2.1 — unless every failing test also fails on the base, the one exception that row records; the reproduction test lives in a file this diff touches, so it never qualifies).
97
97
  - Green → `phase = "validate"`, add to `phases_done`; in the same write record `validated_sha` = `git rev-parse HEAD` — the tree the regression test passed on, which `$flow-bug-ship §0` reads. Suggest `$flow-bug-review`.
98
98
  - **Other bugs detected become `followups[]` entries** (flow-core §7) when they clear its bar — a reproducible symptom with someone who suffers it, not «this looks fragile» — per the output template.
99
99
  - **Stage what the validation taught** (`knowledge.stage` set; silence by default): a mutation that stayed green, a disguise the scenario wore, a fixture that could not produce the case — findings about how this codebase is tested, not about this diff. Same rule and evidence line as the review's Close.
@@ -52,7 +52,9 @@ pushes. Each place it would ask:
52
52
  `$flow-feat-build`). It is the last thing the run does.
53
53
 
54
54
  **In every mode**, criteria `07-validation.md` marks `not-verified-unattended` go into the body under
55
- `## Not verified — needs a human`, with what to do for each. The §3 preview shows that section like
55
+ `## Not verified — needs a human`, with what to do for each — and so do the tests the suite left red
56
+ because they also fail on the base (`unattended:validate-red-base`): each name, and the base sha
57
+ where it failed too. The §3 preview shows that section like
56
58
  any other, and the person reading it is the check the run could not do.
57
59
 
58
60
  ## 1. Pre-flight
@@ -225,6 +225,9 @@ Write `.claude/work/<TICKET>/07-validation.md`:
225
225
  - **Autonomy handoff — this one stops in every mode, `auto` included.** `ship` pushes and opens the MR/PR: a hard gate in every mode, so do **not** chain into it. Stop here and propose `$flow-feat-ship` with a single `AskUserQuestion` (recommended option by default), invoking it only when the user confirms. This is the deliberate end of a run in `auto`.
226
226
  **In `unattended`** (flow-core §2.1): the phase advanced → chain into `$flow-feat-ship`, which
227
227
  decides from `autonomy.unattended_ship` between a draft MR/PR and a question. It did not advance
228
- (red suite, a criterion `unproven`) → `blocked`, naming what failed; never chain.
228
+ (red suite, a criterion `unproven`) → `blocked`, naming what failed; never chain. A red suite
229
+ advances only under the base exception of flow-core §2.1: run the failing tests on the base, and
230
+ write each name, its result there and the base sha under "Suite results" in `07-validation.md`.
231
+ Calling a failure "pre-existing" without that run is not the exception — it is a red suite.
229
232
 
230
233
  In `guided`/`auto` this is, together with the brief in `$flow-feat-build §2`, **the only stop of the whole MR/PR** — everything between them ran without a person. It carries the **full stop header** and the body answers, in this order: what is green, what this MR/PR proves and what it does not, and what shipping it takes. Assume the user has read none of the build and review.
@@ -16,7 +16,7 @@ Every `/flow:*` command assumes these rules. They are stated once, here, so a co
16
16
  carries what is specific to its phase. Read this once per session; a command that says "load
17
17
  `flow-core`" means this file.
18
18
 
19
- **This file belongs to flow `0.82.0`.** Compare it once, at the start of the session, against
19
+ **This file belongs to flow `0.82.1`.** Compare it once, at the start of the session, against
20
20
  `version` in `~/.claude/flow/.claude-plugin/plugin.json`. The two differing means the session
21
21
  is running a **mixture** — the commands from one copy of the plugin, these shared rules from another
22
22
  — which is exactly what happens when a branch or a release candidate is loaded over an installed
@@ -245,7 +245,7 @@ The §3 stop header is still printed at every stop — a log is the only screen
245
245
  | Push and MR/PR creation (`ship`) | `autonomy.unattended_ship: draft` → push the work branch and create the MR/PR **as draft**; never merge, never mark it ready; the forge refusing a draft → blocked, never retried as a normal one. Empty or `stop` → question `ship` |
246
246
  | Writing a DB schema change, index or migration — in any phase, a review's own fixes included — or applying one (`validate`) | question `migration`, before the first line of it is written or run |
247
247
  | `review` with blockers or high-severity findings | question `high_findings` |
248
- | `validate` with a red suite or a criterion `unproven` | blocked — the phase does not advance and does not chain |
248
+ | `validate` with a red suite or a criterion `unproven` | blocked — the phase does not advance and does not chain. **One exception, and it is measured, never judged**: every failing test also fails, under the same name, on the base (`git merge-base HEAD <git.default_base>`, run in a detached worktree), none of them lives in a file this diff touches, and none is the test that proves an acceptance criterion → record `{"key":"unattended:validate-red-base","default":"<n> red on HEAD and on base <short sha>: <test names>","phase":"validate"}` and advance; `ship` lists those tests under "Not verified — needs a human". Short of all three — a failure the base does not reproduce, a base that cannot be run, a test this diff touched — blocked |
249
249
  | A product decision (§7 `decision`) | question `decision` |
250
250
  | Clarifying questions on the ticket (`start`) | question `clarify` — after the branch and the work folder exist, with the questions also written to `01-context.md` |
251
251
  | An unanswered high-severity challenge (`design`, `investigate`) | question `design_challenge` / `investigation_challenge` |
@@ -89,7 +89,7 @@ this is the same gate as a red test.
89
89
 
90
90
  ## 5. Close
91
91
 
92
- - Red test, regressions, **or the original symptom still reproducible in §2.5** → `phase` stays at `fix`; the user iterates. A red gate stops in every mode (in `unattended`, the run ends `blocked` with the failing test named, flow-core §2.1).
92
+ - Red test, regressions, **or the original symptom still reproducible in §2.5** → `phase` stays at `fix`; the user iterates. A red gate stops in every mode (in `unattended`, the run ends `blocked` with the failing test named, flow-core §2.1 — unless every failing test also fails on the base, the one exception that row records; the reproduction test lives in a file this diff touches, so it never qualifies).
93
93
  - Green → `phase = "validate"`, add to `phases_done`; in the same write record `validated_sha` = `git rev-parse HEAD` — the tree the regression test passed on, which `/flow:bug:ship §0` reads. Suggest `/flow:bug:review`.
94
94
  - **Other bugs detected become `followups[]` entries** (flow-core §7) when they clear its bar — a reproducible symptom with someone who suffers it, not «this looks fragile» — per the output template.
95
95
  - **Stage what the validation taught** (`knowledge.stage` set; silence by default): a mutation that stayed green, a disguise the scenario wore, a fixture that could not produce the case — findings about how this codebase is tested, not about this diff. Same rule and evidence line as the review's Close.
@@ -48,7 +48,9 @@ pushes. Each place it would ask:
48
48
  `/flow:feat:build`). It is the last thing the run does.
49
49
 
50
50
  **In every mode**, criteria `07-validation.md` marks `not-verified-unattended` go into the body under
51
- `## Not verified — needs a human`, with what to do for each. The §3 preview shows that section like
51
+ `## Not verified — needs a human`, with what to do for each — and so do the tests the suite left red
52
+ because they also fail on the base (`unattended:validate-red-base`): each name, and the base sha
53
+ where it failed too. The §3 preview shows that section like
52
54
  any other, and the person reading it is the check the run could not do.
53
55
 
54
56
  ## 1. Pre-flight
@@ -221,7 +221,10 @@ Write `.claude/work/<TICKET>/07-validation.md`:
221
221
  - **Autonomy handoff — this one stops in every mode, `auto` included.** `ship` pushes and opens the MR/PR: a hard gate in every mode, so do **not** chain into it. Stop here and propose `/flow:feat:ship` with a single `AskUserQuestion` (recommended option by default), invoking it only when the user confirms. This is the deliberate end of a run in `auto`.
222
222
  **In `unattended`** (flow-core §2.1): the phase advanced → chain into `/flow:feat:ship`, which
223
223
  decides from `autonomy.unattended_ship` between a draft MR/PR and a question. It did not advance
224
- (red suite, a criterion `unproven`) → `blocked`, naming what failed; never chain.
224
+ (red suite, a criterion `unproven`) → `blocked`, naming what failed; never chain. A red suite
225
+ advances only under the base exception of flow-core §2.1: run the failing tests on the base, and
226
+ write each name, its result there and the base sha under "Suite results" in `07-validation.md`.
227
+ Calling a failure "pre-existing" without that run is not the exception — it is a red suite.
225
228
 
226
229
  In `guided`/`auto` this is, together with the brief in `/flow:feat:build §2`, **the only stop of the whole MR/PR** — everything between them ran without a person. It carries the **full stop header** and the body answers, in this order: what is green, what this MR/PR proves and what it does not, and what shipping it takes. Assume the user has read none of the build and review.
227
230
  """
@@ -17,7 +17,7 @@ Every `/flow-*` command assumes these rules. They are stated once, here, so a co
17
17
  carries what is specific to its phase. Read this once per session; a command that says "load
18
18
  `flow-core`" means this file.
19
19
 
20
- **This file belongs to flow `0.82.0`.** Compare it once, at the start of the session, against
20
+ **This file belongs to flow `0.82.1`.** Compare it once, at the start of the session, against
21
21
  `version` in `~/.claude/flow/.claude-plugin/plugin.json`. The two differing means the session
22
22
  is running a **mixture** — the commands from one copy of the plugin, these shared rules from another
23
23
  — which is exactly what happens when a branch or a release candidate is loaded over an installed
@@ -246,7 +246,7 @@ The §3 stop header is still printed at every stop — a log is the only screen
246
246
  | Push and MR/PR creation (`ship`) | `autonomy.unattended_ship: draft` → push the work branch and create the MR/PR **as draft**; never merge, never mark it ready; the forge refusing a draft → blocked, never retried as a normal one. Empty or `stop` → question `ship` |
247
247
  | Writing a DB schema change, index or migration — in any phase, a review's own fixes included — or applying one (`validate`) | question `migration`, before the first line of it is written or run |
248
248
  | `review` with blockers or high-severity findings | question `high_findings` |
249
- | `validate` with a red suite or a criterion `unproven` | blocked — the phase does not advance and does not chain |
249
+ | `validate` with a red suite or a criterion `unproven` | blocked — the phase does not advance and does not chain. **One exception, and it is measured, never judged**: every failing test also fails, under the same name, on the base (`git merge-base HEAD <git.default_base>`, run in a detached worktree), none of them lives in a file this diff touches, and none is the test that proves an acceptance criterion → record `{"key":"unattended:validate-red-base","default":"<n> red on HEAD and on base <short sha>: <test names>","phase":"validate"}` and advance; `ship` lists those tests under "Not verified — needs a human". Short of all three — a failure the base does not reproduce, a base that cannot be run, a test this diff touched — blocked |
250
250
  | A product decision (§7 `decision`) | question `decision` |
251
251
  | Clarifying questions on the ticket (`start`) | question `clarify` — after the branch and the work folder exist, with the questions also written to `01-context.md` |
252
252
  | An unanswered high-severity challenge (`design`, `investigate`) | question `design_challenge` / `investigation_challenge` |
@@ -93,7 +93,7 @@ this is the same gate as a red test.
93
93
 
94
94
  ## 5. Close
95
95
 
96
- - Red test, regressions, **or the original symptom still reproducible in §2.5** → `phase` stays at `fix`; the user iterates. A red gate stops in every mode (in `unattended`, the run ends `blocked` with the failing test named, flow-core §2.1).
96
+ - Red test, regressions, **or the original symptom still reproducible in §2.5** → `phase` stays at `fix`; the user iterates. A red gate stops in every mode (in `unattended`, the run ends `blocked` with the failing test named, flow-core §2.1 — unless every failing test also fails on the base, the one exception that row records; the reproduction test lives in a file this diff touches, so it never qualifies).
97
97
  - Green → `phase = "validate"`, add to `phases_done`; in the same write record `validated_sha` = `git rev-parse HEAD` — the tree the regression test passed on, which `/flow-bug-ship §0` reads. Suggest `/flow-bug-review`.
98
98
  - **Other bugs detected become `followups[]` entries** (flow-core §7) when they clear its bar — a reproducible symptom with someone who suffers it, not «this looks fragile» — per the output template.
99
99
  - **Stage what the validation taught** (`knowledge.stage` set; silence by default): a mutation that stayed green, a disguise the scenario wore, a fixture that could not produce the case — findings about how this codebase is tested, not about this diff. Same rule and evidence line as the review's Close.
@@ -52,7 +52,9 @@ pushes. Each place it would ask:
52
52
  `/flow-feat-build`). It is the last thing the run does.
53
53
 
54
54
  **In every mode**, criteria `07-validation.md` marks `not-verified-unattended` go into the body under
55
- `## Not verified — needs a human`, with what to do for each. The §3 preview shows that section like
55
+ `## Not verified — needs a human`, with what to do for each — and so do the tests the suite left red
56
+ because they also fail on the base (`unattended:validate-red-base`): each name, and the base sha
57
+ where it failed too. The §3 preview shows that section like
56
58
  any other, and the person reading it is the check the run could not do.
57
59
 
58
60
  ## 1. Pre-flight
@@ -225,6 +225,9 @@ Write `.claude/work/<TICKET>/07-validation.md`:
225
225
  - **Autonomy handoff — this one stops in every mode, `auto` included.** `ship` pushes and opens the MR/PR: a hard gate in every mode, so do **not** chain into it. Stop here and propose `/flow-feat-ship` with a single `AskUserQuestion` (recommended option by default), invoking it only when the user confirms. This is the deliberate end of a run in `auto`.
226
226
  **In `unattended`** (flow-core §2.1): the phase advanced → chain into `/flow-feat-ship`, which
227
227
  decides from `autonomy.unattended_ship` between a draft MR/PR and a question. It did not advance
228
- (red suite, a criterion `unproven`) → `blocked`, naming what failed; never chain.
228
+ (red suite, a criterion `unproven`) → `blocked`, naming what failed; never chain. A red suite
229
+ advances only under the base exception of flow-core §2.1: run the failing tests on the base, and
230
+ write each name, its result there and the base sha under "Suite results" in `07-validation.md`.
231
+ Calling a failure "pre-existing" without that run is not the exception — it is a red suite.
229
232
 
230
233
  In `guided`/`auto` this is, together with the brief in `/flow-feat-build §2`, **the only stop of the whole MR/PR** — everything between them ran without a person. It carries the **full stop header** and the body answers, in this order: what is green, what this MR/PR proves and what it does not, and what shipping it takes. Assume the user has read none of the build and review.
@@ -16,7 +16,7 @@ Every `/flow-*` command assumes these rules. They are stated once, here, so a co
16
16
  carries what is specific to its phase. Read this once per session; a command that says "load
17
17
  `flow-core`" means this file.
18
18
 
19
- **This file belongs to flow `0.82.0`.** Compare it once, at the start of the session, against
19
+ **This file belongs to flow `0.82.1`.** Compare it once, at the start of the session, against
20
20
  `version` in `~/.claude/flow/.claude-plugin/plugin.json`. The two differing means the session
21
21
  is running a **mixture** — the commands from one copy of the plugin, these shared rules from another
22
22
  — which is exactly what happens when a branch or a release candidate is loaded over an installed
@@ -245,7 +245,7 @@ The §3 stop header is still printed at every stop — a log is the only screen
245
245
  | Push and MR/PR creation (`ship`) | `autonomy.unattended_ship: draft` → push the work branch and create the MR/PR **as draft**; never merge, never mark it ready; the forge refusing a draft → blocked, never retried as a normal one. Empty or `stop` → question `ship` |
246
246
  | Writing a DB schema change, index or migration — in any phase, a review's own fixes included — or applying one (`validate`) | question `migration`, before the first line of it is written or run |
247
247
  | `review` with blockers or high-severity findings | question `high_findings` |
248
- | `validate` with a red suite or a criterion `unproven` | blocked — the phase does not advance and does not chain |
248
+ | `validate` with a red suite or a criterion `unproven` | blocked — the phase does not advance and does not chain. **One exception, and it is measured, never judged**: every failing test also fails, under the same name, on the base (`git merge-base HEAD <git.default_base>`, run in a detached worktree), none of them lives in a file this diff touches, and none is the test that proves an acceptance criterion → record `{"key":"unattended:validate-red-base","default":"<n> red on HEAD and on base <short sha>: <test names>","phase":"validate"}` and advance; `ship` lists those tests under "Not verified — needs a human". Short of all three — a failure the base does not reproduce, a base that cannot be run, a test this diff touched — blocked |
249
249
  | A product decision (§7 `decision`) | question `decision` |
250
250
  | Clarifying questions on the ticket (`start`) | question `clarify` — after the branch and the work folder exist, with the questions also written to `01-context.md` |
251
251
  | An unanswered high-severity challenge (`design`, `investigate`) | question `design_challenge` / `investigation_challenge` |
@@ -91,7 +91,7 @@ this is the same gate as a red test.
91
91
 
92
92
  ## 5. Close
93
93
 
94
- - Red test, regressions, **or the original symptom still reproducible in §2.5** → `phase` stays at `fix`; the user iterates. A red gate stops in every mode (in `unattended`, the run ends `blocked` with the failing test named, flow-core §2.1).
94
+ - Red test, regressions, **or the original symptom still reproducible in §2.5** → `phase` stays at `fix`; the user iterates. A red gate stops in every mode (in `unattended`, the run ends `blocked` with the failing test named, flow-core §2.1 — unless every failing test also fails on the base, the one exception that row records; the reproduction test lives in a file this diff touches, so it never qualifies).
95
95
  - Green → `phase = "validate"`, add to `phases_done`; in the same write record `validated_sha` = `git rev-parse HEAD` — the tree the regression test passed on, which `/flow-bug-ship §0` reads. Suggest `/flow-bug-review`.
96
96
  - **Other bugs detected become `followups[]` entries** (flow-core §7) when they clear its bar — a reproducible symptom with someone who suffers it, not «this looks fragile» — per the output template.
97
97
  - **Stage what the validation taught** (`knowledge.stage` set; silence by default): a mutation that stayed green, a disguise the scenario wore, a fixture that could not produce the case — findings about how this codebase is tested, not about this diff. Same rule and evidence line as the review's Close.
@@ -50,7 +50,9 @@ pushes. Each place it would ask:
50
50
  `/flow-feat-build`). It is the last thing the run does.
51
51
 
52
52
  **In every mode**, criteria `07-validation.md` marks `not-verified-unattended` go into the body under
53
- `## Not verified — needs a human`, with what to do for each. The §3 preview shows that section like
53
+ `## Not verified — needs a human`, with what to do for each — and so do the tests the suite left red
54
+ because they also fail on the base (`unattended:validate-red-base`): each name, and the base sha
55
+ where it failed too. The §3 preview shows that section like
54
56
  any other, and the person reading it is the check the run could not do.
55
57
 
56
58
  ## 1. Pre-flight
@@ -223,6 +223,9 @@ Write `.claude/work/<TICKET>/07-validation.md`:
223
223
  - **Autonomy handoff — this one stops in every mode, `auto` included.** `ship` pushes and opens the MR/PR: a hard gate in every mode, so do **not** chain into it. Stop here and propose `/flow-feat-ship` with a single `AskUserQuestion` (recommended option by default), invoking it only when the user confirms. This is the deliberate end of a run in `auto`.
224
224
  **In `unattended`** (flow-core §2.1): the phase advanced → chain into `/flow-feat-ship`, which
225
225
  decides from `autonomy.unattended_ship` between a draft MR/PR and a question. It did not advance
226
- (red suite, a criterion `unproven`) → `blocked`, naming what failed; never chain.
226
+ (red suite, a criterion `unproven`) → `blocked`, naming what failed; never chain. A red suite
227
+ advances only under the base exception of flow-core §2.1: run the failing tests on the base, and
228
+ write each name, its result there and the base sha under "Suite results" in `07-validation.md`.
229
+ Calling a failure "pre-existing" without that run is not the exception — it is a red suite.
227
230
 
228
231
  In `guided`/`auto` this is, together with the brief in `/flow-feat-build §2`, **the only stop of the whole MR/PR** — everything between them ran without a person. It carries the **full stop header** and the body answers, in this order: what is green, what this MR/PR proves and what it does not, and what shipping it takes. Assume the user has read none of the build and review.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "flow-workflows",
3
- "version": "0.82.0",
3
+ "version": "0.82.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.82.0",
6
+ "version": "0.82.1",
7
7
  "author": {
8
8
  "name": "Alberto Vioque",
9
9
  "email": "mashware@gmail.com"
@@ -5,6 +5,20 @@ 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.82.1 — A red suite no longer ships because the run called it old · 2026-09-29
9
+
10
+ **In short**
11
+ - **An unattended `validate` could pass a red suite on its own judgement.** It decided the failures
12
+ were "pre-existing", chained into `ship`, recorded nothing, and the draft MR/PR never said the suite
13
+ was red.
14
+ - **Now that call is a measurement.** A red suite advances only when every failing test also fails,
15
+ under the same name, on the base; none of them is in a file the diff touches; and none proves an
16
+ acceptance criterion. Anything short of that ends the run `blocked`.
17
+ - **And it is visible.** The run records it in `meta.json`, `07-validation.md` names each test and
18
+ the base it was checked on, and the MR/PR lists them under "Not verified — needs a human".
19
+
20
+ Reported in #172.
21
+
8
22
  ## v0.82.0 — Nobody at the terminal, and the run still gets somewhere · 2026-09-29
9
23
 
10
24
  **In short**