@mu-crew/mu 3.13.0 → 3.13.2
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/dist/{chunk-EPCEEDHG.js → chunk-G434JKV2.js} +2 -2
- package/dist/{chunk-TXV34VWT.js → chunk-KUGUFBWH.js} +14 -3
- package/dist/chunk-KUGUFBWH.js.map +1 -0
- package/dist/{chunk-54WJCMJR.js → chunk-VIEYQMQA.js} +2 -2
- package/dist/{cli-GMJUOXPW.js → cli-CKOMHBXV.js} +5 -5
- package/dist/cli.js +1 -1
- package/dist/extension/mu-pi.js +1 -1
- package/dist/index.js +2 -2
- package/dist/{tui-WSDDTA4K.js → tui-LFJ5P4Y2.js} +3 -3
- package/docs/VOCABULARY.md +13 -0
- package/docs/specs/2026-10-21-fast-and-slow-gates.md +229 -0
- package/package.json +1 -1
- package/skills/mu/SKILL.md +8 -5
- package/skills/mu/recipes/adversarial-review.md +14 -10
- package/skills/mu/recipes/brief.md +7 -2
- package/skills/mu/recipes/orchestrator-loop.md +31 -15
- package/skills/mu/recipes/plan.md +6 -2
- package/skills/mu/recipes/remote-workers.md +12 -8
- package/skills/mu/recipes/review-panel.md +4 -3
- package/skills/mu/recipes/test-health.md +84 -0
- package/skills/mu/recipes/waves.md +3 -3
- package/skills/mu/recipes/worker.md +5 -1
- package/dist/chunk-TXV34VWT.js.map +0 -1
- /package/dist/{chunk-EPCEEDHG.js.map → chunk-G434JKV2.js.map} +0 -0
- /package/dist/{chunk-54WJCMJR.js.map → chunk-VIEYQMQA.js.map} +0 -0
- /package/dist/{cli-GMJUOXPW.js.map → cli-CKOMHBXV.js.map} +0 -0
- /package/dist/{tui-WSDDTA4K.js.map → tui-LFJ5P4Y2.js.map} +0 -0
|
@@ -28,11 +28,12 @@ panel's findings will be fixed by agents. Both modes are in
|
|
|
28
28
|
| correctness | logic errors, edge cases, error paths, races |
|
|
29
29
|
| security | injection, auth and permission checks, secrets, unsafe input |
|
|
30
30
|
| simplicity | duplication, dead code, needless abstraction, an existing helper not reused |
|
|
31
|
-
| tests |
|
|
31
|
+
| tests | risky coverage gaps, ineffective tests, level/duplication/wait/cost findings ([test-health](test-health.md#adding-or-changing-tests)) |
|
|
32
32
|
| rules | the repo's written rules (see [rules-audit](rules-audit.md)) |
|
|
33
33
|
|
|
34
34
|
Each reviewer gets the range, its angle, and the [brief](brief.md)
|
|
35
|
-
rules
|
|
35
|
+
rules and available gate records ([test-health](test-health.md#gate-contract));
|
|
36
|
+
coordinate targeted checks across angles. It edits nothing. A clean result (`FINDINGS: none` plus the
|
|
36
37
|
commands it ran) is a valid result.
|
|
37
38
|
3. **Record findings** by mode:
|
|
38
39
|
- delegate: each reviewer ends its answer with `FINDING:` lines;
|
|
@@ -60,5 +61,5 @@ triage and the umbrella closes with `--if-ready` (workstream mode).
|
|
|
60
61
|
author's tier or higher ([models](models.md#checkers)); one model's
|
|
61
62
|
blind spot repeated five times is still one blind spot. Pass `model`
|
|
62
63
|
to `mu_delegate`.
|
|
63
|
-
- **The panel is not the gate
|
|
64
|
+
- **The panel is not the slow gate.** Merge verification still runs on the
|
|
64
65
|
merged tree ([orchestrator-loop](orchestrator-loop.md#merging)).
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
# Test health
|
|
2
|
+
|
|
3
|
+
Read when defining gates, choosing worker/reviewer verification, adding tests,
|
|
4
|
+
or doing upkeep at a milestone, a budget crossing, or the user's request.
|
|
5
|
+
Testing stays encouraged; upkeep protects coverage and the iteration loop.
|
|
6
|
+
|
|
7
|
+
## Gate contract
|
|
8
|
+
|
|
9
|
+
Use the repo's `## Gates` in AGENTS.md or README: fast and slow commands,
|
|
10
|
+
slow-gate budget (default 5 min), and a targeted slow-test command. Plan notes
|
|
11
|
+
point there. Until a split is approved, keep the existing repo gate intact;
|
|
12
|
+
recipe guidance does not waive project checks. Fast means iteration checks,
|
|
13
|
+
not a universal seconds promise: measure cold and warm costs.
|
|
14
|
+
|
|
15
|
+
- **Worker:** run the fast gate while iterating; before closing, run slow
|
|
16
|
+
tests for the changed area once, then fast on the final commit. Record
|
|
17
|
+
both, or why a scope is inapplicable/unavailable. Changes invalidate records.
|
|
18
|
+
- **Reviewer:** inspect the diff and reuse equivalent worker records. Run
|
|
19
|
+
uncovered tests for the diff and reproduce claimed failures, rather than
|
|
20
|
+
repeating the full suite or building the parent for every new test.
|
|
21
|
+
- **Orchestrator:** verify one pinned merged tree per batch with the full
|
|
22
|
+
slow gate, plus fast if slow does not include it. All required integration,
|
|
23
|
+
auth, release and packaging checks still pass before push. Bisect a failed
|
|
24
|
+
batch; record the corrected tree's pass. See [merging](orchestrator-loop.md#merging).
|
|
25
|
+
|
|
26
|
+
Gate records are task-note text, not a mu command or stored result cache:
|
|
27
|
+
|
|
28
|
+
```text
|
|
29
|
+
GATE: commit=<sha> tree=<hash>; command=<exact command + filters>; scope=<full/area>
|
|
30
|
+
RESULT: exit=<code>; duration=<wall time>; counts=<tests/assertions>; skips=<none or reasons>
|
|
31
|
+
CONDITIONS: <toolchain, host/platform, privileges, relevant env/features, cache state>
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
Reuse requires the same tree, command/scope and equivalent execution
|
|
35
|
+
conditions. Record uncommitted inputs too; a dirty tree hash alone is not
|
|
36
|
+
an identity. A targeted pass, zero selected cases, or a skipped privileged
|
|
37
|
+
check is not a full pass. Clear/reject inherited selectors for full runs;
|
|
38
|
+
report skips explicitly and resolve required missing checks before push.
|
|
39
|
+
|
|
40
|
+
## Adding or changing tests
|
|
41
|
+
|
|
42
|
+
Use the lowest level that catches the failure, covering behaviour not
|
|
43
|
+
already guarded. A new slow case states what only it can see in a comment
|
|
44
|
+
or commit message. For a bug with a cheap, obvious local target, the worker
|
|
45
|
+
shows red on the base and green on the fix; feature work and integration-heavy
|
|
46
|
+
paths need no mandatory red-green ceremony. Use direct executable evidence
|
|
47
|
+
when stronger, recording the reason.
|
|
48
|
+
|
|
49
|
+
Poll readiness/completion with a bound and useful failure output. Retain
|
|
50
|
+
necessary temporal sampling, negative-observation windows and deliberately
|
|
51
|
+
sleeping process fixtures; explain their timing contract.
|
|
52
|
+
|
|
53
|
+
Reviewer findings identify risky untested/broken behaviour, a wrong test
|
|
54
|
+
level, duplication of a named test, avoidable readiness padding, or measured
|
|
55
|
+
gate slowdown—not every conceivable edge case without a test.
|
|
56
|
+
|
|
57
|
+
## Upkeep loop
|
|
58
|
+
|
|
59
|
+
Queue ordinary upkeep work at each phase/milestone end or when a merged slow
|
|
60
|
+
gate exceeds budget. Prioritise it before new features; continue independent
|
|
61
|
+
work. A budget is a scheduling trigger, not an indefinite crew-wide stop.
|
|
62
|
+
|
|
63
|
+
1. **Profile.** Time each gate step and test, including setup/teardown.
|
|
64
|
+
List up to 20 slowest tests per level; inspect waits and repeated builds,
|
|
65
|
+
cold caches and profiles. BEFORE records wall time, counts, skips and
|
|
66
|
+
conditions. Use inspected execution logs, not commands merely mentioning
|
|
67
|
+
a gate or compound-command durations attributed entirely to tests.
|
|
68
|
+
2. **Classify.** Parallel [delegate calls](tasks-or-calls.md#delegate-call),
|
|
69
|
+
one per area, give slow/overlapping tests an evidenced verdict:
|
|
70
|
+
KEEP; SPEED-UP (poll or share setup with isolation); MOVE-DOWN;
|
|
71
|
+
MERGE into a named test; DELETE as covered by a named test.
|
|
72
|
+
3. **Refute.** Send every MERGE/DELETE verdict to a refuter: which failure
|
|
73
|
+
would no longer be caught? A refuted or unresolved verdict becomes KEEP.
|
|
74
|
+
4. **Do.** Dispatch surviving changes as normal test-only tasks. Review
|
|
75
|
+
coverage preservation, isolation and correctness of the harness changes.
|
|
76
|
+
Preserve auth lanes, privilege checks and release scans; measure safe
|
|
77
|
+
[build reuse](orchestrator-loop.md#build-cache) separately.
|
|
78
|
+
5. **Measure.** Run the merged gates and record AFTER under comparable
|
|
79
|
+
conditions, including coverage/count changes. If neither faster nor
|
|
80
|
+
smaller, say so and why; smaller alone does not prove preserved coverage.
|
|
81
|
+
|
|
82
|
+
Done when AFTER records the outcome and the slow gate is within budget, or
|
|
83
|
+
names the remaining bottleneck and prioritised follow-up. Keep unmet required
|
|
84
|
+
checks distinct from a time-budget overrun.
|
|
@@ -10,12 +10,12 @@ runs in its own `--workspace`; this recipe decides what each one gets.
|
|
|
10
10
|
the shared files. A blanket freeze idled four of five workers for a
|
|
11
11
|
day.
|
|
12
12
|
3. **Pipeline the merge.** Cherry-pick each task as it closes and
|
|
13
|
-
verify
|
|
14
|
-
|
|
13
|
+
verify pinned merge batches ([orchestrator-loop § Merging](orchestrator-loop.md#merging));
|
|
14
|
+
batching gates does not mean waiting for the whole wave.
|
|
15
15
|
4. **Refresh before each dispatch.** `mu workspace refresh <agent>`
|
|
16
16
|
rebases onto the tracked main (git: `origin/HEAD`, so unpushed local
|
|
17
17
|
merges are missed; pass `--from <local-branch>` to include them) and
|
|
18
18
|
keeps the agent's context; run it before every `--fresh` send.
|
|
19
19
|
|
|
20
20
|
Done when every task in the wave is `CLOSED/done`, merged, and the
|
|
21
|
-
merged tree passes the gate
|
|
21
|
+
merged tree passes the slow gate and fast if needed, per the repo contract.
|
|
@@ -17,11 +17,15 @@ mu task note <id> "FILES: ...\nCOMMANDS: ... (exit codes)\nDECISION: ...\nVERIFI
|
|
|
17
17
|
mu task close <id> --evidence "tests pass: ..." # LAST action
|
|
18
18
|
```
|
|
19
19
|
|
|
20
|
+
Follow [test-health](test-health.md) for fast iteration checks, targeted slow
|
|
21
|
+
checks before close, gate records, and cheap bug red-green. Include the gate
|
|
22
|
+
records in your final note; adding tests uses its test-level and timing rules.
|
|
23
|
+
|
|
20
24
|
The note follows the task note contract in SKILL.md. Keep each tool
|
|
21
25
|
call to minutes (short batches, waits with a timeout): steering reaches
|
|
22
26
|
you only between tool calls. Commit before you close: the orchestrator cherry-picks your commits, not your tree. A
|
|
23
27
|
review or audit task records each problem per
|
|
24
28
|
[findings § Record](findings.md#record).
|
|
25
29
|
|
|
26
|
-
Done when your changes are committed in the workspace, the task note holds FILES, COMMANDS (with exit codes) and
|
|
30
|
+
Done when your changes are committed in the workspace, the task note holds FILES, COMMANDS (with exit codes), VERIFIED and applicable gate records, and `mu task close` succeeded as your last action. Skipping close makes the orchestrator's
|
|
27
31
|
wait hang. Won't do it: `close --as wontfix --why "..."`.
|