{
  "schemaVersion": "0.1",
  "id": "f_01KY6YZCBTCT8WCRJSX6KETQAD",
  "name": "decision-panel",
  "createdAt": "2026-07-23T07:45:23.8346382+00:00",
  "modifiedAt": "2026-07-23T11:47:30.9490854+00:00",
  "nodes": [
    {
      "id": "arbTask",
      "typeId": "text.format",
      "parameters": {
        "inputCount": "3",
        "optionalInputs": "false",
        "placeholder": "",
        "template": "You are the ARBITER of a multi-vendor architecture decision panel (iteration {in3} of max 3). Read the FULL decision dossier at {in1}: question, materials, discovery digest, and all iterations of concepts, critiques, and previous verdicts. Verify anything doubtful against the materials READ-ONLY from the working directory {in2}. Decide whether the panel has converged. Verdict PASS only if: one concept (or an explicit merge of both) fully answers the question, respects the constraints in the basis, every critical and major critique point is either addressed or convincingly rebutted, and all rework directives from previous verdicts are resolved. Otherwise verdict REWORK with concrete, actionable directives - each directive names WHAT to change, decide, or investigate and WHY; the architects will be required to address each directive verbatim next iteration. Output ONLY a single JSON object, no prose, no markdown fence: {\u0022verdict\u0022:\u0022pass|rework\u0022,\u0022chosen_concept\u0022:\u0022A|B|merge|none\u0022,\u0022merge_instructions\u0022:\u0022how to combine, or empty string\u0022,\u0022rationale\u0022:\u0022concise justification of the verdict\u0022,\u0022rework_directives\u0022:[\u0022directive 1\u0022,\u0022directive 2\u0022],\u0022unresolved_risks\u0022:[\u0022risk worth recording even on pass\u0022]}"
      },
      "ui": {
        "x": 6602,
        "y": 341
      }
    },
    {
      "id": "arbiter",
      "typeId": "agent.cli",
      "parameters": {
        "customCommand": "",
        "customPromptMode": "arg",
        "env": null,
        "errorMarker": "__AGENT_ERROR__",
        "errorOutput": "false",
        "errorOutputMode": "port",
        "errorTailChars": "2000",
        "executablePath": null,
        "extraArgs": "--sandbox\nread-only\n--skip-git-repo-check\n-c\nmodel_reasoning_effort=high\n-c\npreferred_auth_method=\u0022chatgpt\u0022",
        "failOnError": "false",
        "failOnNonZeroExit": "false",
        "model": "gpt-5.6-sol",
        "secretEnv": null,
        "task": null,
        "timeoutSeconds": "900",
        "tool": "codex",
        "workingDirectory": null
      },
      "ui": {
        "x": 6837,
        "y": 329
      }
    },
    {
      "id": "archA",
      "typeId": "agent.cli",
      "parameters": {
        "customCommand": "",
        "customPromptMode": "arg",
        "env": null,
        "errorMarker": "__AGENT_ERROR__",
        "errorOutput": "false",
        "errorOutputMode": "port",
        "errorTailChars": "2000",
        "executablePath": null,
        "extraArgs": "--permission-mode\nplan\n--disallowedTools\nEdit\nWrite",
        "failOnError": "false",
        "failOnNonZeroExit": "false",
        "model": "",
        "secretEnv": null,
        "task": null,
        "timeoutSeconds": "1200",
        "tool": "claude",
        "workingDirectory": null
      },
      "ui": {
        "x": 4677,
        "y": 187
      }
    },
    {
      "id": "archB",
      "typeId": "agent.cli",
      "parameters": {
        "customCommand": "",
        "customPromptMode": "arg",
        "env": "XDG_DATA_HOME=.knodr\\opencode-panel\\arch-grok",
        "errorMarker": "__AGENT_ERROR__",
        "errorOutput": "false",
        "errorOutputMode": "port",
        "errorTailChars": "2000",
        "executablePath": null,
        "extraArgs": "--agent\nplan",
        "failOnError": "false",
        "failOnNonZeroExit": "false",
        "model": "xai/grok-4.5",
        "secretEnv": "XAI_API_KEY=grok",
        "task": null,
        "timeoutSeconds": "1200",
        "tool": "opencode",
        "workingDirectory": null
      },
      "ui": {
        "x": 4677,
        "y": 353
      }
    },
    {
      "id": "archTaskA",
      "typeId": "text.format",
      "parameters": {
        "inputCount": "3",
        "optionalInputs": "false",
        "placeholder": "",
        "template": "You are ARCHITECT A on a multi-vendor architecture decision panel (iteration {in3} of max 3). Read the FULL decision dossier at {in1} from top to bottom: question, materials list, discovery digest, and - if present - previous iterations with concepts, critiques, and arbiter verdicts. Explore the referenced materials READ-ONLY from the working directory {in2} whenever the dossier is not specific enough - go to the source. Build a COMPLETE solution concept answering the question: first weigh 2-3 fundamentally different approaches and state why the chosen one wins, then develop it fully - architecture, key components and responsibilities, data and control flow, integration points, migration/rollout, accepted trade-offs, and risks with mitigations. If the dossier contains an arbiter verdict with rework directives from the previous iteration, you MUST address EVERY directive explicitly: quote each directive and state your resolution. Be concrete and grounded in the materials; no hand-waving. Output ONLY the concept markdown, no preamble."
      },
      "ui": {
        "x": 4337,
        "y": 187
      }
    },
    {
      "id": "archTaskB",
      "typeId": "text.format",
      "parameters": {
        "inputCount": "3",
        "optionalInputs": "false",
        "placeholder": "",
        "template": "You are ARCHITECT B on a multi-vendor architecture decision panel (iteration {in3} of max 3). You work INDEPENDENTLY of Architect A: build YOUR OWN strongest concept. Read the FULL decision dossier at {in1} from top to bottom: question, materials list, discovery digest, and - if present - previous iterations with concepts, critiques, and arbiter verdicts. Explore the referenced materials READ-ONLY from the working directory {in2} whenever the dossier is not specific enough - go to the source. Build a COMPLETE solution concept answering the question: first weigh 2-3 fundamentally different approaches and state why the chosen one wins, then develop it fully - architecture, key components and responsibilities, data and control flow, integration points, migration/rollout, accepted trade-offs, and risks with mitigations. If the dossier contains an arbiter verdict with rework directives from the previous iteration, you MUST address EVERY directive explicitly: quote each directive and state your resolution. Be concrete and grounded in the materials; no hand-waving. Output ONLY the concept markdown, no preamble."
      },
      "ui": {
        "x": 4337,
        "y": 329
      }
    },
    {
      "id": "c-adversary",
      "typeId": "agent.cli",
      "parameters": {
        "customCommand": "",
        "customPromptMode": "arg",
        "env": "XDG_DATA_HOME=.knodr\\opencode-panel\\c-adversary",
        "errorMarker": "__AGENT_ERROR__",
        "errorOutput": "false",
        "errorOutputMode": "port",
        "errorTailChars": "2000",
        "executablePath": null,
        "extraArgs": "--agent\nplan",
        "failOnError": "false",
        "failOnNonZeroExit": "false",
        "model": "deepseek/deepseek-v4-pro",
        "secretEnv": "DEEPSEEK_API_KEY=deepseek",
        "task": null,
        "timeoutSeconds": "900",
        "tool": "opencode",
        "workingDirectory": null
      },
      "ui": {
        "x": 5757,
        "y": 329
      }
    },
    {
      "id": "c-deepseek",
      "typeId": "agent.cli",
      "parameters": {
        "customCommand": "",
        "customPromptMode": "arg",
        "env": "XDG_DATA_HOME=.knodr\\opencode-panel\\c-deepseek",
        "errorMarker": "__AGENT_ERROR__",
        "errorOutput": "false",
        "errorOutputMode": "port",
        "errorTailChars": "2000",
        "executablePath": null,
        "extraArgs": "--agent\nplan",
        "failOnError": "false",
        "failOnNonZeroExit": "false",
        "model": "deepseek/deepseek-v4-pro",
        "secretEnv": "DEEPSEEK_API_KEY=deepseek",
        "task": null,
        "timeoutSeconds": "900",
        "tool": "opencode",
        "workingDirectory": null
      },
      "ui": {
        "x": 5757,
        "y": 163
      }
    },
    {
      "id": "c-minimax",
      "typeId": "agent.cli",
      "parameters": {
        "customCommand": "",
        "customPromptMode": "arg",
        "env": "XDG_DATA_HOME=.knodr\\opencode-panel\\c-minimax",
        "errorMarker": "__AGENT_ERROR__",
        "errorOutput": "false",
        "errorOutputMode": "port",
        "errorTailChars": "2000",
        "executablePath": null,
        "extraArgs": "--agent\nplan",
        "failOnError": "false",
        "failOnNonZeroExit": "false",
        "model": "minimax/MiniMax-M2.7-highspeed",
        "secretEnv": "MINIMAX_API_KEY=minimax",
        "task": null,
        "timeoutSeconds": "900",
        "tool": "opencode",
        "workingDirectory": null
      },
      "ui": {
        "x": 5757,
        "y": 495
      }
    },
    {
      "id": "c-security",
      "typeId": "agent.cli",
      "parameters": {
        "customCommand": "",
        "customPromptMode": "arg",
        "env": "XDG_DATA_HOME=.knodr\\opencode-panel\\c-security",
        "errorMarker": "__AGENT_ERROR__",
        "errorOutput": "false",
        "errorOutputMode": "port",
        "errorTailChars": "2000",
        "executablePath": null,
        "extraArgs": "--agent\nplan",
        "failOnError": "false",
        "failOnNonZeroExit": "false",
        "model": "google/gemini-3.1-pro-preview",
        "secretEnv": "GEMINI_API_KEY=gemini\nGOOGLE_GENERATIVE_AI_API_KEY=gemini",
        "task": null,
        "timeoutSeconds": "900",
        "tool": "opencode",
        "workingDirectory": null
      },
      "ui": {
        "x": 5757,
        "y": 650
      }
    },
    {
      "id": "cTaskAdversary",
      "typeId": "text.format",
      "parameters": {
        "inputCount": "3",
        "optionalInputs": "false",
        "placeholder": "",
        "template": "You are a CRITIC on a multi-vendor architecture decision panel (iteration {in3} of max 3). Read the FULL decision dossier at {in1}; the LAST section named \u0027Iteration {in3} - Concepts\u0027 contains Concept A and Concept B - critique BOTH. Verify claims against the actual materials READ-ONLY from the working directory {in2} when in doubt. YOUR LENS: devil\u0027s advocate AND completeness - fatal or unstated assumptions, contradictions with the basis materials and the discovery digest, hidden complexity, and scenarios where the concept collapses; AND completeness: does the concept fully answer the decision question end to end, or does it leave parts of the question, required capabilities, edge cases, or explicit constraints from the basis unaddressed? Name every gap and every question the concept dodges. For EACH concept produce a numbered list of issues (each: severity critical/major/minor, the concrete failure scenario or cost, and what would fix it). Then a short verdict: which concept is stronger under your lens and why. Attack substance, not style; no praise padding; if a concept is genuinely sound under your lens, say so explicitly instead of inventing weak objections. Output ONLY markdown."
      },
      "ui": {
        "x": 5522,
        "y": 341
      }
    },
    {
      "id": "cTaskDeepseek",
      "typeId": "text.format",
      "parameters": {
        "inputCount": "3",
        "optionalInputs": "false",
        "placeholder": "",
        "template": "You are a CRITIC on a multi-vendor architecture decision panel (iteration {in3} of max 3). Read the FULL decision dossier at {in1}; the LAST section named \u0027Iteration {in3} - Concepts\u0027 contains Concept A and Concept B - critique BOTH. Verify claims against the actual materials READ-ONLY from the working directory {in2} when in doubt. YOUR LENS: feasibility, cost and delivery - implementation complexity, engineering effort and sequencing, dependencies, migrations, and what breaks during rollout; AND the ongoing cost of ownership: maintenance burden, operational/running cost, and the cost the concept forces onto adjacent systems. Weigh delivery cost and lifetime cost against the value delivered and flag anything whose cost is disproportionate to its benefit; judge whether the team described in the materials can realistically build and operate this. For EACH concept produce a numbered list of issues (each: severity critical/major/minor, the concrete failure scenario or cost, and what would fix it). Then a short verdict: which concept is stronger under your lens and why. Attack substance, not style; no praise padding; if a concept is genuinely sound under your lens, say so explicitly instead of inventing weak objections. Output ONLY markdown."
      },
      "ui": {
        "x": 5522,
        "y": 199
      }
    },
    {
      "id": "cTaskMinimax",
      "typeId": "text.format",
      "parameters": {
        "inputCount": "3",
        "optionalInputs": "false",
        "placeholder": "",
        "template": "You are a CRITIC on a multi-vendor architecture decision panel (iteration {in3} of max 3). Read the FULL decision dossier at {in1}; the LAST section named \u0027Iteration {in3} - Concepts\u0027 contains Concept A and Concept B - critique BOTH. Verify claims against the actual materials READ-ONLY from the working directory {in2} when in doubt. YOUR LENS: complexity, premature optimization and trade-offs - excessive or accidental complexity, over-engineering and speculative generality (YAGNI), premature optimization for scale, performance or flexibility the basis does not justify, and operability/maintainability in production; AND the accepted trade-offs: are they stated honestly and are they the right ones, or is a real cost being waved away? For every problem, name the simpler alternative that would still meet the decision\u0027s actual goals. For EACH concept produce a numbered list of issues (each: severity critical/major/minor, the concrete failure scenario or cost, and what would fix it). Then a short verdict: which concept is stronger under your lens and why. Attack substance, not style; no praise padding; if a concept is genuinely sound under your lens, say so explicitly instead of inventing weak objections. Output ONLY markdown."
      },
      "ui": {
        "x": 5522,
        "y": 483
      }
    },
    {
      "id": "cTaskSecurity",
      "typeId": "text.format",
      "parameters": {
        "inputCount": "3",
        "optionalInputs": "false",
        "placeholder": "",
        "template": "You are the SECURITY CRITIC on a multi-vendor architecture decision panel (iteration {in3} of max 3). Read the FULL decision dossier at {in1}; the LAST section named \u0027Iteration {in3} - Concepts\u0027 contains Concept A and Concept B - critique BOTH. Verify claims against the actual materials READ-ONLY from the working directory {in2} when in doubt. YOUR LENS: security and domain risk. FIRST infer the domain of this decision from the dossier and materials (e.g. medical/health, fintech, general SaaS, developer tooling) and state which domain you inferred and why. THEN apply BOTH matrices: (1) the DOMAIN-SPECIFIC risk matrix that fits - e.g. medical/health: HIPAA and PHI handling, patient safety, and FDA clearance/approval implications; fintech: PCI-DSS, SOX, fraud; EU or consumer data: GDPR; pick whichever matches the domain you found; and (2) ALWAYS the TECHNICAL security matrix: attack vectors and threat surface, authentication and authorization, data exposure and encryption, secret handling, tenant isolation, auditability, and supply-chain / dependency risk. For EACH concept produce a numbered list of issues (each: severity critical/major/minor, the concrete failure scenario or exposure, and what would fix it). Then a short verdict: which concept is stronger under your lens and why. Attack substance, not style; no praise padding; if a concept is genuinely sound under your lens, say so explicitly instead of inventing weak objections. Output ONLY markdown."
      },
      "ui": {
        "x": 5522,
        "y": 640
      }
    },
    {
      "id": "conceptsFmt",
      "typeId": "text.format",
      "parameters": {
        "inputCount": "3",
        "optionalInputs": "false",
        "placeholder": "",
        "template": "\n---\n\n## Iteration {in3} - Concepts\n\n### Concept A (architect: claude)\n\n{in1}\n\n### Concept B (architect: grok)\n\n{in2}\n"
      },
      "ui": {
        "x": 5017,
        "y": 294
      }
    },
    {
      "id": "conceptsWrite",
      "typeId": "file.write",
      "parameters": {
        "append": "true",
        "createDirectories": "true",
        "encoding": "utf-8",
        "path": "(wired via ctx)"
      },
      "ui": {
        "x": 5252,
        "y": 353
      }
    },
    {
      "id": "critFmt",
      "typeId": "text.format",
      "parameters": {
        "inputCount": "5",
        "optionalInputs": "false",
        "placeholder": "",
        "template": "\n## Iteration {in4} - Critique\n\n### Devil\u0027s advocate \u0026 completeness (deepseek)\n\n{in1}\n\n### Feasibility, cost \u0026 delivery (deepseek)\n\n{in2}\n\n### Complexity, premature optimization \u0026 trade-offs (minimax)\n\n{in3}\n\n### Security \u0026 domain risk (gemini)\n\n{in5}\n"
      },
      "ui": {
        "x": 6097,
        "y": 329
      }
    },
    {
      "id": "critWrite",
      "typeId": "file.write",
      "parameters": {
        "append": "true",
        "createDirectories": "true",
        "encoding": "utf-8",
        "path": "(wired via ctx)"
      },
      "ui": {
        "x": 6332,
        "y": 353
      }
    },
    {
      "id": "ctxBuild",
      "typeId": "script.run",
      "parameters": {
        "code": "import sys, json\nlines = sys.stdin.read().splitlines()\nprint(json.dumps({\u0022i\u0022: 0, \u0022dossier\u0022: lines[0].strip(), \u0022workdir\u0022: lines[1].strip(), \u0022final\u0022: lines[2].strip()}))\n",
        "env": null,
        "failOnNonZeroExit": "false",
        "language": "python",
        "secretEnv": null,
        "timeoutSeconds": "30",
        "workingDirectory": null
      },
      "ui": {
        "x": 3166,
        "y": 329
      }
    },
    {
      "id": "ctxDossier",
      "typeId": "json.text",
      "parameters": {
        "extractPointer": "/dossier",
        "render": "unwrap"
      },
      "ui": {
        "x": 4102,
        "y": 212
      }
    },
    {
      "id": "ctxFmt",
      "typeId": "text.format",
      "parameters": {
        "inputCount": "3",
        "optionalInputs": "false",
        "placeholder": "",
        "template": "{in1}\n{in2}\n{in3}"
      },
      "ui": {
        "x": 2931,
        "y": 341
      }
    },
    {
      "id": "ctxIter",
      "typeId": "json.text",
      "parameters": {
        "extractPointer": "/i",
        "render": "unwrap"
      },
      "ui": {
        "x": 4102,
        "y": 306
      }
    },
    {
      "id": "ctxWorkdir",
      "typeId": "json.text",
      "parameters": {
        "extractPointer": "/workdir",
        "render": "unwrap"
      },
      "ui": {
        "x": 4102,
        "y": 400
      }
    },
    {
      "id": "d-claude",
      "typeId": "agent.cli",
      "parameters": {
        "customCommand": "",
        "customPromptMode": "arg",
        "env": null,
        "errorMarker": "__AGENT_ERROR__",
        "errorOutput": "false",
        "errorOutputMode": "port",
        "errorTailChars": "2000",
        "executablePath": null,
        "extraArgs": "--permission-mode\nplan\n--disallowedTools\nEdit\nWrite",
        "failOnError": "false",
        "failOnNonZeroExit": "false",
        "model": "",
        "secretEnv": null,
        "task": null,
        "timeoutSeconds": "900",
        "tool": "claude",
        "workingDirectory": null
      },
      "ui": {
        "x": 1006,
        "y": 80
      }
    },
    {
      "id": "d-codex",
      "typeId": "agent.cli",
      "parameters": {
        "customCommand": "",
        "customPromptMode": "arg",
        "env": null,
        "errorMarker": "__AGENT_ERROR__",
        "errorOutput": "false",
        "errorOutputMode": "port",
        "errorTailChars": "2000",
        "executablePath": null,
        "extraArgs": "--sandbox\nread-only\n--skip-git-repo-check\n-c\nmodel_reasoning_effort=xhigh\n-c\npreferred_auth_method=\u0022chatgpt\u0022",
        "failOnError": "false",
        "failOnNonZeroExit": "false",
        "model": "gpt-5.6-terra",
        "secretEnv": null,
        "task": null,
        "timeoutSeconds": "900",
        "tool": "codex",
        "workingDirectory": null
      },
      "ui": {
        "x": 1006,
        "y": 246
      }
    },
    {
      "id": "d-gemini",
      "typeId": "agent.cli",
      "parameters": {
        "customCommand": "",
        "customPromptMode": "arg",
        "env": "XDG_DATA_HOME=.knodr\\opencode-panel\\d-gemini",
        "errorMarker": "__AGENT_ERROR__",
        "errorOutput": "false",
        "errorOutputMode": "port",
        "errorTailChars": "2000",
        "executablePath": null,
        "extraArgs": "--agent\nplan",
        "failOnError": "false",
        "failOnNonZeroExit": "false",
        "model": "google/gemini-3.1-pro-preview",
        "secretEnv": "GEMINI_API_KEY=gemini\nGOOGLE_GENERATIVE_AI_API_KEY=gemini",
        "task": null,
        "timeoutSeconds": "900",
        "tool": "opencode",
        "workingDirectory": null
      },
      "ui": {
        "x": 1006,
        "y": 412
      }
    },
    {
      "id": "d-grok",
      "typeId": "agent.cli",
      "parameters": {
        "customCommand": "",
        "customPromptMode": "arg",
        "env": "XDG_DATA_HOME=.knodr\\opencode-panel\\d-grok",
        "errorMarker": "__AGENT_ERROR__",
        "errorOutput": "false",
        "errorOutputMode": "port",
        "errorTailChars": "2000",
        "executablePath": null,
        "extraArgs": "--agent\nplan",
        "failOnError": "false",
        "failOnNonZeroExit": "false",
        "model": "xai/grok-4.5",
        "secretEnv": "XAI_API_KEY=grok",
        "task": null,
        "timeoutSeconds": "900",
        "tool": "opencode",
        "workingDirectory": null
      },
      "ui": {
        "x": 1006,
        "y": 578
      }
    },
    {
      "id": "dAgg",
      "typeId": "text.format",
      "parameters": {
        "inputCount": "4",
        "optionalInputs": "false",
        "placeholder": "",
        "template": "=== DISCOVERY: TECH (codex) ===\n{in1}\n\n=== DISCOVERY: DOCUMENTS (claude) ===\n{in2}\n\n=== DISCOVERY: PRIOR ART (gemini) ===\n{in3}\n\n=== DISCOVERY: RISKS (grok) ===\n{in4}"
      },
      "ui": {
        "x": 1346,
        "y": 329
      }
    },
    {
      "id": "dTaskClaude",
      "typeId": "text.format",
      "parameters": {
        "inputCount": "2",
        "optionalInputs": "false",
        "placeholder": "",
        "template": "You are discovery analyst DOCUMENTS on a multi-vendor architecture decision panel. Read the decision dossier at {in1} - it states the question and lists the basis materials (documents and repositories, absolute paths). Explore those materials READ-ONLY from the working directory {in2}: open the referenced documents, navigate the repositories where needed. YOUR LENS: the documents - requirements and goals, each stakeholder position and its actual arguments, decision history, stated constraints, and contradictions between documents. Produce a structured markdown brief (800-1500 words) of key findings under your lens with concrete citations (file paths, doc sections, short quotes). Facts and grounded analysis only: do NOT propose a final solution, do NOT invent facts absent from the materials, and explicitly list open questions the materials cannot answer. Output ONLY the markdown brief."
      },
      "ui": {
        "x": 771,
        "y": 176
      }
    },
    {
      "id": "dTaskCodex",
      "typeId": "text.format",
      "parameters": {
        "inputCount": "2",
        "optionalInputs": "false",
        "placeholder": "",
        "template": "You are discovery analyst TECH on a multi-vendor architecture decision panel. Read the decision dossier at {in1} - it states the question and lists the basis materials (documents and repositories, absolute paths). Explore those materials READ-ONLY from the working directory {in2}: open the referenced documents, navigate the repositories, read the code that matters. YOUR LENS: technical ground truth - the current architecture of the referenced codebase(s), interfaces, data flows, implementation constraints, technical debt the decision must respect, and what is cheap vs expensive to change. Produce a structured markdown brief (800-1500 words) of key findings under your lens with concrete citations (file paths, doc sections, short quotes). Facts and grounded analysis only: do NOT propose a final solution, do NOT invent facts absent from the materials, and explicitly list open questions the materials cannot answer. Output ONLY the markdown brief."
      },
      "ui": {
        "x": 771,
        "y": 294
      }
    },
    {
      "id": "dTaskGemini",
      "typeId": "text.format",
      "parameters": {
        "inputCount": "2",
        "optionalInputs": "false",
        "placeholder": "",
        "template": "You are discovery analyst PRIOR-ART on a multi-vendor architecture decision panel. Read the decision dossier at {in1} - it states the question and lists the basis materials (documents and repositories, absolute paths). Explore those materials READ-ONLY from the working directory {in2}. YOUR LENS: prior art and alternatives - industry patterns and practices applicable to this question, standard solutions to this class of problem, what comparable systems do, and the trade-off landscape between the known approaches; anchor each pattern to the specifics found in the materials. Produce a structured markdown brief (800-1500 words) of key findings under your lens with concrete citations (file paths, doc sections, short quotes). Facts and grounded analysis only: do NOT propose a final solution, do NOT invent facts absent from the materials, and explicitly list open questions the materials cannot answer. Output ONLY the markdown brief."
      },
      "ui": {
        "x": 771,
        "y": 412
      }
    },
    {
      "id": "dTaskGrok",
      "typeId": "text.format",
      "parameters": {
        "inputCount": "2",
        "optionalInputs": "false",
        "placeholder": "",
        "template": "You are discovery analyst RISKS on a multi-vendor architecture decision panel. Read the decision dossier at {in1} - it states the question and lists the basis materials (documents and repositories, absolute paths). Explore those materials READ-ONLY from the working directory {in2}. YOUR LENS: contradictions and risks - weak points and unstated assumptions in the materials\u0027 positions, internal contradictions between the materials, failure scenarios, and what everyone seems to be missing. Produce a structured markdown brief (800-1500 words) of key findings under your lens with concrete citations (file paths, doc sections, short quotes). Facts and grounded analysis only: do NOT propose a final solution, do NOT invent facts absent from the materials, and explicitly list open questions the materials cannot answer. Output ONLY the markdown brief."
      },
      "ui": {
        "x": 771,
        "y": 530
      }
    },
    {
      "id": "digest",
      "typeId": "agent.cli",
      "parameters": {
        "customCommand": "",
        "customPromptMode": "arg",
        "env": null,
        "errorMarker": "__AGENT_ERROR__",
        "errorOutput": "false",
        "errorOutputMode": "port",
        "errorTailChars": "2000",
        "executablePath": null,
        "extraArgs": "--permission-mode\nplan\n--disallowedTools\nEdit\nWrite",
        "failOnError": "false",
        "failOnNonZeroExit": "false",
        "model": "sonnet",
        "secretEnv": null,
        "task": null,
        "timeoutSeconds": "600",
        "tool": "claude",
        "workingDirectory": null
      },
      "ui": {
        "x": 2086,
        "y": 329
      }
    },
    {
      "id": "digestFmt",
      "typeId": "text.format",
      "parameters": {
        "inputCount": "2",
        "optionalInputs": "false",
        "placeholder": "",
        "template": "\n---\n\n## Discovery Digest\n\n{in1}\n\n\u003E Full discovery briefs: {in2}\n"
      },
      "ui": {
        "x": 2426,
        "y": 353
      }
    },
    {
      "id": "digestTask",
      "typeId": "text.format",
      "parameters": {
        "inputCount": "2",
        "optionalInputs": "false",
        "placeholder": "",
        "template": "You are the synthesis editor of a multi-agent discovery stage. Four analyst briefs (tech / documents / prior art / risks) are concatenated in the file at {in1}. The decision dossier (question \u002B materials list) is at {in2}. Synthesize the briefs into ONE structured discovery digest, max ~2000 words, markdown sections: ## Consolidated facts; ## Constraints; ## Positions map (who argues what, per the materials); ## Prior art and alternatives; ## Risks and contradictions; ## Open questions. Attribute non-obvious claims to the analyst lens they came from (tech/docs/prior-art/risks). Preserve disagreements between analysts explicitly - do not smooth them over. Do NOT add your own solution ideas. Output ONLY the digest markdown."
      },
      "ui": {
        "x": 1851,
        "y": 353
      }
    },
    {
      "id": "digestWrite",
      "typeId": "file.write",
      "parameters": {
        "append": "true",
        "createDirectories": "true",
        "encoding": "utf-8",
        "path": "(wired via dossierPath)"
      },
      "ui": {
        "x": 2661,
        "y": 353
      }
    },
    {
      "id": "doneDossier",
      "typeId": "json.text",
      "parameters": {
        "extractPointer": "/dossier",
        "render": "unwrap"
      },
      "ui": {
        "x": 3762,
        "y": 448
      }
    },
    {
      "id": "doneFinal",
      "typeId": "json.text",
      "parameters": {
        "extractPointer": "/final",
        "render": "unwrap"
      },
      "ui": {
        "x": 3762,
        "y": 354
      }
    },
    {
      "id": "doneWorkdir",
      "typeId": "json.text",
      "parameters": {
        "extractPointer": "/workdir",
        "render": "unwrap"
      },
      "ui": {
        "x": 3762,
        "y": 542
      }
    },
    {
      "id": "dossierPath",
      "typeId": "input.manual",
      "parameters": {
        "label": "Dossier file path",
        "value": ""
      },
      "ui": {
        "x": 80,
        "y": 130
      }
    },
    {
      "id": "finalPath",
      "typeId": "input.manual",
      "parameters": {
        "label": "Final decision document path",
        "value": ""
      },
      "ui": {
        "x": 80,
        "y": 224
      }
    },
    {
      "id": "finalWrite",
      "typeId": "file.write",
      "parameters": {
        "append": "false",
        "createDirectories": "true",
        "encoding": "utf-8",
        "path": "(wired via ctx)"
      },
      "ui": {
        "x": 4677,
        "y": 519
      }
    },
    {
      "id": "gate",
      "typeId": "control.gate",
      "parameters": {
        "compareTo": "pass",
        "operator": "equals"
      },
      "ui": {
        "x": 9288,
        "y": 353
      }
    },
    {
      "id": "initFmt",
      "typeId": "text.format",
      "parameters": {
        "inputCount": "2",
        "optionalInputs": "false",
        "placeholder": "",
        "template": "# Decision Dossier\n\n## Question\n\n{in1}\n\n## Materials (basis)\n\n{in2}\n"
      },
      "ui": {
        "x": 266,
        "y": 353
      }
    },
    {
      "id": "initWrite",
      "typeId": "file.write",
      "parameters": {
        "append": "false",
        "createDirectories": "true",
        "encoding": "utf-8",
        "path": "(wired via dossierPath)"
      },
      "ui": {
        "x": 501,
        "y": 353
      }
    },
    {
      "id": "iterNum",
      "typeId": "script.run",
      "parameters": {
        "code": "import sys, json\nctx = json.loads(sys.stdin.read())\nctx[\u0022i\u0022] = int(ctx.get(\u0022i\u0022, 0)) \u002B 1\nprint(json.dumps(ctx, ensure_ascii=False))\n",
        "env": null,
        "failOnNonZeroExit": "false",
        "language": "python",
        "secretEnv": null,
        "timeoutSeconds": "30",
        "workingDirectory": null
      },
      "ui": {
        "x": 3762,
        "y": 188
      }
    },
    {
      "id": "loop",
      "typeId": "control.loop",
      "parameters": {
        "n": "3"
      },
      "ui": {
        "x": 3506,
        "y": 341
      }
    },
    {
      "id": "materials",
      "typeId": "input.manual",
      "parameters": {
        "label": "Materials list (docs/repos, markdown bullets)",
        "value": ""
      },
      "ui": {
        "x": 80,
        "y": 318
      }
    },
    {
      "id": "parseFmt",
      "typeId": "text.format",
      "parameters": {
        "inputCount": "2",
        "optionalInputs": "false",
        "placeholder": "",
        "template": "{in1}\n===CTX===\n{in2}"
      },
      "ui": {
        "x": 7177,
        "y": 353
      }
    },
    {
      "id": "preview",
      "typeId": "output.preview",
      "parameters": {},
      "ui": {
        "x": 5017,
        "y": 436
      }
    },
    {
      "id": "question",
      "typeId": "input.manual",
      "parameters": {
        "label": "Decision question (main prompt)",
        "value": ""
      },
      "ui": {
        "x": 80,
        "y": 412
      }
    },
    {
      "id": "rawPath",
      "typeId": "input.manual",
      "parameters": {
        "label": "Raw discovery briefs file path",
        "value": ""
      },
      "ui": {
        "x": 80,
        "y": 506
      }
    },
    {
      "id": "rawWrite",
      "typeId": "file.write",
      "parameters": {
        "append": "false",
        "createDirectories": "true",
        "encoding": "utf-8",
        "path": "(wired via rawPath)"
      },
      "ui": {
        "x": 1581,
        "y": 353
      }
    },
    {
      "id": "routeFmt",
      "typeId": "text.format",
      "parameters": {
        "inputCount": "2",
        "optionalInputs": "false",
        "placeholder": "",
        "template": "{in1}\n===W===\n{in2}"
      },
      "ui": {
        "x": 8485,
        "y": 353
      }
    },
    {
      "id": "routeSrc",
      "typeId": "script.run",
      "parameters": {
        "code": "import sys\nraw = sys.stdin.read()\nhead, sep, tail = raw.rpartition(\u0022===W===\u0022)\nif not sep:\n    head = raw\nprint(head.strip())\n",
        "env": null,
        "failOnNonZeroExit": "false",
        "language": "python",
        "secretEnv": null,
        "timeoutSeconds": "30",
        "workingDirectory": null
      },
      "ui": {
        "x": 8720,
        "y": 329
      }
    },
    {
      "id": "routeVerdict",
      "typeId": "json.text",
      "parameters": {
        "extractPointer": "/verdict",
        "render": "unwrap"
      },
      "ui": {
        "x": 9060,
        "y": 365
      }
    },
    {
      "id": "sumTask",
      "typeId": "text.format",
      "parameters": {
        "inputCount": "2",
        "optionalInputs": "false",
        "placeholder": "",
        "template": "You are the EDITOR-IN-CHIEF of a multi-vendor architecture decision panel. Read the FULL decision dossier at {in1} from top to bottom: question, materials, discovery digest, and up to 3 iterations of concepts (A and B), critiques, and arbiter verdicts. Consult the referenced materials READ-ONLY from the working directory {in2} only where the dossier is ambiguous. Write the FINAL DECISION DOCUMENT. If the last arbiter verdict is PASS: present the chosen concept (or the merge, per merge_instructions) as THE decision. If the iteration cap was reached without a pass: present the strongest concept per the critiques and verdicts as the RECOMMENDED decision and state explicitly that the panel did not fully converge. Structure: # Decision: one line; ## Context and question; ## Considered approaches (including rejected ones, with the real reasons); ## The decision (the full concept, self-contained - the reader must not need the dossier); ## Rationale; ## How the panel\u0027s critiques were addressed; ## Unresolved dissent and risks (honest - from unresolved_risks and any critique that was never rebutted); ## Recommended next steps. Write in the SAME LANGUAGE as the question in the dossier. Output ONLY the document markdown, no preamble."
      },
      "ui": {
        "x": 4102,
        "y": 494
      }
    },
    {
      "id": "summarizer",
      "typeId": "agent.cli",
      "parameters": {
        "customCommand": "",
        "customPromptMode": "arg",
        "env": null,
        "errorMarker": "__AGENT_ERROR__",
        "errorOutput": "false",
        "errorOutputMode": "port",
        "errorTailChars": "2000",
        "executablePath": null,
        "extraArgs": "--permission-mode\nplan\n--disallowedTools\nEdit\nWrite",
        "failOnError": "false",
        "failOnNonZeroExit": "false",
        "model": "",
        "secretEnv": null,
        "task": null,
        "timeoutSeconds": "900",
        "tool": "claude",
        "workingDirectory": null
      },
      "ui": {
        "x": 4337,
        "y": 471
      }
    },
    {
      "id": "verdictFmt",
      "typeId": "text.format",
      "parameters": {
        "inputCount": "2",
        "optionalInputs": "false",
        "placeholder": "",
        "template": "\n### Arbiter verdict (codex) - iteration {in2}\n\n\u0060\u0060\u0060json\n{in1}\n\u0060\u0060\u0060\n"
      },
      "ui": {
        "x": 7980,
        "y": 353
      }
    },
    {
      "id": "verdictParse",
      "typeId": "script.run",
      "parameters": {
        "code": "import sys, json\nraw = sys.stdin.read()\nhead, sep, tail = raw.rpartition(\u0022===CTX===\u0022)\nif not sep:\n    head, tail = \u0022\u0022, raw\ntry:\n    ctx = json.loads(tail.strip())\nexcept Exception:\n    ctx = {}\nif not isinstance(ctx, dict):\n    ctx = {}\n\ndef objects(text):\n    depth = 0; start = None; in_str = False; esc = False\n    for idx, ch in enumerate(text):\n        if in_str:\n            if esc: esc = False\n            elif ch == \u0022\\\\\u0022: esc = True\n            elif ch == \u0027\u0022\u0027: in_str = False\n            continue\n        if ch == \u0027\u0022\u0027: in_str = True\n        elif ch == \u0027{\u0027:\n            if depth == 0: start = idx\n            depth \u002B= 1\n        elif ch == \u0027}\u0027:\n            if depth \u003E 0:\n                depth -= 1\n                if depth == 0 and start is not None:\n                    yield text[start:idx \u002B 1]; start = None\n\nverdict = None\nfor cand in objects(head):\n    try:\n        v = json.loads(cand)\n    except Exception:\n        continue\n    if isinstance(v, dict) and str(v.get(\u0022verdict\u0022, \u0022\u0022)).lower() in (\u0022pass\u0022, \u0022rework\u0022):\n        verdict = v\nif verdict is None:\n    verdict = {\u0022verdict\u0022: \u0022rework\u0022, \u0022chosen_concept\u0022: \u0022none\u0022, \u0022merge_instructions\u0022: \u0022\u0022,\n               \u0022rationale\u0022: \u0022arbiter output missing or unparseable - forced rework\u0022,\n               \u0022rework_directives\u0022: [\u0022Arbiter produced no valid verdict JSON; architects: refine both concepts and address all standing critiques.\u0022],\n               \u0022unresolved_risks\u0022: []}\nverdict[\u0022verdict\u0022] = str(verdict.get(\u0022verdict\u0022, \u0022rework\u0022)).lower()\nif verdict[\u0022verdict\u0022] not in (\u0022pass\u0022, \u0022rework\u0022):\n    verdict[\u0022verdict\u0022] = \u0022rework\u0022\nout = dict(ctx)\nout.update(verdict)\nprint(json.dumps(out, ensure_ascii=False))\n",
        "env": null,
        "failOnNonZeroExit": "false",
        "language": "python",
        "secretEnv": null,
        "timeoutSeconds": "30",
        "workingDirectory": null
      },
      "ui": {
        "x": 7412,
        "y": 329
      }
    },
    {
      "id": "verdictText",
      "typeId": "json.text",
      "parameters": {
        "extractPointer": "",
        "render": "pretty"
      },
      "ui": {
        "x": 7752,
        "y": 365
      }
    },
    {
      "id": "verdictWrite",
      "typeId": "file.write",
      "parameters": {
        "append": "true",
        "createDirectories": "true",
        "encoding": "utf-8",
        "path": "(wired via ctx)"
      },
      "ui": {
        "x": 8215,
        "y": 353
      }
    },
    {
      "id": "workdir",
      "typeId": "input.manual",
      "parameters": {
        "label": "Agents working directory (common ancestor of all materials)",
        "value": ""
      },
      "ui": {
        "x": 80,
        "y": 600
      }
    }
  ],
  "connections": [
    {
      "id": "c_c3cb17f64c77",
      "fromNode": "arbTask",
      "fromPort": "result",
      "toNode": "arbiter",
      "toPort": "task"
    },
    {
      "id": "c_2ed292e09dc4",
      "fromNode": "arbiter",
      "fromPort": "stdout",
      "toNode": "parseFmt",
      "toPort": "in1"
    },
    {
      "id": "c_1422ddc8fc8b",
      "fromNode": "archA",
      "fromPort": "stdout",
      "toNode": "conceptsFmt",
      "toPort": "in1"
    },
    {
      "id": "c_6b3289631b47",
      "fromNode": "archB",
      "fromPort": "stdout",
      "toNode": "conceptsFmt",
      "toPort": "in2"
    },
    {
      "id": "c_9f25b33ed561",
      "fromNode": "archTaskA",
      "fromPort": "result",
      "toNode": "archA",
      "toPort": "task"
    },
    {
      "id": "c_3322a4ee7dd0",
      "fromNode": "archTaskB",
      "fromPort": "result",
      "toNode": "archB",
      "toPort": "task"
    },
    {
      "id": "c_01KY7CK2Q05YGVNHBBAWYF61ET",
      "fromNode": "c-adversary",
      "fromPort": "stdout",
      "toNode": "critFmt",
      "toPort": "in1"
    },
    {
      "id": "c_f4f853d42487",
      "fromNode": "c-deepseek",
      "fromPort": "stdout",
      "toNode": "critFmt",
      "toPort": "in2"
    },
    {
      "id": "c_a70e4a37be82",
      "fromNode": "c-minimax",
      "fromPort": "stdout",
      "toNode": "critFmt",
      "toPort": "in3"
    },
    {
      "id": "c_01KY7CKJPDCFY2FGMPER50JSCM",
      "fromNode": "c-security",
      "fromPort": "stdout",
      "toNode": "critFmt",
      "toPort": "in5"
    },
    {
      "id": "c_01KY7CNNY7RT12KN0GAETG3SWX",
      "fromNode": "cTaskAdversary",
      "fromPort": "result",
      "toNode": "c-adversary",
      "toPort": "task"
    },
    {
      "id": "c_c359845a0595",
      "fromNode": "cTaskDeepseek",
      "fromPort": "result",
      "toNode": "c-deepseek",
      "toPort": "task"
    },
    {
      "id": "c_0d6891e5f1cf",
      "fromNode": "cTaskMinimax",
      "fromPort": "result",
      "toNode": "c-minimax",
      "toPort": "task"
    },
    {
      "id": "c_01KY7CS29MJ7P1XHDPH8RPRJFJ",
      "fromNode": "cTaskSecurity",
      "fromPort": "result",
      "toNode": "c-security",
      "toPort": "task"
    },
    {
      "id": "c_20a555b84ebb",
      "fromNode": "conceptsFmt",
      "fromPort": "result",
      "toNode": "conceptsWrite",
      "toPort": "content"
    },
    {
      "id": "c_01KY7CM5NBRHM9V0VA5Z3WME78",
      "fromNode": "conceptsWrite",
      "fromPort": "path",
      "toNode": "cTaskAdversary",
      "toPort": "in1"
    },
    {
      "id": "c_7b9d3c09ad29",
      "fromNode": "conceptsWrite",
      "fromPort": "path",
      "toNode": "cTaskDeepseek",
      "toPort": "in1"
    },
    {
      "id": "c_13c095a8de86",
      "fromNode": "conceptsWrite",
      "fromPort": "path",
      "toNode": "cTaskMinimax",
      "toPort": "in1"
    },
    {
      "id": "c_01KY7CQDHTJ9EX23XFD1YSN9S6",
      "fromNode": "conceptsWrite",
      "fromPort": "path",
      "toNode": "cTaskSecurity",
      "toPort": "in1"
    },
    {
      "id": "c_06ef35f6a9ce",
      "fromNode": "critFmt",
      "fromPort": "result",
      "toNode": "critWrite",
      "toPort": "content"
    },
    {
      "id": "c_abf03142eaa5",
      "fromNode": "critWrite",
      "fromPort": "path",
      "toNode": "arbTask",
      "toPort": "in1"
    },
    {
      "id": "c_f8a34695b2b9",
      "fromNode": "ctxBuild",
      "fromPort": "json",
      "toNode": "loop",
      "toPort": "in"
    },
    {
      "id": "c_5f069f0b45e5",
      "fromNode": "ctxDossier",
      "fromPort": "result",
      "toNode": "archTaskA",
      "toPort": "in1"
    },
    {
      "id": "c_9eb67ca6dbe4",
      "fromNode": "ctxDossier",
      "fromPort": "result",
      "toNode": "archTaskB",
      "toPort": "in1"
    },
    {
      "id": "c_c26730b3b276",
      "fromNode": "ctxDossier",
      "fromPort": "result",
      "toNode": "conceptsWrite",
      "toPort": "path"
    },
    {
      "id": "c_46a75addecc1",
      "fromNode": "ctxDossier",
      "fromPort": "result",
      "toNode": "critWrite",
      "toPort": "path"
    },
    {
      "id": "c_7ee1488d8904",
      "fromNode": "ctxDossier",
      "fromPort": "result",
      "toNode": "verdictWrite",
      "toPort": "path"
    },
    {
      "id": "c_e75280efddeb",
      "fromNode": "ctxFmt",
      "fromPort": "result",
      "toNode": "ctxBuild",
      "toPort": "stdin"
    },
    {
      "id": "c_1bea15be6c10",
      "fromNode": "ctxIter",
      "fromPort": "result",
      "toNode": "arbTask",
      "toPort": "in3"
    },
    {
      "id": "c_3f4860f6e26a",
      "fromNode": "ctxIter",
      "fromPort": "result",
      "toNode": "archTaskA",
      "toPort": "in3"
    },
    {
      "id": "c_b3f15394cc09",
      "fromNode": "ctxIter",
      "fromPort": "result",
      "toNode": "archTaskB",
      "toPort": "in3"
    },
    {
      "id": "c_01KY7CN5SSSJZGQZWSFSJ8FTGP",
      "fromNode": "ctxIter",
      "fromPort": "result",
      "toNode": "cTaskAdversary",
      "toPort": "in3"
    },
    {
      "id": "c_8e44ed52351f",
      "fromNode": "ctxIter",
      "fromPort": "result",
      "toNode": "cTaskDeepseek",
      "toPort": "in3"
    },
    {
      "id": "c_8bd1d2c2227b",
      "fromNode": "ctxIter",
      "fromPort": "result",
      "toNode": "cTaskMinimax",
      "toPort": "in3"
    },
    {
      "id": "c_01KY7CRF4JN8TEYAN4QGYD8TCS",
      "fromNode": "ctxIter",
      "fromPort": "result",
      "toNode": "cTaskSecurity",
      "toPort": "in3"
    },
    {
      "id": "c_0ed3dac4c087",
      "fromNode": "ctxIter",
      "fromPort": "result",
      "toNode": "conceptsFmt",
      "toPort": "in3"
    },
    {
      "id": "c_a5a08825237c",
      "fromNode": "ctxIter",
      "fromPort": "result",
      "toNode": "critFmt",
      "toPort": "in4"
    },
    {
      "id": "c_554b84179ea3",
      "fromNode": "ctxIter",
      "fromPort": "result",
      "toNode": "verdictFmt",
      "toPort": "in2"
    },
    {
      "id": "c_9f1fe805907d",
      "fromNode": "ctxWorkdir",
      "fromPort": "result",
      "toNode": "arbTask",
      "toPort": "in2"
    },
    {
      "id": "c_15b396e40d98",
      "fromNode": "ctxWorkdir",
      "fromPort": "result",
      "toNode": "arbiter",
      "toPort": "workingDirectory"
    },
    {
      "id": "c_597411f36cdb",
      "fromNode": "ctxWorkdir",
      "fromPort": "result",
      "toNode": "archA",
      "toPort": "workingDirectory"
    },
    {
      "id": "c_59ff330d5f0e",
      "fromNode": "ctxWorkdir",
      "fromPort": "result",
      "toNode": "archB",
      "toPort": "workingDirectory"
    },
    {
      "id": "c_c864e0096a24",
      "fromNode": "ctxWorkdir",
      "fromPort": "result",
      "toNode": "archTaskA",
      "toPort": "in2"
    },
    {
      "id": "c_6a9c074032bf",
      "fromNode": "ctxWorkdir",
      "fromPort": "result",
      "toNode": "archTaskB",
      "toPort": "in2"
    },
    {
      "id": "c_01KY7CP9J1ANC88YAWE8AZ0PWP",
      "fromNode": "ctxWorkdir",
      "fromPort": "result",
      "toNode": "c-adversary",
      "toPort": "workingDirectory"
    },
    {
      "id": "c_8280d499c74a",
      "fromNode": "ctxWorkdir",
      "fromPort": "result",
      "toNode": "c-deepseek",
      "toPort": "workingDirectory"
    },
    {
      "id": "c_7b349fad1159",
      "fromNode": "ctxWorkdir",
      "fromPort": "result",
      "toNode": "c-minimax",
      "toPort": "workingDirectory"
    },
    {
      "id": "c_01KY7CSGZAVJFC12WXHJNX6ZM4",
      "fromNode": "ctxWorkdir",
      "fromPort": "result",
      "toNode": "c-security",
      "toPort": "workingDirectory"
    },
    {
      "id": "c_01KY7CMNATZ6PA0P1C6RK9MW2E",
      "fromNode": "ctxWorkdir",
      "fromPort": "result",
      "toNode": "cTaskAdversary",
      "toPort": "in2"
    },
    {
      "id": "c_a0f0df9fdd06",
      "fromNode": "ctxWorkdir",
      "fromPort": "result",
      "toNode": "cTaskDeepseek",
      "toPort": "in2"
    },
    {
      "id": "c_c0ec87bb485f",
      "fromNode": "ctxWorkdir",
      "fromPort": "result",
      "toNode": "cTaskMinimax",
      "toPort": "in2"
    },
    {
      "id": "c_01KY7CQY7V1701WW4ACE67VYY7",
      "fromNode": "ctxWorkdir",
      "fromPort": "result",
      "toNode": "cTaskSecurity",
      "toPort": "in2"
    },
    {
      "id": "c_4bdfc01b281a",
      "fromNode": "d-claude",
      "fromPort": "stdout",
      "toNode": "dAgg",
      "toPort": "in2"
    },
    {
      "id": "c_9a75fe415f76",
      "fromNode": "d-codex",
      "fromPort": "stdout",
      "toNode": "dAgg",
      "toPort": "in1"
    },
    {
      "id": "c_de03c45ea70b",
      "fromNode": "d-gemini",
      "fromPort": "stdout",
      "toNode": "dAgg",
      "toPort": "in3"
    },
    {
      "id": "c_8aac581a682a",
      "fromNode": "d-grok",
      "fromPort": "stdout",
      "toNode": "dAgg",
      "toPort": "in4"
    },
    {
      "id": "c_dce404d8bc40",
      "fromNode": "dAgg",
      "fromPort": "result",
      "toNode": "rawWrite",
      "toPort": "content"
    },
    {
      "id": "c_5ca3d534517e",
      "fromNode": "dTaskClaude",
      "fromPort": "result",
      "toNode": "d-claude",
      "toPort": "task"
    },
    {
      "id": "c_90bcd0c6c028",
      "fromNode": "dTaskCodex",
      "fromPort": "result",
      "toNode": "d-codex",
      "toPort": "task"
    },
    {
      "id": "c_df1fb2d8319c",
      "fromNode": "dTaskGemini",
      "fromPort": "result",
      "toNode": "d-gemini",
      "toPort": "task"
    },
    {
      "id": "c_c6adf31573d8",
      "fromNode": "dTaskGrok",
      "fromPort": "result",
      "toNode": "d-grok",
      "toPort": "task"
    },
    {
      "id": "c_b5a40fb5b0b7",
      "fromNode": "digest",
      "fromPort": "stdout",
      "toNode": "digestFmt",
      "toPort": "in1"
    },
    {
      "id": "c_1b7eedc3d809",
      "fromNode": "digestFmt",
      "fromPort": "result",
      "toNode": "digestWrite",
      "toPort": "content"
    },
    {
      "id": "c_9b56fa1b932d",
      "fromNode": "digestTask",
      "fromPort": "result",
      "toNode": "digest",
      "toPort": "task"
    },
    {
      "id": "c_e755eb88d540",
      "fromNode": "digestWrite",
      "fromPort": "path",
      "toNode": "ctxFmt",
      "toPort": "in1"
    },
    {
      "id": "c_1dfb16a15402",
      "fromNode": "doneDossier",
      "fromPort": "result",
      "toNode": "sumTask",
      "toPort": "in1"
    },
    {
      "id": "c_806dd3daeeb4",
      "fromNode": "doneFinal",
      "fromPort": "result",
      "toNode": "finalWrite",
      "toPort": "path"
    },
    {
      "id": "c_b21a8f98af86",
      "fromNode": "doneWorkdir",
      "fromPort": "result",
      "toNode": "sumTask",
      "toPort": "in2"
    },
    {
      "id": "c_58a2de5c44f5",
      "fromNode": "doneWorkdir",
      "fromPort": "result",
      "toNode": "summarizer",
      "toPort": "workingDirectory"
    },
    {
      "id": "c_64aeb9e9ba6e",
      "fromNode": "dossierPath",
      "fromPort": "value",
      "toNode": "digestWrite",
      "toPort": "path"
    },
    {
      "id": "c_58c4e9836a8f",
      "fromNode": "dossierPath",
      "fromPort": "value",
      "toNode": "initWrite",
      "toPort": "path"
    },
    {
      "id": "c_92ee26dd9bd5",
      "fromNode": "finalPath",
      "fromPort": "value",
      "toNode": "ctxFmt",
      "toPort": "in3"
    },
    {
      "id": "c_66e6d104f496",
      "fromNode": "finalWrite",
      "fromPort": "path",
      "toNode": "preview",
      "toPort": "value"
    },
    {
      "id": "c_2e9ffbdcfaa0",
      "fromNode": "gate",
      "fromPort": "false",
      "toNode": "loop",
      "toPort": "feedback"
    },
    {
      "id": "c_3297ad4bd740",
      "fromNode": "gate",
      "fromPort": "true",
      "toNode": "loop",
      "toPort": "break"
    },
    {
      "id": "c_836eb9f5a920",
      "fromNode": "initFmt",
      "fromPort": "result",
      "toNode": "initWrite",
      "toPort": "content"
    },
    {
      "id": "c_65127796b5c1",
      "fromNode": "initWrite",
      "fromPort": "path",
      "toNode": "dTaskClaude",
      "toPort": "in1"
    },
    {
      "id": "c_0c350940057a",
      "fromNode": "initWrite",
      "fromPort": "path",
      "toNode": "dTaskCodex",
      "toPort": "in1"
    },
    {
      "id": "c_642e863bbf5b",
      "fromNode": "initWrite",
      "fromPort": "path",
      "toNode": "dTaskGemini",
      "toPort": "in1"
    },
    {
      "id": "c_080afb3ecc9b",
      "fromNode": "initWrite",
      "fromPort": "path",
      "toNode": "dTaskGrok",
      "toPort": "in1"
    },
    {
      "id": "c_684429475881",
      "fromNode": "initWrite",
      "fromPort": "path",
      "toNode": "digestTask",
      "toPort": "in2"
    },
    {
      "id": "c_348caf379da7",
      "fromNode": "iterNum",
      "fromPort": "json",
      "toNode": "ctxDossier",
      "toPort": "in"
    },
    {
      "id": "c_9edafaa06308",
      "fromNode": "iterNum",
      "fromPort": "json",
      "toNode": "ctxIter",
      "toPort": "in"
    },
    {
      "id": "c_eb8ae335cacd",
      "fromNode": "iterNum",
      "fromPort": "json",
      "toNode": "ctxWorkdir",
      "toPort": "in"
    },
    {
      "id": "c_9565c1d46951",
      "fromNode": "iterNum",
      "fromPort": "stdout",
      "toNode": "parseFmt",
      "toPort": "in2"
    },
    {
      "id": "c_96d5004b18e9",
      "fromNode": "loop",
      "fromPort": "done",
      "toNode": "doneDossier",
      "toPort": "in"
    },
    {
      "id": "c_04e30dafadff",
      "fromNode": "loop",
      "fromPort": "done",
      "toNode": "doneFinal",
      "toPort": "in"
    },
    {
      "id": "c_d2b19ffed61e",
      "fromNode": "loop",
      "fromPort": "done",
      "toNode": "doneWorkdir",
      "toPort": "in"
    },
    {
      "id": "c_244a03c8e093",
      "fromNode": "loop",
      "fromPort": "loop",
      "toNode": "iterNum",
      "toPort": "stdin"
    },
    {
      "id": "c_a9b3eac230cb",
      "fromNode": "materials",
      "fromPort": "value",
      "toNode": "initFmt",
      "toPort": "in2"
    },
    {
      "id": "c_9faf771ccb0c",
      "fromNode": "parseFmt",
      "fromPort": "result",
      "toNode": "verdictParse",
      "toPort": "stdin"
    },
    {
      "id": "c_8733fe4cdd08",
      "fromNode": "question",
      "fromPort": "value",
      "toNode": "initFmt",
      "toPort": "in1"
    },
    {
      "id": "c_03ed479e86ee",
      "fromNode": "rawPath",
      "fromPort": "value",
      "toNode": "digestFmt",
      "toPort": "in2"
    },
    {
      "id": "c_d8956b5d1cb1",
      "fromNode": "rawPath",
      "fromPort": "value",
      "toNode": "rawWrite",
      "toPort": "path"
    },
    {
      "id": "c_81fcbbb7bce4",
      "fromNode": "rawWrite",
      "fromPort": "path",
      "toNode": "digestTask",
      "toPort": "in1"
    },
    {
      "id": "c_ba661370852a",
      "fromNode": "routeFmt",
      "fromPort": "result",
      "toNode": "routeSrc",
      "toPort": "stdin"
    },
    {
      "id": "c_939ddbe92f2c",
      "fromNode": "routeSrc",
      "fromPort": "json",
      "toNode": "gate",
      "toPort": "in"
    },
    {
      "id": "c_7009cdb61a94",
      "fromNode": "routeSrc",
      "fromPort": "json",
      "toNode": "routeVerdict",
      "toPort": "in"
    },
    {
      "id": "c_0df96a199f18",
      "fromNode": "routeVerdict",
      "fromPort": "result",
      "toNode": "gate",
      "toPort": "predicate"
    },
    {
      "id": "c_a2ddb7daebb0",
      "fromNode": "sumTask",
      "fromPort": "result",
      "toNode": "summarizer",
      "toPort": "task"
    },
    {
      "id": "c_7d928aceadd0",
      "fromNode": "summarizer",
      "fromPort": "stdout",
      "toNode": "finalWrite",
      "toPort": "content"
    },
    {
      "id": "c_f074cda7f6d6",
      "fromNode": "verdictFmt",
      "fromPort": "result",
      "toNode": "verdictWrite",
      "toPort": "content"
    },
    {
      "id": "c_3aa1e96a59d5",
      "fromNode": "verdictParse",
      "fromPort": "json",
      "toNode": "verdictText",
      "toPort": "in"
    },
    {
      "id": "c_94fb05eea667",
      "fromNode": "verdictParse",
      "fromPort": "stdout",
      "toNode": "routeFmt",
      "toPort": "in1"
    },
    {
      "id": "c_e2b17a1aa176",
      "fromNode": "verdictText",
      "fromPort": "result",
      "toNode": "verdictFmt",
      "toPort": "in1"
    },
    {
      "id": "c_9d068e5d0354",
      "fromNode": "verdictWrite",
      "fromPort": "path",
      "toNode": "routeFmt",
      "toPort": "in2"
    },
    {
      "id": "c_c5131fe80021",
      "fromNode": "workdir",
      "fromPort": "value",
      "toNode": "ctxFmt",
      "toPort": "in2"
    },
    {
      "id": "c_bf44907d63fa",
      "fromNode": "workdir",
      "fromPort": "value",
      "toNode": "d-claude",
      "toPort": "workingDirectory"
    },
    {
      "id": "c_e7f0214403f4",
      "fromNode": "workdir",
      "fromPort": "value",
      "toNode": "d-codex",
      "toPort": "workingDirectory"
    },
    {
      "id": "c_6a31bb8e9c07",
      "fromNode": "workdir",
      "fromPort": "value",
      "toNode": "d-gemini",
      "toPort": "workingDirectory"
    },
    {
      "id": "c_d599f1c6cf09",
      "fromNode": "workdir",
      "fromPort": "value",
      "toNode": "d-grok",
      "toPort": "workingDirectory"
    },
    {
      "id": "c_e0f139bbacef",
      "fromNode": "workdir",
      "fromPort": "value",
      "toNode": "dTaskClaude",
      "toPort": "in2"
    },
    {
      "id": "c_434eb8a104a4",
      "fromNode": "workdir",
      "fromPort": "value",
      "toNode": "dTaskCodex",
      "toPort": "in2"
    },
    {
      "id": "c_99d240829bb3",
      "fromNode": "workdir",
      "fromPort": "value",
      "toNode": "dTaskGemini",
      "toPort": "in2"
    },
    {
      "id": "c_0a8feec3dd09",
      "fromNode": "workdir",
      "fromPort": "value",
      "toNode": "dTaskGrok",
      "toPort": "in2"
    },
    {
      "id": "c_45c65149dfdb",
      "fromNode": "workdir",
      "fromPort": "value",
      "toNode": "digest",
      "toPort": "workingDirectory"
    }
  ]
}
