weavatrix 0.3.7 → 0.3.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +129 -942
- package/docs/releases/v0.3.8.md +21 -0
- package/package.json +2 -1
- package/src/analysis/dead-code-review/candidates.js +194 -0
- package/src/analysis/dead-code-review.js +4 -188
package/README.md
CHANGED
|
@@ -1,223 +1,31 @@
|
|
|
1
1
|
# Weavatrix
|
|
2
2
|
|
|
3
|
-
**Local repository intelligence for AI coding agents — understand
|
|
3
|
+
**Local repository intelligence for AI coding agents — understand an application fast, then change it with evidence.**
|
|
4
4
|
|
|
5
|
-
Weavatrix builds a reusable living graph of any local repository
|
|
6
|
-
inheritance,
|
|
7
|
-
or any MCP client a bounded map for fast
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
**34 network-free tools. No repository data leaves your machine.**
|
|
5
|
+
Weavatrix builds a reusable living graph of any local repository — files, symbols, imports, calls,
|
|
6
|
+
inheritance, Health findings, clone families and Git-history coupling — and gives Claude Code, Codex
|
|
7
|
+
or any MCP client a bounded map for fast understanding and low repeated context. The same graph then
|
|
8
|
+
answers change impact, Health, dead-code review, duplicates, history and intended-architecture
|
|
9
|
+
questions. **34 network-free tools. No repository data leaves your machine.**
|
|
11
10
|
|
|
12
11
|
- Website: [weavatrix.com](https://weavatrix.com)
|
|
13
12
|
- Source: [github.com/sergii-ziborov/weavatrix](https://github.com/sergii-ziborov/weavatrix)
|
|
14
13
|
- npm: [`weavatrix`](https://www.npmjs.com/package/weavatrix) — `npx -y weavatrix <repoRoot>`
|
|
15
14
|
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
local semantic precision, Health, dependencies, duplicates, impact, history and
|
|
20
|
-
architecture safeguards remain here under the existing MIT license. The MIT
|
|
21
|
-
license is not changing.
|
|
22
|
-
|
|
23
|
-
Every outbound HTTP capability belongs to the separately versioned package
|
|
24
|
-
`weavatrix-online`, beginning at 0.1.0. That connector targets either the
|
|
25
|
-
managed Weavatrix Cloud or a commercially licensed self-hosted Weavatrix
|
|
26
|
-
Enterprise deployment through one source-free wire contract. It is an expanded
|
|
27
|
-
superset that depends on this package, not a fork: it may add proprietary tools,
|
|
28
|
-
skills and analyzers through the supported extension API while graph/parser/LSP/
|
|
29
|
-
Health fixes continue to ship once in the MIT core.
|
|
30
|
-
|
|
31
|
-
The decision and release gates are in
|
|
15
|
+
This package is the complete offline engine under the MIT license and initiates no outbound HTTP.
|
|
16
|
+
Every network capability lives in the separately versioned `weavatrix-online` superset, which depends
|
|
17
|
+
on this core through a supported extension API. The split is documented in
|
|
32
18
|
[docs/adr/0001-v0.3-offline-online-split.md](docs/adr/0001-v0.3-offline-online-split.md).
|
|
33
19
|
|
|
34
|
-
##
|
|
35
|
-
|
|
36
|
-
The 34 MCP methods are not one linear workflow. They project the same reusable graph into the
|
|
37
|
-
smallest view needed for a task: repository and build state; modules, communities, hubs, neighbors
|
|
38
|
-
and paths; exact symbols and bounded source context; endpoint and cross-repository API flow; symbol
|
|
39
|
-
and change-set blast radius; graph revision and behavioral Git history; Health, dependencies,
|
|
40
|
-
vulnerabilities, dead code, clones, coverage and hot paths; proof-carrying change verification;
|
|
41
|
-
intended-architecture contracts and ratchets; and local multi-repository work.
|
|
42
|
-
|
|
43
|
-
## Why
|
|
44
|
-
|
|
45
|
-
An AI agent editing code without architecture, health and history evidence is refactoring blind.
|
|
46
|
-
Weavatrix answers questions a text index cannot:
|
|
47
|
-
|
|
48
|
-
- *"What breaks if I change this?"* → `change_impact` diffs your branch (staged, unstaged and
|
|
49
|
-
untracked included), maps the changed files and symbols onto the graph, and lists everything that
|
|
50
|
-
depends on them — with test coverage attached, so the **untested part of the blast radius** stands
|
|
51
|
-
out before you ship.
|
|
52
|
-
- *"Who calls this function?"* → `inspect_symbol` returns exact bounded TS/JS occurrences plus
|
|
53
|
-
source context; `context_bundle` adds production-first graph relations, exact re-export sites,
|
|
54
|
-
diverse call-site excerpts, and a smaller source workset. `get_dependents` walks the symbol-level reverse graph transitively. Opt into
|
|
55
|
-
`include_container_importers:true` only when a broader module-import radius is intended.
|
|
56
|
-
- *"Did my refactor actually decouple anything?"* → `graph_diff base_ref=HEAD~1` builds an immutable
|
|
57
|
-
baseline graph without checking it out, then reports the structural delta: new module
|
|
58
|
-
dependencies, broken or introduced import cycles, and symbols that lost their last caller.
|
|
59
|
-
- *"Where is the repo rotting or repeating itself?"* → `run_audit`, `find_dead_code`,
|
|
60
|
-
`find_duplicates`, `hot_path_review` and `git_history` combine deterministic findings, graph
|
|
61
|
-
connectivity and co-change evidence instead of treating a matching string as an architecture fact.
|
|
62
|
-
|
|
63
|
-
- *"Is this change actually safe?"* -> `verified_change` accepts the task plus current diff/files and
|
|
64
|
-
returns one proof-carrying `PASS`, `BLOCKED`, or `UNKNOWN`: compact edit contexts, exact-symbol
|
|
65
|
-
impact, bounded call-argument flow, Git graph drift, architecture/duplicate/API ratchets, and
|
|
66
|
-
affected-test evidence.
|
|
67
|
-
|
|
68
|
-
## Worked examples
|
|
69
|
-
|
|
70
|
-
These are representative sequences from local dogfooding, not fabricated chat transcripts. Counts
|
|
71
|
-
describe the observed repository snapshots and will move with the code.
|
|
72
|
-
|
|
73
|
-
### Understand an unfamiliar backend without reading it linearly
|
|
74
|
-
|
|
75
|
-
```text
|
|
76
|
-
Question: Where does an attack-mitigation request go?
|
|
77
|
-
|
|
78
|
-
module_map
|
|
79
|
-
-> production territories and strongest module dependencies
|
|
80
|
-
list_endpoints
|
|
81
|
-
-> 462 routes observed in a 1,076-file backend snapshot
|
|
82
|
-
trace_endpoint
|
|
83
|
-
-> composed router mount -> controller -> service -> task/messaging
|
|
84
|
-
-> bounded call-site excerpts around decisive edges
|
|
85
|
-
```
|
|
86
|
-
|
|
87
|
-
Use `module_map` for the initial application shape, then switch to the exact endpoint or symbol. Do
|
|
88
|
-
not lead with a broad natural-language `query_graph` when the route or identifier is already known.
|
|
89
|
-
|
|
90
|
-
### Check whether a backend handler is used by another repository
|
|
91
|
-
|
|
92
|
-
```text
|
|
93
|
-
Question: Can this handler be removed?
|
|
94
|
-
|
|
95
|
-
list_known_repos -> trace_api_contract
|
|
96
|
-
backend endpoints observed: 163
|
|
97
|
-
client callsites joined: 267 across two registered clients
|
|
98
|
-
handler liveness: NOT_DEAD_EXTERNAL_USE
|
|
99
|
-
unresolved dynamic URLs: POSSIBLE_EXTERNAL_USE / UNKNOWN
|
|
100
|
-
```
|
|
101
|
-
|
|
102
|
-
This joins separately cached local graphs; it does not upload source. Medium/high-confidence
|
|
103
|
-
external use can keep a handler out of the dead-code queue, while dynamic or ambiguous calls remain
|
|
104
|
-
explicitly incomplete evidence.
|
|
105
|
-
|
|
106
|
-
### Change one method with an evidence trail
|
|
107
|
-
|
|
108
|
-
```text
|
|
109
|
-
inspect_symbol -> context_bundle -> get_dependents -> coverage_map
|
|
110
|
-
-> edit the bounded workset
|
|
111
|
-
-> verified_change phase=verify base_ref=<merge-base>
|
|
112
|
-
```
|
|
113
|
-
|
|
114
|
-
On an observed BranchPilot diff, `change_impact` separated removed methods/signatures from additive
|
|
115
|
-
exports and ranked a 98-node radius without collapsing runtime and type-only coupling. If measured
|
|
116
|
-
coverage, the architecture contract, or requested tests are missing, the final state is `UNKNOWN`,
|
|
117
|
-
not a cosmetic pass.
|
|
118
|
-
|
|
119
|
-
### Review Health and clone debt without auto-deleting code
|
|
120
|
-
|
|
121
|
-
```text
|
|
122
|
-
run_audit category=dependencies debt=all
|
|
123
|
-
-> missing direct dependency (observed: mongodb)
|
|
124
|
-
-> lockfile drift and unresolved imports
|
|
125
|
-
run_audit debt=all
|
|
126
|
-
-> runtime cycles separated from compile/type-only coupling
|
|
127
|
-
find_duplicates
|
|
128
|
-
-> clone families and same-name divergence
|
|
129
|
-
-> homogeneous router boilerplate suppressed by default
|
|
130
|
-
```
|
|
131
|
-
|
|
132
|
-
Every dead-code, orphan, dependency and duplicate item remains review evidence. Confirm framework
|
|
133
|
-
conventions and source use before editing; Weavatrix does not auto-delete or merge findings.
|
|
134
|
-
|
|
135
|
-
`run_audit` also returns an explicit capability matrix. `STRUCTURE CHECKED` and a supported package
|
|
136
|
-
ecosystem do not imply `RUNTIME_CORRECTNESS` or `CONCURRENCY` is complete. npm, nested Python and Go
|
|
137
|
-
modules, Maven properties, common Gradle declarations/version catalogs, and Cargo workspace/renamed
|
|
138
|
-
packages are compared with indexed imports. JVM reflection/generated/runtime-only use, Cargo
|
|
139
|
-
features/proc macros and unresolved build logic remain review evidence; bounded Go/Java checks are
|
|
140
|
-
neither compiler proof nor a race detector.
|
|
141
|
-
|
|
142
|
-
### Where this saves agent context — and where it does not
|
|
143
|
-
|
|
144
|
-
The largest saving comes from graph operations that replace repeated discovery: one
|
|
145
|
-
`change_impact`, `get_dependents`, `context_bundle`, contract trace or dependency audit can collapse
|
|
146
|
-
many search/read hops into a bounded evidence set. `read_source` is mainly a convenient exact window
|
|
147
|
-
and is not inherently cheaper than a client's native offset read. Database queries, runtime state,
|
|
148
|
-
disk forensics and background workflow investigation remain outside a static repository graph.
|
|
149
|
-
Typecheck, tests and runtime checks remain the release authority.
|
|
150
|
-
|
|
151
|
-
### Trace an event, queue, worker, cron or CLI flow
|
|
152
|
-
|
|
153
|
-
```text
|
|
154
|
-
query_graph
|
|
155
|
-
seed_symbols=["handleAttackEvents"]
|
|
156
|
-
relation_filter=["calls", "references"]
|
|
157
|
-
flow_direction="both"
|
|
158
|
-
-> exact listener plus bounded producers and consumers
|
|
159
|
-
context_bundle label="handleAttackEvents"
|
|
160
|
-
-> production callers first and diverse excerpts around decisive call sites
|
|
161
|
-
```
|
|
162
|
-
|
|
163
|
-
Exact symbol seeds avoid fuzzy routing noise and work for non-HTTP entry points without adding a
|
|
164
|
-
special-purpose tool for every framework. A narrow `search_code` registration check is still useful
|
|
165
|
-
when the handler name is not known; it is a discovery aid, not the graph.
|
|
166
|
-
|
|
167
|
-
### Establish an architecture contract without silently changing policy
|
|
168
|
-
|
|
169
|
-
```text
|
|
170
|
-
get_architecture_contract action=preview baseline_mode=none
|
|
171
|
-
-> adaptive Maven/Gradle/monorepo territories
|
|
172
|
-
-> observed dependency directions labelled OBSERVED_NOT_ENFORCED
|
|
173
|
-
-> exact proposed file, verification, hash and short-lived token
|
|
174
|
-
get_architecture_contract action=approve confirm_token=<reviewed-token>
|
|
175
|
-
-> creates only a missing .weavatrix/architecture.json
|
|
176
|
-
prepare_change -> edit -> verify_architecture
|
|
177
|
-
```
|
|
178
|
-
|
|
179
|
-
Use `baseline_mode=accept-current` only when the owner explicitly accepts current deterministic debt.
|
|
180
|
-
Approval rechecks the graph and never overwrites an existing local or Hosted policy.
|
|
181
|
-
|
|
182
|
-
## Benchmarks
|
|
183
|
-
|
|
184
|
-
Two different gates ship in the repository:
|
|
185
|
-
|
|
186
|
-
- `npm run benchmark` is a reproducible golden suite for TypeScript, JavaScript, Python, Go, Java
|
|
187
|
-
and Rust, plus cross-repository HTTP matching, framework conventions and the MCP graph lifecycle.
|
|
188
|
-
- `npm run benchmark:real` compares revision-pinned local application snapshots with the checked-in
|
|
189
|
-
0.2.1 relation baseline. It fails on unexplained signal loss; `MISSING`, `STALE` and `UNBASELINED`
|
|
190
|
-
remain incomplete, not green.
|
|
191
|
-
|
|
192
|
-
Representative local regression run (Windows x64, Node 24.15.0, July 18, 2026):
|
|
193
|
-
|
|
194
|
-
| Gate | Result | Selected evidence |
|
|
195
|
-
|---|---:|---|
|
|
196
|
-
| Six language fixtures | 6/6 PASS | exact symbols/edges and complete edge provenance |
|
|
197
|
-
| Cross-repo fixture | PASS, 431.79 ms cold | endpoint match, typed wrapper, external use, affected screen |
|
|
198
|
-
| Lifecycle | PASS | `full -> incremental -> none -> reconnect/none`; 1,376-byte text response |
|
|
199
|
-
| Total fixture cold build | 1.31 s | all six language graphs; 6.4 KB bounded report |
|
|
200
|
-
| Real-repository baseline | 6/6 PASS | TS, JS, Python, Go, Java and Rust snapshots |
|
|
201
|
-
|
|
202
|
-
Real snapshots ranged from 473 nodes / 1,165 edges in 0.22 s (Go) to 8,192 nodes / 21,814 edges
|
|
203
|
-
in 9.44 s (TypeScript). The Java snapshot built 7,143 nodes / 23,708 edges in 2.61 s, including
|
|
204
|
-
receiver-aware cross-file calls. These are regression measurements on one machine, not competitor
|
|
205
|
-
benchmarks or universal latency claims. See [benchmark/cases.mjs](benchmark/cases.mjs),
|
|
206
|
-
[benchmark/real-repositories.json](benchmark/real-repositories.json), and run the commands above to
|
|
207
|
-
reproduce them on your own repositories.
|
|
20
|
+
## Install
|
|
208
21
|
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
Requires Node ≥ 18. One command:
|
|
22
|
+
Requires Node ≥ 18.
|
|
212
23
|
|
|
213
24
|
```sh
|
|
214
|
-
# Claude Code
|
|
25
|
+
# Claude Code
|
|
215
26
|
claude mcp add -s user weavatrix -- npx -y weavatrix <repoRoot>
|
|
216
|
-
```
|
|
217
|
-
|
|
218
|
-
Codex CLI:
|
|
219
27
|
|
|
220
|
-
|
|
28
|
+
# Codex CLI
|
|
221
29
|
codex mcp add weavatrix -- npx -y weavatrix <repoRoot>
|
|
222
30
|
```
|
|
223
31
|
|
|
@@ -230,737 +38,146 @@ startup_timeout_sec = 20
|
|
|
230
38
|
tool_timeout_sec = 60
|
|
231
39
|
```
|
|
232
40
|
|
|
233
|
-
|
|
234
|
-
all local analysis plus `open_repo`. Pass `pinned` as the final argument for a stricter repository
|
|
235
|
-
boundary:
|
|
236
|
-
|
|
237
|
-
| Profile | Local repository switching | Cross-repo graph reads | Network requests |
|
|
238
|
-
|---|---:|---:|---:|
|
|
239
|
-
| `offline` (default) | Yes, only through `open_repo` | Yes, only through `trace_api_contract` | None |
|
|
240
|
-
| `pinned` | No | No | None |
|
|
41
|
+
Or run from a clone:
|
|
241
42
|
|
|
242
43
|
```sh
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
44
|
+
git clone https://github.com/sergii-ziborov/weavatrix
|
|
45
|
+
cd weavatrix && npm install
|
|
46
|
+
claude mcp add -s user weavatrix -- node <path-to>/weavatrix/bin/weavatrix-mcp.mjs <repoRoot>
|
|
246
47
|
```
|
|
247
48
|
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
49
|
+
`<repoRoot>` is the repository to start with. Graphs are derived data and never live in your repo:
|
|
50
|
+
they are stored in the per-user registry at `~/.weavatrix/graphs/<repository-storage-key>/graph.json`
|
|
51
|
+
(with a stable `.repository-id` beside them). No graph yet? Ask the agent to call `rebuild_graph`, or
|
|
52
|
+
just use a tool — graph and Health reads auto-reconcile the working graph before answering.
|
|
53
|
+
|
|
54
|
+
An agent skill with recipes ships in [skill/SKILL.md](skill/SKILL.md) — install it as
|
|
55
|
+
`~/.claude/skills/weavatrix/SKILL.md` (Claude Code) or `~/.codex/skills/weavatrix/SKILL.md` (Codex).
|
|
56
|
+
|
|
57
|
+
## Configure
|
|
251
58
|
|
|
252
|
-
|
|
253
|
-
many clients snapshot `tools/list` and input schemas for the lifetime of one connection. The expected
|
|
254
|
-
counts are 31 for `pinned` and 34 for `offline`. A custom capability list must include `crossrepo` to
|
|
255
|
-
expose `trace_api_contract`. `graph_stats` reports the running package version, enabled capabilities
|
|
256
|
-
and registered-tool count so a cached process can be distinguished from the installed package.
|
|
59
|
+
**Security profile** — pass a profile as the final positional argument (omitted = `offline`):
|
|
257
60
|
|
|
258
|
-
|
|
61
|
+
| Profile | Local repository switching | Cross-repo graph reads | Network requests | Tools |
|
|
62
|
+
|---|---:|---:|---:|---:|
|
|
63
|
+
| `offline` (default) | Yes, only via `open_repo` | Yes, only via `trace_api_contract` | None | 34 |
|
|
64
|
+
| `pinned` | No | No | None | 31 |
|
|
259
65
|
|
|
260
66
|
```sh
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
claude mcp add -s user weavatrix -- node <path-to>/weavatrix/bin/weavatrix-mcp.mjs <repoRoot>
|
|
67
|
+
# hard-pin one repository and expose no cross-repo tools:
|
|
68
|
+
claude mcp add -s user weavatrix -- npx -y weavatrix <repoRoot> pinned
|
|
264
69
|
```
|
|
265
70
|
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
71
|
+
Advanced registrations may pass an exact comma-separated capability set instead:
|
|
72
|
+
`graph,search,source,health,build,retarget,crossrepo`. A custom list must include `crossrepo` to
|
|
73
|
+
expose `trace_api_contract`. Legacy `online`/`osv`/`hosted`/`full` names fail loudly and point to
|
|
74
|
+
`weavatrix-online`.
|
|
75
|
+
|
|
76
|
+
**Semantic precision** — a bounded, read-only TypeScript/JavaScript language-server overlay is on by
|
|
77
|
+
default for new graphs and upgrades confirmed references to `EXACT_LSP`. Turn it off for parser-only
|
|
78
|
+
operation with `WEAVATRIX_PRECISION=off` (env), `precision:"off"` on `rebuild_graph`/`open_repo`, or
|
|
79
|
+
the MCPB installer's precision choice. Java and Rust have no bundled language server; their edges stay
|
|
80
|
+
parser-derived.
|
|
81
|
+
|
|
82
|
+
The startup prewarm queries 32 ranked symbols (never more than 64) by default. For a deliberate
|
|
83
|
+
high-budget pass, set `WEAVATRIX_PRECISION_MAX_SYMBOLS` above 64 or `WEAVATRIX_PRECISION_PREWARM=full`
|
|
84
|
+
to cover every eligible target up to a 10,000-symbol ceiling; `WEAVATRIX_PRECISION_MAX_REFERENCES`,
|
|
85
|
+
`WEAVATRIX_PRECISION_MAX_LINKS` and `WEAVATRIX_PRECISION_TIMEOUT_MS` tune the budgets. Repositories
|
|
86
|
+
that exceed a hard ceiling stay honestly `PARTIAL`.
|
|
87
|
+
|
|
88
|
+
**Repository config files** (all optional, repository-root):
|
|
89
|
+
|
|
90
|
+
- `.weavatrixignore` — analysis-only exclusions that should stay tracked in Git (`*`, `**`, `?`,
|
|
91
|
+
root-anchored `/patterns`, directory suffixes, ordered `!` re-includes).
|
|
92
|
+
- `.weavatrix.json` — cross-repository HTTP client/wrapper contracts (`httpContracts`) and
|
|
93
|
+
`classify.product` overrides.
|
|
94
|
+
- `.weavatrix-deps.json` — `entrypoints`, `nonRuntimeRoots`, and Python `managedDependencies` /
|
|
95
|
+
`ignoreDependencies` for conventions that cannot be inferred safely.
|
|
96
|
+
|
|
97
|
+
**Test execution** — `verified_change` is read-only by default. Running an existing package
|
|
98
|
+
test/check/verify script requires both `run_tests:true` and `WEAVATRIX_ALLOW_TEST_RUNS=1`; arbitrary
|
|
99
|
+
commands are always rejected.
|
|
100
|
+
|
|
101
|
+
After an upgrade, reconnect the MCP server or start a new agent task before checking the tool list —
|
|
102
|
+
many clients snapshot `tools/list` for the lifetime of a connection. `graph_stats` reports the running
|
|
103
|
+
version, enabled capabilities and registered-tool count so a cached process is distinguishable from
|
|
104
|
+
the installed package.
|
|
270
105
|
|
|
271
|
-
|
|
272
|
-
With the default `offline` profile (or an explicit capability set containing `retarget`),
|
|
273
|
-
`open_repo` can change the active repository
|
|
274
|
-
and builds a missing graph automatically. A normal
|
|
275
|
-
`open_repo` also upgrades graphs that predate current typed-edge/provenance/physical-LOC metadata; `build:false`
|
|
276
|
-
probes without building and refuses a legacy graph. Retargeting is offline but intentionally changes
|
|
277
|
-
the filesystem boundary for subsequent tools; select `pinned` when that boundary must not move.
|
|
106
|
+
## Tools
|
|
278
107
|
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
108
|
+
The 34 methods project the same reusable graph into the smallest view a task needs.
|
|
109
|
+
|
|
110
|
+
- **graph** — `graph_stats`, `get_node`, `get_neighbors`, `query_graph`, `god_nodes`, `shortest_path`,
|
|
111
|
+
`get_community`, `list_communities`, `module_map`, `get_dependents`, `change_impact`,
|
|
112
|
+
`verified_change`, `git_history`, `graph_diff`, `get_architecture_contract`, `prepare_change`.
|
|
113
|
+
Runtime, TypeScript type-only and language compile-only edges are reported separately; every edge
|
|
114
|
+
carries versioned provenance (`EXTRACTED` / `RESOLVED` / `INFERRED`, upgraded to `EXACT_LSP` only by
|
|
115
|
+
the bundled TS/JS overlay, `CONFLICT` when evidence disagrees).
|
|
116
|
+
- **search / source** — `search_code` (ripgrep-backed with a pure-Node fallback and
|
|
117
|
+
repository-relative path globs), `read_source`, `context_bundle`, `inspect_symbol`,
|
|
118
|
+
`list_endpoints` (Express/Fastify/Nest/Flask/FastAPI/Go mux/Rust axum & actix-web/Spring),
|
|
119
|
+
`trace_endpoint`.
|
|
120
|
+
- **health** — `find_dead_code`, `run_audit` (capability matrix + unused files/exports/dependencies,
|
|
121
|
+
missing/duplicate deps, offline OSV vulnerabilities, typosquats, lockfile drift; `base_ref` +
|
|
122
|
+
`debt: new|existing|all` for review-scoped results), `find_duplicates` (MOSS winnowing, catches
|
|
123
|
+
renamed clones), `coverage_map`, `hot_path_review`, `verify_architecture`,
|
|
124
|
+
`explain_architecture_violation`, `propose_architecture_exception`.
|
|
125
|
+
- **build** — `rebuild_graph` (reports the structural delta, keeps the prior state as `graph.prev.json`).
|
|
126
|
+
- **retarget** *(in `offline`, absent from `pinned`)* — `open_repo`, `list_known_repos`.
|
|
127
|
+
- **crossrepo** *(in `offline`, absent from `pinned`)* — `trace_api_contract` (joins routes to client
|
|
128
|
+
call-sites across registered local graphs; reads no source).
|
|
129
|
+
|
|
130
|
+
Every finding is review evidence, never an auto-delete verdict: `find_dead_code` /
|
|
131
|
+
`run_audit category=unused` always return `REVIEW_REQUIRED` with `autoDelete:false`. Typecheck, tests
|
|
132
|
+
and runtime checks remain the release authority.
|
|
282
133
|
|
|
283
|
-
##
|
|
134
|
+
## Benchmarks
|
|
284
135
|
|
|
285
|
-
|
|
286
|
-
`shortest_path`, `get_community`, `list_communities`, `module_map`, `get_dependents`,
|
|
287
|
-
`change_impact`, `verified_change`, `git_history`, `graph_diff`, `get_architecture_contract`,
|
|
288
|
-
`prepare_change`. Runtime dependencies, TypeScript type-only coupling and language
|
|
289
|
-
compile-only edges (Rust module/use, Java imports) are reported separately where that distinction
|
|
290
|
-
changes the result. TypeScript type-space and value-space declarations keep distinct identities;
|
|
291
|
-
classes and enums that inhabit both spaces are labelled `both`.
|
|
292
|
-
|
|
293
|
-
Every current edge carries versioned provenance. The parser emits `EXTRACTED`, `RESOLVED`, and
|
|
294
|
-
`INFERRED`; the built-in bounded TypeScript/JavaScript precision overlay upgrades only references
|
|
295
|
-
confirmed by its bundled `typescript-language-server` + TypeScript runtime to `EXACT_LSP`.
|
|
296
|
-
`CONFLICT` means evidence disagrees. `graph_stats` reports the provenance breakdown and the semantic
|
|
297
|
-
provider's `COMPLETE`, `PARTIAL`, `UNAVAILABLE`, or `OFF` state; `OFF` means precision was explicitly
|
|
298
|
-
disabled and only static evidence is active. Java and Rust language-server providers are not bundled:
|
|
299
|
-
their edges never become `EXACT_LSP`, even when a mixed repository reports a complete
|
|
300
|
-
TypeScript/JavaScript overlay.
|
|
301
|
-
|
|
302
|
-
Configured TypeScript plugins (including Next.js) are recorded but suppressed; repository-local
|
|
303
|
-
plugin code is never loaded. The broad overlay is deliberately budgeted, so `PARTIAL` can mean the
|
|
304
|
-
candidate cap was reached. `get_dependents` then spends a bounded point query on the requested JS/TS
|
|
305
|
-
symbol and replaces direct heuristic references only when exact absence/presence is proven.
|
|
306
|
-
`change_impact` batches the same exact query for changed symbols. Further transitive hops remain
|
|
307
|
-
graph-backed and are labelled as such.
|
|
308
|
-
|
|
309
|
-
The bounded JS/TS provider is enabled by default for new graphs. Set `WEAVATRIX_PRECISION=off`
|
|
310
|
-
before starting the MCP server for parser-only operation from the first build, or pass
|
|
311
|
-
`precision:"off"` to `rebuild_graph` / `open_repo`. The MCPB installer exposes the same `lsp` / `off`
|
|
312
|
-
choice as **TypeScript/JavaScript semantic precision**.
|
|
313
|
-
|
|
314
|
-
The broad prewarm stays conservative by default: it queries 32 ranked symbols and never more than
|
|
315
|
-
64. A deliberate high-budget run can set `WEAVATRIX_PRECISION_MAX_SYMBOLS` above 64 (for example,
|
|
316
|
-
`1000`), or set `WEAVATRIX_PRECISION_PREWARM=full` to select every eligible target up to the hard
|
|
317
|
-
10,000-symbol safety ceiling. Expanded runs receive proportionate reference/link and deadline
|
|
318
|
-
budgets, still capped at 131,072 references/links, a 30-minute deadline, 1,024 open documents and
|
|
319
|
-
128 MiB of verified source. `WEAVATRIX_PRECISION_MAX_REFERENCES`,
|
|
320
|
-
`WEAVATRIX_PRECISION_MAX_LINKS`, and `WEAVATRIX_PRECISION_TIMEOUT_MS` can lower or explicitly tune
|
|
321
|
-
those budgets. Repositories that exceed any hard ceiling remain honestly `PARTIAL`; the default
|
|
322
|
-
memory/time profile is unchanged. On-demand `get_dependents`, `inspect_symbol`, and
|
|
323
|
-
`change_impact` queries remain revision-bound separate caches and do not require a full prewarm.
|
|
324
|
-
|
|
325
|
-
**search / source** — `search_code` (ripgrep-backed, pure-Node fallback, with repository-relative
|
|
326
|
-
path globs on Windows/macOS/Linux), `read_source` (a
|
|
327
|
-
symbol's actual code in one hop), `context_bundle` (definition plus grouped inbound/outbound
|
|
328
|
-
containers ranked production-first, exact re-export sites, call-site/target provenance and diverse bounded excerpts around decisive
|
|
329
|
-
edges), `inspect_symbol` (one exact
|
|
330
|
-
bounded TS/JS reference query, logical containers, impact and source excerpts), `list_endpoints` (HTTP route inventory:
|
|
331
|
-
Express/Fastify/Nest/Flask/FastAPI/Go mux/Rust axum and actix-web, including nested Express
|
|
332
|
-
`router.use(...)` mount composition, declaration/reachability counts, mount provenance, and Spring
|
|
333
|
-
conditional/default-active state),
|
|
334
|
-
`trace_endpoint` (one exact composed route → handler → bounded production call graph with call-site excerpts)
|
|
335
|
-
|
|
336
|
-
**health** — `find_dead_code` (bounded review queue for statically unreferenced and test-only files,
|
|
337
|
-
functions, methods, and symbols, with evidence tiers, completed/remaining verification and explicit
|
|
338
|
-
public/framework/dynamic caveats),
|
|
339
|
-
`run_audit` (an explicit capability matrix plus unused files/exports/dependencies with per-finding manifest/indexed-source/script/config verification;
|
|
340
|
-
`category:dependencies` isolates missing/unused/duplicate declarations, unresolved imports and lockfile drift,
|
|
341
|
-
missing npm/Go/Python/Maven/Gradle/Cargo deps, bounded import-to-artifact/crate verification, concrete
|
|
342
|
-
npm/PyPI/Go/Maven/crates.io advisory pins, Go/Java correctness candidates, runtime
|
|
343
|
-
cycles, type-only/compile-only coupling, orphans, boundary rules, offline OSV vulnerabilities + typosquat +
|
|
344
|
-
lockfile drift; accepts an immutable `base_ref`, `changed_files`, and `debt: new|existing|all` for
|
|
345
|
-
review-scoped results; production paths are the default and `include_classified:true` opts into
|
|
346
|
-
test/generated/docs evidence), `find_duplicates` (MOSS winnowing over method bodies — catches copy-paste even
|
|
347
|
-
after renames and can inspect strict small clones down to 12 tokens; homogeneous router boilerplate
|
|
348
|
-
is suppressed unless `include_boilerplate:true`; immutable declarative catalog shapes require `include_declarative:true`), `coverage_map` (existing coverage reports mapped onto the graph; untested hotspots
|
|
349
|
-
ranked by connectivity — tests are never executed), `hot_path_review` (bounded local-cost evidence
|
|
350
|
-
with separate graph/test risk), `verify_architecture`,
|
|
351
|
-
`explain_architecture_violation`, `propose_architecture_exception`
|
|
352
|
-
|
|
353
|
-
`hot_path_review` ranks production symbols using parser-derived local time, memory, cyclomatic and
|
|
354
|
-
call-site facts plus exact inside-loop allocation, copy, scan, sort and recursion evidence. Graph
|
|
355
|
-
fan-in/fan-out and measured coverage (or explicitly labelled static test reachability) remain
|
|
356
|
-
separate from local syntax cost. Its focused default uses `min_score:85` plus a narrow strong-local
|
|
357
|
-
fallback; pass `min_score:0` only when the full diagnostic queue is wanted. The ranking is not
|
|
358
|
-
profiler data or interprocedural Big-O.
|
|
359
|
-
|
|
360
|
-
**build** — `rebuild_graph` (reports the structural delta, keeps the prior state as
|
|
361
|
-
`graph.prev.json`)
|
|
362
|
-
|
|
363
|
-
For dead functions/methods/symbols, call `find_dead_code` first. Its default production-only queue
|
|
364
|
-
shows high/medium-confidence candidates and excludes tests, generated code, mocks, stories and docs;
|
|
365
|
-
use `kinds:["method"]` or a `path` prefix to narrow it. `min_confidence:"low"` explicitly includes
|
|
366
|
-
public APIs and framework/dynamic/reflection-sensitive candidates with their warnings. For repository
|
|
367
|
-
maintenance or branch debt, pair it with `run_audit category=unused debt=all` (or add an immutable
|
|
368
|
-
`base_ref` with `debt=new`) to cover unused files, exports and dependencies. Neither tool authorizes
|
|
369
|
-
deletion: `STRONG_STATIC_EVIDENCE` means an exact zero-reference result, not permission to remove;
|
|
370
|
-
follow each candidate's `remainingChecks`, then inspect source/dependents/configuration and run tests.
|
|
371
|
-
|
|
372
|
-
`graph_diff` accepts `base_ref` (`HEAD~1`, `main`, `origin/main`, or another local Git ref) for a
|
|
373
|
-
fresh baseline comparison. Without it, the tool compares against `graph.prev.json` saved by the last
|
|
374
|
-
full rebuild. Either mode can be narrowed with `path`.
|
|
375
|
-
|
|
376
|
-
Graph and health calls reconcile the working graph before answering. Safe JS/TS body-only changes
|
|
377
|
-
reparse only the changed files plus bounded reverse importers; add/delete, export-surface, barrel,
|
|
378
|
-
manifest, alias, ignore/config, non-JS/TS, or unsafe merge cases deliberately fall back to a full
|
|
379
|
-
rebuild. The result says whether freshness was `none`, `incremental`, or `full`. Graph artifacts stay
|
|
380
|
-
in the per-user cache and never need to be committed to Git.
|
|
381
|
-
|
|
382
|
-
`verified_change` is read-only by default. It may run only explicitly requested `package.json`
|
|
383
|
-
scripts whose names are allowlisted as test/check/verify scripts, and only when both
|
|
384
|
-
`run_tests:true` and `WEAVATRIX_ALLOW_TEST_RUNS=1` are present. It never accepts an arbitrary shell
|
|
385
|
-
command. Cross-repository API proof is used only when the active profile includes `crossrepo`;
|
|
386
|
-
without a configured architecture contract or complete evidence, the result is `UNKNOWN`, not a
|
|
387
|
-
cosmetic pass. Its data-flow section maps bounded JS/TS call arguments to callee parameters; it is
|
|
388
|
-
not CFG, value-propagation, or taint analysis.
|
|
389
|
-
|
|
390
|
-
**retarget** *(included in `offline`; absent from `pinned`; every switch is an explicit local call)* —
|
|
391
|
-
`open_repo`, `list_known_repos`; changes the active repository boundary
|
|
392
|
-
|
|
393
|
-
**crossrepo** *(included in `offline`; absent from `pinned`; reads only registered local graphs)* —
|
|
394
|
-
`trace_api_contract`; reconciles the selected backend/client graphs and joins routes to client callsites
|
|
395
|
-
|
|
396
|
-
`query_graph` accepts optional `seed_files` and exact `seed_symbols` when an architectural or
|
|
397
|
-
event-driven question must start from known entry points. `relation_filter` limits edge kinds and
|
|
398
|
-
`flow_direction:forward|backward|both` turns the same graph into a bounded producer/consumer view.
|
|
399
|
-
Resolved explicit seeds are exclusive by default; set `augment_seeds:true` only when
|
|
400
|
-
question-derived seeds are also wanted. A code-shaped identifier such as `startMitigate` is treated
|
|
401
|
-
as a stronger bounded seed than surrounding words such as controller/service/flow; all exact
|
|
402
|
-
same-name declarations are retained instead of adding unrelated concept seeds. Broad
|
|
403
|
-
bootstrap/tool-execution/routing questions rank
|
|
404
|
-
conventional executables and graph-declared production entry points ahead of site, documentation, benchmark
|
|
405
|
-
and fixture matches. Production-first classification also applies during traversal, so unrelated
|
|
406
|
-
tests/generated/docs/benchmarks do not leak back from a production seed; name a class in the
|
|
407
|
-
question or set `include_classified:true` to include it. Unreferenced unmatched constant/field leaves
|
|
408
|
-
are hidden unless `include_low_signal:true`. Broad ranking remains orientation evidence; use
|
|
409
|
-
`seed_files`, `seed_symbols`, an exact endpoint, or `inspect_symbol` when the intended entry point is already known.
|
|
410
|
-
Instruction words such as “REST”, “path”, and “inspect” do not become fuzzy code seeds.
|
|
411
|
-
|
|
412
|
-
Remote advisory refresh, source-free sync and shared architecture-contract exchange are supplied by
|
|
413
|
-
the separate `weavatrix-online` superset. The core keeps offline advisory matching and the local
|
|
414
|
-
extension services used to validate imported records and source-free payloads.
|
|
415
|
-
|
|
416
|
-
Quality of life: graph/health reads auto-reconcile and expose `none` / `incremental` / `full`
|
|
417
|
-
freshness, with a short clean-read debounce to avoid rescanning the repository for every tool call;
|
|
418
|
-
ambiguous name lookups are
|
|
419
|
-
disclosed instead of silently guessed; and the server **hot-reloads its watched MCP tool entry
|
|
420
|
-
modules and catalog** when those files change — other MCP helpers and analysis engines require a
|
|
421
|
-
reconnect. Every MCP response also carries local, transient `_meta["weavatrix/metrics"]` with elapsed
|
|
422
|
-
time, output bytes/token estimate, graph freshness/revision/update and graph-cache status. These
|
|
423
|
-
metrics are not persisted or transmitted by Weavatrix. If a source checkout's package version moves
|
|
424
|
-
while an old daemon remains alive, `initialize`, `tools/list`, and tool calls fail loudly with
|
|
425
|
-
`STALE_RUNTIME` until the client reconnects; the opt-out is reserved for deliberate development.
|
|
426
|
-
|
|
427
|
-
### 0.3.5 explicit full semantic prewarm
|
|
428
|
-
|
|
429
|
-
- Normal startup remains bounded to 32 ranked semantic targets. An explicit
|
|
430
|
-
`WEAVATRIX_PRECISION_PREWARM=full` run, or a requested symbol budget above
|
|
431
|
-
64, can now cover every eligible JS/TS target within hard time, source and
|
|
432
|
-
memory ceilings instead of being silently clamped to 64.
|
|
433
|
-
- Real Hosted dogfood queried all 800 eligible targets in about 49 seconds and
|
|
434
|
-
produced 4,127 `EXACT_LSP` edges with `COMPLETE` semantic precision.
|
|
435
|
-
- Unreferenced public exports are now reported as low-confidence module-surface
|
|
436
|
-
evidence, not as proof that their implementations are dead.
|
|
437
|
-
|
|
438
|
-
Full patch notes: [docs/releases/v0.3.5.md](docs/releases/v0.3.5.md).
|
|
439
|
-
|
|
440
|
-
### 0.3.4 self-audit precision and bounded dynamic imports
|
|
441
|
-
|
|
442
|
-
- JS/TS graph construction now resolves the existing local-file prefix in
|
|
443
|
-
``import(new URL(`./tool.mjs${runtimeValue}`, import.meta.url).href)`` while
|
|
444
|
-
preserving the edge as dynamic. Variable-first paths, remote URLs, alternate
|
|
445
|
-
bases and other runtime-only targets remain explicit unknowns.
|
|
446
|
-
- Health dependency headlines now follow the same production-first path scope as
|
|
447
|
-
the displayed findings. Classified fixture results are counted separately
|
|
448
|
-
instead of making a clean application headline look unhealthy.
|
|
449
|
-
- Dead-code liveness no longer treats comment-only symbol mentions as callers;
|
|
450
|
-
string-addressed runtime registries remain conservatively live. Dogfood removed
|
|
451
|
-
obsolete internal exports/wrappers while preserving every supported Online
|
|
452
|
-
extension point and TypeScript host callback.
|
|
453
|
-
|
|
454
|
-
Full patch notes: [docs/releases/v0.3.4.md](docs/releases/v0.3.4.md).
|
|
455
|
-
|
|
456
|
-
### 0.3.3 parser supply-chain boundary
|
|
457
|
-
|
|
458
|
-
- Before compiling parser WASM, Core now requires the package-pinned `web-tree-sitter` runtime and
|
|
459
|
-
each selected `tree-sitter-wasms` grammar to resolve inside its dependency directory and match a
|
|
460
|
-
release-pinned SHA-256 allowlist. Repository paths, URLs, symlinks and custom parser locations are
|
|
461
|
-
rejected; a mismatch fails the graph build.
|
|
462
|
-
- This bounds the upstream Emscripten dynamic-module loader even though its generated code contains
|
|
463
|
-
`eval` glue for EM_ASM/EM_JS side modules. Weavatrix loads only its known local runtime and grammar
|
|
464
|
-
artifacts; it does not load a parser or grammar from the analyzed repository.
|
|
465
|
-
- Supply-chain documentation now distinguishes the Apache-2.0 license declared by
|
|
466
|
-
`typescript@5.9.3` from the W3C agreement reproduced for one specification in its third-party
|
|
467
|
-
notices. Conservative dependency scanners may still surface that component notice for review.
|
|
468
|
-
|
|
469
|
-
Full patch notes: [docs/releases/v0.3.3.md](docs/releases/v0.3.3.md).
|
|
470
|
-
|
|
471
|
-
### 0.3.2 exact impact over oversized diffs
|
|
472
|
-
|
|
473
|
-
- `change_impact` now recovers a bounded per-file unified diff when one large asset exceeds the
|
|
474
|
-
aggregate diff budget. Normal source files retain line/symbol classification; only the files that
|
|
475
|
-
individually exceed the budget stay conservative `unknown`.
|
|
476
|
-
- Real Hosted dogfood recovered all 27 changed paths, mapped 57 changed symbols, reduced the
|
|
477
|
-
conservative seed set from 1,000 to 72, and verified exact direct references for 16/16 selected
|
|
478
|
-
JavaScript/TypeScript symbols. Transitive hops remain explicitly graph-backed.
|
|
479
|
-
- The global LSP overlay remains a bounded prewarm and can honestly be `PARTIAL`; `get_dependents`,
|
|
480
|
-
`inspect_symbol`, and `change_impact` run revision-bound exact point/batch queries beyond that cap.
|
|
481
|
-
|
|
482
|
-
Full patch notes: [docs/releases/v0.3.2.md](docs/releases/v0.3.2.md).
|
|
483
|
-
|
|
484
|
-
### 0.3.0 network-free core and exact dependency evidence
|
|
485
|
-
|
|
486
|
-
- The MIT package now contains 34 local tools and no outbound HTTP implementation. Online OSV,
|
|
487
|
-
Cloud and licensed self-hosted workflows live in the separately installed `weavatrix-online`
|
|
488
|
-
0.1.0 superset, which depends on this core through a supported extension API.
|
|
489
|
-
- Cargo.lock provides exact crates.io pins; saved `cargo audit --json` results add RustSec evidence.
|
|
490
|
-
Missing or stale advisory evidence stays incomplete.
|
|
491
|
-
- Maven/Gradle imports map to exact class ownership from already installed JARs. Missing JARs,
|
|
492
|
-
unresolved build expressions and heuristic fallbacks are `PARTIAL`, never a false `COMPLETE`.
|
|
493
|
-
- Real self-dogfood produced persisted `EXACT_LSP` edges and an exact direct caller for
|
|
494
|
-
`startMcpServer`. GraphQL, gRPC and event/Kafka joins use static evidence plus revision-bound
|
|
495
|
-
runtime/OTLP observations; unobserved dynamic targets remain explicit `UNKNOWN`.
|
|
496
|
-
|
|
497
|
-
Full patch notes: [docs/releases/v0.3.0.md](docs/releases/v0.3.0.md).
|
|
498
|
-
|
|
499
|
-
### 0.2.19 supply-chain signal precision
|
|
500
|
-
|
|
501
|
-
- Installed-package URL literals and ordinary standalone network calls no longer become malware
|
|
502
|
-
findings without a separate security signal. They remain bounded co-evidence beside behavior such
|
|
503
|
-
as environment harvesting, while exfil endpoints, public raw IPs and fetch-plus-exec stay active.
|
|
504
|
-
- Unicode variation selectors used for emoji/presentation are no longer confused with hidden text
|
|
505
|
-
controls. Bidirectional override/isolate controls remain covered.
|
|
506
|
-
- Real Hosted dogfood now completes OSV over 651 package versions and the local malware sweep over
|
|
507
|
-
535 installed packages with zero critical/high/medium/low findings.
|
|
508
|
-
|
|
509
|
-
Full patch notes: [docs/releases/v0.2.19.md](docs/releases/v0.2.19.md).
|
|
510
|
-
|
|
511
|
-
### 0.2.18 repository-root and self-audit trust patch
|
|
512
|
-
|
|
513
|
-
- A directory nested under an ignored parent Git repository is no longer mistaken for an empty
|
|
514
|
-
repository. The internal builder now falls back to its boundary-safe walker for that ambiguous
|
|
515
|
-
case while preserving Git ignore semantics at a real repository root.
|
|
516
|
-
- This is the first npm release containing the 0.2.17 self-audit work: Drizzle reachability,
|
|
517
|
-
scoped typosquat precision, regex-aware clone anchors, dead parser removal and shared owners.
|
|
518
|
-
- The 0.3 boundary remains unchanged: this offline package stays MIT, and the separately licensed
|
|
519
|
-
online connector owns outbound HTTP after the major split.
|
|
520
|
-
|
|
521
|
-
Full patch notes: [docs/releases/v0.2.18.md](docs/releases/v0.2.18.md).
|
|
522
|
-
|
|
523
|
-
### 0.2.17 self-audit trust patch (tagged, not published to npm)
|
|
524
|
-
|
|
525
|
-
- Health no longer treats configured Drizzle schema modules as orphaned/test-only production code,
|
|
526
|
-
and scoped typosquat checks no longer compare legitimate scoped packages with unrelated unscoped
|
|
527
|
-
names.
|
|
528
|
-
- Duplicate detection retains equality anchors for executable regular-expression bodies, preventing
|
|
529
|
-
unrelated validation/normalization pipelines from becoming perfect renamed clones.
|
|
530
|
-
- Dogfooding removed obsolete test-only parsers and consolidated dependency-scope, graph-ID,
|
|
531
|
-
architecture-contract, bounded-option and safe repository-read helpers.
|
|
532
|
-
- The accepted 0.3 product boundary keeps the offline engine MIT and moves all outbound HTTP tools
|
|
533
|
-
into the separately licensed `weavatrix-online` connector.
|
|
534
|
-
|
|
535
|
-
Full patch notes: [docs/releases/v0.2.17.md](docs/releases/v0.2.17.md).
|
|
536
|
-
|
|
537
|
-
### 0.2.16 exact dependents, multi-ecosystem dependencies and transport contracts
|
|
538
|
-
|
|
539
|
-
- Safe TypeScript project plugins no longer disable semantic precision. Plugin loading remains
|
|
540
|
-
suppressed, while `get_dependents` and `change_impact` can obtain exact direct JS/TS references on
|
|
541
|
-
demand and identify graph-backed transitive hops separately.
|
|
542
|
-
- Dependency evidence covers nested npm/Python/Go scopes, Maven properties, Gradle catalogs/locks,
|
|
543
|
-
and Cargo workspace inheritance/renames/locks. Explicit OSV refresh accepts npm, PyPI, Go, Maven
|
|
544
|
-
and crates.io pins.
|
|
545
|
-
- Cross-repository tracing adds static GraphQL, gRPC and event-topic joins alongside HTTP and keeps
|
|
546
|
-
runtime configuration, reflection and other dynamic targets explicitly `UNKNOWN`.
|
|
547
|
-
- npm/MCPB metadata now calls out Codex/OpenAI Codex workflows, and Hosted distinguishes aggregate
|
|
548
|
-
folder-boundary feedback from proven file-level runtime cycles.
|
|
549
|
-
|
|
550
|
-
Full patch notes: [docs/releases/v0.2.16.md](docs/releases/v0.2.16.md).
|
|
551
|
-
|
|
552
|
-
### 0.2.15 self-audit precision patch
|
|
553
|
-
|
|
554
|
-
- Dependency review now scopes nested manifests correctly, recognizes framework peer packages and
|
|
555
|
-
package references assembled from bounded dynamic path fragments, and avoids misclassifying
|
|
556
|
-
dependency-owned source as an unused root declaration.
|
|
557
|
-
- Reachability follows source-owned HTML asset references, so maintained browser entry scripts and
|
|
558
|
-
styles remain part of the production surface instead of appearing as dead files.
|
|
559
|
-
- Malware heuristics distinguish inert placeholders, comments, documentation URLs, and ordinary
|
|
560
|
-
Unicode text from executable registry or download behavior while retaining explicit review
|
|
561
|
-
evidence for actionable patterns.
|
|
562
|
-
- Duplicate review ignores policy-like numeric tables and stable ordered-member declarations where
|
|
563
|
-
repetition is intentional, and the remaining reverse-reach, Git-output, member-order, path-term,
|
|
564
|
-
and retrieval logic now uses shared owners instead of drifting copies.
|
|
565
|
-
|
|
566
|
-
Full patch notes: [docs/releases/v0.2.15.md](docs/releases/v0.2.15.md).
|
|
567
|
-
|
|
568
|
-
### 0.2.14 typed flows, honest Health, and architecture bootstrap
|
|
569
|
-
|
|
570
|
-
- Go call resolution now follows receiver types through parameters, locals, constructor returns,
|
|
571
|
-
imported types and struct fields. It links calls such as `bgpSpeaker.RemoveMitigator(update)` to
|
|
572
|
-
`(*Speaker).RemoveMitigator` without guessing across ambiguous same-name receivers.
|
|
573
|
-
- `query_graph` adds exact `seed_symbols`, `relation_filter`, and directed traversal for generic
|
|
574
|
-
event/queue/worker/cron/CLI flows. `context_bundle` ranks production callers before tests and uses
|
|
575
|
-
diverse edge-centered excerpts. `FlowSpec` no longer accidentally requests test traversal.
|
|
576
|
-
- Health exposes per-capability completeness. Maven/Gradle support is honest instead of returning a
|
|
577
|
-
clean zero, and bounded Go/Java correctness findings never claim compiler, runtime, race, or
|
|
578
|
-
concurrency proof. Spring endpoints expose conditional/default-inactive controllers.
|
|
579
|
-
- Architecture bootstrap adapts to Maven/Gradle/monorepo source roots and uses a reviewable
|
|
580
|
-
preview/approve handshake. A stale daemon now refuses analysis when its runtime version differs
|
|
581
|
-
from the package on disk.
|
|
582
|
-
- The MCP implementation and static site are split into owner-focused modules/assets. A release test
|
|
583
|
-
enforces a physical 300-line maximum for JavaScript/TypeScript under `src`, `bin`, `scripts`, and
|
|
584
|
-
`test`, plus maintained HTML/CSS/JavaScript under `site`.
|
|
585
|
-
|
|
586
|
-
Full patch notes: [docs/releases/v0.2.14.md](docs/releases/v0.2.14.md).
|
|
587
|
-
|
|
588
|
-
### 0.2.9 correctness, signal, and consent patch
|
|
589
|
-
|
|
590
|
-
- Express endpoint inventory composes nested imported `router.use(...)` mounts, so a local route such
|
|
591
|
-
as `/:attackId/startMitigate` is reported with its reachable `/warRoom/attack` prefix, declared vs
|
|
592
|
-
reachable counts and the exact static mount chain. `trace_endpoint` continues from that route into
|
|
593
|
-
the bounded call graph and call-site excerpts.
|
|
594
|
-
- `context_bundle` keeps the call-site file/line separate from the target definition and adds bounded
|
|
595
|
-
excerpts around decisive edges instead of stopping inside a long leading comment.
|
|
596
|
-
- `search_code` applies documented repository-relative path globs correctly when ripgrep runs on
|
|
597
|
-
Windows. Broad `query_graph` prompts no longer turn generic REST/instruction words into noisy
|
|
598
|
-
configuration-file seeds, and code-shaped identifiers outrank generic controller/service/flow
|
|
599
|
-
concepts.
|
|
600
|
-
- `run_audit` is production-first by default while retaining explicit access to classified evidence;
|
|
601
|
-
`category:dependencies` provides a focused dependency-health slice;
|
|
602
|
-
duplicate review suppresses homogeneous Express router boilerplate unless requested.
|
|
603
|
-
- the separate no-network `preview_sync` produces the exact payload approval artifact; `sync_graph`
|
|
604
|
-
requires that preview followed by an exact short-lived confirmation token,
|
|
605
|
-
validates the configured destination, requires HTTPS outside loopback, and never networks during
|
|
606
|
-
preview. Contract-pull HTTP failures expose actionable auth/not-found/not-ready states.
|
|
607
|
-
- Every MCP call exposes transient local execution/output/freshness metrics without collection or
|
|
608
|
-
egress. The public site, privacy/security pages, package metadata and license presentation now
|
|
609
|
-
describe the same 38-tool/34-offline surface and the same network boundary.
|
|
610
|
-
|
|
611
|
-
Full patch notes: [docs/releases/v0.2.9.md](docs/releases/v0.2.9.md).
|
|
612
|
-
|
|
613
|
-
### 0.2.8 trust and precision patch
|
|
614
|
-
|
|
615
|
-
- Dead-code review no longer labels a declaration `test-only` when it has a same-file production
|
|
616
|
-
use. Revision-bound positive evidence from an exact `inspect_symbol` point query also removes that
|
|
617
|
-
declaration from later dead-code candidates instead of remaining isolated in its cache.
|
|
618
|
-
- Python dependency checks discover nested `requirements*.txt`, `requirements/*.txt`,
|
|
619
|
-
`pyproject.toml`, and `Pipfile` manifests and assign imports to their nearest manifest scope.
|
|
620
|
-
A root `test.py` is classified consistently as test code.
|
|
621
|
-
- Endpoint extraction masks commented-out routes without shifting source offsets and rejects
|
|
622
|
-
primitive path-to-name maps such as `{'/.codex': 'claude'}` while retaining real route tables.
|
|
623
|
-
- Rust symbols now expose concrete kinds, owner types, visibility/export state, selection ranges and
|
|
624
|
-
structural owner/member edges. This is parser evidence; Rust semantic/LSP precision remains
|
|
625
|
-
explicitly unavailable.
|
|
626
|
-
- Natural-language retrieval honors explicit Rust, Python, TypeScript, JavaScript, Go, Java, and C#
|
|
627
|
-
intent in mixed repositories. Compact `verified_change` text now includes decisive exact reference
|
|
628
|
-
counts and bounded inbound caller names for every selected edit symbol.
|
|
629
|
-
|
|
630
|
-
Full patch notes: [docs/releases/v0.2.8.md](docs/releases/v0.2.8.md).
|
|
631
|
-
|
|
632
|
-
### 0.2.7 verified-change workflow
|
|
633
|
-
|
|
634
|
-
- New `verified_change` composes task retrieval, exact symbol context, change impact, immutable Git
|
|
635
|
-
graph comparison, architecture/duplicate/API ratchets, and targeted-test evidence behind one
|
|
636
|
-
`PASS` / `BLOCKED` / `UNKNOWN` contract.
|
|
637
|
-
- Intent-expanded graph retrieval is combined with exact changed-symbol seeds. A bounded JS/TS
|
|
638
|
-
interprocedural layer records call arguments and their callee parameters without claiming CFG or
|
|
639
|
-
taint completeness.
|
|
640
|
-
- Test execution is a double opt-in and limited to existing test/check/verify package scripts;
|
|
641
|
-
default operation remains read-only.
|
|
642
|
-
- Malware scanning now sweeps installed npm package roots instead of package-manager caches or
|
|
643
|
-
hosted release snapshots. Static heuristic findings are capped at `high`, expose unverified
|
|
644
|
-
execution/origin/lockfile/exposure state, and no longer prescribe secret rotation unless execution
|
|
645
|
-
or credential exposure has actually been confirmed.
|
|
646
|
-
- `query_graph` and `verified_change` task retrieval now enforce production-first classification
|
|
647
|
-
through traversal/selection while retaining exact changed or pinned non-product symbols; query
|
|
648
|
-
output also suppresses unmatched constant/field leaves. `hot_path_review` defaults to a focused
|
|
649
|
-
85-point queue, while `min_score:0` remains the explicit full-diagnostic mode.
|
|
650
|
-
- Dead-code candidates now carry evidence tiers and remaining checks; dependency findings carry
|
|
651
|
-
per-finding manifest plus indexed-source/script/config verification without authorizing removal.
|
|
652
|
-
- `npm run benchmark:agent` reports routing success, false positives, token estimate and latency.
|
|
653
|
-
Codebase Memory and Serena results stay explicitly `MISSING` until independently collected data is
|
|
654
|
-
supplied under the [blind agent-change protocol](docs/agent-task-benchmark.md);
|
|
655
|
-
`benchmark:agent:release` fails closed without same-task change success, FP, token, and time results.
|
|
656
|
-
|
|
657
|
-
Full patch notes: [docs/releases/v0.2.7.md](docs/releases/v0.2.7.md).
|
|
658
|
-
|
|
659
|
-
### 0.2.6 compact-context and TypeScript identity patch
|
|
660
|
-
|
|
661
|
-
- New `context_bundle` turns a symbol into a bounded workset: definition, grouped inbound/outbound
|
|
662
|
-
containers, reference evidence, exact re-export locations and a small number of source excerpts.
|
|
663
|
-
- Re-export records retain their concrete file, line, alias, specifier, type-only flag and resolved
|
|
664
|
-
origin. Barrel propagation through `export *` stays exact and private declarations are not exposed.
|
|
665
|
-
- TypeScript interfaces and type aliases are first-class type-space nodes. Same-named runtime values
|
|
666
|
-
keep separate identities, while classes and enums are explicitly marked as inhabiting both spaces.
|
|
667
|
-
- Graph schema v5 and freshness gates rebuild older caches before these precision-sensitive results
|
|
668
|
-
are used. The changes remain local-only and add no runtime dependency.
|
|
669
|
-
|
|
670
|
-
Full patch notes: [docs/releases/v0.2.6.md](docs/releases/v0.2.6.md).
|
|
671
|
-
|
|
672
|
-
### 0.2.5 exact-symbol and graph-fidelity patch
|
|
673
|
-
|
|
674
|
-
- New `inspect_symbol` spends a bounded LSP query on one requested TS/JS declaration, groups exact
|
|
675
|
-
occurrences by logical container, and returns definition/caller source context. Its separate LRU
|
|
676
|
-
cache is revision/config fingerprinted and never replaces the broad precision overlay.
|
|
677
|
-
- Default-object service facades resolve to their underlying helpers, while `get_dependents` no
|
|
678
|
-
longer silently expands every symbol query to all importers of its file.
|
|
679
|
-
- Python receiver-aware method dispatch and unambiguous wildcard imports distinguish same-named
|
|
680
|
-
methods across classes without promoting ambiguous dynamic evidence.
|
|
681
|
-
- `run_audit` makes unused-dependency checking visible even when clean; dead-code review identifies
|
|
682
|
-
production symbols referenced only by tests; small-clone scanning can be lowered to 12 tokens with
|
|
683
|
-
stricter evidence rules.
|
|
684
|
-
- `hot_path_review` adds a bounded offline performance-review queue with line-addressable local cost
|
|
685
|
-
evidence, separate graph risk, and honest measured/unavailable coverage states.
|
|
686
|
-
|
|
687
|
-
Full patch notes: [docs/releases/v0.2.5.md](docs/releases/v0.2.5.md).
|
|
688
|
-
|
|
689
|
-
### 0.2.4 graph-mode correctness and semantic precision patch
|
|
690
|
-
|
|
691
|
-
- `graph_diff base_ref=...` builds the immutable baseline in the current graph mode, so a
|
|
692
|
-
`no-tests` graph is never compared with a hidden `full` universe. Previous-rebuild snapshots with
|
|
693
|
-
mismatched modes are rejected instead of reporting false removals or cycle drift.
|
|
694
|
-
- `trace_api_contract` preserves each registered repository's build mode during refresh and exposes
|
|
695
|
-
that mode in `graphReconciliation`.
|
|
696
|
-
- `graph_stats` and `open_repo` expose the canonical graph path and build mode; an explicit mode
|
|
697
|
-
mismatch with `build:false` fails closed instead of silently retargeting.
|
|
698
|
-
- `module_map` is production-only by default and can opt back into classified tests, fixtures,
|
|
699
|
-
benchmarks, generated output and docs with `include_non_product:true`.
|
|
700
|
-
- A bundled, read-only TypeScript/JavaScript language server validates a bounded set of semantic
|
|
701
|
-
references after graph reconciliation. Confirmed edges become `EXACT_LSP`; zero-reference evidence
|
|
702
|
-
can strengthen an internal dead-code candidate only after a successful exact query. Partial,
|
|
703
|
-
unavailable and revision-mismatched overlays stay visible and never become cosmetic exactness.
|
|
704
|
-
The provider is Weavatrix's pinned `typescript-language-server` + TypeScript runtime, never a
|
|
705
|
-
repository binary or `npx` download. Automatic type acquisition is disabled. Its child environment
|
|
706
|
-
is reduced to OS/temp/locale basics with a Node/System path; registry, proxy, cloud, token and
|
|
707
|
-
`NODE_OPTIONS` values are not inherited. TypeScript may still read locally declared project
|
|
708
|
-
configuration, dependencies and type declarations; Weavatrix accepts returned evidence only after
|
|
709
|
-
repository realpath containment. Applicable config chains are audited before provider startup;
|
|
710
|
-
configured language-service plugins and unresolved/outside config are refused, while semantic
|
|
711
|
-
inputs are fingerprinted before cache reuse and rechecked after each run. No source or evidence is
|
|
712
|
-
transmitted, and the provider performs no Weavatrix HTTP request. MCP EOF/SIGTERM drains or
|
|
713
|
-
tree-terminates TLS and tsserver before the stdio process exits.
|
|
714
|
-
- Broad `query_graph` bootstrap and tool-execution ranking now prefers production executables and
|
|
715
|
-
graph-declared entry points over site, docs, benchmark and fixture surfaces. Exact `seed_files` remain
|
|
716
|
-
the deterministic option when the caller already knows the entry point.
|
|
717
|
-
- The bundled skill routes orientation, diff review, cross-repository API tracing and exact-symbol
|
|
718
|
-
work through Weavatrix's own evidence states. Java/Rust exact providers remain `UNAVAILABLE` in
|
|
719
|
-
this release instead of being presented as compiler-confirmed.
|
|
720
|
-
|
|
721
|
-
Full patch notes: [docs/releases/v0.2.4.md](docs/releases/v0.2.4.md).
|
|
722
|
-
|
|
723
|
-
### 0.2.3 real-wrapper patch
|
|
724
|
-
|
|
725
|
-
- Auto-discovery recognizes wrappers that pass a fixed HTTP client method and argument array to a
|
|
726
|
-
shared transport helper, such as `api(axios.get, [url, options])`.
|
|
727
|
-
- Ambiguous handler names can resolve to the unique matching symbol in a module directly imported
|
|
728
|
-
by the route file, allowing proven external frontend calls to suppress only that exact backend
|
|
729
|
-
dead-code candidate.
|
|
730
|
-
- Missing, ambiguous, low-confidence and capped evidence remains review-only; the patch does not
|
|
731
|
-
turn absence of a client match into a dead-code verdict.
|
|
732
|
-
|
|
733
|
-
Full patch notes: [docs/releases/v0.2.3.md](docs/releases/v0.2.3.md).
|
|
734
|
-
|
|
735
|
-
### 0.2.2 regression and cross-repository evidence
|
|
736
|
-
|
|
737
|
-
- Permanent TS/JS/Python/Go/Java/Rust regression fixtures now gate graph correctness, output size,
|
|
738
|
-
latency, freshness, reconnect behavior and repository-target stability.
|
|
739
|
-
- Every current graph edge carries versioned `EXTRACTED`, `RESOLVED`, or `INFERRED` provenance;
|
|
740
|
-
`EXACT_LSP` and `CONFLICT` are reserved for the optional precision overlay.
|
|
741
|
-
- `trace_api_contract` recognizes configured and conservatively auto-discovered HTTP wrappers,
|
|
742
|
-
resolves bounded dynamic URL prefixes and can mark an unambiguous backend handler
|
|
743
|
-
`NOT_DEAD_EXTERNAL_USE` when another registered repository supplies medium/high-confidence use.
|
|
744
|
-
- Real-repository verification records explicit `MISSING`, `UNBASELINED`, and `STALE` gaps instead
|
|
745
|
-
of converting absent Java/Rust or source-checkout evidence into a green result.
|
|
746
|
-
- No mandatory runtime dependency was added.
|
|
747
|
-
|
|
748
|
-
Full release notes: [docs/releases/v0.2.2.md](docs/releases/v0.2.2.md).
|
|
749
|
-
|
|
750
|
-
### 0.2.1 bounded-output patch
|
|
751
|
-
|
|
752
|
-
- `git_history top_n=N` is a hard per-collection MCP cap, including churn, hotspots and every
|
|
753
|
-
coupling list. JSON output reports `total`, `returned` and `truncated` for each collection.
|
|
754
|
-
- `god_nodes` ranks production code by default, excluding classified tests and generated/build
|
|
755
|
-
artifacts; pass `include_classified:true` only when those surfaces are intentionally in scope.
|
|
756
|
-
- `output_format:"text"` returns concise TextContent only. Use `output_format:"json"` when a
|
|
757
|
-
workflow needs the full stable `weavatrix.tool.v1` structured envelope.
|
|
758
|
-
- `trace_api_contract` resolves bounded constant prefixes in template URLs and accepts
|
|
759
|
-
segment-aligned path fragments such as `/query` for `/edgeAnalytics/query/...`.
|
|
760
|
-
- `change_impact` labels test/e2e edits as `test-only` and does not seed product blast radius from
|
|
761
|
-
them.
|
|
762
|
-
- Without a saved architecture contract, `prepare_change` returns concise provisional budgets and
|
|
763
|
-
clearly labels them as non-enforceable; request `get_architecture_contract output_format:"json"`
|
|
764
|
-
only when the inferred starter contract is actually needed.
|
|
765
|
-
|
|
766
|
-
Full patch notes: [docs/releases/v0.2.1.md](docs/releases/v0.2.1.md).
|
|
767
|
-
|
|
768
|
-
## Signal quality and repository configuration
|
|
769
|
-
|
|
770
|
-
Weavatrix `0.2.0` reduces the most common sources of static-analysis noise while deepening Rust and
|
|
771
|
-
Java graphs:
|
|
772
|
-
|
|
773
|
-
- In Git repositories, graph and clone scans use tracked plus non-ignored untracked files, so
|
|
774
|
-
`.gitignore`-excluded build outputs such as packaged applications do not dominate findings.
|
|
775
|
-
- Add a repository-root `.weavatrixignore` for analysis-only exclusions that should remain tracked
|
|
776
|
-
in Git. It supports `*`, `**`, `?`, root-anchored `/patterns`, directory suffixes and ordered `!`
|
|
777
|
-
re-includes. The same file universe is used by graph building, audits and clone scanning.
|
|
778
|
-
- `mode: "no-tests"` and `find_duplicates(include_tests:false)` classify `test-e2e`, Cypress,
|
|
779
|
-
Playwright, acceptance and integration roots as tests, not only `*.test`/`*.spec` filenames.
|
|
780
|
-
- `benchmarks/**` and any `**/__temp/**` root are classified as non-production review surfaces and
|
|
781
|
-
suppressed from dead-code/clone/audit queues by default. If a benchmark is deliberate production
|
|
782
|
-
source, opt its narrow path back in with `.weavatrix.json` `classify.product` patterns.
|
|
783
|
-
- TypeScript `import type` and type-only re-exports remain visible as compile-time coupling but do
|
|
784
|
-
not inflate runtime-cycle severity. `module_map`, `change_impact` and structural diffs preserve
|
|
785
|
-
that distinction. `god_nodes` ranks unique neighbors with runtime connectivity first and reports
|
|
786
|
-
repeated occurrences separately.
|
|
787
|
-
- Rust `mod`, `use` and `pub use` paths now resolve between files and modules. They are marked
|
|
788
|
-
compile-only, so they enrich `module_map` and compile-time coupling without inventing runtime
|
|
789
|
-
initialization cycles or promoting compile-time coupling to runtime impact. Axum and actix-web
|
|
790
|
-
routes are included in `list_endpoints`.
|
|
791
|
-
- Java class/interface/enum/record/annotation declarations retain their symbol kind; methods and
|
|
792
|
-
constructors are linked to their declaring type with visibility metadata. Internal
|
|
793
|
-
`extends`/`implements` relationships and resolvable type references link to real declarations.
|
|
794
|
-
Field, parameter, local and static receiver types resolve project-internal cross-file calls;
|
|
795
|
-
overloads are selected by arity and ambiguous/external targets fail closed. Imports are
|
|
796
|
-
compile-only; call/reference/heritage edges contribute impact. Maven/Gradle Java trees use
|
|
797
|
-
package-aware communities instead of one giant `src` bucket. External or synthetic placeholder
|
|
798
|
-
types are not created merely to inflate graph counts.
|
|
799
|
-
- Dependency checks resolve the nearest workspace manifest and `tsconfig`/`jsconfig` aliases,
|
|
800
|
-
account for framework-owned runtime peers such as Next.js + `react-dom`, and recognize Next.js
|
|
801
|
-
App Router route exports as endpoints.
|
|
802
|
-
- Generated NAPI-RS platform loaders and declared template/example catalogs no longer create
|
|
803
|
-
phantom runtime dependency, orphan or unused-export findings. Conventional template roots are
|
|
804
|
-
inferred conservatively; custom roots can be declared explicitly.
|
|
805
|
-
- `coverage_map` reports coverage as **unavailable** when no supported report exists. That means
|
|
806
|
-
“no data”, not zero coverage.
|
|
807
|
-
- Duplicate output is a review queue, not a verdict: near-identical bodies are clone candidates;
|
|
808
|
-
same-name/different-body pairs are divergence candidates. Read both sources and confirm the
|
|
809
|
-
shared contract before consolidating code.
|
|
810
|
-
- `run_audit base_ref=... debt=new` compares stable finding fingerprints against a graph rebuilt
|
|
811
|
-
from that immutable commit. Existing debt and fixed findings are counted separately. Supplying
|
|
812
|
-
only `changed_files` is honestly labeled changed scope—it is never presented as proof that a
|
|
813
|
-
finding is new.
|
|
814
|
-
- `find_dead_code` exposes the symbol-level liveness evidence already used by the audit as a bounded
|
|
815
|
-
agent review queue. Public/exported methods, framework entries, decorators, dynamic loading and
|
|
816
|
-
reflection lower confidence; the result always says `REVIEW_REQUIRED` and `autoDelete:false`.
|
|
817
|
-
|
|
818
|
-
### Cross-repository transports
|
|
819
|
-
|
|
820
|
-
`trace_api_contract` recognizes built-in object clients such as `axios.get(...)`, explicit bare or
|
|
821
|
-
object/member wrappers, and simple auto-discovered functions that forward a URL parameter directly
|
|
822
|
-
to a known HTTP client. Auto-discovered wrappers are restricted to their bounded reverse-import
|
|
823
|
-
scope; ambiguous same-name definitions are skipped and reported as incomplete evidence.
|
|
824
|
-
|
|
825
|
-
The same tool can select GraphQL, gRPC or event evidence. It joins static GraphQL schema fields and
|
|
826
|
-
operations, proto service methods and typed stub calls, and static Kafka/event-bus topic producers
|
|
827
|
-
and consumers across registered repositories. It also imports a bounded, source-free
|
|
828
|
-
`weavatrix.transport-runtime.v1` report from each repository. Normalized observations and OTLP JSON
|
|
829
|
-
spans can confirm runtime GraphQL fields, gRPC service/methods and Kafka/event destinations. A report
|
|
830
|
-
must match the active `graphRevision`, be fresh, declare per-transport capture completeness and map
|
|
831
|
-
dynamic observations to a repository-relative file/line before that exact `UNKNOWN` is resolved.
|
|
832
|
-
|
|
833
|
-
The default report paths are `.weavatrix/transport-runtime.json` and
|
|
834
|
-
`.weavatrix/reports/transport-runtime.json`; `runtime_evidence_files` can select another contained
|
|
835
|
-
path per repository label/UUID. The minimum envelope is:
|
|
836
|
-
|
|
837
|
-
```json
|
|
838
|
-
{
|
|
839
|
-
"schema": "weavatrix.transport-runtime.v1",
|
|
840
|
-
"repositoryRevision": "<active graphRevision>",
|
|
841
|
-
"generatedAt": "2026-07-19T12:00:00.000Z",
|
|
842
|
-
"coverage": { "graphql": "COMPLETE", "grpc": "COMPLETE", "event": "COMPLETE" },
|
|
843
|
-
"observations": [
|
|
844
|
-
{ "transport": "graphql", "side": "client", "operation": "QUERY", "name": "viewer", "file": "src/api.ts", "line": 42 },
|
|
845
|
-
{ "transport": "grpc", "side": "server", "service": "User", "name": "GetUser" },
|
|
846
|
-
{ "transport": "event", "side": "publisher", "name": "user.created" }
|
|
847
|
-
]
|
|
848
|
-
}
|
|
849
|
-
```
|
|
136
|
+
Two gates ship in the repository:
|
|
850
137
|
|
|
851
|
-
|
|
852
|
-
|
|
853
|
-
|
|
854
|
-
|
|
855
|
-
|
|
856
|
-
headers, source text and credentials.
|
|
857
|
-
|
|
858
|
-
Persistent per-client-repository configuration lives in `.weavatrix.json`:
|
|
859
|
-
|
|
860
|
-
```json
|
|
861
|
-
{
|
|
862
|
-
"httpContracts": {
|
|
863
|
-
"clientNames": ["internalHttp"],
|
|
864
|
-
"wrappers": [
|
|
865
|
-
{ "call": "get", "method": "GET", "urlArgument": 0 },
|
|
866
|
-
{ "object": "transport", "member": "send", "method": "POST", "urlArgument": 1 }
|
|
867
|
-
],
|
|
868
|
-
"autoDiscoverWrappers": true
|
|
869
|
-
}
|
|
870
|
-
}
|
|
871
|
-
```
|
|
138
|
+
- `npm run benchmark` — a reproducible golden suite for TypeScript, JavaScript, Python, Go, Java and
|
|
139
|
+
Rust, plus cross-repository HTTP matching, framework conventions and the MCP graph lifecycle.
|
|
140
|
+
- `npm run benchmark:real` — compares revision-pinned local snapshots against the checked-in 0.2.1
|
|
141
|
+
relation baseline; it fails on unexplained signal loss (`MISSING`/`STALE`/`UNBASELINED` stay
|
|
142
|
+
incomplete, not green).
|
|
872
143
|
|
|
873
|
-
|
|
874
|
-
|
|
875
|
-
|
|
876
|
-
|
|
877
|
-
|
|
878
|
-
|
|
879
|
-
|
|
880
|
-
|
|
881
|
-
|
|
882
|
-
uses a legacy stamp; `NOT_CHECKED` means there is no per-repository refresh; `ERROR` means the local
|
|
883
|
-
check itself failed. None of the latter three states is a clean vulnerability result. The cache
|
|
884
|
-
stores a fingerprint of the supported dependency set so a lockfile change cannot silently reuse a
|
|
885
|
-
stale `OK`.
|
|
886
|
-
|
|
887
|
-
For conventions that cannot be inferred safely, add an optional `.weavatrix-deps.json` at the
|
|
888
|
-
repository root:
|
|
889
|
-
|
|
890
|
-
```json
|
|
891
|
-
{
|
|
892
|
-
"entrypoints": ["scripts/publish-release.mjs"],
|
|
893
|
-
"nonRuntimeRoots": ["library", "catalogs/examples"],
|
|
894
|
-
"python": {
|
|
895
|
-
"managedDependencies": ["numpy", "openvino-genai"],
|
|
896
|
-
"ignoreDependencies": ["vendor-sdk"]
|
|
897
|
-
}
|
|
898
|
-
}
|
|
899
|
-
```
|
|
144
|
+
Representative local regression run (Windows x64, Node 24.15.0):
|
|
145
|
+
|
|
146
|
+
| Gate | Result | Selected evidence |
|
|
147
|
+
|---|---:|---|
|
|
148
|
+
| Six language fixtures | 6/6 PASS | exact symbols/edges and complete edge provenance |
|
|
149
|
+
| Cross-repo fixture | PASS, ~432 ms cold | endpoint match, typed wrapper, external use |
|
|
150
|
+
| Lifecycle | PASS | `full → incremental → none → reconnect/none` |
|
|
151
|
+
| Total fixture cold build | ~1.31 s | all six language graphs |
|
|
152
|
+
| Real-repository baseline | 6/6 PASS | TS, JS, Python, Go, Java and Rust snapshots |
|
|
900
153
|
|
|
901
|
-
|
|
902
|
-
|
|
903
|
-
|
|
904
|
-
findings when every use is inside those roots. Import edges, cycles and boundary checks remain visible.
|
|
905
|
-
`managedDependencies` declares Python modules supplied by an external runtime;
|
|
906
|
-
`ignoreDependencies` suppresses intentionally unresolved Python packages. Keep the lists narrow:
|
|
907
|
-
they change audit interpretation, not the repository or its dependency installation.
|
|
908
|
-
|
|
909
|
-
## Privacy: local-first, offline by design
|
|
910
|
-
|
|
911
|
-
Graph queries, audits, clone scans and repository switching run locally. The default capability set
|
|
912
|
-
is `graph,search,source,health,build,retarget,crossrepo`: no Weavatrix HTTP requests. `open_repo`
|
|
913
|
-
changes the active local boundary only when called. Select `pinned` to remove repository switching,
|
|
914
|
-
global repository listing, and cross-repository graph tracing too.
|
|
915
|
-
Weavatrix 0.3 itself initiates no outbound HTTP. It can validate a connector-provided advisory cache,
|
|
916
|
-
construct a bounded source-free payload locally and cache a validated architecture contract, but
|
|
917
|
-
those local extension services have no transport or credential input. The separately installed
|
|
918
|
-
`weavatrix-online` superset owns OSV requests, Cloud/Enterprise authentication, capability
|
|
919
|
-
negotiation, consent and synchronization. It depends on this MIT core and may add proprietary tools,
|
|
920
|
-
skills and local analyzers without replacing baseline implementations.
|
|
921
|
-
|
|
922
|
-
Evidence sections carry independent `state` (`COMPLETE`, `PARTIAL`, `NOT_CHECKED`,
|
|
923
|
-
`NOT_APPLICABLE`, `ERROR`) and `verdict` (`PASS`, `FAIL`, `UNKNOWN`) fields plus exact
|
|
924
|
-
`total/returned/truncated` counts. An incomplete check is never converted into a clean zero. V3 is
|
|
925
|
-
deterministic: volatile timestamps are excluded and the allowlisted snapshot has a canonical SHA-256
|
|
926
|
-
fingerprint. This local service exists so a separately licensed connector can reuse the same bounded
|
|
927
|
-
wire validation without duplicating core logic; it cannot send the payload itself.
|
|
928
|
-
|
|
929
|
-
Profiles (`offline`, `pinned`) or exact local capability groups (`graph`, `search`, `source`, `health`,
|
|
930
|
-
`build`, `retarget`, `crossrepo`) are selectable through the final positional argument. Omitted caps
|
|
931
|
-
use `offline`; an explicit capability list exposes exactly the named groups. Legacy network profile
|
|
932
|
-
names fail loudly and direct the user to `weavatrix-online`.
|
|
154
|
+
Real snapshots ranged from 473 nodes / 1,165 edges in 0.22 s (Go) to 8,192 nodes / 21,814 edges in
|
|
155
|
+
9.44 s (TypeScript). These are regression measurements on one machine, not competitor benchmarks. See
|
|
156
|
+
[benchmark/cases.mjs](benchmark/cases.mjs) and [docs/benchmarking.md](docs/benchmarking.md).
|
|
933
157
|
|
|
934
158
|
## Security model
|
|
935
159
|
|
|
936
|
-
Socket capability alerts describe expected powers of a local code-analysis tool; they are not
|
|
937
|
-
vulnerability findings.
|
|
160
|
+
Socket capability alerts describe the expected powers of a local code-analysis tool; they are not
|
|
161
|
+
vulnerability findings. Where each comes from and how it is bounded:
|
|
938
162
|
|
|
939
163
|
| Capability alert | Why it exists | Activation and boundary |
|
|
940
164
|
|---|---|---|
|
|
941
|
-
| Network access | None in the MIT core | `offline
|
|
942
|
-
| Shell access | Local `git`
|
|
943
|
-
| Debug / dynamic loading | Cache-busted `import()` hot-reloads watched MCP tool
|
|
944
|
-
| Environment access | Reads local `WEAVATRIX_*`
|
|
945
|
-
| Filesystem access | Reads the active repository, graph, lockfiles and coverage
|
|
165
|
+
| Network access | None in the MIT core | `offline`/`pinned` expose only local tools; online integration is a separate package |
|
|
166
|
+
| Shell access | Local `git` (staleness/impact), `rg` (search), the bundled tsserver for JS/TS semantics, Windows child-tree termination, optional `verified_change` test scripts | The semantic provider never runs repository code; test execution needs `run_tests:true` + `WEAVATRIX_ALLOW_TEST_RUNS=1` and rejects arbitrary commands |
|
|
167
|
+
| Debug / dynamic loading | Cache-busted `import()` hot-reloads watched MCP tool modules; `createRequire` loads package metadata and parser deps | Loads files from the installed package only; no `eval` |
|
|
168
|
+
| Environment access | Reads local `WEAVATRIX_*` settings; children inherit a credential-stripped env | Connector secrets are removed; tsserver receives only allowlisted OS/temp/locale values |
|
|
169
|
+
| Filesystem access | Reads the active repository, graph, lockfiles and coverage; writes derived graphs and caches | Realpath containment blocks traversal and symlink escapes; `pinned` removes `open_repo` |
|
|
946
170
|
| URL strings | Advisory findings may contain fixed OSV documentation links | The core has no outbound request implementation |
|
|
947
171
|
|
|
948
172
|
`read_source` accepts repo-relative regular files only, caps a read at 2 MB, and refuses lexical or
|
|
949
|
-
realpath escapes.
|
|
950
|
-
them. Report suspected vulnerabilities privately as described in [SECURITY.md](SECURITY.md).
|
|
173
|
+
realpath escapes. Report suspected vulnerabilities privately as described in [SECURITY.md](SECURITY.md).
|
|
951
174
|
|
|
952
175
|
## Languages
|
|
953
176
|
|
|
954
177
|
JavaScript · TypeScript · TSX · Python · Go · Java · C# · Rust · HTML · CSS — parsed with
|
|
955
|
-
[web-tree-sitter](https://github.com/tree-sitter/tree-sitter) WASM grammars; no Python install
|
|
178
|
+
[web-tree-sitter](https://github.com/tree-sitter/tree-sitter) WASM grammars; no Python install and no
|
|
956
179
|
native compilation.
|
|
957
180
|
|
|
958
|
-
## On-disk layout
|
|
959
|
-
|
|
960
|
-
Graphs are derived data and never live inside your repo: the global per-user registry stores them at
|
|
961
|
-
`~/.weavatrix/graphs/<repository-storage-key>/` (including `.repository-id`, `graph.json`, and
|
|
962
|
-
`graph.prev.json`).
|
|
963
|
-
|
|
964
181
|
## Development
|
|
965
182
|
|
|
966
183
|
```sh
|
|
@@ -970,44 +187,14 @@ npm run benchmark # full TS/JS/Python/Go/Java/Rust + MCP lifecycle gate
|
|
|
970
187
|
npm run benchmark:real # locally available real repos vs source-free 0.2.1 baselines
|
|
971
188
|
```
|
|
972
189
|
|
|
973
|
-
|
|
974
|
-
|
|
975
|
-
|
|
976
|
-
|
|
977
|
-
|
|
978
|
-
|
|
979
|
-
|
|
980
|
-
|
|
981
|
-
in `src/mcp/` (graph context, tool entry modules, focused helpers, and the catalog/hot-reload
|
|
982
|
-
loader) behind the thin stdio entry `src/mcp-server.mjs`.
|
|
983
|
-
|
|
984
|
-
## Roadmap
|
|
985
|
-
|
|
986
|
-
- **Public 0.2.2 regression foundation** now has the permanent six-language golden corpus,
|
|
987
|
-
cross-repository wrapper/liveness fixture, framework/convention fixture, full MCP lifecycle gate
|
|
988
|
-
and a portable real-repository runner. Six source-free 0.2.1 real-repository baselines are
|
|
989
|
-
recorded; edge provenance is gated end-to-end and the strict six-repository release command passes.
|
|
990
|
-
- **Cross-transport contracts** combine bounded HTTP/static models with revision-bound GraphQL,
|
|
991
|
-
gRPC and Kafka/event runtime or OTLP evidence; unobserved dynamic identities stay explicit
|
|
992
|
-
`UNKNOWN`.
|
|
993
|
-
- **Hosted architecture workbench** at
|
|
994
|
-
[app.weavatrix.com](https://app.weavatrix.com) is an access-controlled preview for
|
|
995
|
-
owner-authenticated source-free evidence and revision history. Its UI and backend evolve
|
|
996
|
-
independently from the public MCP release; local use remains fully optional.
|
|
997
|
-
- **Semantic precision bridge** shipped for TypeScript/JavaScript in 0.2.4: a bounded, revision-bound
|
|
998
|
-
local overlay validates references with the bundled language server while the parser graph remains
|
|
999
|
-
the fallback. 0.2.16 adds safe configured-plugin suppression plus exact on-demand point and changed-
|
|
1000
|
-
symbol batch queries. Java and Rust language-server providers are not bundled and stay explicitly
|
|
1001
|
-
unavailable as semantic providers; their parser/dependency evidence is still active.
|
|
1002
|
-
- **Git-native architecture history** — bounded tag/ref timelines and branch
|
|
1003
|
-
reports built outside the worktree; graph artifacts stay out of Git.
|
|
1004
|
-
- **Cross-repository company evidence** — endpoints, events and internal
|
|
1005
|
-
packages joined to affected consumers and ownership without uploading source.
|
|
1006
|
-
- **CI blast radius** — bounded `change_impact` and architecture-ratchet evidence
|
|
1007
|
-
as a PR check/comment.
|
|
1008
|
-
|
|
1009
|
-
The public alignment note for the fixed cross-product release sequence is in
|
|
1010
|
-
[docs/product-roadmap.md](docs/product-roadmap.md).
|
|
190
|
+
Maintained JavaScript/TypeScript under `src`, `bin`, `scripts`, `test` (and HTML/CSS/JS under `site`)
|
|
191
|
+
has a hard 300-line physical ceiling enforced by the release suite; larger concerns split into
|
|
192
|
+
owner-focused modules behind slim facades.
|
|
193
|
+
|
|
194
|
+
## Release history
|
|
195
|
+
|
|
196
|
+
Per-version patch notes live in [docs/releases/](docs/releases/) — start with the newest entry there.
|
|
197
|
+
The release process and gates are in [scripts/verify-release.mjs](scripts/verify-release.mjs).
|
|
1011
198
|
|
|
1012
199
|
## License
|
|
1013
200
|
|