- 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
103 lines
3.4 KiB
Markdown
103 lines
3.4 KiB
Markdown
# Extraction Limitations
|
|
|
|
## Scope of Analysis
|
|
|
|
This structural analysis was performed using static extraction methods only.
|
|
|
|
## What Was Observed
|
|
|
|
| Source | Method | Confidence |
|
|
|--------|--------|------------|
|
|
| Crate dependencies | Cargo.toml `[dependencies]` parsing | High |
|
|
| Module structure | `pub mod` declarations in lib.rs files | High |
|
|
| File inventory | Filesystem traversal of `src/` directories | High |
|
|
| Use statements | `grep` for `^use ` patterns | Medium |
|
|
| External dependencies | Cargo.toml `[dependencies]` sections | High |
|
|
|
|
## What Was NOT Observed
|
|
|
|
### 1. Conditional Compilation
|
|
|
|
`#[cfg(...)]` attributes were not parsed. Dependencies that only exist under certain feature flags or target platforms are included unconditionally.
|
|
|
|
**Example:** `g3-computer-control` has platform-specific dependencies:
|
|
- `core-graphics`, `cocoa`, `objc` (macOS only)
|
|
- `x11` (Linux only)
|
|
- `windows` (Windows only)
|
|
|
|
These are all listed as dependencies but only one set compiles per platform.
|
|
|
|
### 2. Test Dependencies
|
|
|
|
`[dev-dependencies]` were excluded from the graph. Test-only coupling is not represented.
|
|
|
|
### 3. Build Dependencies
|
|
|
|
`[build-dependencies]` were excluded. Build script dependencies are not represented.
|
|
|
|
### 4. Dynamic/Runtime Dependencies
|
|
|
|
The following cannot be detected statically:
|
|
- Process spawning (e.g., `g3-console` spawns `g3` processes)
|
|
- Plugin loading
|
|
- Configuration-driven provider selection
|
|
- WebDriver browser automation targets
|
|
|
|
### 5. Trait Implementation Coupling
|
|
|
|
Trait implementations create implicit coupling not captured by `use` statements:
|
|
- `UiWriter` implementations in `g3-cli`
|
|
- `LLMProvider` implementations in `g3-providers`
|
|
- `ComputerController` implementations in `g3-computer-control`
|
|
|
|
### 6. Re-exports
|
|
|
|
`pub use` re-exports create transitive dependencies not fully traced:
|
|
- `g3-core` re-exports types from `g3-providers`
|
|
- `g3-computer-control` re-exports WebDriver types
|
|
|
|
### 7. Macro Expansion
|
|
|
|
Macro-generated code (e.g., `#[derive(...)]`, `async_trait`) creates dependencies not visible in source.
|
|
|
|
### 8. Workspace Inheritance
|
|
|
|
`workspace = true` dependencies inherit versions from root `Cargo.toml`. The actual version constraints are not captured in crate-level analysis.
|
|
|
|
## Inference Notes
|
|
|
|
### Inferred: g3-console Isolation
|
|
|
|
`g3-console` has no internal crate dependencies in its `Cargo.toml`. It interacts with `g3` via:
|
|
- Process spawning (`std::process::Command`)
|
|
- Log file parsing
|
|
- Filesystem monitoring
|
|
|
|
This runtime coupling is not represented in the dependency graph.
|
|
|
|
### Inferred: g3 → g3-providers Direct Dependency
|
|
|
|
The root `g3` crate depends directly on `g3-providers` despite `g3-cli` also depending on it. This may be for:
|
|
- Type re-exports
|
|
- Direct provider access in main.rs
|
|
- Historical reasons
|
|
|
|
The actual usage was not verified.
|
|
|
|
## Recommendations for Future Analysis
|
|
|
|
1. **cargo-depgraph**: Use `cargo depgraph` for authoritative Cargo-resolved dependencies
|
|
2. **cargo-tree**: Use `cargo tree` for transitive dependency analysis
|
|
3. **rust-analyzer**: Use LSP for precise type-level dependency tracking
|
|
4. **cargo-udeps**: Identify unused dependencies
|
|
5. **cargo-machete**: Detect potentially unused dependencies
|
|
|
|
## Validity Conditions
|
|
|
|
This analysis is valid as of the extraction date. It may be invalidated by:
|
|
|
|
- Adding/removing crates from the workspace
|
|
- Changing `[dependencies]` in any Cargo.toml
|
|
- Restructuring module hierarchies
|
|
- Adding conditional compilation features
|