@mmerterden/multi-agent-pipeline 20.23.2 → 20.25.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/CHANGELOG.md +46 -0
- package/README.md +8 -6
- package/README.tr.md +7 -5
- package/docs/architecture.md +3 -3
- package/docs/ecosystem.md +5 -5
- package/docs/facts.json +7 -6
- package/docs/features.md +9 -4
- package/install/catalog-history.json +1 -1
- package/install/templates/claude-hooks.json +14 -1
- package/install/templates/codex-hooks.json +18 -0
- package/manifest.json +126 -98
- package/package.json +1 -1
- package/pipeline/agents/task-clarifier.md +1 -1
- package/pipeline/commands/multi-agent/analysis-jira/SKILL.md +4 -2
- package/pipeline/commands/multi-agent/deps/SKILL.md +61 -0
- package/pipeline/commands/multi-agent/model/SKILL.md +2 -2
- package/pipeline/commands/multi-agent/postmortem/SKILL.md +90 -0
- package/pipeline/commands/multi-agent/review/SKILL.md +5 -5
- package/pipeline/commands/multi-agent/route-on/SKILL.md +1 -1
- package/pipeline/commands/multi-agent/setup/SKILL.md +7 -5
- package/pipeline/commands/multi-agent/sync/SKILL.md +4 -4
- package/pipeline/commands/multi-agent/testflight-validation/SKILL.md +2 -3
- package/pipeline/contract/fixtures/runs-failed.json +1 -1
- package/pipeline/contract/fixtures/runs-old-schema.json +1 -1
- package/pipeline/contract/fixtures/runs-pr-opened-redacted.json +1 -1
- package/pipeline/contract/fixtures/runs-pr-opened.json +1 -1
- package/pipeline/contract/fixtures/runs-running.json +1 -1
- package/pipeline/lib/analysis-jira-write.sh +70 -0
- package/pipeline/lib/credential-inventory.sh +5 -5
- package/pipeline/lib/decisions.mjs +130 -0
- package/pipeline/lib/fetch-crashlytics.sh +6 -8
- package/pipeline/lib/model-rung.sh +1 -1
- package/pipeline/lib/plan-todos.sh +177 -37
- package/pipeline/lib/post-pr-review.sh +4 -6
- package/pipeline/lib/route-state.sh +1 -1
- package/pipeline/lib/shadow-git.sh +4 -5
- package/pipeline/lib/task-graph.mjs +446 -0
- package/pipeline/lib/tdd-evidence.mjs +579 -0
- package/pipeline/multi-agent-refs/analysis-template-corporate.md +2 -0
- package/pipeline/multi-agent-refs/analysis-template.md +4 -2
- package/pipeline/multi-agent-refs/cross-cli-contract.md +10 -11
- package/pipeline/multi-agent-refs/features/analysis-jira.md +42 -0
- package/pipeline/multi-agent-refs/features/autopilot-decisions.md +34 -0
- package/pipeline/multi-agent-refs/features/cost-analysis.md +4 -0
- package/pipeline/multi-agent-refs/features/dep-bump.md +176 -0
- package/pipeline/multi-agent-refs/features/model-fallback.md +21 -14
- package/pipeline/multi-agent-refs/features/mutation-probe.md +58 -0
- package/pipeline/multi-agent-refs/features/plan-checks.md +67 -0
- package/pipeline/multi-agent-refs/features/plan-todos.md +40 -1
- package/pipeline/multi-agent-refs/features/rework-escalation.md +49 -0
- package/pipeline/multi-agent-refs/features/scope-check.md +1 -0
- package/pipeline/multi-agent-refs/help/en.md +2 -0
- package/pipeline/multi-agent-refs/help/tr.md +2 -0
- package/pipeline/multi-agent-refs/phases/phase-0-init.md +1 -1
- package/pipeline/multi-agent-refs/phases/phase-1-plan.md +2 -3
- package/pipeline/multi-agent-refs/phases/phase-2-dev.md +7 -7
- package/pipeline/multi-agent-refs/phases/phase-3-review.md +18 -16
- package/pipeline/multi-agent-refs/phases/phase-5-report.md +3 -3
- package/pipeline/multi-agent-refs/picker-contract.md +3 -2
- package/pipeline/multi-agent-refs/response-shape.md +65 -0
- package/pipeline/multi-agent-refs/tracker-contract.md +6 -6
- package/pipeline/rules/response-shape.md +18 -0
- package/pipeline/schemas/agent-state.schema.json +36 -1
- package/pipeline/schemas/phases.json +4 -0
- package/pipeline/schemas/plan-todos.schema.json +104 -3
- package/pipeline/schemas/planning-output.schema.json +46 -0
- package/pipeline/schemas/prefs.schema.json +122 -3
- package/pipeline/scripts/_code-graph.mjs +2 -2
- package/pipeline/scripts/_jsonl.mjs +151 -0
- package/pipeline/scripts/_plan-overlap.mjs +231 -0
- package/pipeline/scripts/_redact.mjs +124 -10
- package/pipeline/scripts/_transcript-hosts.mjs +406 -0
- package/pipeline/scripts/analysis-story-tree.mjs +153 -8
- package/pipeline/scripts/autopilot-publish.mjs +12 -1
- package/pipeline/scripts/build-stack-plugins.mjs +3 -3
- package/pipeline/scripts/capture-flush.sh +7 -7
- package/pipeline/scripts/code-graph-rules/android.json +1 -1
- package/pipeline/scripts/cost-analyze.mjs +32 -43
- package/pipeline/scripts/cost-table.json +35 -19
- package/pipeline/scripts/decisions-log.mjs +118 -0
- package/pipeline/scripts/dep-bump.mjs +1556 -0
- package/pipeline/scripts/edit-syntax-gate.mjs +362 -0
- package/pipeline/scripts/edit-syntax-gate.sh +32 -0
- package/pipeline/scripts/find-polluter.mjs +281 -0
- package/pipeline/scripts/gate-ledger.mjs +46 -13
- package/pipeline/scripts/gc-abandoned.sh +2 -2
- package/pipeline/scripts/gen-mode-dispatch.mjs +3 -3
- package/pipeline/scripts/git-path.mjs +1 -2
- package/pipeline/scripts/host-hooks.mjs +265 -0
- package/pipeline/scripts/jira-attach.sh +1 -1
- package/pipeline/scripts/keychain.py +3 -3
- package/pipeline/scripts/mutation-probe.mjs +484 -0
- package/pipeline/scripts/output-quality-check.sh +1 -1
- package/pipeline/scripts/phase-tracker.sh +5 -6
- package/pipeline/scripts/phase0-exit-gate.mjs +3 -3
- package/pipeline/scripts/plan-complexity.mjs +259 -0
- package/pipeline/scripts/pre-push-check.sh +3 -6
- package/pipeline/scripts/review-decision-gate.mjs +33 -1
- package/pipeline/scripts/rework-escalation.mjs +264 -0
- package/pipeline/scripts/test-strength.mjs +5 -3
- package/pipeline/scripts/transcript-index.mjs +1131 -0
- package/pipeline/scripts/uninstall.mjs +90 -4
- package/pipeline/scripts/update-issue-progress.sh +4 -6
- package/pipeline/scripts/usage-report.mjs +2 -2
- package/pipeline/scripts/validate-planning.mjs +48 -6
- package/pipeline/skills/.skill-manifest.json +20 -12
- package/pipeline/skills/.skills-index.json +23 -1
- package/pipeline/skills/shared/README.md +5 -3
- package/pipeline/skills/shared/core/multi-agent/SKILL.md +6 -6
- package/pipeline/skills/shared/core/multi-agent-analysis-jira/SKILL.md +4 -2
- package/pipeline/skills/shared/core/multi-agent-deps/SKILL.md +60 -0
- package/pipeline/skills/shared/core/multi-agent-model/SKILL.md +2 -2
- package/pipeline/skills/shared/core/multi-agent-postmortem/SKILL.md +69 -0
- package/pipeline/skills/shared/core/multi-agent-review/SKILL.md +5 -5
- package/pipeline/skills/shared/core/multi-agent-route-on/SKILL.md +1 -1
- package/pipeline/skills/shared/core/multi-agent-setup/SKILL.md +7 -5
- package/pipeline/skills/shared/core/multi-agent-sync/SKILL.md +4 -4
- package/pipeline/skills/shared/core/multi-agent-testflight-validation/SKILL.md +2 -3
- package/pipeline/skills/shared/external/app-store-optimization/SKILL.md +15 -0
- package/pipeline/skills/shared/external/app-store-optimization/evals/evals.json +13 -0
- package/pipeline/skills/shared/external/debugging-strategies/SKILL.md +8 -0
- package/pipeline/skills/shared/external/ios-coding-standard/references/rules.yml +2 -2
- package/pipeline/skills/skills-index.md +3 -1
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: multi-agent-postmortem
|
|
3
|
+
description: "Post-mortem of a run from its session transcripts: loops, stalls, root-cause hypotheses on file:line, fixes. Read-only, redacted. Use when a run went wrong or ran far too long."
|
|
4
|
+
user-invocable: true
|
|
5
|
+
argument-hint: "[#id | transcript.jsonl] [--audit] - a run (task id or #N) or a session file; no argument means the most recent run. --audit re-checks the draft against the index"
|
|
6
|
+
metadata:
|
|
7
|
+
language: en
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# multi-agent postmortem - Run Post-Mortem
|
|
11
|
+
|
|
12
|
+
**Input**: $ARGUMENTS
|
|
13
|
+
|
|
14
|
+
Explains what a run actually did, read from the session transcripts it ran in,
|
|
15
|
+
not from what the run log says it decided. The evidence comes from a
|
|
16
|
+
deterministic indexer; the model only interprets it.
|
|
17
|
+
|
|
18
|
+
**Read-only.** Nothing is sent anywhere: no issue comment, no PR, no channel.
|
|
19
|
+
The one write is the report itself, saved under the run's log directory.
|
|
20
|
+
|
|
21
|
+
The indexer reads Claude Code session files (`~/.claude/projects/<dir>/<session>.jsonl`),
|
|
22
|
+
Copilot CLI session logs (`~/.copilot/session-state/<session>/events.jsonl`) and
|
|
23
|
+
Codex rollouts (`~/.codex/sessions/YYYY/MM/DD/rollout-*.jsonl`), detecting the
|
|
24
|
+
format per file. Copilot CLI reports tokens per session, so its totals come from
|
|
25
|
+
the shutdown record. When a run id finds nothing (exit 3), say so and ask for a
|
|
26
|
+
transcript path rather than reporting an empty run.
|
|
27
|
+
|
|
28
|
+
## Steps
|
|
29
|
+
|
|
30
|
+
1. **Resolve the target.**
|
|
31
|
+
- A path ending in `.jsonl` (any of the three hosts): index that file
|
|
32
|
+
(Claude Code subagent files beside it are included). There is no run directory, so nothing is saved unless the user
|
|
33
|
+
names one.
|
|
34
|
+
- A task id or `#N`: locate the run and its transcripts:
|
|
35
|
+
```bash
|
|
36
|
+
node "$HOME/.claude/scripts/transcript-index.mjs" --run "<id>" --locate
|
|
37
|
+
```
|
|
38
|
+
`matchedBy: "session"` means the run recorded its session id and the match
|
|
39
|
+
is exact. `"time-window"` means it did not, so the files are the sessions,
|
|
40
|
+
on any host, that ran in the run's worktree or checkout while it was active; say that
|
|
41
|
+
this match is a heuristic. Exit 3 with a `reason`: report the reason, and
|
|
42
|
+
offer to take a transcript path instead.
|
|
43
|
+
- No argument: take the most recent run from
|
|
44
|
+
`node "$HOME/.claude/scripts/runs-index.mjs" --json` (latest `startedAt`)
|
|
45
|
+
and continue as above.
|
|
46
|
+
|
|
47
|
+
2. **Index.**
|
|
48
|
+
```bash
|
|
49
|
+
node "$HOME/.claude/scripts/transcript-index.mjs" --run "<id>" # or: <file.jsonl>
|
|
50
|
+
```
|
|
51
|
+
Every item in the output carries `file:line`, the line of the JSONL it came
|
|
52
|
+
from. Exit 4 means the redaction guard found a credential left in the output
|
|
53
|
+
and printed nothing: report that and stop; never fall back to reading the
|
|
54
|
+
transcript directly. Read only the index, never the transcript files.
|
|
55
|
+
|
|
56
|
+
3. **Write the post-mortem** in `prefs.global.outputLanguage`, short: what
|
|
57
|
+
happened (five lines or fewer); where it looped or stalled, with citations;
|
|
58
|
+
root-cause hypotheses, each anchored to at least one `file:line` (one with
|
|
59
|
+
no citation is left out); suggested fixes tied to a hypothesis; evidence
|
|
60
|
+
limits (matching method, malformed or truncated lines, the redaction count).
|
|
61
|
+
Quote only excerpts the index already shows.
|
|
62
|
+
|
|
63
|
+
4. **Audit pass** (`--audit`): every cited `file:line` must exist in the index
|
|
64
|
+
and say what the draft claims, every count must match. Correct or drop what
|
|
65
|
+
does not hold, and add `audit: N claims checked, M corrected`.
|
|
66
|
+
|
|
67
|
+
5. **Save.** With a run directory, write the report to
|
|
68
|
+
`<runDir>/postmortem.md` (`~` expanded) and give the path. That file is the
|
|
69
|
+
only write this command makes.
|
|
@@ -43,14 +43,14 @@ Skip Phase 0-3 and review a diff only. Input shapes: a PR (`#N`, `repo#N`, GitHu
|
|
|
43
43
|
|
|
44
44
|
**Claude Code (3 in parallel while the fable rung is on, 2 while it is off).** Resolve the fable slots first; this command has no Phase 0:
|
|
45
45
|
`REVIEW_RUNG=$(bash "$HOME/.claude/lib/model-dispatch.sh" subagent --persona reviewer --default fable)` and the same with `--persona triage` for `TRIAGE_RUNG`. Anything but `fable` drops Agent 1 and runs triage on `TRIAGE_RUNG`.
|
|
46
|
-
- Agent 1: `claude-fable-5` → security + architecture (only when `REVIEW_RUNG` is `fable`)
|
|
47
|
-
- Agent 2: `claude-opus-5` → edge cases, different perspective
|
|
48
|
-
- Agent 3: `claude-sonnet-5` → general quality
|
|
46
|
+
- Agent 1: `claude-fable-5-1` → security + architecture (only when `REVIEW_RUNG` is `fable`)
|
|
47
|
+
- Agent 2: `claude-opus-5-5` → edge cases, different perspective
|
|
48
|
+
- Agent 3: `claude-sonnet-5-5` → general quality
|
|
49
49
|
|
|
50
50
|
**Copilot CLI (3 in parallel):**
|
|
51
|
-
- Agent 1: `claude-opus-
|
|
51
|
+
- Agent 1: `claude-opus-4.7` → security + architecture (Fable is not offered on Copilot CLI)
|
|
52
52
|
- Agent 2: `gpt-5.4` → edge cases, different perspective
|
|
53
|
-
- Agent 3: `claude-sonnet-
|
|
53
|
+
- Agent 3: `claude-sonnet-4.6` → general quality
|
|
54
54
|
|
|
55
55
|
**Codex CLI (3 in parallel, single vendor):**
|
|
56
56
|
- Agent 1: `gpt-5.6` @ `xhigh` → security + architecture
|
|
@@ -29,7 +29,7 @@ honoured only at `bulk-read` and `delegate` and only while `--free` is on.
|
|
|
29
29
|
|
|
30
30
|
**Rung names are the contract; model ids are not.** `opus` is a rung here and a
|
|
31
31
|
model id in `cost-table.json`, and the second can change without anyone editing
|
|
32
|
-
a rule. Writing `claude-opus-5` into a rule pins a decision to a string that will
|
|
32
|
+
a rule. Writing `claude-opus-5-5` into a rule pins a decision to a string that will
|
|
33
33
|
go stale.
|
|
34
34
|
|
|
35
35
|
Set rules with:
|
|
@@ -322,14 +322,16 @@ On a new machine: (1) `npx @{npm-scope}/multi-agent-pipeline install`; (2) `/mul
|
|
|
322
322
|
|
|
323
323
|
All tokens are optional in the sense that every service can be answered with Skip - but the ASKING is not optional: the Step 3 sequential loop still walks every missing service one by one (token → author → host). Phase 0 re-asks at runtime only for tokens the user skipped here.
|
|
324
324
|
|
|
325
|
-
### Step 8 - Enforcement hooks (optional
|
|
325
|
+
### Step 8 - Enforcement hooks (optional)
|
|
326
326
|
|
|
327
|
-
|
|
327
|
+
On Claude Code, offer to merge `$HOME/.claude/templates/claude-hooks.json`: three blocking `PreToolUse` gates (secret scan, agent-guard, read-size) plus four non-blocking hooks (`PreCompact`, `SessionEnd`, `SessionStart`, `PostToolUse`). What each does: `$HOME/.claude/multi-agent-refs/picker-contract.md`.
|
|
328
328
|
|
|
329
329
|
- Ask (picker): "Install the pipeline's hooks into `~/.claude/settings.json`?" Default Yes.
|
|
330
|
-
- On Yes, deep-merge EVERY event in the template's `hooks` object
|
|
331
|
-
- Say
|
|
332
|
-
- Say
|
|
330
|
+
- On Yes, deep-merge EVERY event in the template's `hooks` object (merging `PreToolUse` alone drops the capture hooks); keep existing hooks, never duplicate a matcher calling the same script.
|
|
331
|
+
- Say only the three gates are hookable (no run-specific arguments); the rest are phase-enforced.
|
|
332
|
+
- Say the read-size gate stays inert until `prefs.global.bulkRead.mode` is set; recommend `observe` first (why, and the Phase 3 exemption: `picker-contract.md`).
|
|
333
|
+
|
|
334
|
+
Codex: offer only the syntax gate, then run `node "$HOME/.codex/scripts/host-hooks.mjs" install --host codex`. Copilot CLI: offer no hook (it discards `postToolUse` output as of 1.0.45).
|
|
333
335
|
|
|
334
336
|
### Step 9 - Default stack plugin enablement
|
|
335
337
|
|
|
@@ -33,7 +33,7 @@ Run all steps automatically:
|
|
|
33
33
|
```
|
|
34
34
|
Step 0: DOCTOR node $HOME/.claude/scripts/doctor.mjs - exit 2 or 4 STOPS the sync
|
|
35
35
|
Step 1: DETECT Compare timestamps, find stale targets
|
|
36
|
-
Step 2: COPILOT Claude Code -> Copilot CLI (instructions +
|
|
36
|
+
Step 2: COPILOT Claude Code -> Copilot CLI (instructions + 66 sub-command skills)
|
|
37
37
|
Step 2b: CODEX Claude Code -> Codex CLI (1 router skill + sub-command specs as refs + agent TOML)
|
|
38
38
|
Step 3: REPO Claude Code -> pipeline repo (genericized, personal data scrub)
|
|
39
39
|
Step 3d: DEV-TOOLKIT Companion MCP server -> detect movement, ship gates, commit + publish
|
|
@@ -229,14 +229,14 @@ When invoked with the `release` argument:
|
|
|
229
229
|
|-------------|-------------|
|
|
230
230
|
| `~/.claude/commands/multi-agent/{cmd}/SKILL.md` | `~/.copilot/skills/multi-agent-{cmd}/SKILL.md` |
|
|
231
231
|
|
|
232
|
-
**
|
|
232
|
+
**66 commands are synced** (canonical inventory - must match `cross-cli-contract.md` section 1; drift = contract violation):
|
|
233
233
|
|
|
234
234
|
```
|
|
235
235
|
analysis, analysis-jira, analysis-resolve, autopilot, autopilot-off,
|
|
236
236
|
autopilot-on, autopilot-status, bug-bash, build-optimize, channels, complaint-analysis,
|
|
237
|
-
create-jira, design-check, diff-explain, doctor, estimate, feedback, forget,
|
|
237
|
+
create-jira, deps, design-check, diff-explain, doctor, estimate, feedback, forget,
|
|
238
238
|
garbage-collect, graph, help, ios-coding-standard, issue, jira, kill,
|
|
239
|
-
language, log, manual-test, model, prune-logs,
|
|
239
|
+
language, log, manual-test, model, postmortem, prune-logs,
|
|
240
240
|
prune-prompts, purge, refactor, research, resume, review,
|
|
241
241
|
review-analysis, review-issue, review-jira, route-off, route-on,
|
|
242
242
|
route-status, routines, save, scaffold, scan, scenario-audit, search,
|
|
@@ -9,10 +9,9 @@ metadata:
|
|
|
9
9
|
|
|
10
10
|
# multi-agent-testflight-validation - iOS alias for store-ready
|
|
11
11
|
|
|
12
|
-
This skill is an alias. The implementation
|
|
12
|
+
This skill is an alias. The implementation lives in
|
|
13
13
|
`multi-agent-store-ready`, which runs the same three gates on iOS and adds the
|
|
14
|
-
Android side, so there is one flow to maintain instead of two that
|
|
15
|
-
started to drift.
|
|
14
|
+
Android side, so there is one flow to maintain instead of two that drift.
|
|
16
15
|
|
|
17
16
|
The name is kept because it is the one people reach for when the target is
|
|
18
17
|
TestFlight, and removing a surface is a breaking change.
|
|
@@ -189,6 +189,21 @@ autoplay off, its poster frame is all they see, so pick a frame that could stand
|
|
|
189
189
|
alone as a screenshot. Device sizes and other screenshot requirements are in
|
|
190
190
|
`app-store-review`.
|
|
191
191
|
|
|
192
|
+
**Composing the frame.** The screen inside every frame is a real capture of the
|
|
193
|
+
shipping app; a generated or mocked-up UI misrepresents the app and is a review
|
|
194
|
+
risk. When a designer or an image tool builds the marketing frame around that
|
|
195
|
+
capture, brief it in this order so nothing is left to guess:
|
|
196
|
+
|
|
197
|
+
1. Platform, device frame and exact output size or aspect ratio.
|
|
198
|
+
2. The capture itself, named as the asset to place, unedited.
|
|
199
|
+
3. The caption, quoted verbatim per locale, with its position (above or below).
|
|
200
|
+
4. Layout and style from the brand's own tokens: background, type, accent.
|
|
201
|
+
5. Explicit exclusions: no invented UI or data, no other brands' devices or
|
|
202
|
+
logos, no prices or offers that differ by market, nothing over the status
|
|
203
|
+
bar or the capture's own text.
|
|
204
|
+
|
|
205
|
+
Keep the brief as text beside the frames so a new locale or size reuses it.
|
|
206
|
+
|
|
192
207
|
## Asking for reviews in the app
|
|
193
208
|
|
|
194
209
|
Use the SwiftUI environment value `RequestReviewAction` or, from UIKit,
|
|
@@ -45,6 +45,19 @@
|
|
|
45
45
|
"Keeps an ASO cross-check of listing copy and screenshots for accuracy and conversion",
|
|
46
46
|
"Never suggests competitor names, unrelated keywords or misleading screenshots"
|
|
47
47
|
]
|
|
48
|
+
},
|
|
49
|
+
{
|
|
50
|
+
"id": 4,
|
|
51
|
+
"name": "screenshot-frame-brief",
|
|
52
|
+
"prompt": "Our designer wants to use an AI image tool to make the App Store screenshots for our budgeting app, including the app screens. Write the brief we should give them for the first three frames.",
|
|
53
|
+
"expected_output": "Insists the screen inside each frame is a real capture of the shipping app, not generated UI. Orders the brief: device frame and size, the capture as the asset, the verbatim caption per locale and its position, layout and style from brand tokens, and explicit exclusions (no invented UI or data, no other brands' devices or logos, no market-specific prices). Gives each of the three frames a distinct benefit with the main value proposition first.",
|
|
54
|
+
"expectations": [
|
|
55
|
+
"Says the screen in each frame must be a real capture of the shipping app, not generated or mocked-up UI",
|
|
56
|
+
"Orders the brief: device frame and size, the capture as the asset, the verbatim caption per locale and its position, layout and style from brand tokens, explicit exclusions",
|
|
57
|
+
"Lists exclusions including no invented UI or data and no other brands' devices or logos",
|
|
58
|
+
"Puts the main value proposition in the first frame and gives each of the three a different benefit"
|
|
59
|
+
],
|
|
60
|
+
"files": []
|
|
48
61
|
}
|
|
49
62
|
]
|
|
50
63
|
}
|
|
@@ -58,6 +58,14 @@ reproduction that runs in seconds:
|
|
|
58
58
|
For an intermittent failure, loop it: run the test a few hundred times and count
|
|
59
59
|
failures. A rate is an observation you can compare before and after a change.
|
|
60
60
|
|
|
61
|
+
A test that passes alone but fails in the suite, or a file the suite leaves
|
|
62
|
+
behind, is pollution from an earlier test: bisect the test list instead of reading
|
|
63
|
+
every test. With the multi-agent pipeline installed, `node
|
|
64
|
+
$HOME/.claude/scripts/find-polluter.mjs --run "<cmd> {test}" --list <file> --target
|
|
65
|
+
<id> --reset "<cmd>"` (or `--absent <path>`) does the halving. The reset command
|
|
66
|
+
restores whatever the tests mutate before each trial; without it a target whose
|
|
67
|
+
state persists between trials stops the search with exit 2.
|
|
68
|
+
|
|
61
69
|
## 3. Shrink the failing case
|
|
62
70
|
|
|
63
71
|
A smaller case has fewer places for the bug to hide.
|
|
@@ -704,7 +704,7 @@ rules:
|
|
|
704
704
|
enforcement: judgement
|
|
705
705
|
rationale: testability
|
|
706
706
|
check: >
|
|
707
|
-
Two
|
|
707
|
+
Two concerns meet in this rule, and conflating them pushes modules toward the wrong fix
|
|
708
708
|
in both directions. Separate them:
|
|
709
709
|
**The failure vocabulary is module-scoped.** The set of ways a call can fail - offline,
|
|
710
710
|
timeout, unauthorised, not-found, conflict, server, unknown - is one type the whole module
|
|
@@ -925,7 +925,7 @@ rules:
|
|
|
925
925
|
check: >
|
|
926
926
|
When the app ships a wrapper for a platform affordance - a sheet, a date picker, a toast -
|
|
927
927
|
a feature module calls the wrapper, never the OS API underneath. The wrapper exists
|
|
928
|
-
because the OS
|
|
928
|
+
because the OS changes the affordance between releases: iOS 26 forced a
|
|
929
929
|
Liquid-Glass inset onto partial-detent sheets with no opt-out, which put a gap down the
|
|
930
930
|
side and bottom of every raw `.sheet` and swallowed a pushed picker's selection.
|
|
931
931
|
The tell that this rule was skipped: one module's sheets look different from the rest of
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
> Auto-generated by `pipeline/scripts/build-skills-index.mjs` - do not hand-edit.
|
|
4
4
|
> Regenerate with `node pipeline/scripts/build-skills-index.mjs`.
|
|
5
5
|
|
|
6
|
-
**
|
|
6
|
+
**230 skills** across 2 groups.
|
|
7
7
|
|
|
8
8
|
| Group | Name | Platform | Description |
|
|
9
9
|
|-------|------|----------|-------------|
|
|
@@ -111,6 +111,7 @@
|
|
|
111
111
|
| core | `multi-agent-channels` | - | Multi-channel reporter - Jira/Confluence/Wiki/PR description. Multi-select channels + content, humanizer pass, reviewer-preserving Bitbuck |
|
|
112
112
|
| core | `multi-agent-complaint-analysis` | - | Customer-complaint triage. Ingests complaints (paste, csv/xlsx/txt/json file, Jira issue, Confluence URL), fetches Graylog evidence per trx/ |
|
|
113
113
|
| core | `multi-agent-create-jira` | - | Create a standards-compliant Jira issue (Task / Bug / Story): asks the type, mines project conventions, drafts from a standard template with |
|
|
114
|
+
| core | `multi-agent-deps` | - | Bump one dependency, fix only what the bump broke, review, open a PR; rolls back past the fix round cap. SwiftPM, Gradle, npm, pip. Use when |
|
|
114
115
|
| core | `multi-agent-design-check` | - | Mock-mode vs Figma design audit (iOS / Android, local-only). Pick repo + module, gate on mock support, enumerate every state driver into a c |
|
|
115
116
|
| core | `multi-agent-diff-explain` | - | Map Phase 3 triage findings to branch diff lines. Read-only post-hoc command, used after review to answer 'which finding lines up with which |
|
|
116
117
|
| core | `multi-agent-doctor` | - | Health check for the installed pipeline: layout, preferences, credentials, hooks and host capabilities, each with one actionable step. Exit |
|
|
@@ -128,6 +129,7 @@
|
|
|
128
129
|
| core | `multi-agent-log` | - | Show the agent-log.md for the given task. With no ID, shows the most recent task. Use when asked what a task did, or to read its log. |
|
|
129
130
|
| core | `multi-agent-manual-test` | - | Switch to the active task's branch and prepare it for manual testing in Xcode. Phase 3 user-test step, standalone (the UI Bug Hunter lives a |
|
|
130
131
|
| core | `multi-agent-model` | - | Turn the top model rung on or off and keep the cost ledger's pricing in step with it. Use when asked to enable or disable Fable, or which mo |
|
|
132
|
+
| core | `multi-agent-postmortem` | - | Post-mortem of a run from its session transcripts: loops, stalls, root-cause hypotheses on file:line, fixes. Read-only, redacted. Use when a |
|
|
131
133
|
| core | `multi-agent-prune-logs` | - | Delete per-task project logs under ~/.claude/logs/multi-agent (filter by age/project/task). Audit trail + metrics are preserved. Dry-run fir |
|
|
132
134
|
| core | `multi-agent-prune-prompts` | - | Zero-base prompt review: measure the always-on instruction footprint, classify every rule block, propose keep/trial-removal/delete; applies |
|
|
133
135
|
| core | `multi-agent-purge` | - | ⚠️ Wipes every worktree, branch, log, and state file. Irreversible; asks for double confirmation. Use when every worktree, branch, log and s |
|