Architecture and agent workflow¶
Diagrams follow the Java agent workshop style: hand-drawn outlines, solid pastel fills, paper background, and dark labels. The SPA Architecture tab adds an expandable dialog.
Delivery architecture¶
%%{init: {'look':'handDrawn','theme':'base','themeVariables': {'darkMode':false,'background':'#FFFCF5','primaryTextColor':'#1F1F1F','secondaryTextColor':'#1F1F1F','tertiaryTextColor':'#1F1F1F','textColor':'#1F1F1F','lineColor':'#4A4035','edgeLabelBackground':'#FFFCF5','clusterBkg':'#F5F5F0','clusterBorder':'#6B5B45','fontSize':'16px'},'flowchart': {'nodeSpacing':35,'rankSpacing':55,'padding':18}}}%%
flowchart TD
Git(["Git release change"])
CD(["Argo CD reconciles the Rollout"])
R(["Argo Rollouts: 10% then 50%"])
W["Stable and canary checkout"]
I["Inventory dependency"]
O["Metrics, logs, and trace-linked observations"]
A(["InvestigationWorkflow.investigate()"])
D{"Canary Decision Agent"}
P{"Decision Policy gate"}
GO["GO: advance current stage"]
HOLD["HOLD: gather evidence or await approval"]
NO["NO-GO: abort candidate"]
Git --> CD --> R --> W --> I
W --> O --> A --> D --> P
P --> GO
P --> HOLD
P --> NO
GO --> R
NO --> R
style Git fill:#D4E6F1,stroke:#2E6B8A,color:#1F1F1F,stroke-width:2px
style CD fill:#D4E6F1,stroke:#2E6B8A,color:#1F1F1F,stroke-width:2px
style R fill:#D4E6F1,stroke:#2E6B8A,color:#1F1F1F,stroke-width:2px
style W fill:#FFF8DC,stroke:#C4A000,color:#1F1F1F,stroke-width:2px
style I fill:#FFF8DC,stroke:#C4A000,color:#1F1F1F,stroke-width:2px
style O fill:#FFF8DC,stroke:#C4A000,color:#1F1F1F,stroke-width:2px
style A fill:#D4E6F1,stroke:#2E6B8A,color:#1F1F1F,stroke-width:2px
style D fill:#FFE4CC,stroke:#B87333,color:#1F1F1F,stroke-width:2px
style P fill:#FFE4CC,stroke:#B87333,color:#1F1F1F,stroke-width:2px
style GO fill:#D8F0D8,stroke:#3D7A3D,color:#1F1F1F,stroke-width:2px
style HOLD fill:#FFF8DC,stroke:#C4A000,color:#1F1F1F,stroke-width:2px
style NO fill:#E8DCC4,stroke:#000000,color:#1F1F1F,stroke-width:2px
Multi-agent investigation¶
%%{init: {'look':'handDrawn','theme':'base','themeVariables': {'darkMode':false,'background':'#FFFCF5','primaryTextColor':'#1F1F1F','secondaryTextColor':'#1F1F1F','tertiaryTextColor':'#1F1F1F','textColor':'#1F1F1F','lineColor':'#4A4035','edgeLabelBackground':'#FFFCF5','clusterBkg':'#F5F5F0','clusterBorder':'#6B5B45','fontSize':'16px'},'flowchart': {'nodeSpacing':35,'rankSpacing':55,'padding':18}}}%%
flowchart TD
A(["InvestigationWorkflow.investigate()"])
M(["MetricsAnalyst.analyze()"])
MT["@Tool: compareRevisionMetrics()"]
TEAM(["ResearchTeam: @ParallelAgent"])
D(["DependencyInvestigator.investigate()"])
DT["@Tool: traces and retry logs"]
R(["ReleaseAnalyst.review()"])
RT["@Tool: release changes and runbook"]
C{"CanaryDecisionAgent.decide()"}
P{"Decision Policy accepts evidence?"}
YES["Return GO, HOLD, or NO-GO to Argo"]
NO["HOLD: incomplete, stale, or unapproved"]
A -->|"@SequenceAgent"| M
M -->|"@ToolBox"| MT --> TEAM
TEAM --> D --> DT --> C
TEAM --> R --> RT --> C
C --> P
P -->|Yes| YES
P -->|No| NO
style A fill:#D4E6F1,stroke:#2E6B8A,color:#1F1F1F,stroke-width:2px
style M fill:#D4E6F1,stroke:#2E6B8A,color:#1F1F1F,stroke-width:2px
style MT fill:#FFF8DC,stroke:#C4A000,color:#1F1F1F,stroke-width:2px
style TEAM fill:#E8DCC4,stroke:#000000,color:#1F1F1F,stroke-width:2px
style D fill:#D4E6F1,stroke:#2E6B8A,color:#1F1F1F,stroke-width:2px
style DT fill:#FFF8DC,stroke:#C4A000,color:#1F1F1F,stroke-width:2px
style R fill:#D4E6F1,stroke:#2E6B8A,color:#1F1F1F,stroke-width:2px
style RT fill:#FFF8DC,stroke:#C4A000,color:#1F1F1F,stroke-width:2px
style C fill:#FFE4CC,stroke:#B87333,color:#1F1F1F,stroke-width:2px
style P fill:#FFE4CC,stroke:#B87333,color:#1F1F1F,stroke-width:2px
style YES fill:#D8F0D8,stroke:#3D7A3D,color:#1F1F1F,stroke-width:2px
style NO fill:#E8DCC4,stroke:#000000,color:#1F1F1F,stroke-width:2px
OpenShift Topology¶
The canary-delivery application group contains the reasoning service, traffic generator, inventory, and checkout Rollout. canary-observability contains Prometheus and Jaeger. app.openshift.io/connects-to annotations describe traffic → checkout, checkout → inventory, reasoning → checkout/inventory, Prometheus scrape targets, and Java trace export to Jaeger. Arrows describe logical relationships; they do not configure routing or network policy.
Some console versions do not render an Argo Rollout node. Its connections are declared but cannot be drawn without a visible target. Use Argo CD’s resource tree for the real Rollout/ReplicaSets/AnalysisRuns and the SPA architecture diagram for the complete path. The reasoning agents currently read frozen checkout observations rather than querying Prometheus or complete Jaeger trace trees.