@mmerterden/multi-agent-pipeline 20.28.0 → 20.29.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.
Files changed (50) hide show
  1. package/CHANGELOG.md +13 -0
  2. package/README.md +14 -1
  3. package/docs/facts.json +1 -1
  4. package/install/claude.mjs +112 -0
  5. package/install/templates/claude-hooks.json +30 -1
  6. package/manifest.json +53 -42
  7. package/package.json +1 -1
  8. package/pipeline/commands/multi-agent/analysis/SKILL.md +3 -1
  9. package/pipeline/commands/multi-agent/resume/SKILL.md +2 -1
  10. package/pipeline/contract/types/index.d.ts +1 -1
  11. package/pipeline/lib/hook-registration.mjs +252 -0
  12. package/pipeline/lib/prefs-value.mjs +44 -0
  13. package/pipeline/lib/run-completion.mjs +148 -0
  14. package/pipeline/multi-agent-refs/analysis/render.md +4 -4
  15. package/pipeline/multi-agent-refs/features/doctor.md +11 -0
  16. package/pipeline/multi-agent-refs/phases/operations.md +17 -0
  17. package/pipeline/multi-agent-refs/phases/phase-0-init.md +6 -2
  18. package/pipeline/multi-agent-refs/phases/phase-1-plan.md +2 -2
  19. package/pipeline/multi-agent-refs/phases/phase-2-dev.md +1 -1
  20. package/pipeline/multi-agent-refs/phases/phase-3-review.md +2 -2
  21. package/pipeline/multi-agent-refs/phases/phase-4-commit.md +7 -6
  22. package/pipeline/multi-agent-refs/phases/phase-5-report.md +5 -4
  23. package/pipeline/preferences-template.json +7 -0
  24. package/pipeline/rules/figma-pipeline.md +2 -0
  25. package/pipeline/schemas/agent-state.schema.json +20 -5
  26. package/pipeline/schemas/phases.json +3 -2
  27. package/pipeline/schemas/phases.schema.json +5 -1
  28. package/pipeline/schemas/prefs.schema.json +37 -0
  29. package/pipeline/schemas/runs-index.schema.json +1 -1
  30. package/pipeline/scripts/_active-run.mjs +158 -0
  31. package/pipeline/scripts/_autopilot-outcomes.mjs +1 -0
  32. package/pipeline/scripts/_guard_rules.py +605 -0
  33. package/pipeline/scripts/agent-guard.py +118 -7
  34. package/pipeline/scripts/agent-guard.sh +50 -3
  35. package/pipeline/scripts/argv-secret-scan.mjs +114 -0
  36. package/pipeline/scripts/autopilot-runner.mjs +8 -2
  37. package/pipeline/scripts/confirm-command.mjs +70 -0
  38. package/pipeline/scripts/doctor.mjs +54 -0
  39. package/pipeline/scripts/evidence-gate.mjs +8 -4
  40. package/pipeline/scripts/gate-ledger.mjs +163 -7
  41. package/pipeline/scripts/plan-coverage-gate.mjs +9 -8
  42. package/pipeline/scripts/pre-commit-check.sh +12 -0
  43. package/pipeline/scripts/run-scope-guard.mjs +188 -0
  44. package/pipeline/scripts/run-scope-guard.sh +23 -0
  45. package/pipeline/scripts/run-stop-guard.mjs +246 -0
  46. package/pipeline/scripts/run-stop-guard.sh +25 -0
  47. package/pipeline/scripts/uninstall.mjs +1 -0
  48. package/pipeline/scripts/validate-state.mjs +26 -0
  49. package/pipeline/scripts/write-state.mjs +114 -0
  50. package/pipeline/skills/.skill-manifest.json +1 -1
package/CHANGELOG.md CHANGED
@@ -16,6 +16,19 @@ Internal file-layout changes that don't affect the slash-command surface are sti
16
16
 
17
17
  ## [Unreleased]
18
18
 
19
+ ## [20.29.0] - 2026-10-24
20
+
21
+ ### Added
22
+
23
+ - `run-stop-guard` (Stop hook): a session that drives a pipeline run cannot end its turn mid-run without finishing the current phase, recording an attended wait (`waitingFor: "attended-reply"` or `"local-test"`) or recording a halt. It acts only on the run bound to the session (`sessionId` or the new `hostSessionId` that write-state stamps on every phase move), never on a run matched by worktree alone, lets a turn through when it ends asking the user something, when background tasks or session crons are pending, and after three consecutive holds writes the halt itself. It fails open on any internal error and is switched off with `prefs.global.stopGuard.enabled: false`. SubagentStop is never held.
24
+ - `write-state.mjs` accepts `status: "complete"` only on the run's final phase with Phase 4 evidence (a commit sha, PR or publish, or a noted skip) and a passing plan-coverage verdict; otherwise it exits 6 and writes nothing. Phase 5 reads that exit and reports the run completed only on success; the autopilot runner treats it as `stopped-incomplete` and retries.
25
+ - Attended commit evidence check (`prefs.global.attendedCommitGate.mode`: `warn` by default, `block`, `off`), judged only against a live run.
26
+ - `agent-guard`: AI attribution read from the commit message itself (message, `-F` file, heredoc body, or the whole line when the file is written on that line), skipped hooks (`--no-verify` and its prefixes, `commit -n`, `core.hooksPath`, `HUSKY=0`, `GIT_CONFIG_*`), plain secrets on argv (local development DSNs exempt), and an ask for issue close, Closes/Fixes/Resolves in a PR body and Jira transitions; in bypassPermissions and dontAsk a confirmation record written after the user's answer lets the exact command through once.
27
+ - `run-scope-guard`: Figma MCP calls are refused after Phase 1 of a live, non-analysis run bound to the session; `/multi-agent:analysis` records its run at start. Attended edits outside the run's worktree raise a warning.
28
+ - `prefs.global.readOnlyRepos[]`: checkouts that may not be edited, committed or pushed.
29
+ - `/multi-agent:doctor` reports template hooks that are not registered or not executable and preferences that no registered hook enforces. The installer registers the run hooks itself, records them in `multi-agent-hook-manifest.json` after settings.json is written, and does not re-add a hook the user removed.
30
+
31
+
19
32
  ## [20.28.0] - 2026-10-24
20
33
 
21
34
  ### Added
package/README.md CHANGED
@@ -412,7 +412,7 @@ The pipeline runs natively on **Claude Code**, **Copilot CLI** and **Codex CLI**
412
412
 
413
413
  | Tool | Flag | What it installs |
414
414
  | ----------- | -------------------- | ------------------------------------------------------------------------------------------------------ |
415
- | Claude Code | `--claude` (default) | slash commands + skills + agents + three `PreToolUse` hooks (secret scan, agent-guard, read-size gate) |
415
+ | Claude Code | `--claude` (default) | slash commands + skills + agents + the enforcement hooks (secret scan, agent-guard, read-size gate, run-scope guard, run-stop guard) |
416
416
  | Copilot CLI | `--copilot` | instructions + 66 sub-command skills + scripts |
417
417
  | Codex CLI | `--codex` | one router skill + 66 specs as refs + 11 agent TOML + `AGENTS.md` block + `codex mcp add` |
418
418
 
@@ -450,6 +450,19 @@ the one host whose panel spans two vendors, and the triage note says so.
450
450
 
451
451
  The **secret scan** runs as a `PreToolUse` hook on Claude Code (hard-blocks a commit on a hit) and as a pre-push check elsewhere.
452
452
 
453
+ **Hooks per host.** The enforcement hooks are Claude Code's; `install` registers them and `/multi-agent:doctor` (`hook-reachability`) says which are missing from your settings.
454
+
455
+ | Hook | Claude Code | Codex CLI | Copilot CLI |
456
+ | --- | --- | --- | --- |
457
+ | `pre-commit-check.sh` (secret scan, owned paths, attended build/test evidence, unattended ledger) | PreToolUse `Bash` | none: pre-push check | none: pre-push check |
458
+ | `agent-guard.sh` (attribution, force-push, skipped git hooks, argv secrets, closure confirmations, read-only repos, unattended policy) | PreToolUse `Bash`, file edits, fetch and toolkit tools | none | none |
459
+ | `run-scope-guard.sh` (Figma phase rule, worktree boundary warning) | PreToolUse Figma tools, file edits | none: the phase records its own MCP calls | none |
460
+ | `run-stop-guard.sh` (no silent stop mid-run) | Stop | none: halts stay the phase's own write | none |
461
+ | `edit-syntax-gate.sh` | PostToolUse file edits | PostToolUse `apply_patch` | none: Copilot discards postToolUse output |
462
+ | `check-read-size.sh`, capture hooks | registered | none | none |
463
+
464
+ Where a host has no equivalent hook the rule is still in the phase documents; it is a request there, not enforcement.
465
+
453
466
  ## Outside a pipeline run
454
467
 
455
468
  Installing the pipeline is not only useful when you run it. Open an ordinary session and the same three things are available, announced by `rules/outside-the-pipeline.md` which loads with every conversation:
package/docs/facts.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "$comment": "Generated by pipeline/scripts/gen-facts.mjs. Do not hand-edit: the site reads this, and a number edited here instead of at its source is the drift this file removes.",
3
3
  "generatedAt": "2026-10-24",
4
- "version": "20.28.0",
4
+ "version": "20.29.0",
5
5
  "phaseSchema": 2,
6
6
  "phases": [
7
7
  {
@@ -837,6 +837,93 @@ export function quotePipelineHookCommands(hooks) {
837
837
  return changed;
838
838
  }
839
839
 
840
+ /**
841
+ * The run-scoped hooks the installer registers beside the two gates above:
842
+ * run-stop-guard.sh (Stop) and run-scope-guard.sh (Figma MCP
843
+ * tools, file edits). Each is silent outside a pipeline run and fails open, so
844
+ * registering them by default changes nothing until a run is active. The same
845
+ * entries are in install/templates/claude-hooks.json.
846
+ */
847
+ export const RUN_HOOKS = [
848
+ {
849
+ event: "Stop",
850
+ script: "run-stop-guard.sh",
851
+ timeout: 15,
852
+ statusMessage: "Checking the pipeline run is not left mid-phase...",
853
+ },
854
+ {
855
+ event: "PreToolUse",
856
+ matcher: "mcp__.*[Ff]igma.*",
857
+ script: "run-scope-guard.sh",
858
+ timeout: 10,
859
+ statusMessage: "Checking the Figma call against the run's phase...",
860
+ },
861
+ {
862
+ event: "PreToolUse",
863
+ matcher: AGENT_GUARD_FILE_MATCHER,
864
+ script: "run-scope-guard.sh",
865
+ timeout: 10,
866
+ statusMessage: "Checking the edit is inside the run's worktree...",
867
+ },
868
+ ];
869
+
870
+ /**
871
+ * The record of which RUN_HOOKS an install has registered, under ~/.claude. A
872
+ * key in it whose hook is no longer in settings.json was removed by the user,
873
+ * and the next install leaves it removed. uninstall.mjs deletes the file.
874
+ */
875
+ export const HOOK_MANIFEST = "multi-agent-hook-manifest.json";
876
+
877
+ /** event|matcher|script, the identity of one RUN_HOOKS entry. */
878
+ export const hookKey = (r) => `${r.event}|${r.matcher || ""}|${r.script}`;
879
+
880
+ function readHookManifest(path) {
881
+ try {
882
+ const doc = JSON.parse(readFileSync(path, "utf-8"));
883
+ return new Set(Array.isArray(doc?.registered) ? doc.registered : []);
884
+ } catch {
885
+ return new Set();
886
+ }
887
+ }
888
+
889
+ /** True when an entry of the same event and matcher already runs the script. */
890
+ export function hasHook(hooks, r) {
891
+ const groups = Array.isArray(hooks?.[r.event]) ? hooks[r.event] : [];
892
+ return groups.some(
893
+ (g) =>
894
+ (g?.matcher || "") === (r.matcher || "") &&
895
+ Array.isArray(g.hooks) &&
896
+ g.hooks.some((h) => typeof h?.command === "string" && h.command.includes(r.script)),
897
+ );
898
+ }
899
+
900
+ /**
901
+ * Add one pipeline hook unless an entry of the same event and matcher already
902
+ * runs its script. Returns true when it changed `hooks`.
903
+ *
904
+ * @param {object} hooks settings.hooks
905
+ * @param {{event: string, matcher?: string, script: string, timeout: number, statusMessage: string}} r
906
+ */
907
+ export function ensureHook(hooks, r) {
908
+ if (!Array.isArray(hooks[r.event])) hooks[r.event] = [];
909
+ const groups = hooks[r.event];
910
+ if (hasHook(hooks, r)) return false;
911
+ const hook = {
912
+ type: "command",
913
+ command: pipelineHookCommand(r.script),
914
+ timeout: r.timeout,
915
+ statusMessage: r.statusMessage,
916
+ };
917
+ // Joined to a group of the same matcher when there is one, so a file edit
918
+ // shows one group with both guards rather than two groups.
919
+ const same = groups.find(
920
+ (g) => (g?.matcher || "") === (r.matcher || "") && Array.isArray(g.hooks),
921
+ );
922
+ if (same) same.hooks.push(hook);
923
+ else groups.push(r.matcher ? { matcher: r.matcher, hooks: [hook] } : { hooks: [hook] });
924
+ return true;
925
+ }
926
+
840
927
  export function configureSettings(home) {
841
928
  console.log(" [Claude Code] Configuring hooks + context management...");
842
929
  const SETTINGS_PATH = join(home, ".claude", "settings.json");
@@ -942,6 +1029,26 @@ export function configureSettings(home) {
942
1029
  settingsChanged = true;
943
1030
  }
944
1031
 
1032
+ const manifestPath = join(home, ".claude", HOOK_MANIFEST);
1033
+ const manifest = readHookManifest(manifestPath);
1034
+ let manifestChanged = false;
1035
+ for (const r of RUN_HOOKS) {
1036
+ const key = hookKey(r);
1037
+ const had = manifest.has(key);
1038
+ if (hasHook(settings.hooks, r)) {
1039
+ if (!had) {
1040
+ manifest.add(key);
1041
+ manifestChanged = true;
1042
+ }
1043
+ continue;
1044
+ }
1045
+ // Registered by an earlier install and gone now: the user removed it.
1046
+ if (had) continue;
1047
+ ensureHook(settings.hooks, r);
1048
+ manifest.add(key);
1049
+ settingsChanged = true;
1050
+ manifestChanged = true;
1051
+ }
945
1052
  if (collapseDuplicateHooks(settings.hooks)) settingsChanged = true;
946
1053
 
947
1054
  if (settingsChanged && isDryRun()) {
@@ -953,6 +1060,11 @@ export function configureSettings(home) {
953
1060
  } else {
954
1061
  console.log(" -> Hooks + env already configured");
955
1062
  }
1063
+ // After settings.json, so a failed write never records hooks as
1064
+ // registered and the next install still adds them.
1065
+ if (manifestChanged && !isDryRun()) {
1066
+ writeFile(manifestPath, `${JSON.stringify({ registered: [...manifest].sort() }, null, 2)}\n`);
1067
+ }
956
1068
  } catch (e) {
957
1069
  console.log(` -> Warning: Could not configure settings.json: ${e.message}`);
958
1070
  }
@@ -1,5 +1,5 @@
1
1
  {
2
- "_readme": "Recommended Claude Code hooks for multi-agent-pipeline. `install` registers the pre-commit and agent-guard gates itself (install/claude.mjs configureSettings); /multi-agent:setup offers to merge the rest of this block. Merge the `hooks` object into your ~/.claude/settings.json to make these deterministic PreToolUse gates real (exit 2 blocks the tool call). A PreToolUse matcher is a regex over the TOOL NAME, so each gate registers on a tool name and reads the command from its stdin payload. Three PreToolUse gates ship here: (1) pre-commit-check.sh on Bash, which acts only on a `git commit` and blocks a secret in the staged diff; (2) agent-guard.sh on Bash, on Edit|Write|NotebookEdit, and on WebFetch plus every multi-agent-toolkit tool (WebFetch|mcp__multi-agent-toolkit__.*). Always, it blocks AI/assistant attribution in a commit message and a force-push, delete or mirror push to a protected branch (main/master/develop), including one inside a subshell or a `bash -c` / `eval` line. With MULTI_AGENT_UNATTENDED=1 in the hook's environment it also applies the unattended policy: no push, PR or tracker write, no Keychain read, no fetch outside the host allowlist (curl, WebFetch, the toolkit's web tools, agent_run_steps and open_url), no package install, and no write into a protected path (features/unattended-security.md); (3) check-read-size.sh on Read|Bash, which inspects Read plus the shell commands that read a file whole (cat/head/tail/sed), returns immediately for everything else, and routes an oversized read to a cheap worker instead of the caller's own rung; it is inert until `prefs.global.bulkRead.mode` is set to observe or enforce. Failure behaviour: pre-commit-check.sh and check-read-size.sh fail open on an internal error. agent-guard.sh fails open when attended, so a guard bug cannot break a legitimate tool call, and fails closed under MULTI_AGENT_UNATTENDED=1, where nobody is there to notice a gap. None of the three executes the inspected command, and none needs run-specific arguments. The other deterministic gates (evidence, consensus, intent, learnings) take run-specific arguments and are phase-enforced by the pipeline instead. Three capture hooks ship alongside them and block nothing: (4) SessionEnd runs capture-flush.sh --if-stale, which writes a run's triage findings and durable learnings into the per-repo stores when the run ended before Phase 5, where those writes otherwise happen; the same hook runs note-session.sh, which records the mechanical shape of a session outside the pipeline (tools used, commands that failed, calls the user refused). (5) PreCompact runs capture-flush.sh without --if-stale: a compaction summarizes the conversation mid-phase, so it is the moment unflushed findings are at risk, and both writes are idempotent, so a finished run costs two no-op writes. The staleness test exists only so a session exit does not re-flush a run that already finished. (6) SessionStart runs capture-resume.sh, which prints at most two lines: an unfinished run and how to resume it, and a stale pipeline-observation queue. No capture hook calls a model or reads a payload - note-session.sh keeps a command's first word and an exit code, never an argument or any output - and all exit 0 on every path, because a hook that fails a session over bookkeeping costs more than the bookkeeping. One PostToolUse hook ships as well and blocks nothing: (7) edit-syntax-gate.sh on Edit|Write|MultiEdit parses the file the edit just wrote (swiftc -parse, node --check, py_compile into a temp dir, JSON.parse, bash -n; Kotlin skipped) under a 2 s deadline and, when it no longer parses, hands the model the error as PostToolUse additionalContext; it exits 0 on every path, stays silent when a parser is missing or slow, and is inert until `prefs.global.editSyntaxGate.enabled` is true. These registrations are Claude Code's. On Codex only the syntax gate is offered, from codex-hooks.json through host-hooks.mjs; Copilot CLI gets none, since as of 1.0.45 it discards postToolUse output; the other gates are Claude Code only. multi-agent:setup offers to merge this block.",
2
+ "_readme": "Recommended Claude Code hooks for multi-agent-pipeline. `install` registers the pre-commit and agent-guard gates and the run-scoped run-stop-guard / run-scope-guard hooks itself (install/claude.mjs configureSettings, RUN_HOOKS); /multi-agent:setup offers to merge the rest of this block. Merge the `hooks` object into your ~/.claude/settings.json to make these deterministic PreToolUse gates real (exit 2 blocks the tool call). A PreToolUse matcher is a regex over the TOOL NAME, so each gate registers on a tool name and reads the command from its stdin payload. Three PreToolUse gates ship here: (1) pre-commit-check.sh on Bash, which acts only on a `git commit` and blocks a secret in the staged diff; (2) agent-guard.sh on Bash, on Edit|Write|NotebookEdit, and on WebFetch plus every multi-agent-toolkit tool (WebFetch|mcp__multi-agent-toolkit__.*). Always, it blocks AI/assistant attribution in a commit message and a force-push, delete or mirror push to a protected branch (main/master/develop), including one inside a subshell or a `bash -c` / `eval` line. With MULTI_AGENT_UNATTENDED=1 in the hook's environment it also applies the unattended policy: no push, PR or tracker write, no Keychain read, no fetch outside the host allowlist (curl, WebFetch, the toolkit's web tools, agent_run_steps and open_url), no package install, and no write into a protected path (features/unattended-security.md); (3) check-read-size.sh on Read|Bash, which inspects Read plus the shell commands that read a file whole (cat/head/tail/sed), returns immediately for everything else, and routes an oversized read to a cheap worker instead of the caller's own rung; it is inert until `prefs.global.bulkRead.mode` is set to observe or enforce. Failure behaviour: pre-commit-check.sh and check-read-size.sh fail open on an internal error. agent-guard.sh fails open when attended, so a guard bug cannot break a legitimate tool call, and fails closed under MULTI_AGENT_UNATTENDED=1, where nobody is there to notice a gap. None of the three executes the inspected command, and none needs run-specific arguments. The other deterministic gates (evidence, consensus, intent, learnings) take run-specific arguments and are phase-enforced by the pipeline instead. Three capture hooks ship alongside them and block nothing: (4) SessionEnd runs capture-flush.sh --if-stale, which writes a run's triage findings and durable learnings into the per-repo stores when the run ended before Phase 5, where those writes otherwise happen; the same hook runs note-session.sh, which records the mechanical shape of a session outside the pipeline (tools used, commands that failed, calls the user refused). (5) PreCompact runs capture-flush.sh without --if-stale: a compaction summarizes the conversation mid-phase, so it is the moment unflushed findings are at risk, and both writes are idempotent, so a finished run costs two no-op writes. The staleness test exists only so a session exit does not re-flush a run that already finished. (6) SessionStart runs capture-resume.sh, which prints at most two lines: an unfinished run and how to resume it, and a stale pipeline-observation queue. No capture hook calls a model or reads a payload - note-session.sh keeps a command's first word and an exit code, never an argument or any output - and all exit 0 on every path, because a hook that fails a session over bookkeeping costs more than the bookkeeping. A run-scoped PreToolUse gate ships too: (2b) run-scope-guard.sh on every Figma MCP tool (mcp__.*[Ff]igma.*) denies a Figma call above phases.json thresholds.mcpAllowedThroughPhase for the run bound to the session, unless the run is in analysis mode, and records each allowed call into telemetry.mcpCalls[]; on Edit|Write|NotebookEdit the same script warns, attended only, when the target is outside the bound run's worktree (additionalContext for the model, systemMessage for the user; the call proceeds). Outside a run it is silent, and it fails open. One PostToolUse hook ships as well and blocks nothing: (7) edit-syntax-gate.sh on Edit|Write|MultiEdit parses the file the edit just wrote (swiftc -parse, node --check, py_compile into a temp dir, JSON.parse, bash -n; Kotlin skipped) under a 2 s deadline and, when it no longer parses, hands the model the error as PostToolUse additionalContext; it exits 0 on every path, stays silent when a parser is missing or slow, and is inert until `prefs.global.editSyntaxGate.enabled` is true. One Stop hook ships as well: (8) run-stop-guard.sh answers {\"decision\":\"block\"} when the session driving an active pipeline run (bound through agent-state.json sessionId or hostSessionId, never by a worktree match) tries to stop while the run is in_progress below its mode's last phase with no haltReason or waitingFor; the reason says to finish the current phase, record the wait, or record a halt. A turn that ends on a question to the user, a session with background tasks or crons, and prefs.global.stopGuard.enabled false are never held, and SubagentStop is not registered: a subagent's stop is the dispatching session's business. After three consecutive blocks it records the halt itself (status paused, haltReason <phase>:stop-guard), which write-state clears when the run advances a phase. It never blocks outside a run and fails open, with a line in <log root>/hook-failures.log, on any error. These registrations are Claude Code's; README \"Hooks per host\" lists which have no equivalent elsewhere. On Codex only the syntax gate is offered, from codex-hooks.json through host-hooks.mjs; Copilot CLI gets none, since as of 1.0.45 it discards postToolUse output; the other gates are Claude Code only. multi-agent:setup offers to merge this block.",
3
3
  "hooks": {
4
4
  "PreToolUse": [
5
5
  {
@@ -27,6 +27,12 @@
27
27
  "command": "bash \"$HOME/.claude/scripts/agent-guard.sh\"",
28
28
  "timeout": 10,
29
29
  "statusMessage": "Checking the edit target..."
30
+ },
31
+ {
32
+ "type": "command",
33
+ "command": "bash \"$HOME/.claude/scripts/run-scope-guard.sh\"",
34
+ "timeout": 10,
35
+ "statusMessage": "Checking the edit is inside the run's worktree..."
30
36
  }
31
37
  ]
32
38
  },
@@ -51,6 +57,17 @@
51
57
  "statusMessage": "Checking read size..."
52
58
  }
53
59
  ]
60
+ },
61
+ {
62
+ "matcher": "mcp__.*[Ff]igma.*",
63
+ "hooks": [
64
+ {
65
+ "type": "command",
66
+ "command": "bash \"$HOME/.claude/scripts/run-scope-guard.sh\"",
67
+ "timeout": 10,
68
+ "statusMessage": "Checking the Figma call against the run's phase..."
69
+ }
70
+ ]
54
71
  }
55
72
  ],
56
73
  "PostToolUse": [
@@ -108,6 +125,18 @@
108
125
  }
109
126
  ]
110
127
  }
128
+ ],
129
+ "Stop": [
130
+ {
131
+ "hooks": [
132
+ {
133
+ "type": "command",
134
+ "command": "bash \"$HOME/.claude/scripts/run-stop-guard.sh\"",
135
+ "timeout": 15,
136
+ "statusMessage": "Checking the pipeline run is not left mid-phase..."
137
+ }
138
+ ]
139
+ }
111
140
  ]
112
141
  }
113
142
  }
package/manifest.json CHANGED
@@ -1,14 +1,14 @@
1
1
  {
2
2
  "name": "@mmerterden/multi-agent-pipeline",
3
- "version": "20.28.0",
4
- "commit": "c7a8a9c64602a1a4ec976f0fb2a017b66472ddac",
5
- "generatedAt": "2026-10-24T12:59:08.424Z",
3
+ "version": "20.29.0",
4
+ "commit": "64ae83de4fa2e3571e1437c349a3f6283dbc7b24",
5
+ "generatedAt": "2026-10-24T18:20:54.711Z",
6
6
  "algorithm": "sha256",
7
- "fileCount": 1425,
7
+ "fileCount": 1436,
8
8
  "files": {
9
- "CHANGELOG.md": "cbd428d3ea3bf8d30ec3ea82fc07363d2ecd1f55b1ecdba74afab70066c17d7b",
9
+ "CHANGELOG.md": "71560c0097f24a88264b2771f57b7e35b7fbe6653a84a8a977b986e1ec5fa4ca",
10
10
  "LICENSE": "8d8c51aaf1e1538b180c69965fa038db71be86798cc3e26a143bebfefe16a43e",
11
- "README.md": "6ff747b3a5c72b4528d13bb1162a6520b121e1f47842c617274a50d221baff79",
11
+ "README.md": "594e2d6539deffe27770a35e30ce600e37b7218044c0044a7f3487c947bf438f",
12
12
  "README.tr.md": "89aa799a7d6344fb32e2c08786c6be6d41ecc97892ffda298e90e04afa79b1bd",
13
13
  "SECURITY.md": "0eb89553ddcfc56bfe9712315b55a6630ee2f579631aaeccd6ad24f8ac769a0b",
14
14
  "docs/FIGMA_PIPELINE.md": "ea01f3ea5fef1a9cb316040a2d416fcf87dd4f2a14b5497aa00994a0b5dc7e6a",
@@ -34,7 +34,7 @@
34
34
  "docs/best-practices.md": "f8b75b0d38b5896a6a852bb30a1edddeb24dab8b5b7b1d9313290e1241c72024",
35
35
  "docs/ecosystem.md": "20e1b6fce9c8e477ab1fbc1239100e9b51cfa6618501a07761f9c3982a997219",
36
36
  "docs/engineering.md": "550528cd47c7d2c921729c68d0782a00ac8e77a4bdfec479f6749f9c3235d188",
37
- "docs/facts.json": "de32070be7e53f1ca59629e53bfec54b533d8507e7a94cc3b2a38f87ebd2d870",
37
+ "docs/facts.json": "ad93671254332c6ad5352292d2b9df05bf2428c7757186a970082b130d52e7b9",
38
38
  "docs/features.md": "ae91aa35950e1023b7bf08aefdba9489a885e5c2effb293783768d521cb7de1b",
39
39
  "docs/performance.md": "bbf2f3922c25dcba0c1a9e69ef420e3871a729af5b35009a49b48a5d3c5cd151",
40
40
  "docs/recovery-guide.md": "59a8f1b66b34cb9ff5507b3d54dac3b9915e184aa044d9c758d18cac818d510e",
@@ -54,18 +54,18 @@
54
54
  "install/_usage-lifecycle.mjs": "4b010c4e75d6f8e13b58d80a93cc9407f42ccde781c9ed12dcb8e7faf05e526c",
55
55
  "install/_xcode-skills.mjs": "1a7e20f1e6743324b941c5d3ecac9f94c65fff1534ffd9c63b39cbea4f8d101a",
56
56
  "install/catalog-history.json": "7dd84d5ea1f61a09f78bf9f3bcf11112d5e8664dc3833d7a589108868152736e",
57
- "install/claude.mjs": "106ce353ebc19c8319d057ce342e1f989519510465c798399076b5f3d8727904",
57
+ "install/claude.mjs": "737fda097077bc06e8fd062d09e43bd289b7fd434fce6e4ccd3ee2a9645f735b",
58
58
  "install/codex.mjs": "08925fe9f3ecdf509b37f01105652c847475d20fcde2db0d679b9a7d663ca145",
59
59
  "install/copilot.mjs": "41dc394b8a3ae77cfd194ce0ca9bbcafce9bdce349f1f72eeb86569f993e15fe",
60
60
  "install/index.mjs": "9bd77803ce0f548082c34bd2ad4dbe5bce4507410398276a39fe8e83b10a6160",
61
- "install/templates/claude-hooks.json": "205dc29b59de20d14c11f73fc73f00550eb4d28c0d22bc9944c65723c34f0fa4",
61
+ "install/templates/claude-hooks.json": "2b1bd365fb79e54ffc8075c67998cd0ede2a026bf1fe6605f21ae3345add7dfb",
62
62
  "install/templates/codex-hooks.json": "f35edfb7f7d28a1d3322eed05aa6643e2bfe36e5a3be9714faba834ade8bff02",
63
63
  "install/templates/codex-instructions.md": "dd78eb9553e725c039380457245793a5fc748ae37ebf5ccfe11be5ed5b9a4025",
64
64
  "install/templates/copilot-instructions.md": "2450ca338960e298a231fde7b0e0a08001cbefc0da94d850a6a686eaee8c9b94",
65
65
  "install/templates/multi-agent-autopilot-awake.plist.template": "ddd25c76c56fcbb38a89de8e35637372d70ace993d6bc487a88ca9cfb702fe1f",
66
66
  "install/templates/multi-agent-autopilot.plist.template": "122c8a61cd927edd99375d6e3da40f1d42bcceed5b6641785c8b28bb930bc77e",
67
67
  "install/unattended-profile-legacy.json": "f52e86b998956f09ad306b1735a6c10b58580d7082d8a55665a4c6bb15c3aa1f",
68
- "package.json": "fd1cf9622ee06b89f8a891478cf6b4adf0e65a576861f7270eac66ec7ba23dfe",
68
+ "package.json": "3a74b9a9f2bd1a2d080405b7606eac528c697934e5946cbc9f096c59f9df5770",
69
69
  "pipeline/agents/android-architect.md": "11fb74543cb0ebcf9525ca6654fe95d53da7229e0bf4a1149b31fd9005abc453",
70
70
  "pipeline/agents/backend-architect.md": "b02a606c301e4714131aed70ae6d16eeb77fbc819a001e2752cff2488d4246de",
71
71
  "pipeline/agents/bulk-reader.md": "6597052cd7d205bac2b1c7633f5232fe1a40730664a913b8eb77efd5a786dc25",
@@ -84,7 +84,7 @@
84
84
  "pipeline/commands/multi-agent/SKILL.md": "20e3d9af469af2e347700d1ff4a600e44a69a18f15f374ba107c011e52a1c31a",
85
85
  "pipeline/commands/multi-agent/analysis-jira/SKILL.md": "bb3d3c9c3b4a990b5fa5e5907108773d9bc73b39757164315f8f30f51efdefee",
86
86
  "pipeline/commands/multi-agent/analysis-resolve/SKILL.md": "48b72f59775ebfaab916afaeb2609e5694c0f7a3ce2bf2689cf25623d9755682",
87
- "pipeline/commands/multi-agent/analysis/SKILL.md": "8b92d8832f72e195408d6e8e137956df3a4920074ccc0a4a130f36995aa0f6d9",
87
+ "pipeline/commands/multi-agent/analysis/SKILL.md": "abc74eaaf016f3d85758fce272aacaee6f772d2a6f8c5b3dbcfe205dda2613ac",
88
88
  "pipeline/commands/multi-agent/autopilot-off/SKILL.md": "1574f9801993b8ac301de8d60f49df0036175ca7bf95e1b4682b76b56ae6479f",
89
89
  "pipeline/commands/multi-agent/autopilot-on/SKILL.md": "d8f7847004f2bdcf7923527bddfaa17fb9f09a83fd5e3a9d997e0d1871907938",
90
90
  "pipeline/commands/multi-agent/autopilot-status/SKILL.md": "73cea063993bb5c6781112f7bba6f6dd2a5014bcdd4400f9f3c48b582f50252d",
@@ -117,7 +117,7 @@
117
117
  "pipeline/commands/multi-agent/purge/SKILL.md": "c881805f80d7db909bcf09f1a5c980ebaf0c31d9a8ee9cae4f729387ff4ca19d",
118
118
  "pipeline/commands/multi-agent/refactor/SKILL.md": "62501a11a4ff89578f4acddb9fe30becbed80b823beb1433a602db7b57939c54",
119
119
  "pipeline/commands/multi-agent/research/SKILL.md": "aab85ea942291b0a68aec5896b0b3f79677684733859a4c4cbb77931c7dacf92",
120
- "pipeline/commands/multi-agent/resume/SKILL.md": "190a604ac1e87912ef2519f59199928d2329caa7a611bdc49fe237c43e885975",
120
+ "pipeline/commands/multi-agent/resume/SKILL.md": "33ed1eb053b58b5c099abe3a9819327aedba6d4d6ab0ff4eaf897c0569c6dd00",
121
121
  "pipeline/commands/multi-agent/review-analysis/SKILL.md": "2ba4ee67a56bd5f7041a02fcd227b5475b39f6e6a39b1f693cdf4bd5302c6e17",
122
122
  "pipeline/commands/multi-agent/review-issue/SKILL.md": "7ae7fe774c02114840cc21fb303f98c9a36bc2903f1db4cfc2cebe213ca70f1b",
123
123
  "pipeline/commands/multi-agent/review-jira/SKILL.md": "db8ecc7ec8c7040aac9c71dcf40dae194a76f146ab227833b909b45580b5347a",
@@ -168,7 +168,7 @@
168
168
  "pipeline/contract/fixtures/worktrees-empty.json": "d034639163424160a57767cbdcc10c544fa89154b6876aad35482badba0db58e",
169
169
  "pipeline/contract/frozen/toolbox.json": "d52f94ca81f62e4c0d67f0718ce6361f332f289b09fe7cc25c8f5f40feb0ffff",
170
170
  "pipeline/contract/manifest.json": "e9163ba923619447f872416d7f57ea48d67dc13c356c9544f24957f4131946bf",
171
- "pipeline/contract/types/index.d.ts": "1434e70701023a7274fb13c9dbdf901b2a0d7259e46f3fcf40fe2454300c32a3",
171
+ "pipeline/contract/types/index.d.ts": "a449a8c0ce433c302c491077092d05b6a3949b3152b499f3d933478ddcb1c615",
172
172
  "pipeline/lib/_jira-auth.sh": "b5fd733ac26727eda299976c688456e95611ca40acafd3947c66c445d77f2237",
173
173
  "pipeline/lib/account-resolver.sh": "f7bef9beba3f839268509361651be0b1e1f319f2f23821f90ba466fdf185a8f6",
174
174
  "pipeline/lib/agent-model-sync.mjs": "2e0264ca8d8fef761563db219d588fed9067847043f960f68f055c186c20b668",
@@ -203,6 +203,7 @@
203
203
  "pipeline/lib/figma-screenshot.sh": "b043d1b64188ecae63f814ec100d23cdb13500dbc63b0ffc3186f8dd11663ea8",
204
204
  "pipeline/lib/figma-token.sh": "b192b1d3c8f75f1deb81731e95e080372d87fb44779805d05cdb7cb585ee1db0",
205
205
  "pipeline/lib/gc-report.sh": "a70a1fbaea4fb6dbb9a56471119e403071b4358fb0d4577b62bb4d5e08eaf87e",
206
+ "pipeline/lib/hook-registration.mjs": "65987123bdb851c6265f5abc6756783ab57ef4425017e6f85bbf2291d4dbc7a9",
206
207
  "pipeline/lib/invoked-directly.mjs": "a7014f252174414c267cc303a992aa9f3986541c5aad188c87cc6809ba3b69bd",
207
208
  "pipeline/lib/issue-fetcher.sh": "a074c100d31d08bd04573ae77f51beda4174dc4eaf6781e31000b13117e59da0",
208
209
  "pipeline/lib/jira-epic-link.sh": "b5f9ce1067cd8e9f0e547da4e681b71e4ff8c145e9a759fc98f83703dfca4d35",
@@ -223,6 +224,7 @@
223
224
  "pipeline/lib/plugin-skill-roots.mjs": "41d4c3d52642915732f859a49097ba54582a88ba729c070fd3b39cd5da8c7789",
224
225
  "pipeline/lib/post-pr-review.sh": "8f508753b4b820eb85d490a6458c13279a5f6a69c7175c9f6edc5fdadc5ffb42",
225
226
  "pipeline/lib/pr-request-location.mjs": "622ca4705ec8ee00e0a4609657d8ee684fcdc077f3099ab312cf41b5b0c41efd",
227
+ "pipeline/lib/prefs-value.mjs": "7e7ca201049f2facff57bda5a5e7ee8fa057d0e1e082a212069533159b5f798d",
226
228
  "pipeline/lib/redact.mjs": "443034132ec8163e3b923ca2b8d5304d575c02bd7396523ee677f36444adc7f7",
227
229
  "pipeline/lib/regular-file.mjs": "084dd2c98a664a1e4a937757cc5e5e5d7e162b6aa422f8c7cfdb27f7834c6cbc",
228
230
  "pipeline/lib/repo-cache.sh": "82bbdd3d61746042ad5341554a1077098d4b56f15caf6c5cc092377a273c8f45",
@@ -232,6 +234,7 @@
232
234
  "pipeline/lib/require-jq.sh": "a137b4df202515c2b89d5b93c3e28b04c73c8bc2f7c42be9ca9a22926e042918",
233
235
  "pipeline/lib/review-watch.sh": "89a53f79aab902a39ab8301cabe6eb54c8dc854af4d97c024c6b3b1f3ab38a75",
234
236
  "pipeline/lib/route-state.sh": "4f9ed53b1cdc1a6d32495e8d2794dd9e419825a47b4335e9c84e1af9351afa11",
237
+ "pipeline/lib/run-completion.mjs": "b5f6a561f0e717c57f3c482023b83df0f54d6045da917cc1bc8026073a9db802",
235
238
  "pipeline/lib/run-paths.sh": "2063a1d2f07d6caa391089c1e581fd870a4e9c3caa3b0c25a03f0b4fe4f6d070",
236
239
  "pipeline/lib/shadow-git.sh": "d5ade4e8674ea6ba1d95d21a71ce4bcd64a956d76b163155d93181d2cb18a3ee",
237
240
  "pipeline/lib/stack-detect.sh": "53242b46482547f861625b9cbf44b65790849bce7e42be3bbd56abac67bc3489",
@@ -261,7 +264,7 @@
261
264
  "pipeline/multi-agent-refs/analysis/intake.md": "192a2da33ceaf4a255645960bc7d6883ab2845b9d45b30ada8faafaf4ad82aba",
262
265
  "pipeline/multi-agent-refs/analysis/locked.md": "c914d3da5182bfbb3ba613299cf38f12832fda2f17e1968e5a8fd7b32d867bdf",
263
266
  "pipeline/multi-agent-refs/analysis/redesign.md": "6314fc1e14e05166efbea4819d5b07adb838d0704bde61b4b69cef637f251d58",
264
- "pipeline/multi-agent-refs/analysis/render.md": "c3dc2c4dea9c5094ca538abda20543f7fbbca64d3e15f41c3c9e1eae7a64f095",
267
+ "pipeline/multi-agent-refs/analysis/render.md": "66c7f64d916a20f0221d3dc9a11a1466fd27d48f4ac46fa86b96452a23270afe",
265
268
  "pipeline/multi-agent-refs/analysis/resolve.md": "2e3631a8a9af999e01c66455378020e2134e6ca91bed3a40cd94717da94a34cb",
266
269
  "pipeline/multi-agent-refs/analysis/resume.md": "25a430b3a81c877b31c473cb0b708b1b225de3faf4d5f4b2918908df305c6d90",
267
270
  "pipeline/multi-agent-refs/analysis/reusable-refs.md": "6058c704a689d20af95a13295fd2e34f8636647f16ab991961ad9b7c0655bd34",
@@ -306,7 +309,7 @@
306
309
  "pipeline/multi-agent-refs/features/cost-analysis.md": "382eacef66efa8aa3ec4a2b01e235c5673b26333bbc8974df5a09694f1e5d7f3",
307
310
  "pipeline/multi-agent-refs/features/design-conformance.md": "a88ca595827cafa0c87c2facfcf9190dac69485e0596e5c198c6fc1613880452",
308
311
  "pipeline/multi-agent-refs/features/dev-critic.md": "08e01edef04b5ac216f8f43332126966d33da7b95625e47a8a6cd8ac105b263f",
309
- "pipeline/multi-agent-refs/features/doctor.md": "a0c4cd940579a3fc8c1b89845419d0bbad49e5e87dc9b748fe9b9a8ab06ce075",
312
+ "pipeline/multi-agent-refs/features/doctor.md": "475de4941be738fb2036873f6126040373f4604b307743d92318d3d35fe43128",
310
313
  "pipeline/multi-agent-refs/features/exploratory-testing.md": "ac534fdb9e056b1a3782f9b9e38f0b8823f85e03cb85924513079179e318c45d",
311
314
  "pipeline/multi-agent-refs/features/external-context-injection.md": "be9a0e904efd52535fa18a254567c9d0c3fc2ed12fcbc7a116f7879048303df6",
312
315
  "pipeline/multi-agent-refs/features/free-models.md": "64afaba7e7a77575f4ed6a10905a01330a83f573907fb1a5d5356ae6c80999a0",
@@ -365,13 +368,13 @@
365
368
  "pipeline/multi-agent-refs/phases.md": "77d04389edaa7aaf4e3a0faffebb2d2228b9e635fcb1e91f48b3f7d351f8aff4",
366
369
  "pipeline/multi-agent-refs/phases/log-format.md": "62d51e57cca8445ab40f3c0dc29615e4b5c8e4743286bf9ef0173610e81397aa",
367
370
  "pipeline/multi-agent-refs/phases/modes.md": "0733e20dce458c09f30343db9149fc93bc5a4c9531670b93952f223811dcb1aa",
368
- "pipeline/multi-agent-refs/phases/operations.md": "4718f7f7d1deeb787ae7aaf6fd3be501bb8244e3b35cd5ba11ce6c76d37a64e8",
369
- "pipeline/multi-agent-refs/phases/phase-0-init.md": "3817e3be71adbf30a082713895531ef0e7fed29a32b77ce351103f1dfcd8669c",
370
- "pipeline/multi-agent-refs/phases/phase-1-plan.md": "de3f3dc16ae8853740540caa5497d2f18f016dcb7ea0bfc280ca5c136259a078",
371
- "pipeline/multi-agent-refs/phases/phase-2-dev.md": "75925e51a47449af1a598394d69b6e84ce179a9a5d4a7a5b3d4583c73aa5926c",
372
- "pipeline/multi-agent-refs/phases/phase-3-review.md": "4453fd86d62f30ce60a9986c6a609160b953bcb5295052cd2122377981427de9",
373
- "pipeline/multi-agent-refs/phases/phase-4-commit.md": "49565e1d4bff37e60b6299787e77456d1b1707e42d03a1797612be0604bd0983",
374
- "pipeline/multi-agent-refs/phases/phase-5-report.md": "7fcd37b02dc4da3d04ff9c0eb7f69e7740e1215c07e556b91a10d83582b2f49b",
371
+ "pipeline/multi-agent-refs/phases/operations.md": "aa84c6af264f038100e0942c4a2b3db545d122d5a27a4211f061e6537f717ad1",
372
+ "pipeline/multi-agent-refs/phases/phase-0-init.md": "5579f56a9ed054071f0f2201e167617bce7a86ef8a7faf54aebb17bd3fc8d742",
373
+ "pipeline/multi-agent-refs/phases/phase-1-plan.md": "3062c069b09b82929e266bcf96d50df1e25e168235d5b488a8114a8ccb6d4142",
374
+ "pipeline/multi-agent-refs/phases/phase-2-dev.md": "237587c469287818e13032e7dfb98a7b8c274b5df2eece5663de3ad95e444af3",
375
+ "pipeline/multi-agent-refs/phases/phase-3-review.md": "3a663797e370376caa3781fa802477139870d3576ef192729667027b83ae6f2f",
376
+ "pipeline/multi-agent-refs/phases/phase-4-commit.md": "1f2e3ffaae2043aa1aa3f65cf4bd3cacd142fbf56ec613510f2619ec8f381601",
377
+ "pipeline/multi-agent-refs/phases/phase-5-report.md": "ff0e41b96af415b05fcf0d561650dab4f47e0e2e54985911a7cd2d456ff71418",
375
378
  "pipeline/multi-agent-refs/picker-contract.md": "c03970ad8ebb36ff8742b41cc05b615a907d0cbd363e714a3da687f4aed25bba",
376
379
  "pipeline/multi-agent-refs/platform-parity.md": "1fa6189ad94ecd3e8a9f15980f19174dc86468050a6de3afff7aa30de60aa689",
377
380
  "pipeline/multi-agent-refs/progress-contract.md": "d1dc3c117aeb880cd44b3439062e9fe7d5e2042ba00c49fd495f70a6bdc1addc",
@@ -409,12 +412,12 @@
409
412
  "pipeline/multi-agent-refs/web-guide.md": "714cba0d92fa45bf71fbff21bb2f09c88534ebf785b3a2ea96d18037e2e7f7f9",
410
413
  "pipeline/multi-agent-refs/website-deploy.md": "ce819c8b1ef8e8ec3257611379aaf0ab4678e08e0b58bd88c936e98cb8ead609",
411
414
  "pipeline/multi-agent-refs/wiki-capture.md": "bfd33cf097b966e61f80c9235d98c8139e4c9ede2e47c14b920a5b910cdc76d8",
412
- "pipeline/preferences-template.json": "f8d06d8fb148bd8d3d9042a092bd4aa73e7fdfd122628f7e2f23375946594df7",
415
+ "pipeline/preferences-template.json": "f28da92a62bebd7fc8a8b71a72dfe3dabaa83ce88fcde796e377fb326c49486f",
413
416
  "pipeline/rules/app-store-guidelines.md": "9fc2ac5073a2d6be9fe6f056170bf215ecd14ad4d335062ad046bc3c406e6b59",
414
417
  "pipeline/rules/code-review.md": "b18eec5cec31710fe76cdae6f03b53e7403d4f0406274691ab38a4771505a1c5",
415
418
  "pipeline/rules/code-style.md": "cd7d8fa872d1d640d143a573a0bdeeb7a9095f62a4d69741a11b4f0cee9d5a48",
416
419
  "pipeline/rules/debugging.md": "6ca90aacf1f4bad59000da84a7a8e368eda69af0752ca9ec8e4916408502257a",
417
- "pipeline/rules/figma-pipeline.md": "ad300703e42ebf0aa973f56ba7656911b5e78ddbb261e8192a6bd00b8603fdd2",
420
+ "pipeline/rules/figma-pipeline.md": "334ac80032042cd14cecfcd7dda97c7e8c71771fb244f72d9af2451324c7e083",
418
421
  "pipeline/rules/git-conventions.md": "200408fb59e19898096aca998381974f23929760c661741dd76813de902386eb",
419
422
  "pipeline/rules/kotlin-android.md": "2344356125cbdd49f703144f3eb573d40fd1ce2d4b5ef404d44da13c052c9236",
420
423
  "pipeline/rules/outside-the-pipeline.md": "f5ae881783bb288d803938665489a1135ef7d18e59cd52d85a290c1237450d4a",
@@ -424,7 +427,7 @@
424
427
  "pipeline/rules/swiftui-qa.md": "8c4afe9e72413e7bdab655f3d17588469e80ac34cb7ad2a690901fc5b6534818",
425
428
  "pipeline/rules/tdd.md": "4c1b3114506aa9794c9bb1e1aee1b1bbb4a993d192342e5697cc00bc2f6ea4a2",
426
429
  "pipeline/rules/testing.md": "695be5520b65451f0aa300a9643df2c05e607ff6ad372201ea34798dc5998bd5",
427
- "pipeline/schemas/agent-state.schema.json": "96c8a9d57b4ab14332c81a098a9da20828128f5dc1c1924a1bde17d65752087b",
430
+ "pipeline/schemas/agent-state.schema.json": "0ac2542b975b8bfd015f28c871e90c2a6dd383435031eb8288007ee9a04041a9",
428
431
  "pipeline/schemas/analysis-output.schema.json": "41826f4bf7c96778f8cdbcc68531e984087897d438b7b49ac5a93fc29db47916",
429
432
  "pipeline/schemas/analysis-spec.schema.json": "43770223266be1c94e2cdea585efb6783043353bc5a374613b554596f46e1bcd",
430
433
  "pipeline/schemas/answer-request.schema.json": "29d4211a2a05a230e0707b171b73341d2e56f6b83edb178b731905211aab4e23",
@@ -470,15 +473,15 @@
470
473
  "pipeline/schemas/migrations/prefs-2.7.0-to-2.8.0.mjs": "56e3bdd076500825782726eb14f48c1f989c802bbd6374873999a949afee968f",
471
474
  "pipeline/schemas/migrations/state-2.0.0-to-2.1.0.mjs": "b7058a8922dfa85a817616ab130d6e962a1e1b8e9ed42b8700ff82747a0f3fec",
472
475
  "pipeline/schemas/migrations/state-2.1.0-to-2.2.0.mjs": "96c14fcc6375d630681e69c27dc0cad1783596fa93e1426d1a03d6257f1bd053",
473
- "pipeline/schemas/phases.json": "f290b26a6606ab3508fd214881a334534a670f90c5f68e281790585b6c131b17",
474
- "pipeline/schemas/phases.schema.json": "804eff7978f7cb6ea061627e2730567df03d56bd3d05f8336c20b9787f404ad8",
476
+ "pipeline/schemas/phases.json": "97a3b0452a6a19f13324906cd0ac0fc5e035d6e48363daab2402da523de8153a",
477
+ "pipeline/schemas/phases.schema.json": "d608d40f315d43a2f2a46a62b1663fa85ca245133d4d1c45ad2d85ca419f8bb6",
475
478
  "pipeline/schemas/phone-devices.schema.json": "4dcdd5b1fbd863e1b9528fe038ddec1af6ad88cafb020d0f69b5e12720acfec9",
476
479
  "pipeline/schemas/phone-signed-request.schema.json": "1785de1b523c52943e24f24d3d21f3fda7e670c177872bbe51d62c100db875a8",
477
480
  "pipeline/schemas/plan-critique.schema.json": "f24451157a8920bf0c6f23dd31e1d58ae408ad6f428661743ffbe2186c5b9e80",
478
481
  "pipeline/schemas/plan-todos.schema.json": "be4374b7eeb513fb8a7663374defa5b35ae084f72e112faa41b07c46532c50de",
479
482
  "pipeline/schemas/planning-output.schema.json": "6aea9b5b8bbf7f9a227215c29cc30a5b642981a02fe2a81eaf9e8a113f7c3947",
480
483
  "pipeline/schemas/pr-request.schema.json": "ae75c4856349d62834802b1189af516bb6fb3d36646831b7ff2fa61d938afcd0",
481
- "pipeline/schemas/prefs.schema.json": "0d048365d84c0ac19c0a2f86daaffdf502608e24e8d7e784646d5209566f240b",
484
+ "pipeline/schemas/prefs.schema.json": "836403fb19a53c7721c58ad6849139ee076ae700e69c9331e01582eab57aed9a",
482
485
  "pipeline/schemas/repo-profile.schema.json": "1a74ef8330da9a26a5a70955f6f9cbb20eda54a8615efaf86c7993d420a7f04e",
483
486
  "pipeline/schemas/repos.schema.json": "a9bf56f25c66201c170912e3389bd73e4a3f61922410f83e31a6c6ba47aee861",
484
487
  "pipeline/schemas/research-output.schema.json": "54e3ba1b04fdc20fbaa84333b943a8ab95d1395c7b0e0aedc67929184cb49523",
@@ -490,7 +493,7 @@
490
493
  "pipeline/schemas/run-log.schema.json": "3ac10faf0aafb05a8ae89e027b7923aee604cb4bf8daebdbbf4da8c31bc97a1d",
491
494
  "pipeline/schemas/run-questions.json": "7928448ac408b8e90df2e24070c7d433691fe861315adb80ea754c7d21db7688",
492
495
  "pipeline/schemas/run-questions.schema.json": "d4b5b4c3e297164182dac7e86ba05e350f41085a7f024c6c7adefb0be42c4a8e",
493
- "pipeline/schemas/runs-index.schema.json": "ad7d598f39a599031f89339a955fc939624fc127a635c70f5cc4667b9395124f",
496
+ "pipeline/schemas/runs-index.schema.json": "d000078ef69655a7497934510eca65bb6077ee8e341a4abbe8480f295f1c5f83",
494
497
  "pipeline/schemas/scaffold-manifest.schema.json": "4ee8dfacf646a96c62438234bedab9d286d80d1a6d3d4984361d91a7411ce171",
495
498
  "pipeline/schemas/scope-check.schema.json": "f96973c59372b36b7d68b9ac4b03490e7da8d54acf29a35947f5f610e82b98ea",
496
499
  "pipeline/schemas/secret-patterns.json": "4ae313b7f2529252b71be8b1cbee9bfd954cad6a9d0f30248a2593d1212a4c08",
@@ -514,14 +517,16 @@
514
517
  "pipeline/schemas/unattended-profile.schema.json": "a9c0979f0d0742826e410fdbfe1ae1c4a56b05b4e638eec42d4c276d6f48f701",
515
518
  "pipeline/schemas/worktrees.schema.json": "4e15c413c00811814eee734d86734ad9e1d34a37737f7df641b389ce5d8d134b",
516
519
  "pipeline/scripts/README.md": "4cdf7054cddbe5cdcb08460f68782f2347a26c8c343d8ef8418714464672b36c",
520
+ "pipeline/scripts/_active-run.mjs": "90510e4474437567fdcf5ea10df9f8634377e97db0233369e5bf83929996d304",
517
521
  "pipeline/scripts/_autopilot-config.mjs": "0f42d2791f1d71c4aad5a0735ca56fef1ed27d275b72f99d8ca8f95fcb8aa83a",
518
522
  "pipeline/scripts/_autopilot-ops.mjs": "5e84d628482434c8f09dc69601c73ab70e928af15c2f068d998d2f61bd692d1a",
519
- "pipeline/scripts/_autopilot-outcomes.mjs": "5b2423814d979ed5c657473290083b296f7245d40507c866e7931b2771001236",
523
+ "pipeline/scripts/_autopilot-outcomes.mjs": "859c733e5885cc1245fec4ab8d2568aa35a049d4e1391228a6ac063d9257fd06",
520
524
  "pipeline/scripts/_code-graph.mjs": "bda1016c83dde84c010016a9e6030e85ff43b5b9d44365b90c761df5089eecb6",
521
525
  "pipeline/scripts/_command-contract.mjs": "e97a5c624e0768769da54d4175e9f7655f1de1dcd0832468bc66bf140b0f5a6f",
522
526
  "pipeline/scripts/_cost.mjs": "bdf03835af4719b72e4574f2d5ca827e94f9d80e49527a8e9e200a0aa4ecd7a9",
523
527
  "pipeline/scripts/_diff-impact.mjs": "cda016ca6071c741a680a3dbc35bb21926465b296defa4fa3677ce550704198a",
524
528
  "pipeline/scripts/_fingerprint.mjs": "d8c63b062a3be0e138b6675aa031824fcd96f5517cf0f7b477378913c1db7d73",
529
+ "pipeline/scripts/_guard_rules.py": "ff556374bf1233cce498cec99b7e6f07f87465b9a8300baf5bc089b7a2788607",
525
530
  "pipeline/scripts/_handle-patterns.mjs": "c05934a1eed9d97b3d1f8681916aac53092c6573dba83d798bbec9fc56d0909e",
526
531
  "pipeline/scripts/_http-post.mjs": "12cd785bbeebd5a914fc913277a1ab34e3944ce9267317d7454b09bf4a287588",
527
532
  "pipeline/scripts/_jsonl.mjs": "9de314d31f5016373c2cb5fcc2707c9d409b8c14da44b349c96c90c54ffa2d37",
@@ -542,8 +547,8 @@
542
547
  "pipeline/scripts/_transcript-hosts.mjs": "eae0c6825171121b1bca3d00dcfac1218857b30c2df2d9cfdfcf1d2c929a8a97",
543
548
  "pipeline/scripts/_unified-diff.mjs": "3291361f2e635a9de132c6129077130709d16250a489ec979e352fbeb0839347",
544
549
  "pipeline/scripts/_worktree-snapshot.mjs": "3fc5ae951d5d6ebc40ab05b4191d85779662e328855592085d2ed0c44a6028a7",
545
- "pipeline/scripts/agent-guard.py": "ba8f0c08a80d953d339ea69492efb1fbe8db5d364c2bcb2094a9839cf6dcc081",
546
- "pipeline/scripts/agent-guard.sh": "5b57cea687754533c673b66a9dd2281ca06d12ef86bdc0d03fa285fc9e7debf8",
550
+ "pipeline/scripts/agent-guard.py": "0a4ec72eee76d9d03a68e86bb3a8b7ca815d99c24dd64e3c03dbf681d55814fd",
551
+ "pipeline/scripts/agent-guard.sh": "0a37b766b95ab4af629e2a302e27969c29823293d44b659c53735e1d6d1aa538",
547
552
  "pipeline/scripts/aggregate-metrics.mjs": "c324e349993fb154a885263cf6665af0ff656e9c987b455a263dad8b96cca667",
548
553
  "pipeline/scripts/analysis-conform-coverage.mjs": "2b7de99855d1901b1b7803f47d4bb5f75ed5df1b5f4840d55bfc3537e3f65afe",
549
554
  "pipeline/scripts/analysis-sources.mjs": "53d843b0504a6cadd7d4a047331ebc34a2868304fcf791617ad0a215396e35a6",
@@ -552,6 +557,7 @@
552
557
  "pipeline/scripts/analysis-tickets-writeback.mjs": "8c1f117ac5c6516385e3458462de6bde28c81768853c2d9524118d0155befe8b",
553
558
  "pipeline/scripts/anonymize-findings.mjs": "5d7e042793790c1b924d4d952b4f79b7e5f1dd0a3fe936f1ee16a4fa2ba820dd",
554
559
  "pipeline/scripts/answer-question.mjs": "b948df9d063f623a7ccd9cc65903c4388018b6b968228f77eb2e229223a61b1c",
560
+ "pipeline/scripts/argv-secret-scan.mjs": "5878598c12b8e02971d5ff51ae2a5d78479d2e545f69f619166227ae75bb1af8",
555
561
  "pipeline/scripts/audit-log-rotate.sh": "5a4ef7d9ac75abbc5a5103fc2202b89707a2f2c00432ece133a132b483cd7450",
556
562
  "pipeline/scripts/audit-log.sh": "a2f721f88edb3dde6647c4438a37f419eeafcd37166be022907876799981e13d",
557
563
  "pipeline/scripts/autopilot-arming.mjs": "38224fc58dc208e5e2d5793302cb67c6d0ab75be2dc4259cbe55ac87102a59b7",
@@ -560,7 +566,7 @@
560
566
  "pipeline/scripts/autopilot-intake.mjs": "a65ac29850de94002bebd5db3f09b406c65f1875b32058cccea6b440f95c7526",
561
567
  "pipeline/scripts/autopilot-menubar.swift": "4fa39e603630565ac2cfb5a8b0bcf891dbefb02ce272252b9480605241670ac7",
562
568
  "pipeline/scripts/autopilot-publish.mjs": "f300fdb166eaa2107dc87102e1b9cd351346d1c4139200e2305a20861c8149f9",
563
- "pipeline/scripts/autopilot-runner.mjs": "b215d87143dda5952bd67e2d123e606da7e3589effee5bbcb8e4f634b6ab38f1",
569
+ "pipeline/scripts/autopilot-runner.mjs": "f2adce65f08afe6cb319df3a33279983af571de16e4fa4590a4278ac9d7046bf",
564
570
  "pipeline/scripts/autopilot-status.sh": "8b9807155cfe5eff09ee3e01a8c3e5d1bbf7554db22de89de438531e4554b32f",
565
571
  "pipeline/scripts/base-branch-candidates.mjs": "c73a02033ed9f10c15b3aaf010432f0d4e429a75eba14731e9a64492e3fe3859",
566
572
  "pipeline/scripts/bug-bash.mjs": "290f613b0e4c018f79b3800de0579a17971935700216eb99b11676f03c713081",
@@ -582,6 +588,7 @@
582
588
  "pipeline/scripts/code-graph-rules/node.json": "062d7337519f5a743da6953d2748e95560729715502a665d19025108ceba4845",
583
589
  "pipeline/scripts/code-graph-rules/python.json": "91394dc31a9392e8d02cf46797bf39551fbe483aa2e6b34145cd33aa2460eca9",
584
590
  "pipeline/scripts/commands.mjs": "5b20a7d01aa0f205f2605fcfcbdb197bdfeafbdfc1e5164b5ee083ac6ff39cc2",
591
+ "pipeline/scripts/confirm-command.mjs": "d6dbbd4153b64b020b5cf130f900db3c6a3de57d5c5701cfa578be976bba4a92",
585
592
  "pipeline/scripts/confluence-readback.mjs": "4b4d190095346e54875de63df5380c143eb8c2f1a6eebb399d5ae884d8668b18",
586
593
  "pipeline/scripts/constitution.mjs": "c1de46e1252a26b301c81ddf3e59cd567d214e5918665c0cd708c69b4b5a37a8",
587
594
  "pipeline/scripts/contract-server.mjs": "d8a0a6b604487548dcf3383af15f0646c4018d15e052f223754b5aa9c34b26bc",
@@ -594,17 +601,17 @@
594
601
  "pipeline/scripts/decisions-log.mjs": "7e81432b76f3efaa1db3dd23febcf33f37baa1cfcff32a33890dc338504472e2",
595
602
  "pipeline/scripts/diff-explain.mjs": "194d0635639607cb1af3de064453162e01c0d59dc0c2e187d21d45bae3bc559c",
596
603
  "pipeline/scripts/diff-risk-score.mjs": "70bac656acc6154a13cc20a8174101b133531b9d1963f40f16bb162622d0017d",
597
- "pipeline/scripts/doctor.mjs": "5980687d3e45bb62fc1e45766ed86960ed8ed05d2c6119cd8b9550ca7f178319",
604
+ "pipeline/scripts/doctor.mjs": "892b3ebc471f0c3693023c16bd240953ea889e47a947ef04438908e2ed4ad7dc",
598
605
  "pipeline/scripts/edit-syntax-gate.mjs": "e8b4297ef0ce55204670da70ea098708eb93f3b9687d74b7fde7d4e0ed2ea810",
599
606
  "pipeline/scripts/edit-syntax-gate.sh": "bc4e2b26f696e71c8f5b27938f41903cc24e36cc85200c4b9e2665e610af0ff6",
600
607
  "pipeline/scripts/estimate.mjs": "9847e412dd74ac19a5c3b84bed343f79d25f256022b2df98e3eb1296db45ed3a",
601
- "pipeline/scripts/evidence-gate.mjs": "dc3b9bfdd959cf6e577b7fd634a444eb21adb09dab22d4dd7465c7a92d00440c",
608
+ "pipeline/scripts/evidence-gate.mjs": "f6452999e62d909a9af7d56de1cb9da6919f5db7511793e2c9179625cf2f47a1",
602
609
  "pipeline/scripts/explore-findings.mjs": "997cca3ef42a170ff51ee2c382263eff8653affd6bb675877b94b8bba782e717",
603
610
  "pipeline/scripts/feedback-send.mjs": "d3ed66e9dacdfb4b5eacf1b244bf66752304fb4fcb144531441b458f3ab806be",
604
611
  "pipeline/scripts/find-polluter.mjs": "38a5797acb63f2c9c66c7c29801066f6e8ba1fa9ded680433814a8a86e0cd5ef",
605
612
  "pipeline/scripts/finding-fingerprint.mjs": "fa12ab10701db5d2bfff014e41d1cd4c0b2b772aee5fc69205de14b2761b0c83",
606
613
  "pipeline/scripts/firebase-app-discovery.sh": "dbbc5710cf12b086a50c3f24a4cf67df431d1eb1a121b98d4dc67023f8633c67",
607
- "pipeline/scripts/gate-ledger.mjs": "c5c58ef5fe12aa0c9a3732ae06b76877ce74f004bc1f6058ce0014c5c963628e",
614
+ "pipeline/scripts/gate-ledger.mjs": "03ee20c491d9f7560756b5b1c83b8269b4b049cb525228716ef23082567535d4",
608
615
  "pipeline/scripts/gc-abandoned.sh": "d11dc1a8144fc639b57d668d4801d9bb088c700f6e93fdc78d60f8e6018ec99e",
609
616
  "pipeline/scripts/gc-plan.mjs": "f1d212805ef5396f0ae789d997894017a60917b7c55bad5271e29c76cde898af",
610
617
  "pipeline/scripts/gc-refs.sh": "04e91087885bac10ee692cc24914342a459bcfc5533574894e40e43587cec325",
@@ -656,13 +663,13 @@
656
663
  "pipeline/scripts/phase0-exit-gate.mjs": "068fb9bb32209326f4c4a9d1f82bc1a419808242803d5452028c3dbffe70c9fd",
657
664
  "pipeline/scripts/phone-devices.mjs": "f32288cbe56670eecb7d3a4b43f9ebcb4baeac5eeec357322fe19399603d59e3",
658
665
  "pipeline/scripts/plan-complexity.mjs": "ac8e4ad857cabc80fe4051bec84490bb91bfdf75d61cfdad93e315d0965f04b8",
659
- "pipeline/scripts/plan-coverage-gate.mjs": "1a83bc52584438a9bd5cba96d2ddefed92a6a317d30ee695e67ef6c00b93e5a8",
666
+ "pipeline/scripts/plan-coverage-gate.mjs": "64c610a0101f10c7bb74cb021dea5d471fd018a11baae03007f834fe6b69b2f7",
660
667
  "pipeline/scripts/plan-critique-gate.mjs": "b139394e5f16d11e4997d0bb0b08529f439dbd7fad39781ef4c2475247d8fa97",
661
668
  "pipeline/scripts/plan-remote-links.mjs": "81673a25b9b9f19edd15ebd1e198552b658a7ec6d138658ec4e6e5b58213bb3a",
662
669
  "pipeline/scripts/plugin-refresh.sh": "687a33199ad963616ab537e32210ec8c967e76ecc42f494ee8a1dc9fe947fc30",
663
670
  "pipeline/scripts/pr-request.mjs": "e6f4ded2366c6599bb345b3011ecc771e13b8a1561afa4c9a50bca4edff17456",
664
671
  "pipeline/scripts/pr-timeline.mjs": "6a12df12a72f3440796569d3264edb0b3e105be6e4f2e26e958a5a0da340d05c",
665
- "pipeline/scripts/pre-commit-check.sh": "6012f0d4f55ef9e6ace2e9cf7e4a85cabce89c08ca5e2c6f625cd8e28bf449c1",
672
+ "pipeline/scripts/pre-commit-check.sh": "beb51dc3e3ff69ebca266625da95c2060c41ee0173dd2a47deb1ab5e7fa63d78",
666
673
  "pipeline/scripts/pre-push-check.sh": "6e9761fed96e3bae111ccd554b44e35917517c6a8ae5dae7236fe8c69e7fe122",
667
674
  "pipeline/scripts/probe-evidence-capability.sh": "ac74252eed6b773fdbc7ec475a63606925f1ba7b5e7c6f911329f46fd920eae7",
668
675
  "pipeline/scripts/probe-store-key.mjs": "b46dfcf444c95d0bb61de36823314945dacaaacb8f35841d153dcfcde8e4df1a",
@@ -690,6 +697,10 @@
690
697
  "pipeline/scripts/run-kill.mjs": "d27c7a91a2088304483155d9967176ef1919aa73694d0c98629181854d696d9c",
691
698
  "pipeline/scripts/run-log.mjs": "aeff5b6f461dec4234904495071f3589908d0144eeff7e0f2a1b72f5f3f7f8f6",
692
699
  "pipeline/scripts/run-metrics.mjs": "6db53f3814a992c1f23beae7a54c84310be5af8e84dbff5a6768a91169152f02",
700
+ "pipeline/scripts/run-scope-guard.mjs": "2216c33b123ff19a80bca614d51a7f55d13e572a9278869eda100a48c83bb06d",
701
+ "pipeline/scripts/run-scope-guard.sh": "ddf83ac9842f6227b341762dbdd87e6b988506c866852e1c5e1345d380a9f31b",
702
+ "pipeline/scripts/run-stop-guard.mjs": "ea19ccc3b52f00de60c0f8b2a7faed026ba5a1028c58bba07433dc60dd1b89a9",
703
+ "pipeline/scripts/run-stop-guard.sh": "5c8281e283203e9314c78a26aa0026f81a6ad5afcf06dfdfd7bd9b3f55810d64",
693
704
  "pipeline/scripts/run-ui-tests.sh": "7bf3549668d3e460d23dfec859b095d6465c9977051e63b1a2c1abeecd59ed83",
694
705
  "pipeline/scripts/runs-index.mjs": "5d8b39bd739d53362f6a2725e56d65d52b38bd50aa60c55bece4dceb188c631e",
695
706
  "pipeline/scripts/scaffold-gate.mjs": "e2935957771f1d332b9968a819de49676152c51991e89f4a9cab7467b6d18701",
@@ -723,7 +734,7 @@
723
734
  "pipeline/scripts/triage-memory.mjs": "2d8541145f1749593ae5728fb4c9eb3001484edb5e4d37be473aeec34d1dbe7c",
724
735
  "pipeline/scripts/ui-tree-dumper.swift": "a09e42ef069eafa08c05afd8333e05b754ef6a7d8b9687712039b0f2c9801273",
725
736
  "pipeline/scripts/unattended_policy.py": "851f3982bf8a5d12415caf724146184c50801f9ee2e3654ba2ded593351f71af",
726
- "pipeline/scripts/uninstall.mjs": "daa282b3f2aaf35a32741847940f2e944907d2956909ed0ed8f4e8ae15378911",
737
+ "pipeline/scripts/uninstall.mjs": "cd5d63455411dded14a1b4a1ca6ace0599208b180027331e6d538a573c156b0d",
727
738
  "pipeline/scripts/update-check.sh": "9c00647e7ca4249414b2e5af08f61705ab5bd2106b6f66ae8ebce8aa143dc957",
728
739
  "pipeline/scripts/update-issue-progress.sh": "c96de68648cb3265b041368af38fdf60dc0b7d8b9c4bf2971271e6dfb8dd4c0a",
729
740
  "pipeline/scripts/usage-identity.mjs": "ec22fbf6ec3afe694673c224f53677320f8d5151e9fef77f0804c8f1bb35cc95",
@@ -737,7 +748,7 @@
737
748
  "pipeline/scripts/validate-diff-risk.mjs": "cf53943f71a717fddaacf7426dea9d5eb4e0ec7bdb27bdfb91915176df9fee99",
738
749
  "pipeline/scripts/validate-planning.mjs": "a6da1193e1a86709de3e308c317b9b0e0b282650951c1a7aad6944d6b2cc2adc",
739
750
  "pipeline/scripts/validate-reviewer.mjs": "491fdcd01bd8692419157abfeb91da813505f099ede8cf150557f8aeaad04d86",
740
- "pipeline/scripts/validate-state.mjs": "ac2cfde75fe216a7549ba476c58f777f27d36e068de3796909926d68de2fb65a",
751
+ "pipeline/scripts/validate-state.mjs": "d1c6a6caaf43df8357c41d12f40ebd940465d6d2a5e2ec374c776061700898b2",
741
752
  "pipeline/scripts/validate-test-gap.mjs": "14fa89867e49497adb2b88a3290e78d0f263afa74a5b83b062115fc5a22204f7",
742
753
  "pipeline/scripts/validate-triage.mjs": "7cd78686494c4dc003b4cd66817dfe583adbdab536b54da3fbb80c9fa0e1a216",
743
754
  "pipeline/scripts/valven-gate.mjs": "1bd10b59fe2e282759942c1a3961facabc4c0c36b1e603aadc9f8ef00b27b513",
@@ -750,9 +761,9 @@
750
761
  "pipeline/scripts/worktree-finalize.sh": "ca2bb363bec738cfce57ce5f46962d69664810003cc56dde0a82ab9133dbf557",
751
762
  "pipeline/scripts/worktree-prepare.sh": "9391c828375b127f77c86e3c830dbbaf355a61464c6437319969f2f1eecc72b1",
752
763
  "pipeline/scripts/worktrees.mjs": "90dfd09b70fffe9b56c331a4ae2692cc248f4898f4ee6aee4239ef0b20888a90",
753
- "pipeline/scripts/write-state.mjs": "e1198bf970eace07d3eff22b394808a526e473df65d3d58aa2d5a12cfdac8b49",
764
+ "pipeline/scripts/write-state.mjs": "f49cb7700d837867a006caa90c17cd9e2887f0e1b676bbd8e74410ee5ba87410",
754
765
  "pipeline/scripts/write-store-config.mjs": "b994a061f6febb2ca3d396074d8b51d2c1c1f991d3072d321703380da3639a56",
755
- "pipeline/skills/.skill-manifest.json": "eee94a5b60738fcd1c41838ce3a0ac5f5e07fa88edffdd8759555dad81875dad",
766
+ "pipeline/skills/.skill-manifest.json": "f57ff9f4e6b07e4e6621865b95b89ea3a710b53d9ec4faaa996cd5a9b0952fc5",
756
767
  "pipeline/skills/.skills-index.json": "8f15e925ca59885155d64fb42aa925c9b826a7f192288fa6822015aa3cc87d05",
757
768
  "pipeline/skills/shared/README.md": "30d382420084a9ec3fa716e84f4f9e1e980ed25e01056349e2dbb19f4ac21602",
758
769
  "pipeline/skills/shared/core/apple-archive-compliance/SKILL.md": "08d5277e4a6c246c613bd3bea27646f580f1bdc1937cb4acbbd93a156e15b24e",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mmerterden/multi-agent-pipeline",
3
- "version": "20.28.0",
3
+ "version": "20.29.0",
4
4
  "description": "6-phase AI development pipeline with full orchestration on Claude Code, Copilot CLI and Codex CLI. Analysis, planning, TDD, CLI-aware parallel review with consensus surfacing + Fable triage, default-FAIL evidence gates, secret + intent guards, per-phase cost ledger, persistent learnings memory, wiki generation, commit automation. Token-preserving uninstall.",
5
5
  "type": "module",
6
6
  "main": "index.js",