agy-squad 0.0.0-stage → 0.1.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 (65) hide show
  1. package/.agents/skills/full-review/SKILL.md +89 -0
  2. package/.agents/skills/full-review/references/evidence-intake.md +146 -0
  3. package/.agents/skills/full-review/references/report-template.md +216 -0
  4. package/.agents/skills/full-review/references/review-roles.md +91 -0
  5. package/.agents/skills/pr-review/SKILL.md +60 -0
  6. package/.agents/skills/pr-review/references/pr-review-standard.md +163 -0
  7. package/.agents/skills/self-diagnosis/SKILL.md +63 -0
  8. package/.agents/skills/self-diagnosis/references/execution-and-teardown.md +71 -0
  9. package/.agents/skills/self-diagnosis/references/optimization-and-review-rubric.md +61 -0
  10. package/.agents/skills/self-diagnosis/resources/comparative-research-manifest.json +42 -0
  11. package/.agents/skills/self-diagnosis/resources/self-diagnosis-manifest.json +144 -0
  12. package/.agents/skills/self-diagnosis/scripts/diagnose.mjs +1971 -0
  13. package/.agents/skills/swarm-governance/SKILL.md +59 -0
  14. package/.agents/skills/swarm-governance/references/bundling-and-wire-format.md +88 -0
  15. package/.agents/skills/swarm-governance/references/intake-and-planning.md +120 -0
  16. package/.agents/skills/swarm-governance/references/large-swarms.md +39 -0
  17. package/CHANGELOG.md +16 -0
  18. package/LICENSE +21 -0
  19. package/README.md +156 -2
  20. package/bin/agy-squad.mjs +293 -0
  21. package/docs/assets/architecture-overview.svg +39 -0
  22. package/docs/assets/manifest-and-modes.svg +39 -0
  23. package/docs/assets/role-and-verdict-gate.svg +39 -0
  24. package/docs/assets/skill-role-workflows.svg +39 -0
  25. package/docs/assets/swarm-lifecycle.svg +39 -0
  26. package/docs/benchmarks.md +102 -0
  27. package/docs/concepts.md +81 -0
  28. package/docs/core-workflows.md +128 -0
  29. package/docs/getting-started.md +116 -0
  30. package/docs/index.md +47 -0
  31. package/docs/plans/LEDGER.md +24 -0
  32. package/docs/plans/comparative-harness-architecture-retest.md +1174 -0
  33. package/docs/plans/comparative-harness-architecture-teamwork.md +1170 -0
  34. package/docs/plans/comparative-harness-architecture.md +256 -0
  35. package/docs/plans/native-enforcement-ledger.md +126 -0
  36. package/docs/plans/pr3-option-b-fixes.md +803 -0
  37. package/docs/plans/wsl-cli-verification.md +55 -0
  38. package/docs/reviews/post-pr5-governance-review.md +221 -0
  39. package/docs/reviews/pr1-code-review-ledger.md +581 -0
  40. package/docs/reviews/pr1-production-readiness-review.md +764 -0
  41. package/docs/reviews/pr2-documentation-review-ledger.md +380 -0
  42. package/docs/reviews/pr3-squad-alignment-full-review.md +1021 -0
  43. package/docs/reviews/pr4-swarm-governance-pivot-review.md +593 -0
  44. package/docs/reviews/pr5-full-review-direction.md +330 -0
  45. package/docs/reviews/pr5-independent-review.md +266 -0
  46. package/docs/reviews/pr5-layered-swarm-review.md +513 -0
  47. package/docs/reviews/pr5-phase2-swarm-planner-review.md +470 -0
  48. package/docs/reviews/pr5-reconciled-review.md +573 -0
  49. package/docs/reviews/rebuild-wsl-dispatch-review-r2.md +427 -0
  50. package/docs/reviews/rebuild-wsl-dispatch-review.md +552 -0
  51. package/docs/roles-and-workflows.md +115 -0
  52. package/docs/stopping-agents.md +39 -0
  53. package/docs/tools.md +122 -0
  54. package/install.ps1 +5 -0
  55. package/install.sh +4 -0
  56. package/mcp/briefs.mjs +202 -0
  57. package/mcp/dispatch.mjs +280 -0
  58. package/mcp/handoffs.mjs +814 -0
  59. package/mcp/index.js +322 -0
  60. package/mcp/planner.mjs +755 -0
  61. package/mcp/verdicts.mjs +224 -0
  62. package/package.json +57 -4
  63. package/plugin.json +20 -0
  64. package/scripts/install-register.mjs +510 -0
  65. package/scripts/release-preflight.mjs +142 -0
@@ -0,0 +1,293 @@
1
+ #!/usr/bin/env node
2
+ import fs from "node:fs";
3
+ import path from "node:path";
4
+ import { fileURLToPath } from "node:url";
5
+ import { parseArgs } from "node:util";
6
+ import { handleDispatchSquad } from "../mcp/dispatch.mjs";
7
+ import { bundleReports, computeEvidenceDigest, decodeUtf8, fingerprint, inspectHandoffs, pruneReports, readFile, verifyBundle } from "../mcp/handoffs.mjs";
8
+ import { planSquadCohort } from "../mcp/planner.mjs";
9
+ import { parseContentVerdict, parseIntegrityVerdict } from "../mcp/verdicts.mjs";
10
+ import { printStatus, runCheckOnly, runInstall, runRestoreBackups, runUninstall } from "../scripts/install-register.mjs";
11
+
12
+ const __dirname = path.dirname(fileURLToPath(import.meta.url));
13
+ const pkgVersion = (() => {
14
+ try {
15
+ return JSON.parse(fs.readFileSync(path.resolve(__dirname, "../package.json"), "utf8")).version || "0.1.0";
16
+ } catch {
17
+ return "0.1.0";
18
+ }
19
+ })();
20
+
21
+ const usage = [
22
+ "Agy-Squad Governance & Verification CLI (pairs with Antigravity native /swarm):",
23
+ " agy-squad setup [--check] Install or synchronize plugin, skills, MCP server, and CLI shim",
24
+ " agy-squad status Check live integration status across Antigravity",
25
+ " agy-squad uninstall [--restore-backups] Remove plugin link, MCP entry, and CLI shims",
26
+ " agy-squad restore-backups Restore configuration backups (*.bak)",
27
+ " agy-squad plan (--manifest <path> | \"<task>\") [--squad <id>] [--topology flat|layered] [--mode swarm|subagent] [--model <id>] [--workspace-isolation inherit|share|branch] [--scope <path>...] [--role <title>...] [--no-integrity] [--report-root <path>] [--known-model <id>...] [--occupied-worker <name>...]",
28
+ " agy-squad dispatch (--squad <id> | <squadId>) [--manifest <path>] Compile invoke_subagent payload (subagent mode only)",
29
+ " agy-squad fingerprint <file...> Compute SHA-256 fingerprints for verifiedFiles",
30
+ " agy-squad inspect <record.json> Reconcile handoff readiness for a cohort",
31
+ " agy-squad digest <record.json> Compute canonical Evidence Digest for integrity audit binding",
32
+ " agy-squad bundle <record.json> [--allow-unaudited] [--replace] [--predecessor <sha256>] Create a SHA-256 verified proof bundle",
33
+ " agy-squad verify <report.sources.json> Verify bundle integrity, synthesis, and audit hashes",
34
+ " agy-squad prune <report.sources.json> <accepted-sha256> [--keep-reports] Prune loose reports after verification",
35
+ " agy-squad verdict [--integrity] <report.md> Strictly parse a content or integrity verdict"
36
+ ].join("\n");
37
+
38
+ function runPlanCommand(rest, root) {
39
+ if (!rest.length) {
40
+ throw new Error(
41
+ "Usage: agy-squad plan (--manifest <path> | \"<task>\") [--squad <id>] [--topology flat|layered] [--mode swarm|subagent] [--model <id>] [--workspace-isolation inherit|share|branch] [--scope <path>...] [--role <title>...] [--no-integrity] [--report-root <path>] [--known-model <id>...] [--occupied-worker <name>...]"
42
+ );
43
+ }
44
+ const { values, positionals } = parseArgs({
45
+ args: rest,
46
+ allowPositionals: true,
47
+ options: {
48
+ manifest: { type: "string" },
49
+ squad: { type: "string" },
50
+ topology: { type: "string" },
51
+ mode: { type: "string" },
52
+ model: { type: "string" },
53
+ "workspace-isolation": { type: "string" },
54
+ scope: { type: "string", multiple: true },
55
+ role: { type: "string", multiple: true },
56
+ "no-integrity": { type: "boolean", default: false },
57
+ "report-root": { type: "string" },
58
+ "known-model": { type: "string", multiple: true },
59
+ "occupied-worker": { type: "string", multiple: true }
60
+ }
61
+ });
62
+ const task = positionals.join(" ").trim();
63
+ const planArgs = {
64
+ ...(values.manifest !== undefined ? { manifestPath: values.manifest } : {}),
65
+ ...(task ? { task } : {}),
66
+ ...(values.squad !== undefined ? { squadId: values.squad } : {}),
67
+ ...(values.topology !== undefined ? { topology: values.topology } : {}),
68
+ ...(values.mode !== undefined ? { executionMode: values.mode } : {}),
69
+ ...(values.model !== undefined ? { model: values.model } : {}),
70
+ ...(values["workspace-isolation"] !== undefined ? { workspaceIsolation: values["workspace-isolation"] } : {}),
71
+ ...(values.scope !== undefined ? { scopeFiles: values.scope } : {}),
72
+ ...(values.role !== undefined ? { roles: values.role } : {}),
73
+ ...(values["no-integrity"] ? { includeIntegrityAuditor: false } : {}),
74
+ ...(values["report-root"] !== undefined ? { reportRoot: values["report-root"] } : {}),
75
+ ...(values["known-model"] !== undefined ? { knownModels: values["known-model"] } : {}),
76
+ ...(values["occupied-worker"] !== undefined ? { occupiedWorkerNames: values["occupied-worker"] } : {})
77
+ };
78
+ return planSquadCohort(planArgs, root);
79
+ }
80
+
81
+ function runDispatchCommand(rest, root) {
82
+ if (!rest.length) {
83
+ throw new Error("Usage: agy-squad dispatch (--squad <id> | <squadId>) [--manifest <path>]");
84
+ }
85
+ const { values, positionals } = parseArgs({
86
+ args: rest,
87
+ allowPositionals: true,
88
+ options: {
89
+ squad: { type: "string" },
90
+ manifest: { type: "string" }
91
+ }
92
+ });
93
+ if (values.squad !== undefined && positionals.length > 0) {
94
+ throw new Error("Pass either --squad <id> or a positional <squadId>, not both.");
95
+ }
96
+ if (positionals.length > 1) {
97
+ throw new Error("Usage: agy-squad dispatch (--squad <id> | <squadId>) [--manifest <path>]");
98
+ }
99
+ const squadId = values.squad ?? positionals[0];
100
+ if (!squadId) {
101
+ throw new Error("Usage: agy-squad dispatch (--squad <id> | <squadId>) [--manifest <path>]");
102
+ }
103
+ const result = handleDispatchSquad(
104
+ {
105
+ squadId,
106
+ ...(values.manifest !== undefined ? { manifestPath: values.manifest } : {})
107
+ },
108
+ root
109
+ );
110
+ if (result.isError) {
111
+ throw new Error(result.content?.[0]?.text || "dispatch_squad failed.");
112
+ }
113
+ return result.content[0].text;
114
+ }
115
+
116
+ const KNOWN_COMMANDS = new Set([
117
+ "setup",
118
+ "install",
119
+ "status",
120
+ "uninstall",
121
+ "restore-backups",
122
+ "plan",
123
+ "dispatch",
124
+ "fingerprint",
125
+ "inspect",
126
+ "digest",
127
+ "bundle",
128
+ "verify",
129
+ "prune",
130
+ "verdict",
131
+ "run"
132
+ ]);
133
+
134
+ function parseSubcommandArgs(rest, usageLine, options = {}) {
135
+ try {
136
+ return parseArgs({
137
+ args: rest,
138
+ allowPositionals: true,
139
+ strict: true,
140
+ options
141
+ });
142
+ } catch (error) {
143
+ throw new Error(`${error.message}\n${usageLine}`);
144
+ }
145
+ }
146
+
147
+ async function main(args) {
148
+ if (!args.length || args[0] === "--help" || args[0] === "-h") {
149
+ console.log(usage);
150
+ return 0;
151
+ }
152
+ if (args[0] === "--version" || args[0] === "-v") {
153
+ console.log(pkgVersion);
154
+ return 0;
155
+ }
156
+ const [command, ...rest] = args;
157
+ if (!KNOWN_COMMANDS.has(command)) {
158
+ throw new Error(`Unknown command '${command}'. Expected setup, status, uninstall, restore-backups, plan, dispatch, fingerprint, inspect, digest, bundle, verify, prune, or verdict.`);
159
+ }
160
+ if (command === "run") {
161
+ throw new Error("'agy-squad run' was retired in Phase 2; use 'agy-squad plan' with Antigravity native /swarm + swarm-governance.");
162
+ }
163
+ if (rest.includes("--help") || rest.includes("-h")) {
164
+ console.log(usage);
165
+ return 0;
166
+ }
167
+
168
+ if (command === "setup" || command === "install") {
169
+ const isCheck = rest.includes("--check") || rest.includes("-c");
170
+ const isRestore = rest.includes("--restore-backups") || rest.includes("restore-backups");
171
+ const isUninstall = rest.includes("--uninstall") || rest.includes("uninstall");
172
+ if (isCheck && (isRestore || isUninstall)) {
173
+ throw new Error("Conflicting flags: --check is read-only and cannot be combined with --uninstall or --restore-backups.");
174
+ }
175
+ if (isCheck) {
176
+ await runCheckOnly();
177
+ return 0;
178
+ }
179
+ await runInstall();
180
+ return 0;
181
+ }
182
+ if (command === "status") {
183
+ const st = printStatus();
184
+ return st.isInstalled ? 0 : 1;
185
+ }
186
+ if (command === "uninstall") {
187
+ const isRestore = rest.includes("--restore-backups") || rest.includes("restore-backups");
188
+ await runUninstall({ restoreBackups: isRestore });
189
+ return 0;
190
+ }
191
+ if (command === "restore-backups") {
192
+ await runRestoreBackups();
193
+ return 0;
194
+ }
195
+
196
+ const root = fs.realpathSync(process.cwd());
197
+
198
+ if (command === "plan") {
199
+ console.log(JSON.stringify(runPlanCommand(rest, root), null, 2));
200
+ return 0;
201
+ }
202
+ if (command === "dispatch") {
203
+ console.log(runDispatchCommand(rest, root));
204
+ return 0;
205
+ }
206
+ if (command === "fingerprint") {
207
+ const usageLine = "Usage: agy-squad fingerprint <file...>";
208
+ const { positionals } = parseSubcommandArgs(rest, usageLine);
209
+ if (!positionals.length) throw new Error(usageLine);
210
+ console.log(JSON.stringify(fingerprint(root, positionals), null, 2));
211
+ return 0;
212
+ }
213
+ if (command === "inspect") {
214
+ const usageLine = "Usage: agy-squad inspect <record.json>";
215
+ const { positionals } = parseSubcommandArgs(rest, usageLine);
216
+ if (positionals.length !== 1) throw new Error(usageLine);
217
+ const record = JSON.parse(decodeUtf8(readFile(root, positionals[0]), positionals[0]));
218
+ console.log(JSON.stringify(inspectHandoffs(root, record), null, 2));
219
+ return 0;
220
+ }
221
+ if (command === "digest") {
222
+ const usageLine = "Usage: agy-squad digest <record.json>";
223
+ const { positionals } = parseSubcommandArgs(rest, usageLine);
224
+ if (positionals.length !== 1) throw new Error(usageLine);
225
+ const record = JSON.parse(decodeUtf8(readFile(root, positionals[0]), positionals[0]));
226
+ console.log(JSON.stringify(computeEvidenceDigest(root, record), null, 2));
227
+ return 0;
228
+ }
229
+ if (command === "bundle") {
230
+ const usageLine = "Usage: agy-squad bundle <record.json> [--allow-unaudited] [--replace] [--predecessor <sha256>]";
231
+ const { values, positionals } = parseSubcommandArgs(rest, usageLine, {
232
+ "allow-unaudited": { type: "boolean", default: false },
233
+ replace: { type: "boolean", default: false },
234
+ predecessor: { type: "string" }
235
+ });
236
+ if (positionals.length !== 1) throw new Error(usageLine);
237
+ const record = JSON.parse(decodeUtf8(readFile(root, positionals[0]), positionals[0]));
238
+ if (!record || typeof record !== "object" || Array.isArray(record)) {
239
+ throw new Error("Provide a valid bundle record.");
240
+ }
241
+ const bundleInput = {
242
+ ...record,
243
+ ...(values["allow-unaudited"]
244
+ ? { requireIntegrityAudit: false }
245
+ : (record.requireIntegrityAudit === undefined ? { requireIntegrityAudit: true } : {})),
246
+ ...(values.replace ? { replaceExisting: true } : {}),
247
+ ...(values.predecessor !== undefined ? { expectedPredecessorSha256: values.predecessor } : {})
248
+ };
249
+ console.log(JSON.stringify(bundleReports(root, bundleInput), null, 2));
250
+ return 0;
251
+ }
252
+ if (command === "verify") {
253
+ const usageLine = "Usage: agy-squad verify <report.sources.json>";
254
+ const { positionals } = parseSubcommandArgs(rest, usageLine);
255
+ if (positionals.length !== 1) throw new Error(usageLine);
256
+ console.log(JSON.stringify(verifyBundle(root, positionals[0]), null, 2));
257
+ return 0;
258
+ }
259
+ if (command === "prune") {
260
+ const usageLine = "Usage: agy-squad prune <report.sources.json> <accepted-sha256> [--keep-reports]";
261
+ const { values, positionals } = parseSubcommandArgs(rest, usageLine, {
262
+ "keep-reports": { type: "boolean", default: false }
263
+ });
264
+ if (positionals.length !== 2) {
265
+ throw new Error(usageLine);
266
+ }
267
+ console.log(JSON.stringify(pruneReports(root, positionals[0], positionals[1], { keepReports: values["keep-reports"] }), null, 2));
268
+ return 0;
269
+ }
270
+ if (command === "verdict") {
271
+ const usageLine = "Usage: agy-squad verdict [--integrity] <report.md>";
272
+ const { values, positionals } = parseSubcommandArgs(rest, usageLine, {
273
+ integrity: { type: "boolean", default: false }
274
+ });
275
+ if (positionals.length !== 1) {
276
+ throw new Error(usageLine);
277
+ }
278
+ const markdown = decodeUtf8(readFile(root, positionals[0]), positionals[0]);
279
+ const verdict = values.integrity ? parseIntegrityVerdict(markdown) : parseContentVerdict(markdown);
280
+ console.log(JSON.stringify({ verdict }, null, 2));
281
+ return 0;
282
+ }
283
+
284
+ throw new Error(`Unknown command '${command}'. Expected plan, dispatch, fingerprint, inspect, digest, bundle, verify, prune, or verdict.`);
285
+ }
286
+
287
+ main(process.argv.slice(2)).then(
288
+ code => { process.exitCode = code; },
289
+ error => {
290
+ console.error(error.message);
291
+ process.exitCode = 1;
292
+ }
293
+ );
@@ -0,0 +1,39 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" class="pele pele-flowchart" viewBox="0 0 721 540" width="721" height="540" style="max-width:100%;height:auto;--_bg:var(--pele-bg,#fff);--_fg:var(--pele-fg,#1f1f1f);--_m:var(--pele-muted,#6e6e6e);--_l:var(--pele-line,#1f1f1f);--_s:var(--pele-surface,#f3f3f3);--_a:var(--pele-surface-alt,#e6e6e6);--_b:var(--pele-border,#8a8a8a);--_c:var(--pele-accent,#5b7bd5);color:var(--_fg);--_r:var(--pele-radius,4px);--_fm:var(--pele-font-mono,monospace);font:16px sans-serif;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;font-family:var(--pele-font,sans-serif)" fill="var(--_fg)" role="graphics-document document" aria-roledescription="flowchart">
2
+ <style>
3
+ :root {
4
+ --pele-font: -apple-system, BlinkMacSystemFont, "Segoe UI", "Noto Sans", Helvetica, Arial, sans-serif;
5
+ --pele-bg: #ffffff;
6
+ --pele-fg: #1f2328;
7
+ --pele-muted: #656d76;
8
+ --pele-line: #57606a;
9
+ --pele-surface: #f6f8fa;
10
+ --pele-surface-alt: #eaeef2;
11
+ --pele-border: #d0d7de;
12
+ --pele-accent: #0969da;
13
+ --pele-series-1: #0969da;
14
+ --pele-series-2: #1a7f37;
15
+ --pele-series-3: #9a6700;
16
+ --pele-series-4: #8250df;
17
+ --pele-series-5: #cf222e;
18
+ --pele-series-6: #bf3989;
19
+ }
20
+ @media (prefers-color-scheme: dark) {
21
+ :root {
22
+ --pele-bg: #0d1117;
23
+ --pele-fg: #e6edf3;
24
+ --pele-muted: #8b949e;
25
+ --pele-line: #8b949e;
26
+ --pele-surface: #161b22;
27
+ --pele-surface-alt: #21262d;
28
+ --pele-border: #30363d;
29
+ --pele-accent: #2f81f7;
30
+ --pele-series-1: #2f81f7;
31
+ --pele-series-2: #3fb950;
32
+ --pele-series-3: #d29922;
33
+ --pele-series-4: #a371f7;
34
+ --pele-series-5: #f85149;
35
+ --pele-series-6: #db61a2;
36
+ }
37
+ }
38
+ </style>
39
+ <g class="pele-clusters"><g class="pele-cluster" data-id="L3"><rect x="32.5" y="406" width="655.66" height="126" fill="var(--_a)" fill-opacity="0.5" stroke="var(--_b)" style="rx:var(--_r)"/><text class="pele-cluster-label" fill="var(--_m)" x="181.66" y="431.6" text-anchor="middle">Agy-Context-Saver: Hook &amp; Forensics</text></g><g class="pele-cluster" data-id="L2"><rect x="20.26" y="207" width="680.16" height="126" fill="var(--_a)" fill-opacity="0.5" stroke="var(--_b)" style="rx:var(--_r)"/><text class="pele-cluster-label" fill="var(--_m)" x="130.73" y="232.6" text-anchor="middle">Antigravity: Native Runtime</text></g><g class="pele-cluster" data-id="L1"><rect x="8" y="8" width="704.67" height="126" fill="var(--_a)" fill-opacity="0.5" stroke="var(--_b)" style="rx:var(--_r)"/><text class="pele-cluster-label" fill="var(--_m)" x="138.5" y="33.6" text-anchor="middle">Agy-Squad: Governance &amp; Proof</text></g></g><g class="pele-edges" fill="none" stroke="var(--_l)" stroke-linecap="round"><g class="pele-edge" data-id="L_A1_A2_0"><path d="M178.74,81L219.74,81"/><path class="pele-marker" d="M226.74,81L218.74,84.36L218.74,77.64Z" fill="var(--_l)" stroke="none"/></g><g class="pele-edge" data-id="L_A2_A3_0"><path d="M417.47,81L458.47,81"/><path class="pele-marker" d="M465.47,81L457.47,84.36L457.47,77.64Z" fill="var(--_l)" stroke="none"/></g><g class="pele-edge" data-id="L_C1_C2_0"><path d="M214.76,479L255.76,479"/><path class="pele-marker" d="M262.76,479L254.76,482.36L254.76,475.64Z" fill="var(--_l)" stroke="none"/></g><g class="pele-edge" data-id="L_C2_C3_0"><path d="M439.26,479L480.26,479"/><path class="pele-marker" d="M487.26,479L479.26,482.36L479.26,475.64Z" fill="var(--_l)" stroke="none"/></g><g class="pele-edge" data-id="L_L1_L2_0"><path d="M245,134L245,200"/><path class="pele-marker" d="M245,207L241.64,199L248.36,199Z" fill="var(--_l)" stroke="none"/></g><g class="pele-edge" data-id="L_L2_L1_0"><path d="M480,207L480,141"/><path class="pele-marker" d="M480,134L483.36,142L476.64,142Z" fill="var(--_l)" stroke="none"/></g><g class="pele-edge" data-id="L_L2_L3_0"><path d="M245,333L245,399"/><path class="pele-marker" d="M245,406L241.64,398L248.36,398Z" fill="var(--_l)" stroke="none"/></g><g class="pele-edge" data-id="L_L3_L2_0"><path d="M480,406L480,340"/><path class="pele-marker" d="M480,333L483.36,341L476.64,341Z" fill="var(--_l)" stroke="none"/></g></g><g class="pele-edge-labels" font-size="14"><g class="pele-edge-label" data-id="L_L1_L2_0"><rect x="165" y="156.5" width="160" height="21" rx="3" fill="var(--_bg)"/><text x="245" y="171.9" text-anchor="middle">dispatches slots &amp; briefs</text></g><g class="pele-edge-label" data-id="L_L2_L1_0"><rect x="396" y="156.5" width="168" height="21" rx="3" fill="var(--_bg)"/><text x="480" y="171.9" text-anchor="middle">READY &lt;=500B &amp; verify</text></g><g class="pele-edge-label" data-id="L_L2_L3_0"><rect x="183" y="355.5" width="124" height="21" rx="3" fill="var(--_bg)"/><text x="245" y="370.9" text-anchor="middle">executes tool calls</text></g><g class="pele-edge-label" data-id="L_L3_L2_0"><rect x="405" y="355.5" width="150" height="21" rx="3" fill="var(--_bg)"/><text x="480" y="370.9" text-anchor="middle">hook rewrite &amp; logs</text></g></g><g class="pele-nodes"><g class="pele-node pele-shape-rect" data-id="A1" transform="translate(103.37,81)"><rect x="-75.37" y="-33" width="150.74" height="66" fill="var(--_s)" stroke="var(--_b)" style="rx:var(--_r)"/><text class="pele-label" text-anchor="middle" xml:space="preserve"><tspan x="0" y="-4.9">squad_planner /</tspan><tspan x="0" y="16.1">dispatch_squad</tspan></text></g><g class="pele-node pele-shape-rect" data-id="A2" transform="translate(322.1,81)"><rect x="-95.37" y="-33" width="190.74" height="66" fill="var(--_s)" stroke="var(--_b)" style="rx:var(--_r)"/><text class="pele-label" text-anchor="middle" xml:space="preserve"><tspan x="0" y="-4.9">Scoped Briefs &amp; Slots</tspan><tspan x="0" y="16.1">(&lt;= 500 B Receipts)</tspan></text></g><g class="pele-node pele-shape-rect" data-id="A3" transform="translate(579.07,81)"><rect x="-113.6" y="-38" width="227.2" height="76" fill="var(--_s)" stroke="var(--_b)" style="rx:var(--_r)"/><text class="pele-label" text-anchor="middle" xml:space="preserve"><tspan x="0" y="-14">bin/agy-squad.mjs</tspan><tspan x="0" y="5">dispatch/plan/verdict/fp</tspan><tspan x="0" y="24">inspect/digest/bundle/verify/prune</tspan></text></g><g class="pele-node pele-shape-rect" data-id="B1" transform="translate(153.17,280)"><rect x="-112.91" y="-33" width="225.82" height="66" fill="var(--_s)" stroke="var(--_b)" style="rx:var(--_r)"/><text class="pele-label" text-anchor="middle" xml:space="preserve"><tspan x="0" y="-4.9">/swarm Board + Worktrees</tspan><tspan x="0" y="16.1">inherit/share/branch</tspan></text></g><g class="pele-node pele-shape-rect" data-id="B2" transform="translate(392.56,280)"><rect x="-78.48" y="-33" width="156.96" height="66" fill="var(--_s)" stroke="var(--_b)" style="rx:var(--_r)"/><text class="pele-label" text-anchor="middle" xml:space="preserve"><tspan x="0" y="-4.9">invoke_subagent</tspan><tspan x="0" y="16.1">fallback</tspan></text></g><g class="pele-node pele-shape-rect" data-id="B3" transform="translate(599.73,280)"><rect x="-80.69" y="-24" width="161.38" height="48" fill="var(--_s)" stroke="var(--_b)" style="rx:var(--_r)"/><text class="pele-label" x="0" y="5.6" text-anchor="middle">Reactive Wakeup</text></g><g class="pele-node pele-shape-rect" data-id="C1" transform="translate(133.63,479)"><rect x="-81.13" y="-24" width="162.26" height="48" fill="var(--_s)" stroke="var(--_b)" style="rx:var(--_r)"/><text class="pele-label" x="0" y="5.6" text-anchor="middle">PreToolUse Hook</text></g><g class="pele-node pele-shape-rect" data-id="C2" transform="translate(351.01,479)"><rect x="-88.25" y="-33" width="176.5" height="66" fill="var(--_s)" stroke="var(--_b)" style="rx:var(--_r)"/><text class="pele-label" text-anchor="middle" xml:space="preserve"><tspan x="0" y="-4.9">rtk 0.51.0 Rewrite &amp;</tspan><tspan x="0" y="16.1">3-Tier Inspection</tspan></text></g><g class="pele-node pele-shape-rect" data-id="C3" transform="translate(577.71,479)"><rect x="-90.46" y="-33" width="180.91" height="66" fill="var(--_s)" stroke="var(--_b)" style="rx:var(--_r)"/><text class="pele-label" text-anchor="middle" xml:space="preserve"><tspan x="0" y="-4.9">Transcript Forensics</tspan><tspan x="0" y="16.1">&amp; Backoff</tspan></text></g></g></svg>
@@ -0,0 +1,39 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" class="pele pele-flowchart" viewBox="0 0 734 616" width="734" height="616" style="max-width:100%;height:auto;--_bg:var(--pele-bg,#fff);--_fg:var(--pele-fg,#1f1f1f);--_m:var(--pele-muted,#6e6e6e);--_l:var(--pele-line,#1f1f1f);--_s:var(--pele-surface,#f3f3f3);--_a:var(--pele-surface-alt,#e6e6e6);--_b:var(--pele-border,#8a8a8a);--_c:var(--pele-accent,#5b7bd5);color:var(--_fg);--_r:var(--pele-radius,4px);--_fm:var(--pele-font-mono,monospace);font:16px sans-serif;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;font-family:var(--pele-font,sans-serif)" fill="var(--_fg)" role="graphics-document document" aria-roledescription="flowchart">
2
+ <style>
3
+ :root {
4
+ --pele-font: -apple-system, BlinkMacSystemFont, "Segoe UI", "Noto Sans", Helvetica, Arial, sans-serif;
5
+ --pele-bg: #ffffff;
6
+ --pele-fg: #1f2328;
7
+ --pele-muted: #656d76;
8
+ --pele-line: #57606a;
9
+ --pele-surface: #f6f8fa;
10
+ --pele-surface-alt: #eaeef2;
11
+ --pele-border: #d0d7de;
12
+ --pele-accent: #0969da;
13
+ --pele-series-1: #0969da;
14
+ --pele-series-2: #1a7f37;
15
+ --pele-series-3: #9a6700;
16
+ --pele-series-4: #8250df;
17
+ --pele-series-5: #cf222e;
18
+ --pele-series-6: #bf3989;
19
+ }
20
+ @media (prefers-color-scheme: dark) {
21
+ :root {
22
+ --pele-bg: #0d1117;
23
+ --pele-fg: #e6edf3;
24
+ --pele-muted: #8b949e;
25
+ --pele-line: #8b949e;
26
+ --pele-surface: #161b22;
27
+ --pele-surface-alt: #21262d;
28
+ --pele-border: #30363d;
29
+ --pele-accent: #2f81f7;
30
+ --pele-series-1: #2f81f7;
31
+ --pele-series-2: #3fb950;
32
+ --pele-series-3: #d29922;
33
+ --pele-series-4: #a371f7;
34
+ --pele-series-5: #f85149;
35
+ --pele-series-6: #db61a2;
36
+ }
37
+ }
38
+ </style>
39
+ <g class="pele-clusters"><g class="pele-cluster" data-id="OUT"><rect x="8" y="481.04" width="717.06" height="126" fill="var(--_a)" fill-opacity="0.5" stroke="var(--_b)" style="rx:var(--_r)"/><text class="pele-cluster-label" fill="var(--_m)" x="86.02" y="506.64" text-anchor="middle">Compiled Outputs</text></g><g class="pele-cluster" data-id="CORE"><rect x="92" y="203" width="548" height="230.04" fill="var(--_a)" fill-opacity="0.5" stroke="var(--_b)" style="rx:var(--_r)"/><text class="pele-cluster-label" fill="var(--_m)" x="190.72" y="228.6" text-anchor="middle">Compiler &amp; Validation</text></g><g class="pele-cluster" data-id="IN"><rect x="136" y="8" width="465" height="147" fill="var(--_a)" fill-opacity="0.5" stroke="var(--_b)" style="rx:var(--_r)"/><text class="pele-cluster-label" fill="var(--_m)" x="214.58" y="33.6" text-anchor="middle">Planner &amp; Compiler Inputs</text></g></g><g class="pele-edges" fill="none" stroke="var(--_l)" stroke-linecap="round"><g class="pele-edge" data-id="L_M1_M2_0"><path d="M297,328.02L334.18,328.02"/><path class="pele-marker" d="M341.18,328.02L333.18,331.38L333.18,324.66Z" fill="var(--_l)" stroke="none"/></g><g class="pele-edge" data-id="L_IN_CORE_0"><path d="M366.53,155L366.53,196"/><path class="pele-marker" d="M366.53,203L363.17,195L369.89,195Z" fill="var(--_l)" stroke="none"/></g><g class="pele-edge" data-id="L_CORE_OUT_0"><path d="M366.53,433.04L366.53,474.04"/><path class="pele-marker" d="M366.53,481.04L363.17,473.04L369.89,473.04Z" fill="var(--_l)" stroke="none"/></g></g><g class="pele-nodes"><g class="pele-node pele-shape-rect" data-id="I1" transform="translate(230,91.5)"><rect x="-74" y="-33" width="148" height="66" fill="var(--_s)" stroke="var(--_b)" style="rx:var(--_r)"/><text class="pele-label" text-anchor="middle" xml:space="preserve"><tspan x="0" y="-4.9">manifestPath |</tspan><tspan x="0" y="16.1">manifest | task</tspan></text></g><g class="pele-node pele-shape-rect" data-id="I2" transform="translate(459.96,91.5)"><rect x="-120" y="-43.5" width="240" height="87" fill="var(--_s)" stroke="var(--_b)" style="rx:var(--_r)"/><text class="pele-label" text-anchor="middle" xml:space="preserve"><tspan x="0" y="-15.4">plan: --mode|--model</tspan><tspan x="0" y="5.6">--workspace-isolation</tspan><tspan x="0" y="26.6">dispatch: --squad &lt;id&gt;</tspan></text></g><g class="pele-node pele-shape-rect" data-id="M1" transform="translate(200,328.02)"><rect x="-97" y="-43.5" width="194" height="87" fill="var(--_s)" stroke="var(--_b)" style="rx:var(--_r)"/><text class="pele-label" text-anchor="middle" xml:space="preserve"><tspan x="0" y="-15.4">squad_planner (/swarm)</tspan><tspan x="0" y="5.6">dispatch_squad (subagent)</tspan><tspan x="0" y="26.6">+ mcp/briefs.mjs</tspan></text></g><g class="pele-node pele-shape-diam" data-id="M2" transform="translate(477.22,328.02)"><polygon points="0,-85.02 136.03,0 0,85.02 -136.03,0" fill="var(--_s)" stroke="var(--_b)"/><text class="pele-label" text-anchor="middle" xml:space="preserve"><tspan x="0" y="-4.9">scopeOverlaps (readOnly)</tspan><tspan x="0" y="16.1">&amp; knownModels</tspan></text></g><g class="pele-node pele-shape-rect" data-id="O1" transform="translate(105.57,554.04)"><rect x="-82" y="-33" width="164" height="66" fill="var(--_s)" stroke="var(--_b)" style="rx:var(--_r)"/><text class="pele-label" text-anchor="middle" xml:space="preserve"><tspan x="0" y="-4.9">swarmAdd + slots</tspan><tspan x="0" y="16.1">(squad_planner)</tspan></text></g><g class="pele-node pele-shape-rect" data-id="O2" transform="translate(338.95,554.04)"><rect x="-107.82" y="-33" width="215.63" height="66" fill="var(--_s)" stroke="var(--_b)" style="rx:var(--_r)"/><text class="pele-label" text-anchor="middle" xml:space="preserve"><tspan x="0" y="-4.9">Subagents[] + alias note</tspan><tspan x="0" y="16.1">(dispatch_squad)</tspan></text></g><g class="pele-node pele-shape-rect" data-id="O3" transform="translate(599.91,554.04)"><rect x="-105.14" y="-33" width="210.29" height="66" fill="var(--_s)" stroke="var(--_b)" style="rx:var(--_r)"/><text class="pele-label" text-anchor="middle" xml:space="preserve"><tspan x="0" y="-4.9">provenanceScaffold &amp;</tspan><tspan x="0" y="16.1">bundleRecordTemplates</tspan></text></g></g></svg>
@@ -0,0 +1,39 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" class="pele pele-flowchart" viewBox="0 0 580 498" width="580" height="498" style="max-width:100%;height:auto;--_bg:var(--pele-bg,#fff);--_fg:var(--pele-fg,#1f1f1f);--_m:var(--pele-muted,#6e6e6e);--_l:var(--pele-line,#1f1f1f);--_s:var(--pele-surface,#f3f3f3);--_a:var(--pele-surface-alt,#e6e6e6);--_b:var(--pele-border,#8a8a8a);--_c:var(--pele-accent,#5b7bd5);color:var(--_fg);--_r:var(--pele-radius,4px);--_fm:var(--pele-font-mono,monospace);font:16px sans-serif;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;font-family:var(--pele-font,sans-serif)" fill="var(--_fg)" role="graphics-document document" aria-roledescription="flowchart">
2
+ <style>
3
+ :root {
4
+ --pele-font: -apple-system, BlinkMacSystemFont, "Segoe UI", "Noto Sans", Helvetica, Arial, sans-serif;
5
+ --pele-bg: #ffffff;
6
+ --pele-fg: #1f2328;
7
+ --pele-muted: #656d76;
8
+ --pele-line: #57606a;
9
+ --pele-surface: #f6f8fa;
10
+ --pele-surface-alt: #eaeef2;
11
+ --pele-border: #d0d7de;
12
+ --pele-accent: #0969da;
13
+ --pele-series-1: #0969da;
14
+ --pele-series-2: #1a7f37;
15
+ --pele-series-3: #9a6700;
16
+ --pele-series-4: #8250df;
17
+ --pele-series-5: #cf222e;
18
+ --pele-series-6: #bf3989;
19
+ }
20
+ @media (prefers-color-scheme: dark) {
21
+ :root {
22
+ --pele-bg: #0d1117;
23
+ --pele-fg: #e6edf3;
24
+ --pele-muted: #8b949e;
25
+ --pele-line: #8b949e;
26
+ --pele-surface: #161b22;
27
+ --pele-surface-alt: #21262d;
28
+ --pele-border: #30363d;
29
+ --pele-accent: #2f81f7;
30
+ --pele-series-1: #2f81f7;
31
+ --pele-series-2: #3fb950;
32
+ --pele-series-3: #d29922;
33
+ --pele-series-4: #a371f7;
34
+ --pele-series-5: #f85149;
35
+ --pele-series-6: #db61a2;
36
+ }
37
+ }
38
+ </style>
39
+ <g class="pele-clusters"><g class="pele-cluster" data-id="Audit"><rect x="300" y="8" width="276" height="344" fill="var(--_a)" fill-opacity="0.5" stroke="var(--_b)" style="rx:var(--_r)"/><text class="pele-cluster-label" fill="var(--_m)" x="438" y="33.6" text-anchor="middle">Flat Integrity Auditor (Audit Plane)</text></g><g class="pele-cluster" data-id="Content"><rect x="8" y="50" width="255.63" height="302" fill="var(--_a)" fill-opacity="0.5" stroke="var(--_b)" style="rx:var(--_r)"/><text class="pele-cluster-label" fill="var(--_m)" x="134.94" y="75.6" text-anchor="middle">Working Squad (Content Plane)</text></g></g><g class="pele-edges" fill="none" stroke="var(--_l)" stroke-linecap="round"><g class="pele-edge" data-id="L_SP_LD_0"><path d="M135.82,177L135.82,218"/><path class="pele-marker" d="M135.82,225L132.46,217L139.18,217Z" fill="var(--_l)" stroke="none"/></g><g class="pele-edge" data-id="L_AU_IV_0"><path d="M437.68,156L437.68,197"/><path class="pele-marker" d="M437.68,204L434.32,196L441.04,196Z" fill="var(--_l)" stroke="none"/></g><g class="pele-edge" data-id="L_LD_GATE_0"><path d="M135.82,312L135.82,352C135.82,369.58 271.94,369.58 271.94,387.16L271.94,393.16"/><path class="pele-marker" d="M271.94,400.16L268.58,392.16L275.3,392.16Z" fill="var(--_l)" stroke="none"/></g><g class="pele-edge" data-id="L_IV_GATE_0"><path d="M437.68,312L437.68,352C437.68,369.58 301.56,369.58 301.56,387.16L301.56,393.16"/><path class="pele-marker" d="M301.56,400.16L298.2,392.16L304.92,392.16Z" fill="var(--_l)" stroke="none"/></g></g><g class="pele-nodes"><g class="pele-node pele-shape-rect" data-id="SP" transform="translate(135.82,133.5)"><rect x="-88.91" y="-43.5" width="177.82" height="87" fill="var(--_s)" stroke="var(--_b)" style="rx:var(--_r)"/><text class="pele-label" text-anchor="middle" xml:space="preserve"><tspan x="0" y="-15.4">Specialists</tspan><tspan x="0" y="5.6">report.md + READY</tspan><tspan x="0" y="26.6">&lt;= 500 B</tspan></text></g><g class="pele-node pele-shape-rect" data-id="LD" transform="translate(135.82,268.5)"><rect x="-107.82" y="-43.5" width="215.63" height="87" fill="var(--_s)" stroke="var(--_b)" style="rx:var(--_r)"/><text class="pele-label" text-anchor="middle" xml:space="preserve"><tspan x="0" y="-15.4">Lead Content Verdict:</tspan><tspan x="0" y="5.6">PASS / FAIL / BLOCKED</tspan><tspan x="0" y="26.6">+ fingerprint SHA-256</tspan></text></g><g class="pele-node pele-shape-rect" data-id="AU" transform="translate(437.68,102)"><rect x="-128" y="-54" width="256" height="108" fill="var(--_s)" stroke="var(--_b)" style="rx:var(--_r)"/><text class="pele-label" text-anchor="middle" xml:space="preserve"><tspan x="0" y="-25.9">audit-&lt;id&gt; | integrity_auditor</tspan><tspan x="0" y="-4.9">query_transcript</tspan><tspan x="0" y="16.1">summaryOnly=true</tspan><tspan x="0" y="37.1">+ Artifact Hash Check</tspan></text></g><g class="pele-node pele-shape-rect" data-id="IV" transform="translate(437.68,258)"><rect x="-105.58" y="-54" width="211.15" height="108" fill="var(--_s)" stroke="var(--_b)" style="rx:var(--_r)"/><text class="pele-label" text-anchor="middle" xml:space="preserve"><tspan x="0" y="-25.9">Target Squad +</tspan><tspan x="0" y="-4.9">Integrity Verdict:</tspan><tspan x="0" y="16.1">CLEAN |</tspan><tspan x="0" y="37.1">INTEGRITY VIOLATION</tspan></text></g><g class="pele-node pele-shape-cyl" data-id="GATE" transform="translate(286.75,445)"><path d="M-118,-33A118,12 0 0 1 118,-33V33A118,12 0 0 1 -118,33Z" fill="var(--_s)" stroke="var(--_b)"/><path d="M-118,-33A118,12 0 0 0 118,-33" fill="none" stroke="var(--_b)"/><text class="pele-label" text-anchor="middle" xml:space="preserve"><tspan x="0" y="1.1">bundle -&gt; verify -&gt; prune</tspan><tspan x="0" y="22.1">(opt-out: --allow-unaudited)</tspan></text></g></g></svg>
@@ -0,0 +1,39 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" class="pele pele-flowchart" viewBox="0 0 504 1049" width="504" height="1049" style="max-width:100%;height:auto;--_bg:var(--pele-bg,#fff);--_fg:var(--pele-fg,#1f1f1f);--_m:var(--pele-muted,#6e6e6e);--_l:var(--pele-line,#1f1f1f);--_s:var(--pele-surface,#f3f3f3);--_a:var(--pele-surface-alt,#e6e6e6);--_b:var(--pele-border,#8a8a8a);--_c:var(--pele-accent,#5b7bd5);color:var(--_fg);--_r:var(--pele-radius,4px);--_fm:var(--pele-font-mono,monospace);font:16px sans-serif;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;font-family:var(--pele-font,sans-serif)" fill="var(--_fg)" role="graphics-document document" aria-roledescription="flowchart">
2
+ <style>
3
+ :root {
4
+ --pele-font: -apple-system, BlinkMacSystemFont, "Segoe UI", "Noto Sans", Helvetica, Arial, sans-serif;
5
+ --pele-bg: #ffffff;
6
+ --pele-fg: #1f2328;
7
+ --pele-muted: #656d76;
8
+ --pele-line: #57606a;
9
+ --pele-surface: #f6f8fa;
10
+ --pele-surface-alt: #eaeef2;
11
+ --pele-border: #d0d7de;
12
+ --pele-accent: #0969da;
13
+ --pele-series-1: #0969da;
14
+ --pele-series-2: #1a7f37;
15
+ --pele-series-3: #9a6700;
16
+ --pele-series-4: #8250df;
17
+ --pele-series-5: #cf222e;
18
+ --pele-series-6: #bf3989;
19
+ }
20
+ @media (prefers-color-scheme: dark) {
21
+ :root {
22
+ --pele-bg: #0d1117;
23
+ --pele-fg: #e6edf3;
24
+ --pele-muted: #8b949e;
25
+ --pele-line: #8b949e;
26
+ --pele-surface: #161b22;
27
+ --pele-surface-alt: #21262d;
28
+ --pele-border: #30363d;
29
+ --pele-accent: #2f81f7;
30
+ --pele-series-1: #2f81f7;
31
+ --pele-series-2: #3fb950;
32
+ --pele-series-3: #d29922;
33
+ --pele-series-4: #a371f7;
34
+ --pele-series-5: #f85149;
35
+ --pele-series-6: #db61a2;
36
+ }
37
+ }
38
+ </style>
39
+ <g class="pele-edges" fill="none" stroke="var(--_l)" stroke-linecap="round"><g class="pele-edge" data-id="L_OP_PLAN_0"><path d="M315.51,56L315.51,97"/><path class="pele-marker" d="M315.51,104L312.15,96L318.87,96Z" fill="var(--_l)" stroke="none"/></g><g class="pele-edge" data-id="L_PLAN_COHORT_0"><path d="M292.14,170C292.14,187.5 183.56,187.5 183.56,205L183.56,211"/><path class="pele-marker" d="M183.56,218L180.2,210L186.92,210Z" fill="var(--_l)" stroke="none"/></g><g class="pele-edge" data-id="L_PLAN_PEERS_0"><path d="M338.88,170C338.88,187.5 386.71,187.5 386.71,205L386.71,211" stroke-dasharray="3 4"/><path class="pele-marker" d="M386.71,218L383.35,210L390.07,210Z" fill="var(--_l)" stroke="none"/></g><g class="pele-edge" data-id="L_COHORT_LEAD_0"><path d="M154.87,284L154.87,292.97C154.87,298.73 91.38,298.73 91.38,304.5L91.38,365"/><path class="pele-marker" d="M91.38,372L88.02,364L94.74,364Z" fill="var(--_l)" stroke="none"/></g><g class="pele-edge" data-id="L_LEAD_AUD_0"><path d="M91.38,438L91.38,498.5C91.38,506.19 157.26,506.19 157.26,513.88L157.26,519"/><path class="pele-marker" d="M157.26,526L153.9,518L160.62,518Z" fill="var(--_l)" stroke="none"/></g><g class="pele-edge" data-id="L_AUD_COHORT_0"><path d="M232.43,526L232.43,513C232.43,475.5 275.75,475.5 275.75,438L275.75,372C275.75,334.5 212.25,334.5 212.25,297L212.25,291"/><path class="pele-marker" d="M212.25,284L215.61,292L208.89,292Z" fill="var(--_l)" stroke="none"/></g><g class="pele-edge" data-id="L_AUD_FINAL_0"><path d="M194.85,592L194.85,673"/><path class="pele-marker" d="M194.85,680L191.49,672L198.21,672Z" fill="var(--_l)" stroke="none"/></g><g class="pele-edge" data-id="L_FINAL_IMPL_0"><path d="M171.05,746L171.05,754.97C171.05,760.73 106.97,760.73 106.97,766.5L106.97,812"/><path class="pele-marker" d="M106.97,819L103.61,811L110.33,811Z" fill="var(--_l)" stroke="none"/></g><g class="pele-edge" data-id="L_IMPL_FINAL_0"><path d="M213.93,819L213.93,753"/><path class="pele-marker" d="M213.93,746L217.29,754L210.57,754Z" fill="var(--_l)" stroke="none"/></g><g class="pele-edge" data-id="L_FINAL_BUN_0"><path d="M229.93,746L229.93,754.97C229.93,758.36 386.71,763.11 386.71,766.5L386.71,812"/><path class="pele-marker" d="M386.71,819L383.35,811L390.07,811Z" fill="var(--_l)" stroke="none"/></g><g class="pele-edge" data-id="L_BUN_CLS_0"><path d="M386.71,885L386.71,926"/><path class="pele-marker" d="M386.71,933L383.35,925L390.07,925Z" fill="var(--_l)" stroke="none"/></g></g><g class="pele-edge-labels" font-size="14"><g class="pele-edge-label" data-id="L_COHORT_LEAD_0"><rect x="32.9" y="306.5" width="116.95" height="36" rx="3" fill="var(--_bg)"/><text text-anchor="middle" xml:space="preserve"><tspan x="91.38" y="320.4">write report.md +</tspan><tspan x="91.38" y="338.4">READY &lt;= 500 B</tspan></text></g><g class="pele-edge-label" data-id="L_LEAD_AUD_0"><rect x="39.13" y="460.5" width="104.49" height="36" rx="3" fill="var(--_bg)"/><text text-anchor="middle" xml:space="preserve"><tspan x="91.38" y="474.4">provisional</tspan><tspan x="91.38" y="492.4">Content Verdict</tspan></text></g><g class="pele-edge-label" data-id="L_AUD_COHORT_0"><rect x="193.18" y="387" width="165.15" height="36" rx="3" fill="var(--_bg)"/><text text-anchor="middle" xml:space="preserve"><tspan x="275.75" y="400.9">INTEGRITY VIOLATION:</tspan><tspan x="275.75" y="418.9">reject &amp; rework</tspan></text></g><g class="pele-edge-label" data-id="L_AUD_FINAL_0"><rect x="114.99" y="614.5" width="159.72" height="36" rx="3" fill="var(--_bg)"/><text text-anchor="middle" xml:space="preserve"><tspan x="194.85" y="628.4">Target Squad +</tspan><tspan x="194.85" y="646.4">Integrity Verdict: CLEAN</tspan></text></g><g class="pele-edge-label" data-id="L_FINAL_IMPL_0"><rect x="10" y="768.5" width="193.93" height="21" rx="3" fill="var(--_bg)"/><text x="106.97" y="783.9" text-anchor="middle">FAIL / REQUEST_CHANGES</text></g><g class="pele-edge-label" data-id="L_FINAL_BUN_0"><rect x="324.36" y="768.5" width="124.72" height="21" rx="3" fill="var(--_bg)"/><text x="386.71" y="783.9" text-anchor="middle">PASS / APPROVE</text></g></g><g class="pele-nodes"><g class="pele-node pele-shape-rect" data-id="OP" transform="translate(315.51,32)"><rect x="-98.03" y="-24" width="196.06" height="48" fill="var(--_s)" stroke="var(--_b)" style="rx:var(--_r)"/><text class="pele-label" x="0" y="5.6" text-anchor="middle">Operator / Coordinator</text></g><g class="pele-node pele-shape-rect" data-id="PLAN" transform="translate(315.51,137)"><rect x="-100" y="-33" width="200" height="66" fill="var(--_s)" stroke="var(--_b)" style="rx:var(--_r)"/><text class="pele-label" text-anchor="middle" xml:space="preserve"><tspan x="0" y="-4.9">squad_planner / dispatch</tspan><tspan x="0" y="16.1">/ diagnose.mjs</tspan></text></g><g class="pele-node pele-shape-rect" data-id="COHORT" transform="translate(183.56,251)"><rect x="-80.69" y="-33" width="161.38" height="66" fill="var(--_s)" stroke="var(--_b)" style="rx:var(--_r)"/><text class="pele-label" text-anchor="middle" xml:space="preserve"><tspan x="0" y="-4.9">Working Leads or</tspan><tspan x="0" y="16.1">Flat Specialists</tspan></text></g><g class="pele-node pele-shape-rect" data-id="PEERS" transform="translate(386.71,251)"><rect x="-82.46" y="-33" width="164.93" height="66" fill="var(--_s)" stroke="var(--_b)" style="rx:var(--_r)"/><text class="pele-label" text-anchor="middle" xml:space="preserve"><tspan x="0" y="-4.9">/swarm Support:</tspan><tspan x="0" y="16.1">monitor &amp; narrator</tspan></text></g><g class="pele-node pele-shape-rect" data-id="LEAD" transform="translate(91.38,405)"><rect x="-71.8" y="-33" width="143.6" height="66" fill="var(--_s)" stroke="var(--_b)" style="rx:var(--_r)"/><text class="pele-label" text-anchor="middle" xml:space="preserve"><tspan x="0" y="-4.9">Working Lead /</tspan><tspan x="0" y="16.1">Review Lead</tspan></text></g><g class="pele-node pele-shape-rect" data-id="AUD" transform="translate(194.85,559)"><rect x="-128" y="-33" width="256" height="66" fill="var(--_s)" stroke="var(--_b)" style="rx:var(--_r)"/><text class="pele-label" text-anchor="middle" xml:space="preserve"><tspan x="0" y="-4.9">Flat Integrity Auditor</tspan><tspan x="0" y="16.1">(audit-&lt;id&gt; | integrity_auditor)</tspan></text></g><g class="pele-node pele-shape-rect" data-id="FINAL" transform="translate(194.85,713)"><rect x="-75.8" y="-33" width="151.6" height="66" fill="var(--_s)" stroke="var(--_b)" style="rx:var(--_r)"/><text class="pele-label" text-anchor="middle" xml:space="preserve"><tspan x="0" y="-4.9">Lead / Reviewer</tspan><tspan x="0" y="16.1">Final Recheck</tspan></text></g><g class="pele-node pele-shape-rect" data-id="IMPL" transform="translate(156.45,852)"><rect x="-106.9" y="-33" width="213.81" height="66" fill="var(--_s)" stroke="var(--_b)" style="rx:var(--_r)"/><text class="pele-label" text-anchor="middle" xml:space="preserve"><tspan x="0" y="-4.9">Implementer Fix -&gt;</tspan><tspan x="0" y="16.1">Same-Cohort Re-Review</tspan></text></g><g class="pele-node pele-shape-rect" data-id="BUN" transform="translate(386.71,852)"><rect x="-83.36" y="-33" width="166.72" height="66" fill="var(--_s)" stroke="var(--_b)" style="rx:var(--_r)"/><text class="pele-label" text-anchor="middle" xml:space="preserve"><tspan x="0" y="-4.9">bundle -&gt; verify -&gt;</tspan><tspan x="0" y="16.1">prune / --teardown</tspan></text></g><g class="pele-node pele-shape-rect" data-id="CLS" transform="translate(386.71,987)"><rect x="-109.14" y="-54" width="218.29" height="108" fill="var(--_s)" stroke="var(--_b)" style="rx:var(--_r)"/><text class="pele-label" text-anchor="middle" xml:space="preserve"><tspan x="0" y="-25.9">4-Check Closure:</tspan><tspan x="0" y="-4.9">kill workers + monitor,</tspan><tspan x="0" y="16.1">subagents [],</tspan><tspan x="0" y="37.1">tasks 0, child cmds exited</tspan></text></g></g></svg>
@@ -0,0 +1,39 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" class="pele pele-flowchart" viewBox="0 0 792 412" width="792" height="412" style="max-width:100%;height:auto;--_bg:var(--pele-bg,#fff);--_fg:var(--pele-fg,#1f1f1f);--_m:var(--pele-muted,#6e6e6e);--_l:var(--pele-line,#1f1f1f);--_s:var(--pele-surface,#f3f3f3);--_a:var(--pele-surface-alt,#e6e6e6);--_b:var(--pele-border,#8a8a8a);--_c:var(--pele-accent,#5b7bd5);color:var(--_fg);--_r:var(--pele-radius,4px);--_fm:var(--pele-font-mono,monospace);font:16px sans-serif;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;font-family:var(--pele-font,sans-serif)" fill="var(--_fg)" role="graphics-document document" aria-roledescription="flowchart">
2
+ <style>
3
+ :root {
4
+ --pele-font: -apple-system, BlinkMacSystemFont, "Segoe UI", "Noto Sans", Helvetica, Arial, sans-serif;
5
+ --pele-bg: #ffffff;
6
+ --pele-fg: #1f2328;
7
+ --pele-muted: #656d76;
8
+ --pele-line: #57606a;
9
+ --pele-surface: #f6f8fa;
10
+ --pele-surface-alt: #eaeef2;
11
+ --pele-border: #d0d7de;
12
+ --pele-accent: #0969da;
13
+ --pele-series-1: #0969da;
14
+ --pele-series-2: #1a7f37;
15
+ --pele-series-3: #9a6700;
16
+ --pele-series-4: #8250df;
17
+ --pele-series-5: #cf222e;
18
+ --pele-series-6: #bf3989;
19
+ }
20
+ @media (prefers-color-scheme: dark) {
21
+ :root {
22
+ --pele-bg: #0d1117;
23
+ --pele-fg: #e6edf3;
24
+ --pele-muted: #8b949e;
25
+ --pele-line: #8b949e;
26
+ --pele-surface: #161b22;
27
+ --pele-surface-alt: #21262d;
28
+ --pele-border: #30363d;
29
+ --pele-accent: #2f81f7;
30
+ --pele-series-1: #2f81f7;
31
+ --pele-series-2: #3fb950;
32
+ --pele-series-3: #d29922;
33
+ --pele-series-4: #a371f7;
34
+ --pele-series-5: #f85149;
35
+ --pele-series-6: #db61a2;
36
+ }
37
+ }
38
+ </style>
39
+ <g class="pele-clusters"><g class="pele-cluster" data-id="P2"><rect x="8" y="182" width="775.22" height="221.59" fill="var(--_a)" fill-opacity="0.5" stroke="var(--_b)" style="rx:var(--_r)"/><text class="pele-cluster-label" fill="var(--_m)" x="122" y="207.6" text-anchor="middle">Stage 2: Verify, Bundle &amp; Close</text></g><g class="pele-cluster" data-id="P1"><rect x="65.31" y="8" width="660.61" height="126" fill="var(--_a)" fill-opacity="0.5" stroke="var(--_b)" style="rx:var(--_r)"/><text class="pele-cluster-label" fill="var(--_m)" x="172" y="33.6" text-anchor="middle">Stage 1: Plan &amp; Execute</text></g></g><g class="pele-edges" fill="none" stroke="var(--_l)" stroke-linecap="round"><g class="pele-edge" data-id="L_S1_S2_0"><path d="M265.39,81L306.39,81"/><path class="pele-marker" d="M313.39,81L305.39,84.36L305.39,77.64Z" fill="var(--_l)" stroke="none"/></g><g class="pele-edge" data-id="L_S2_S3_0"><path d="M515.23,81L556.23,81"/><path class="pele-marker" d="M563.23,81L555.23,84.36L555.23,77.64Z" fill="var(--_l)" stroke="none"/></g><g class="pele-edge" data-id="L_S4_S5_0"><path d="M181,302.79L214.38,302.79"/><path class="pele-marker" d="M221.38,302.79L213.38,306.15L213.38,299.43Z" fill="var(--_l)" stroke="none"/></g><g class="pele-edge" data-id="L_S5_S6_0"><path d="M479.92,302.79L520.92,302.79"/><path class="pele-marker" d="M527.92,302.79L519.92,306.15L519.92,299.43Z" fill="var(--_l)" stroke="none"/></g><g class="pele-edge" data-id="L_P1_P2_0"><path d="M395.61,134L395.61,175"/><path class="pele-marker" d="M395.61,182L392.25,174L398.97,174Z" fill="var(--_l)" stroke="none"/></g></g><g class="pele-nodes"><g class="pele-node pele-shape-rect" data-id="S1" transform="translate(175.35,81)"><rect x="-90.04" y="-33" width="180.08" height="66" fill="var(--_s)" stroke="var(--_b)" style="rx:var(--_r)"/><text class="pele-label" text-anchor="middle" xml:space="preserve"><tspan x="0" y="-4.9">1. Plan</tspan><tspan x="0" y="16.1">plan or dispatch</tspan></text></g><g class="pele-node pele-shape-rect" data-id="S2" transform="translate(414.31,81)"><rect x="-100.92" y="-33" width="201.84" height="66" fill="var(--_s)" stroke="var(--_b)" style="rx:var(--_r)"/><text class="pele-label" text-anchor="middle" xml:space="preserve"><tspan x="0" y="-4.9">2. Spawn</tspan><tspan x="0" y="16.1">/swarm or subagent</tspan></text></g><g class="pele-node pele-shape-rect" data-id="S3" transform="translate(634.57,81)"><rect x="-71.34" y="-33" width="142.69" height="66" fill="var(--_s)" stroke="var(--_b)" style="rx:var(--_r)"/><text class="pele-label" text-anchor="middle" xml:space="preserve"><tspan x="0" y="-4.9">3. Work</tspan><tspan x="0" y="16.1">write report.md</tspan></text></g><g class="pele-node pele-shape-rect" data-id="S4" transform="translate(100.69,302.79)"><rect x="-80" y="-33" width="160" height="66" fill="var(--_s)" stroke="var(--_b)" style="rx:var(--_r)"/><text class="pele-label" text-anchor="middle" xml:space="preserve"><tspan x="0" y="-4.9">4. Post Receipt</tspan><tspan x="0" y="16.1">READY|PARTIAL &lt;=500B</tspan></text></g><g class="pele-node pele-shape-diam" data-id="S5" transform="translate(350.65,302.79)"><polygon points="0,-80.79 129.27,0 0,80.79 -129.27,0" fill="var(--_s)" stroke="var(--_b)"/><text class="pele-label" text-anchor="middle" xml:space="preserve"><tspan x="0" y="-15.4">5. Dual Verdict</tspan><tspan x="0" y="5.6">Lead PASS +</tspan><tspan x="0" y="26.6">audit-&lt;id&gt; CLEAN</tspan></text></g><g class="pele-node pele-shape-stadium" data-id="S6" transform="translate(645.57,302.79)"><rect x="-117.65" y="-33" width="235.3" height="66" rx="33" fill="var(--_s)" stroke="var(--_b)"/><text class="pele-label" text-anchor="middle" xml:space="preserve"><tspan x="0" y="-4.9">6. Verify &amp; Close</tspan><tspan x="0" y="16.1">bundle..prune / kill</tspan></text></g></g></svg>