weavatrix 0.3.7 → 0.3.9

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 CHANGED
@@ -1,223 +1,31 @@
1
1
  # Weavatrix
2
2
 
3
- **Local repository intelligence for AI coding agents — understand the application quickly, then change it with evidence.**
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: files, symbols, imports, calls,
6
- inheritance, health findings, clone families and Git-history coupling. It gives Claude Code, Codex,
7
- or any MCP client a bounded map for fast application understanding and lower repeated context, then
8
- reuses the same graph for change impact, Health, dead-code review, duplicates, history and intended-
9
- architecture safeguards. Text search is included as a supporting source check, not the product core.
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
- ## 0.3: the MIT core
17
-
18
- This package is the complete offline engine: graph,
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
- ## One graph, many views
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
- ## Quick start
210
-
211
- Requires Node ≥ 18. One command:
22
+ Requires Node ≥ 18.
212
23
 
213
24
  ```sh
214
- # Claude Code — offline default; local repository switching is available explicitly:
25
+ # Claude Code
215
26
  claude mcp add -s user weavatrix -- npx -y weavatrix <repoRoot>
216
- ```
217
-
218
- Codex CLI:
219
27
 
220
- ```sh
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
- The package has one binary and two local security profiles. The omitted profile is `offline`:
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
- # Hard-pin one repository and expose no network tools:
244
- claude mcp add -s user weavatrix -- npx -y weavatrix <repoRoot> pinned
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
- Advanced registrations may still pass an exact comma-separated capability set:
249
- `graph,search,source,health,build,retarget,crossrepo`. The former `online`, `osv`, `hosted` and `full`
250
- profiles fail loudly and direct the user to `weavatrix-online`; none can re-enable HTTP in this artifact.
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
- After an upgrade, reconnect the MCP server or start a new agent task before checking its tool list:
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
- Or clone it:
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
- git clone https://github.com/sergii-ziborov/weavatrix
262
- cd weavatrix && npm install
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
- - `<repoRoot>` the repository to start with; the graph location is derived automatically in the
267
- per-user registry (`~/.weavatrix/graphs/<repository-storage-key>/graph.json`; its stable UUID is
268
- stored beside it in `.repository-id`). Pass an explicit
269
- `<graph.json> <repoRoot>` pair instead if you keep graphs elsewhere.
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
- No graph yet? Ask the agent to call `rebuild_graph`; it builds the missing graph locally.
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
- An agent skill with recipes ships in [skill/SKILL.md](skill/SKILL.md) install it as
280
- `~/.claude/skills/weavatrix/SKILL.md` for Claude Code or
281
- `~/.codex/skills/weavatrix/SKILL.md` for Codex.
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
- ## Tools
134
+ ## Benchmarks
284
135
 
285
- **graph** `graph_stats`, `get_node`, `get_neighbors`, `query_graph`, `god_nodes`,
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
- OTLP `resourceSpans` may be placed at the envelope root or under `otlp`; standard `rpc.*`,
852
- `graphql.*`, `messaging.*` and `code.*` span attributes are normalized. Missing, stale, mismatched,
853
- partial or uncorrelated runtime evidence stays `PARTIAL`/`UNKNOWN`; it is never converted into an
854
- absence claim. The two default report files are excluded from the graph file universe so they do not
855
- change the revision they attest; a custom report path must be Git-ignored. Reports must omit payloads,
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
- The MCP call exposes the same ad-hoc controls as `client_names`, `client_wrappers` and
874
- `auto_discover_wrappers`. A medium/high-confidence client match marks the backend endpoint/handler
875
- `NOT_DEAD_EXTERNAL_USE`; a low-confidence match is `POSSIBLE_EXTERNAL_USE`; no match is `UNKNOWN`.
876
- Only an unambiguously resolved handler node can suppress a method-level dead-code candidate. The tool
877
- never turns missing static evidence into a `DEAD` verdict.
878
-
879
- `run_audit` makes incomplete security coverage explicit. OSV state is `OK` only after every
880
- supported pinned package/version for this repository was queried successfully. `PARTIAL` means
881
- some queries failed, the response was incomplete, the dependency fingerprint changed, or the cache
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
- `entrypoints` protects framework/script entry files from dead-code classification.
902
- `nonRuntimeRoots` (alias: `templateRoots`) marks reusable examples/templates that are not deployed
903
- as one application. It suppresses orphan/dead/unused-export noise and missing/unresolved dependency
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. This is where each capability comes from and how it is controlled:
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` and `pinned` expose only local tools; Online/Cloud/Enterprise integration is a separate package |
942
- | Shell access | Local `git` powers staleness/change impact; `rg` accelerates search; the bundled TLS/tsserver process supplies bounded JS/TS semantic evidence; timed-out Windows child trees may be terminated; `verified_change` can optionally run an existing package test/check/verify script | The semantic provider never invokes repository code. Test execution separately requires `run_tests:true` plus `WEAVATRIX_ALLOW_TEST_RUNS=1`, rejects arbitrary commands and shell-sensitive arguments, and should be enabled only for trusted repository scripts |
943
- | Debug / dynamic loading | Cache-busted `import()` hot-reloads watched MCP tool entry modules; `createRequire` loads package metadata and parser dependencies | Loads files from the installed package; no `eval` |
944
- | Environment access | Reads local `WEAVATRIX_*` runtime settings; ordinary helpers inherit a credential-stripped environment, while TLS/tsserver receives only allowlisted OS/temp/locale values and a constrained executable path | Connector secrets are removed from child-process and worker environments. TLS/tsserver also receives no registry/proxy/cloud credentials or `NODE_OPTIONS` |
945
- | Filesystem access | Reads the active repository, graph, lockfiles and coverage reports; writes derived graphs and advisory/architecture caches | Realpath containment blocks traversal and symlink/junction escapes. The `pinned` profile removes `open_repo`; the default `offline` profile permits only explicit local switching. The optional malware dependency scan may inspect installed dependency caches such as GOPATH |
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. Graph-derived paths pass through the same boundary before analysis tools read
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, no
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
- The benchmark checks representative graph correctness, complete edge provenance, cross-repository
974
- HTTP tracing, output bytes, latency, freshness, reconnect and active-target stability. Its budgets, semantics and intentionally
975
- limited claims are documented in [docs/benchmarking.md](docs/benchmarking.md).
976
-
977
- Maintained JavaScript/TypeScript files under `src`, `bin`, `scripts`, and `test`, plus HTML/CSS/JavaScript
978
- under `site`, have a hard physical 300-line ceiling enforced by the release suite. Larger concerns are
979
- split into owner-focused modules behind slim stable facades (`foo.js` re-exports `foo.parse.js`,
980
- `foo.report.js`, …). The MCP layer lives
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