1
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
# Structural Analysis
2
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
3
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Navegador's analysis commands answer questions about how code fits together: what breaks if this function changes, where does data flow, which code is never called, and which tests cover what.
4
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
5
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
All analysis commands work against the live graph. Run `navegador ingest` first to populate it.
6
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
7
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
---
8
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
9
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
## Impact analysis
10
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
11
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
`navegador impact` traces the downstream effect of changing a function, class, or file. It follows `CALLS`, `INHERITS`, and `IMPORTS` edges to find everything that depends on the target — directly or transitively.
12
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
13
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```bash
14
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
navegador impact validate_token
15
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
navegador impact PaymentProcessor --depth 3
16
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
navegador impact src/auth/service.py --format json
17
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```
18
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
19
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
### Options
20
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
21
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
| Flag | Effect |
22
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
|---|---|
23
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
| `--depth N` | How many hops to follow (default: unlimited) |
24
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
| `--format json` | Machine-readable output |
25
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
| `--include-tests` | Include test files in the impact set |
26
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
27
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
### Output
28
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
29
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```
30
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
validate_token (Function — src/auth/service.py:42)
31
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Direct dependents (3):
32
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
check_permissions src/auth/permissions.py:18
33
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
require_auth src/auth/decorators.py:7
34
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
middleware_auth src/middleware/auth.py:31
35
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
36
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Transitive dependents (11):
37
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
process_payment src/payments/processor.py:56
38
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
create_order src/orders/service.py:23
39
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
... (8 more)
40
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
41
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Affected files (5):
42
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
src/auth/permissions.py
43
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
src/auth/decorators.py
44
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
src/middleware/auth.py
45
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
src/payments/processor.py
46
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
src/orders/service.py
47
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```
48
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
49
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
### Use cases
50
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
51
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
- Before refactoring: understand the blast radius before changing a shared utility
52
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
- Code review: verify a PR's changes are limited to the expected scope
53
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
- Dependency triage: identify high-fan-out functions that deserve extra test coverage
54
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
55
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
---
56
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
57
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
## Flow tracing
58
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
59
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
`navegador flow` traces the execution path from one function to another, returning every call chain that connects them.
60
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
61
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```bash
62
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
navegador flow create_order process_payment
63
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
navegador flow handle_request save_to_db --max-paths 5
64
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```
65
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
66
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
### Options
67
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
68
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
| Flag | Effect |
69
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
|---|---|
70
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
| `--max-paths N` | Maximum number of paths to return (default: 3) |
71
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
| `--format json` | Machine-readable output |
72
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
73
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
### Output
74
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
75
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```
76
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Paths from create_order to process_payment:
77
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
78
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Path 1 (3 hops):
79
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
create_order → validate_cart → charge_card → process_payment
80
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
81
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Path 2 (4 hops):
82
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
create_order → apply_discount → charge_card → process_payment
83
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```
84
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
85
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
### Use cases
86
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
87
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
- Debugging: find all code paths that reach a problematic function
88
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
- Security review: trace every path to a sensitive operation (e.g., `delete_user`, `transfer_funds`)
89
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
- Onboarding: understand how a high-level action maps to low-level implementation
90
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
91
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
---
92
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
93
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
## Dead code detection
94
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
95
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
`navegador dead-code` finds functions and classes that are never called, never imported, and not decorated as entry points.
96
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
97
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```bash
98
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
navegador dead-code ./src
99
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
navegador dead-code ./src --exclude-tests --format json
100
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```
101
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
102
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
### Options
103
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
104
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
| Flag | Effect |
105
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
|---|---|
106
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
| `--exclude-tests` | Skip test files |
107
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
| `--min-age-days N` | Only report code not called in the last N days (requires git history) |
108
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
| `--format json` | Machine-readable output |
109
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
| `--threshold N` | Minimum confidence score to report (0–100, default: 80) |
110
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
111
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
### Output
112
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
113
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```
114
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Potentially dead code (12 items):
115
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
116
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
[Function] legacy_hash_password src/auth/legacy.py:14
117
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
[Function] _format_receipt_v1 src/payments/receipt.py:88
118
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
[Class] OldPaymentAdapter src/payments/adapters.py:201
119
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
...
120
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```
121
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
122
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
!!! note
123
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Navegador performs static call graph analysis. Dynamic dispatch, `getattr`, and string-based imports are not traced. Review candidates before deleting them.
124
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
125
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
### Use cases
126
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
127
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
- Codebase cleanup: identify safe-to-delete code before a release
128
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
- Migration audits: find old adapter classes after a library upgrade
129
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
130
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
---
131
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
132
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
## Cycle detection
133
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
134
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
`navegador cycles` finds circular dependency chains in the call graph and import graph.
135
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
136
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```bash
137
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
navegador cycles ./src
138
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
navegador cycles ./src --type imports
139
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
navegador cycles ./src --type calls --format json
140
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```
141
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
142
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
### Options
143
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
144
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
| Flag | Effect |
145
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
|---|---|
146
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
| `--type calls` | Find circular call chains (default) |
147
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
| `--type imports` | Find circular import chains |
148
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
| `--type both` | Find both |
149
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
| `--min-length N` | Only report cycles with at least N nodes (default: 2) |
150
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
| `--format json` | Machine-readable output |
151
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
152
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
### Output
153
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
154
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```
155
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Import cycles (2 found):
156
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
157
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Cycle 1 (length 3):
158
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
src/payments/processor.py
159
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
→ src/payments/validators.py
160
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
→ src/payments/utils.py
161
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
→ src/payments/processor.py
162
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
163
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Cycle 2 (length 2):
164
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
src/auth/service.py
165
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
→ src/auth/models.py
166
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
→ src/auth/service.py
167
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```
168
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
169
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
### Use cases
170
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
171
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
- CI gate: fail builds that introduce new circular imports
172
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
- Refactoring prep: identify modules to split before a large restructure
173
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
174
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
---
175
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
176
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
## Test mapping
177
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
178
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
`navegador test-map` maps test functions to the production code they exercise, using call graph analysis.
179
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
180
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```bash
181
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
navegador test-map ./src ./tests
182
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
navegador test-map ./src ./tests --target process_payment
183
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
navegador test-map ./src ./tests --format json
184
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```
185
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
186
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
### Options
187
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
188
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
| Flag | Effect |
189
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
|---|---|
190
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
| `--target <name>` | Only show tests that cover a specific function |
191
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
| `--uncovered` | Show production functions with no covering tests |
192
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
| `--format json` | Machine-readable output |
193
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
194
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
### Output
195
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
196
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```
197
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Test coverage map:
198
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
199
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
process_payment (src/payments/processor.py:56)
200
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
tests/payments/test_processor.py::test_process_payment_success
201
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
tests/payments/test_processor.py::test_process_payment_duplicate
202
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
tests/integration/test_checkout.py::test_full_checkout_flow
203
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
204
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
validate_token (src/auth/service.py:42)
205
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
tests/auth/test_service.py::test_validate_token_valid
206
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
tests/auth/test_service.py::test_validate_token_expired
207
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
208
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Uncovered functions (4):
209
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
legacy_hash_password src/auth/legacy.py:14
210
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
_format_receipt_v1 src/payments/receipt.py:88
211
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
...
212
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```
213
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
214
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
### Use cases
215
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
216
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
- Coverage by semantics, not just lines: see which tests actually call a function
217
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
- Regression targeting: when a function changes, which tests should run?
218
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
- Review prep: check that new code has corresponding tests before merging
219
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
220
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
---
221
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
222
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
## Combining analysis with knowledge
223
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
224
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
All analysis commands understand the knowledge layer. Add `--include-knowledge` to see rules, concepts, and decisions linked to the affected nodes:
225
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
226
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```bash
227
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
navegador impact process_payment --include-knowledge
228
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```
229
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
230
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Output will include knowledge nodes like:
231
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
232
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```
233
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Governed by:
234
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Rule: RequireIdempotencyKey (critical)
235
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Concept: Idempotency
236
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Decisions:
237
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
UseStripeForPayments (accepted, 2025-01-15)
238
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```
239
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
240
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
---
241
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
242
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
## Python API
243
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
244
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```python
245
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
from navegador.graph import GraphStore
246
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
from navegador.analysis import (
247
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
ImpactAnalyzer,
248
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
FlowTracer,
249
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
DeadCodeDetector,
250
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
CycleDetector,
251
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
TestMapper,
252
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
)
253
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
254
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
store = GraphStore.sqlite(".navegador/navegador.db")
255
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
256
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
# impact analysis
257
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
analyzer = ImpactAnalyzer(store)
258
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
result = analyzer.analyze("validate_token", depth=3)
259
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
print(result.direct_dependents)
260
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
print(result.transitive_dependents)
261
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
262
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
# flow tracing
263
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
tracer = FlowTracer(store)
264
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
paths = tracer.trace("create_order", "process_payment", max_paths=5)
265
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
for path in paths:
266
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
print(" -> ".join(path.nodes))
267
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
268
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
# dead code
269
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
detector = DeadCodeDetector(store)
270
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
candidates = detector.find("./src", exclude_tests=True)
271
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
for item in candidates:
272
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
print(f"{item.label}: {item.name} {item.file}:{item.line}")
273
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
274
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
# cycle detection
275
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
cycle_detector = CycleDetector(store)
276
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
cycles = cycle_detector.find_import_cycles("./src")
277
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
for cycle in cycles:
278
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
print(" -> ".join(cycle.path))
279
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
280
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
# test mapping
281
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
mapper = TestMapper(store)
282
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
coverage = mapper.map("./src", "./tests")
283
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
for fn, tests in coverage.items():
284
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
print(f"{fn}: {len(tests)} tests")
285
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```
286
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
287
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
See the [Analysis API reference](../api/analysis.md) for full method signatures.
288
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!