maintain-architecture-map
Maintain Architecture Map Skill
Maintain a living architecture document that shows the system's big picture: modules, data flows, entry points, and dependencies.
Goal
Keep ARCHITECTURE_MAP.md and related architecture docs synchronized with the actual codebase, providing:
- Module Overview: What modules exist and what they do
- Data Flows: How data moves through the system (Instance → Solver → Solution → Visualizer)
- Entry Points: Where to start when using the toolkit
- Dependencies: How modules depend on each other
Relationship to Other Skills
Complementary to maintain-data-structures:
- maintain-data-structures: Focuses on what (data structure definitions, attributes, methods, formats)
- maintain-architecture-map: Focuses on how (module structure, data flows, system pipelines)
Example:
maintain-data-structuresdocuments:PDPTWInstancehas attributesn,order_table,distance_matrixmaintain-architecture-mapdocuments:PDPTWInstanceis created in Data layer, consumed by Algorithm layer, visualized by Visualization layer
When to Use This Skill
Trigger this skill when:
- New module added (e.g., new problem type, new algorithm)
- Module structure changes (files moved, packages reorganized)
- New entry point created (new public API)
- Data flow changes (new pipeline stage added)
- Major refactoring completed (architecture evolution)
- Preparing for playground development (need system overview)
- User asks "how does the system work?"
Workflow
Step 1: Scan Project Structure
Identify current module organization:
Reference: references/scanning_scripts.md for automation ideas
Key directories to scan:
vrp_toolkit/
├── problems/ # Problem definitions (PDPTW, VRP, etc.)
├── algorithms/ # Solving algorithms (ALNS, GA, etc.)
├── data/ # Data generation and loading
├── visualization/ # Plotting and visualization
└── utils/ # Common utilities
For each module, extract:
- Module purpose (from
__init__.pydocstring or README) - Public classes (classes exported in
__init__.py) - Public functions (functions exported in
__init__.py) - Dependencies (imports from other modules)
Step 2: Identify Entry Points
Entry points are where users start using the toolkit:
Common entry point types:
-
Problem creation:
PDPTWInstance(order_table)- Create problem from datagenerate_pdptw_instance(...)- Generate synthetic problem
-
Algorithm execution:
ALNSSolver.solve(problem)- Solve using ALNSgreedy_insertion_initial_solution(...)- Generate initial solution
-
Data generation:
OrderGenerator.generate()- Generate order dataRealMap(...)- Create synthetic map
-
Visualization:
PDPTWVisualizer.visualize(solution)- Plot routes
Document in ARCHITECTURE_MAP.md with:
- Function signature
- One-sentence purpose
- Example usage (1-2 lines)
Step 3: Map Data Flows
Trace how data moves through the system:
Primary data flow (Problem → Solution):
1. Data Layer: Generate/load data
↓
2. Problem Layer: Create Instance (PDPTWInstance)
↓
3. Algorithm Layer: Solve Instance → Solution (ALNSSolver.solve())
↓
4. Visualization: Visualize Solution (PDPTWVisualizer.visualize())
Secondary data flows:
- Configuration: User params → ALNSConfig → ALNSSolver
- Evaluation: Solution → Objective function → Cost metric
- Validation: Solution → Feasibility checker → Constraint violations
Reference: Create .claude/docs/data_flows.md for detailed flow diagrams
Step 4: Document Module Dependencies
Map which modules depend on which:
Dependency rules (VRP-Toolkit architecture):
- ✅ Algorithm can depend on Problem (solvers need instances)
- ✅ Visualization can depend on Problem and Algorithm (visualizers need instances and solutions)
- ✅ Data can depend on Problem (generators create instances)
- ❌ Problem should NOT depend on Algorithm (instances are algorithm-agnostic)
Create dependency graph:
Data ────────┐
↓
Problem ←────┘
↓
Algorithm
↓
Visualization
Reference: Create .claude/docs/module_dependencies.md for full dependency map
Step 5: Update ARCHITECTURE_MAP.md
Use the template from references/architecture_template.md:
Required sections:
- System Overview - 2-3 paragraph summary
- Three-Layer Architecture - Problem/Algorithm/Data layer descriptions
- Module Guide - One subsection per module with purpose and key exports
- Entry Points - How to start using the toolkit
- Data Flows - Visual diagram + text description
- Key Abstractions - VRPProblem, VRPSolution, Solver interfaces
- Extension Guide - How to add new problems/algorithms
- Quick Reference - Cheat sheet of common operations
Formatting guidelines:
- Keep it concise (aim for <500 lines total)
- Use diagrams (ASCII art or mermaid)
- Include code examples (1-3 lines each)
- Link to detailed docs (maintain-data-structures references)
Step 6: Update Supporting Docs
Create/update .claude/docs/ as needed:
data_flows.md - Detailed data flow diagrams
- Problem creation flow
- Algorithm execution flow
- Visualization flow
- Configuration flow
module_dependencies.md - Dependency graph
- Import graph (module → imported modules)
- Circular dependency checks
- Layer violations (if any)
extension_guide.md - How to extend the system
- Adding a new problem type
- Adding a new algorithm
- Adding a new operator
- Adding a new visualization
Architecture Template
Minimal ARCHITECTURE_MAP.md Structure
# VRP-Toolkit Architecture Map
**Last Updated:** YYYY-MM-DD
**Version:** 0.1.0
## System Overview
[2-3 paragraphs describing the toolkit]
## Three-Layer Architecture
### 1. Problem Layer (vrp_toolkit/problems/)
[Description + key classes]
### 2. Algorithm Layer (vrp_toolkit/algorithms/)
[Description + key classes]
### 3. Data Layer (vrp_toolkit/data/)
[Description + key classes]
### 4. Visualization Layer (vrp_toolkit/visualization/)
[Description + key classes]
## Module Guide
### problems/
**Purpose:** [One sentence]
**Key Exports:**
- `PDPTWInstance` - [Purpose]
- `VRPProblem` - [Purpose]
[Repeat for each module]
## Entry Points
### 1. Create a Problem
```python
from vrp_toolkit.problems.pdptw import PDPTWInstance
instance = PDPTWInstance(order_table=df)
2. Solve the Problem
from vrp_toolkit.algorithms.alns import ALNSSolver
solver = ALNSSolver(config)
solution = solver.solve(instance)
[Continue for main workflows]
Data Flows
[ASCII diagram or mermaid]
Key Abstractions
[Describe VRPProblem, VRPSolution, Solver interfaces]
Extension Guide
[How to add new problems/algorithms]
Quick Reference
[Cheat sheet table]
Full template: `references/architecture_template.md`
## Automation Helpers
### Script: Scan Module Structure
```python
# scripts/scan_modules.py
from pathlib import Path
import importlib
def scan_module(module_path):
"""Scan a module and extract public API."""
init_file = module_path / "__init__.py"
if not init_file.exists():
return None
# Read __init__.py
content = init_file.read_text()
# Extract __all__ if present
if "__all__" in content:
# Parse __all__ list
pass
# Extract docstring
# Extract classes/functions
return {
'name': module_path.name,
'docstring': '...',
'exports': [...]
}
def scan_all_modules():
"""Scan all vrp_toolkit modules."""
toolkit_path = Path("vrp-toolkit/vrp_toolkit")
modules = []
for module_dir in toolkit_path.iterdir():
if module_dir.is_dir() and not module_dir.name.startswith('_'):
info = scan_module(module_dir)
if info:
modules.append(info)
return modules
Reference: See references/scanning_scripts.md for full scripts
Quality Checklist
Before marking ARCHITECTURE_MAP.md as up-to-date:
- Accuracy: All listed modules/classes exist in codebase
- Completeness: All major modules documented
- Entry points: At least 3-5 entry points with examples
- Data flows: At least 1 visual diagram
- Dependencies: Dependency graph present
- Layer compliance: No violations of three-layer architecture
- Links: Cross-references to maintain-data-structures docs work
- Freshness: "Last Updated" date is current
- Brevity: Total length < 500 lines (main file)
Integration with Other Skills
Works with:
- maintain-data-structures: Link to data structure references for details
- create-playground: Playground references ARCHITECTURE_MAP for integration patterns
- migrate-module: After migration, update architecture docs
- build-session-context: Reads ARCHITECTURE_MAP for project overview
Maintains:
.claude/ARCHITECTURE_MAP.md- Main architecture document.claude/docs/data_flows.md- Data flow diagrams.claude/docs/module_dependencies.md- Dependency graph
Common Patterns
Pattern 1: Document a New Module
When adding a new module (e.g., vrp_toolkit/algorithms/genetic/):
-
Add entry to "Module Guide" section:
### algorithms/genetic/ **Purpose:** Genetic algorithm solver for VRP problems **Key Exports:** - `GeneticSolver` - Main GA solver implementing Solver interface - `GAConfig` - Configuration for genetic parameters -
Update "Entry Points" if new public API:
### 3. Solve with Genetic Algorithm ```python from vrp_toolkit.algorithms.genetic import GeneticSolver solver = GeneticSolver(config) solution = solver.solve(instance) -
Update dependency graph if needed
Pattern 2: Document Data Flow
When documenting a new data flow (e.g., "How does configuration work?"):
-
Create ASCII diagram:
User Input ↓ UI Widgets (Streamlit) ↓ ALNSConfig (dataclass) ↓ ALNSSolver.__init__(config) ↓ ALNS.run() uses config params -
Add text explanation
-
Link from ARCHITECTURE_MAP.md to detailed docs
Pattern 3: Update After Refactoring
When architecture changes (e.g., "Split ALNS into solver.py and operators.py"):
- Update module structure in "Module Guide"
- Update imports in code examples
- Update dependency graph
- Verify no broken cross-references
References
references/architecture_template.md- Full ARCHITECTURE_MAP.md templatereferences/scanning_scripts.md- Automation scripts for module scanningmaintain-data-structures/skill - For detailed data structure docs
Remember: ARCHITECTURE_MAP.md is for the big picture. For detailed class/function documentation, use maintain-data-structures skill.
More from dudusoar/vrp-toolkit
integrate-road-network
Integrate real-world street networks into VRP problems using OpenStreetMap data. Use when loading real map data, creating instances from actual locations, computing network-based distances, or building tutorials with real-world scenarios. Guides through installation, loading areas, extracting nodes, computing distance matrices, and creating PDPTW instances from map data.
12create-tutorial
Create high-quality, progressive learning tutorials for VRP Toolkit. Use when the user requests creating tutorials, educational content, or learning materials for any VRP toolkit feature (problem creation, algorithm implementation, data generation, visualization, etc.). This skill ensures tutorials follow best learning practices with progressive disclosure, hands-on examples, and clear explanations.
10git-log
Generate appropriate commit messages and maintain git log documentation. Use when preparing to commit changes, reviewing git history, or maintaining project change documentation. Provides commit message generation, git log maintenance, and quick command reference.
9manage-python-env
Quick reference for uv (fast Python package manager) operations to save tokens. Use when creating virtual environments, installing packages, managing dependencies, or when user asks about uv commands. Provides concise patterns for Python project setup and package management.
9build-session-context
Build concise session context by extracting key information from project logs (CLAUDE.md, TASK_BOARD.md, MIGRATION_LOG.md, DEBUG_LOG.md, GIT_LOG.md, SKILLS_LOG.md) to provide token-efficient project status. Use when beginning work, returning after break, or needing quick project overview without reading full files.
9maintain-data-structures
Comprehensive reference documentation for all data structures in the VRP toolkit project. Use when needing to understand data structure definitions, attributes, formats, or representations to avoid repeatedly reading code. Covers Problem layer (Instance, Solution, Node), Algorithm layer (Solver, Operators, ALNS), Data layer (OSMnx, distance matrices), and runtime formats (routes as lists, time windows as tuples).
9