You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
The Graph.Node.Attrs field is a map[string]string that carries all node configuration — prompts, models, providers, retry config, timeouts, fidelity, etc. This is the root cause of multiple bugs found in this review.
No type safety — max_retries stored as string, parsed back with strconv.Atoi scattered through handlers
Impedance mismatch — The dippin IR has typed structs (AgentConfig, ToolConfig), but the adapter immediately flattens them to strings, discarding type information
Shotgun surgery — Adding a new config field requires touching the adapter, engine, and every handler with nothing but convention connecting them
DOT shapes as routing mechanism — shape is a visual presentation concept from DOT that has been promoted to a domain routing mechanism (shape -> handler)
Current Architecture
DippinIR (typed) → Adapter → map[string]string → Handler → strconv.Atoi back to typed
Summary
The
Graph.Node.Attrsfield is amap[string]stringthat carries all node configuration — prompts, models, providers, retry config, timeouts, fidelity, etc. This is the root cause of multiple bugs found in this review.Problems
model, the handler readsllm_model. No compile-time check catches this. (See fix(pipeline): attribute key mismatch — model/provider/fallback_target silently ignored for .dip files #13)max_retriesstored as string, parsed back withstrconv.Atoiscattered through handlersAgentConfig,ToolConfig), but the adapter immediately flattens them to strings, discarding type informationshapeis a visual presentation concept from DOT that has been promoted to a domain routing mechanism (shape -> handler)Current Architecture
Recommended Architecture
Define typed config structs in
pipelinepackage. DOT parser does string-to-struct conversion. Handlers consume typed configs directly.Migration Path
NodeConfiginterface withAgentNodeConfig,ToolNodeConfig, etc. inpipelineNodestruct alongsideAttrs(backward compatible)AttrsbagSources
Found by: Martin Fowler (x2), OpenAI Researcher, Architecture Expert, Grad Student AI Researcher (expert panel review)
This is the highest-value long-term architectural investment.