- graph.json: Canonical dependency graph (10 crates, 16 edges, 76 files) - graph.summary.md: One-page overview with fan-in/fan-out rankings - sccs.md: Strongly Connected Components analysis (no cycles) - layers.observed.md: 5-layer architecture diagram - hotspots.md: Coupling hotspots (g3-config, g3-cli) - limitations.md: Extraction limitations and validity conditions
65 lines
2.2 KiB
Markdown
65 lines
2.2 KiB
Markdown
# Strongly Connected Components Analysis
|
|
|
|
## Summary
|
|
|
|
**No cycles detected in the crate-level dependency graph.**
|
|
|
|
The G3 workspace exhibits a clean DAG (Directed Acyclic Graph) structure at the crate level.
|
|
|
|
## Analysis Method
|
|
|
|
Cycle detection performed via manual topological sort verification of the 16 internal dependency edges.
|
|
|
|
## Topological Order (Valid)
|
|
|
|
The following topological ordering confirms acyclicity:
|
|
|
|
1. g3-config (leaf)
|
|
2. g3-execution (leaf)
|
|
3. g3-computer-control (leaf)
|
|
4. g3-providers (leaf)
|
|
5. g3-core (depends on 1-4)
|
|
6. g3-ensembles (depends on 1, 5)
|
|
7. g3-planner (depends on 1, 4, 5)
|
|
8. g3-cli (depends on 1, 4, 5, 6, 7)
|
|
9. g3 (depends on 4, 8)
|
|
10. g3-console (standalone)
|
|
|
|
## Potential Coupling Concerns
|
|
|
|
While no cycles exist, the following patterns warrant attention:
|
|
|
|
### Diamond Dependencies
|
|
|
|
```
|
|
g3-cli ──────────────────────────────┐
|
|
│ │
|
|
├── g3-core ── g3-config ◄─────────┤
|
|
│ │
|
|
├── g3-planner ── g3-config ◄──────┤
|
|
│ │
|
|
└── g3-ensembles ── g3-config ◄────┘
|
|
```
|
|
|
|
`g3-config` is reached via multiple paths from `g3-cli`. This is not a cycle but indicates `g3-config` is a shared foundation.
|
|
|
|
### Similar Diamond for g3-core
|
|
|
|
```
|
|
g3-cli ──────────────────────────────┐
|
|
│ │
|
|
├── g3-core ◄──────────────────────┤
|
|
│ │
|
|
├── g3-planner ── g3-core ◄────────┤
|
|
│ │
|
|
└── g3-ensembles ── g3-core ◄──────┘
|
|
```
|
|
|
|
## Module-Level Analysis
|
|
|
|
Module-level cycle detection was not performed. The `use crate::` statements within each crate suggest internal module dependencies but these are expected within a single compilation unit.
|
|
|
|
## Conclusion
|
|
|
|
The crate dependency structure is healthy with no circular dependencies.
|