LangGraph Guardian
Prevent silent failures and catch implementation errors in LangGraph pipelines before runtime.
Core Problem This Solves
LangGraph's decoupled architecture causes silent failures:
state.get("extracted_rate")returns[]when key is"extracted_rates"- no error- Node A writes
provider_map, Node B readsprovider_maps- silent empty list - Incomplete returns missing required keys - downstream nodes fail mysteriously
- Copy-paste errors across nodes accumulate over time
Quick Commands
# Validate a single node
python scripts/lint_node.py src/langgraph/nodes/layer4/rate_extractor.py
# Trace a flow to find where it breaks
python scripts/trace_flow.py src/langgraph/nodes --flow "layer1,layer2,layer3"
# Check all nodes for completeness
python scripts/check_completeness.py src/langgraph/nodes
# Validate naming consistency across all nodes
python scripts/validate_naming.py src/langgraph/nodes --state-file src/langgraph/state.py
# Pre-commit validation (all checks)
python scripts/preflight.py src/langgraph/nodes --state-file src/langgraph/state.py
Validation Categories
1. State Key Validation
- Keys used match TypedDict definition exactly
- No typos in state.get() calls
- No undeclared keys written
2. Flow Tracing
- Simulates state propagation through nodes
- Finds where chains break (key written in layer 4, read in layer 3)
- Detects missing dependencies
3. Completeness Checks
- Required error handling patterns present
- Escalation creation on failures
- All documented output keys returned
- Logging for long operations
4. Naming Consistency
- State keys follow conventions (snake_case, plural for lists)
- Node names match file names
- Layer IDs match directory structure
Pre-Implementation Checklist
Before writing a new node, verify:
- [ ] All input keys exist in
TiCPipelineState - [ ] All output keys exist in
TiCPipelineState - [ ] Input keys are written by earlier layers
- [ ] Output keys are read by later layers (or are terminal)
- [ ] Error handling returns empty + escalation, not just
{} - [ ] List outputs accumulate, not overwrite
Common Mistakes Reference
See references/common_mistakes.md for patterns like:
- Silent empty returns
- State key typos
- Missing await
- Overwriting vs accumulating lists
- Incomplete error handling
Integration with Development Workflow
- Before implementing: Run
trace_flow.pyto verify inputs available - While implementing: Run
lint_node.pyon save - Before commit: Run
preflight.pyfor full validation - When debugging: Run
trace_flow.py --trace KEYto find breaks
微信扫一扫