maintain-architecture-map
npx skills add https://github.com/dudusoar/vrp-toolkit --skill maintain-architecture-map
Agent 安装分布
Skill 文档
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.