ucn 5.5.3 → 5.6.0
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/.claude/skills/ucn/SKILL.md +35 -12
- package/.claude/skills/ucn/references/commands.md +18 -14
- package/.claude/skills/ucn/references/resolution-rules.md +4 -0
- package/.claude/skills/ucn/references/trust-contract.md +4 -4
- package/CHANGELOG.md +474 -0
- package/README.md +69 -29
- package/cli/flags.js +184 -0
- package/cli/index.js +137 -324
- package/core/account.js +44 -87
- package/core/analysis.js +273 -107
- package/core/ast-analysis.js +2 -0
- package/core/bridge.js +14 -0
- package/core/cache.js +101 -16
- package/core/callers.js +352 -70
- package/core/capture.js +331 -0
- package/core/change-kinds.js +888 -0
- package/core/check.js +1117 -139
- package/core/command-contracts.js +7 -6
- package/core/constructed-class.js +1195 -0
- package/core/contract-membership.js +142 -0
- package/core/deadcode.js +362 -84
- package/core/deletion.js +401 -0
- package/core/discovery.js +104 -9
- package/core/entrypoints.js +12 -6
- package/core/evidence-bands.js +68 -0
- package/core/evidence-bands.json +44 -0
- package/core/execute.js +172 -161
- package/core/hot-summary.js +241 -0
- package/core/index-ir.js +3 -1
- package/core/ir.js +5 -1
- package/core/member-signatures.js +789 -0
- package/core/output/analysis-ext.js +20 -10
- package/core/output/analysis.js +98 -60
- package/core/output/check.js +98 -37
- package/core/output/doctor.js +34 -1
- package/core/output/find.js +2 -1
- package/core/output/lines.js +63 -3
- package/core/output/public.js +29 -11
- package/core/output/refactoring.js +32 -0
- package/core/output/reporting.js +15 -2
- package/core/output/search.js +11 -2
- package/core/output/tracing.js +35 -7
- package/core/output-budget.js +124 -57
- package/core/parallel-build.js +3 -3
- package/core/project.js +106 -23
- package/core/provenance-type.js +12 -5
- package/core/public-command.js +35 -9
- package/core/python-modules.js +6 -0
- package/core/reflection.js +151 -23
- package/core/registry.js +623 -72
- package/core/reporting.js +69 -34
- package/core/review-items.js +75 -0
- package/core/search.js +89 -128
- package/core/shared.js +0 -45
- package/core/snapshot.js +350 -0
- package/core/source-universe.js +707 -0
- package/core/test-units.js +3624 -0
- package/core/tracing.js +150 -96
- package/core/verify.js +27 -11
- package/languages/adapter.js +8 -3
- package/languages/c-family.js +12 -0
- package/languages/csharp.js +634 -0
- package/languages/go.js +120 -0
- package/languages/index.js +422 -4
- package/languages/java.js +712 -0
- package/languages/javascript.js +1460 -2
- package/languages/lexical-scope.js +68 -0
- package/languages/python.js +1672 -1
- package/languages/rust.js +91 -0
- package/mcp/server.js +44 -110
- package/package.json +10 -5
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,474 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
One section per released version, written from the commit subjects by `scripts/changelog.js` when the version is cut.
|
|
4
|
+
|
|
5
|
+
## 5.6.0 - 2026-11-14
|
|
6
|
+
|
|
7
|
+
### Features
|
|
8
|
+
|
|
9
|
+
- one parameter table writes the MCP schema, the CLI parser and the engine's refusals and defaults, a line listing under a budget keeps the rows that fit, and each version gets its notes from the commits (9dd9646)
|
|
10
|
+
- one model of a test, and the command that runs it only where the runner is proven (3adc8e4)
|
|
11
|
+
- check answers by what a change did, and --staged reads the git index (a86c449)
|
|
12
|
+
- plan --delete answers whether a declaration can be deleted (69adaf6)
|
|
13
|
+
- one deletion rule for the audit and for a single declaration (eda1e6e)
|
|
14
|
+
|
|
15
|
+
### Fixes
|
|
16
|
+
|
|
17
|
+
- bind repo summaries to saved state and preserve reflection syntax (7025e00)
|
|
18
|
+
- preserve bounded surface contracts and release version identity (0032bda)
|
|
19
|
+
- preserve constructor uncertainty and complete unverified output (78efe1b)
|
|
20
|
+
- a constructed receiver has the class its name denotes where it is written, every unverified list takes its rows from --top and --all, and each unverified reason says how often it was a real call (93f74b9)
|
|
21
|
+
- find reference-only tests and honor inherited JUnit runners (d7efdc4)
|
|
22
|
+
- a type inside generic types is the nesting it is written in, a method's modifiers do to its mark what each framework says, and what a test executes is test code whatever its file is called (c666151)
|
|
23
|
+
- a parameter type and a base are what their names denote where they are written, a test a method may have replaced says so, and two inherited tests of one name are two (5c1ea4e)
|
|
24
|
+
- a method of the same name with other parameters is another method, and each runner says what an override does to an inherited test (c810e87)
|
|
25
|
+
- a declaration is kept apart from its state, a class has what its lookup order finds first, and a table runs a test only through a row that does (7b32ad2)
|
|
26
|
+
- an unknown switch is not an absent one, a configuration is read only as one written-out object, and a count says when tests are missing from it (3d445ca)
|
|
27
|
+
- a test is what its names hold after every write, its body any expression, and its command what the runner's own configuration leaves (9d41a4e)
|
|
28
|
+
- a test's marks and names are read as syntax, in the scope of the call, by each runner's own rule (48485f8)
|
|
29
|
+
- a test is one declaration, runs where its class is, and is the runner's by binding (35e8339)
|
|
30
|
+
- a suppression belongs to the call that was measured, and the last file pragma decides (0b0775c)
|
|
31
|
+
- check reads a suppression as the checker does, holds a constructor to its statics, and keeps nothing between checks (ab067d5)
|
|
32
|
+
- check claims a break only where the toolchain looks, and ready only where nothing can hold the change (ef25de7)
|
|
33
|
+
- check reads what ends a path, a type's shape and the whole git index (6060e66)
|
|
34
|
+
- contract shapes the deletion verdict cleared, judged by the compilers (fc2ad44)
|
|
35
|
+
- a member a project contract requires is not dead (db52388)
|
|
36
|
+
- bound the site sample and let a readable-again file be searched again (979c4be)
|
|
37
|
+
- close four gaps in the per-name completeness model (c15e395)
|
|
38
|
+
- make completeness a claim about one name, not about the repository (8f7a8d4)
|
|
39
|
+
|
|
40
|
+
### Performance
|
|
41
|
+
|
|
42
|
+
- repo reads its HOT ranking and its eval and reflection counts from the index instead of recomputing them, and a chain of reflective accesses records every access (c06afe0)
|
|
43
|
+
|
|
44
|
+
### Refactoring
|
|
45
|
+
|
|
46
|
+
- one count of what there is to review (b56a49b)
|
|
47
|
+
|
|
48
|
+
### Documentation
|
|
49
|
+
|
|
50
|
+
- the README states the test-unit matrix result under the matrix's rules for skipped and conditional tests and each runner's selection scope (1855204)
|
|
51
|
+
- the README reports the November 14 release dry run and the three toolchain matrices, states the live partition of the ripgrep example, and the skill and tool description name the per-test commands and the deletion assessment (1d1d514)
|
|
52
|
+
|
|
53
|
+
### Tests
|
|
54
|
+
|
|
55
|
+
- reject altered or bypassed release gate commands (d1edfca)
|
|
56
|
+
- the release-gate guard reads each job's steps and time limit for every planned runner, so a partial enrolment of the matrices and the outcome gate fails and a complete one passes (47fa591)
|
|
57
|
+
- a declaration whose whole file is gone is assessed by what still names it (6ff794d)
|
|
58
|
+
|
|
59
|
+
### Evaluation
|
|
60
|
+
|
|
61
|
+
- a query class under one second blocks a release only above both 20% and 100 ms (71a00ba)
|
|
62
|
+
- pin an application with vendored bundles on the scheduled board (7d793b0)
|
|
63
|
+
- score outcome tasks only where the judge looks, pin exceptions exactly (bfc1188)
|
|
64
|
+
- measure whether answers can be acted on (f349427)
|
|
65
|
+
|
|
66
|
+
### Maintenance
|
|
67
|
+
|
|
68
|
+
- the release gate runs the three toolchain matrices and the outcome gate, in the publish job and in the pre-tag dry run, with the toolchains they were qualified with (e35c42c)
|
|
69
|
+
- the test-unit matrix runs every case without a marker of continuous integration, so a runner on GitHub Actions accepts what it accepts on a developer's machine (de29521)
|
|
70
|
+
- the deletion, check and test-unit matrices run in the Eval workflow on a runner of their own, and each report names the toolchain versions that judged (e2d520b)
|
|
71
|
+
|
|
72
|
+
## 5.5.3 - 2026-11-09
|
|
73
|
+
|
|
74
|
+
### Fixes
|
|
75
|
+
|
|
76
|
+
- harden HTTP detection and reflective dead-code handling (0ceefbe)
|
|
77
|
+
|
|
78
|
+
### Tests
|
|
79
|
+
|
|
80
|
+
- allow small latency changes while guarding second-scale regressions (7f0f044)
|
|
81
|
+
|
|
82
|
+
## 5.5.2 - 2026-11-06
|
|
83
|
+
|
|
84
|
+
### Fixes
|
|
85
|
+
|
|
86
|
+
- reuse constructor aliases until the index changes (cceec7f)
|
|
87
|
+
- resolve C++ conversions from qualified type evidence (5f419f8)
|
|
88
|
+
- preserve integer zero in pointer overload checks (df83156)
|
|
89
|
+
- cache implicit conversion owners for each build (c390347)
|
|
90
|
+
- keep alias pointees uncertain in overload checks (5490e69)
|
|
91
|
+
- surface import and export extraction failures (a9debca)
|
|
92
|
+
- require proof when overloads need user-defined conversions (6aaacc5)
|
|
93
|
+
- retain template calls in ambiguous direct initializers (d25fbde)
|
|
94
|
+
- preserve overload review for constructed enclosing types (3e1cd42)
|
|
95
|
+
- keep external method review stable across target pins (966cf29)
|
|
96
|
+
- dispatch method precedence and field dereference through traits (43c2d8a)
|
|
97
|
+
- retain possible calls through wrapped instance methods (3f217d3)
|
|
98
|
+
- preserve Python base order and receiver bindings (c0a36ed)
|
|
99
|
+
- preserve definition pins in composed test queries (f342565)
|
|
100
|
+
- resolve produced Rust receivers and external method uncertainty (35df447)
|
|
101
|
+
- preserve producer ownership and instance writes (4d8c1f3)
|
|
102
|
+
- preserve declarator scopes and local construction owners (631957a)
|
|
103
|
+
- preserve value owners and interface dispatch uncertainty (573c618)
|
|
104
|
+
- preserve C# construction identity and canonical Roslyn project references (fe5f23c)
|
|
105
|
+
- read a file's indexed language whatever the process directory; perf: build-time dispatch inventory, byte-bounded trees, type-query record index (c75685b)
|
|
106
|
+
- own-class constructions, one-language constructor identity, import-chased owners and constraint-aware C# overloads (c88b8c9)
|
|
107
|
+
- caller answers independent of index history, loaded symbols in build key order (79b3730)
|
|
108
|
+
- value accesses by what each token reads, slot accesses tiered like callers (1b17cdb)
|
|
109
|
+
- index instance attributes and nested members, bind C# receivers and partial constructors, agree callers and callees on overloads (cf4eeb1)
|
|
110
|
+
- type references for every type, validation that agrees with the tier, overloads decided by argument evidence (291387b)
|
|
111
|
+
- resolve C/C++ names, declarations and receivers by the languages' own rules (e62d774)
|
|
112
|
+
- close Java/C# rename slots over every holder and decide alternatives by evidence (48790ac)
|
|
113
|
+
- resolve Go names by package clause, build configuration and method expression (9507b71)
|
|
114
|
+
- resolve Python names by their own module and scope (418de8d)
|
|
115
|
+
- resolve JS/TS names by their own scope and import (4ebe69e)
|
|
116
|
+
- resolve Rust names by item scope and namespace (f057175)
|
|
117
|
+
- keep class edges beside constructor bodies (2976d29)
|
|
118
|
+
- rename value members by each language's name lookup (12cb8e3)
|
|
119
|
+
- bind constructor delegation and configuration renames by owner (4f8dfe0)
|
|
120
|
+
- bind construction calls to constructor declarations (fe4183e)
|
|
121
|
+
- resolve constructor rename handles to declaring types (9f39cfd)
|
|
122
|
+
- rename value references by lexical owner (5b7259c)
|
|
123
|
+
- preserve primitive receiver identity through return flow (8bdc1e2)
|
|
124
|
+
- preserve conditional using bindings in C++ (2773d7a)
|
|
125
|
+
- preserve lexical member lookup in local callables (29460e1)
|
|
126
|
+
- preserve generic call and method value identities (e36f24f)
|
|
127
|
+
- resolve implicit property references by lexical owner (d7a3d27)
|
|
128
|
+
- retain value references beside their declarations (b8d89c7)
|
|
129
|
+
- retain distinct same-line calls across renamed method slots (211cd5e)
|
|
130
|
+
|
|
131
|
+
### Performance
|
|
132
|
+
|
|
133
|
+
- narrow scope evidence in overload proofs (35a8a77)
|
|
134
|
+
- reuse map facades within proof views (caae55a)
|
|
135
|
+
- compare Java Unicode changes by lexical region (4c338ed)
|
|
136
|
+
- skip unrelated constructor checks in occurrence accounts (cb19ab2)
|
|
137
|
+
- omit unused receiver facts from occurrence accounts (926ae3d)
|
|
138
|
+
- count brief members from the indexed file (fc2269f)
|
|
139
|
+
- reuse construction alias closures within a command (a3e032f)
|
|
140
|
+
- skip redundant macro recovery in occurrence accounts (342c285)
|
|
141
|
+
- share lazy field accessors across proof views (0ef3fad)
|
|
142
|
+
- avoid splitting text for occurrence accounts (db5e00a)
|
|
143
|
+
- retain raw C++ base syntax for construction lookups (0ae0687)
|
|
144
|
+
- share producer method lookup across argument shapes (abb14b0)
|
|
145
|
+
- skip disproven C++ construction proof captures (be1ce6a)
|
|
146
|
+
- share type-group inputs across proof captures (98d1b25)
|
|
147
|
+
- reuse known traversal parents in cached node facts (d41d94a)
|
|
148
|
+
- share C++ construction and include lookup evidence (4d4f7c9)
|
|
149
|
+
- share Java producer return proofs across witnesses (fd2b3a7)
|
|
150
|
+
- share command source reads and streamline witness copies (0395e97)
|
|
151
|
+
- query-board costs after the correctness batch, answers unchanged (d7d4fe2)
|
|
152
|
+
- share witness facts and record project facts once (dd7c8f7)
|
|
153
|
+
|
|
154
|
+
### Documentation
|
|
155
|
+
|
|
156
|
+
- refresh measured conversion accuracy (2d94e5d)
|
|
157
|
+
- refresh measured release accuracy (edfc6df)
|
|
158
|
+
- refresh accuracy results for the native compiler board (a51fb48)
|
|
159
|
+
- drop local performance notes from the README (a9e378c)
|
|
160
|
+
- clarify construction records and current validation (16783be)
|
|
161
|
+
- align release evidence and agent guidance (d7aca18)
|
|
162
|
+
- command reference, resolution rules and trust contract match behavior (da7cf96)
|
|
163
|
+
|
|
164
|
+
### Tests
|
|
165
|
+
|
|
166
|
+
- expose indexed facts in re-export failure tests (688e171)
|
|
167
|
+
- canonicalize temporary paths in compiler mocks (36e5922)
|
|
168
|
+
|
|
169
|
+
### Evaluation
|
|
170
|
+
|
|
171
|
+
- run independent pre-tag checks on parallel runners (1d8b0ce)
|
|
172
|
+
- retain constructor declaration positions in class references (eff207d)
|
|
173
|
+
- classify macro calls from the expanded compiler tree (c9bee7a)
|
|
174
|
+
- graduate repaired Python holdout and refill the pool (9a473c4)
|
|
175
|
+
- compare newly indexed constructor declarations fairly (8e7835d)
|
|
176
|
+
- compare impact capabilities against their first working revisions (5bb945f)
|
|
177
|
+
- graduate repaired holdouts and retain independent weekly reports (afd7440)
|
|
178
|
+
- graduate tuning repositories with reproducible compiler inputs (693574c)
|
|
179
|
+
- query-class performance board against the last release, graduated fresh repos, new holdout pool (7621ae9)
|
|
180
|
+
- value-member arm, named handles, whole-solution Roslyn, truthful jdtls/clangd projections, oracle-blind deadcode verdicts (ddca9a0)
|
|
181
|
+
|
|
182
|
+
## 5.5.1 - 2026-10-15
|
|
183
|
+
|
|
184
|
+
### Performance
|
|
185
|
+
|
|
186
|
+
- choose Rust macro-expansion groups from build records, keep per-record answers across orientation (2a0fc2a)
|
|
187
|
+
- derive Rust macro-expansion calls by groups of units on demand (b2d8fa0)
|
|
188
|
+
|
|
189
|
+
### Documentation
|
|
190
|
+
|
|
191
|
+
- state the README's accounting and determinism guarantees (eb1ff6f)
|
|
192
|
+
|
|
193
|
+
### Evaluation
|
|
194
|
+
|
|
195
|
+
- classify unscored oracle edges by the oracle's own projection (e01f789)
|
|
196
|
+
|
|
197
|
+
## 5.5.0 - 2026-10-04
|
|
198
|
+
|
|
199
|
+
### Fixes
|
|
200
|
+
|
|
201
|
+
- match a non-segment ** in .gitignore path rules as git 2.52+ does (2e4c059)
|
|
202
|
+
- share the local-shadow rule between callers and callees, allow check <symbol> --base, cut Rust query costs (5b1e926)
|
|
203
|
+
- list engine-attributed test sites, resolve Python inherited fields and fixtures, audit typed async member calls (cc39e36)
|
|
204
|
+
- resolve deref wrappers, macro item bodies, C++ name hiding and C#/Java scoping residuals (e864722)
|
|
205
|
+
- resolve module-attribute type references, Go import names and C# target-typed arguments (2acef1a)
|
|
206
|
+
- resolve Go dot imports, package variables and Rust method probing (471b1a2)
|
|
207
|
+
- model Python configuration alternatives, module values and string-annotation calls (97eaed2)
|
|
208
|
+
- check stored coroutines at their uses and resolve async producers by import identity (a585e27)
|
|
209
|
+
- respect lexical ownership of imported function aliases (c638890)
|
|
210
|
+
- resolve local class members by lexical identity (99e7a21)
|
|
211
|
+
- resolve inherited calls through imported Python modules (0fca542)
|
|
212
|
+
- preserve type renames through aliases and module paths (865aa20)
|
|
213
|
+
- caller identity, complete renames, endpoints and faster builds across languages (3d098fa)
|
|
214
|
+
|
|
215
|
+
### Performance
|
|
216
|
+
|
|
217
|
+
- avoid repeated C-family recovery and binding scans (5bf8d1f)
|
|
218
|
+
|
|
219
|
+
### Documentation
|
|
220
|
+
|
|
221
|
+
- restructure the agent skill for accuracy and fast loading (c4d0f93)
|
|
222
|
+
- refresh release evaluation results and align check/base wording (b46bc68)
|
|
223
|
+
|
|
224
|
+
### Maintenance
|
|
225
|
+
|
|
226
|
+
- keep local agent skills out of the package and the repo (4507206)
|
|
227
|
+
|
|
228
|
+
## 5.4.2 - 2026-09-20
|
|
229
|
+
|
|
230
|
+
### Fixes
|
|
231
|
+
|
|
232
|
+
- budget MCP notes and clarify review output (2c27e1c)
|
|
233
|
+
|
|
234
|
+
## 5.4.1 - 2026-09-20
|
|
235
|
+
|
|
236
|
+
### Fixes
|
|
237
|
+
|
|
238
|
+
- distinguish declaration changes from member body edits (18638e2)
|
|
239
|
+
|
|
240
|
+
### Other
|
|
241
|
+
|
|
242
|
+
- Fix UCN 5.4.0 audit findings across diff checks and output (6bbf57e)
|
|
243
|
+
|
|
244
|
+
## 5.4.0 - 2026-09-19
|
|
245
|
+
|
|
246
|
+
### Other
|
|
247
|
+
|
|
248
|
+
- Fix fresh audit findings in references, filters and async analysis (b763ac8)
|
|
249
|
+
|
|
250
|
+
## 5.3.8 - 2026-09-18
|
|
251
|
+
|
|
252
|
+
### Other
|
|
253
|
+
|
|
254
|
+
- Fix second-pass audit findings in API and structural search (26d6a39)
|
|
255
|
+
|
|
256
|
+
## 5.3.7 - 2026-09-18
|
|
257
|
+
|
|
258
|
+
### Other
|
|
259
|
+
|
|
260
|
+
- usages keeps no default row cap: the escape-hatch listing must show every site (release command-surface gate) (3659fad)
|
|
261
|
+
- Fix audit regressions in query limits and source coverage (30b3a69)
|
|
262
|
+
|
|
263
|
+
## 5.3.6 - 2026-09-13
|
|
264
|
+
|
|
265
|
+
### Fixes
|
|
266
|
+
|
|
267
|
+
- Rust same-name `use ... as` renames pair with their own module in both directions (78dc6c0)
|
|
268
|
+
|
|
269
|
+
## 5.3.5 - 2026-09-13
|
|
270
|
+
|
|
271
|
+
### Fixes
|
|
272
|
+
|
|
273
|
+
- recover receiver coverage with validated evidence (42773b3)
|
|
274
|
+
- validated receiver provenance; single-owner demoted to visible; per-rule oracle tables (6c3a2f9)
|
|
275
|
+
|
|
276
|
+
## 5.3.4 - 2026-09-07
|
|
277
|
+
|
|
278
|
+
### Fixes
|
|
279
|
+
|
|
280
|
+
- cross-process build lock ends the cold-cache stampede; prune spares live locks (057f3e2)
|
|
281
|
+
|
|
282
|
+
## 5.3.3 - 2026-09-07
|
|
283
|
+
|
|
284
|
+
### Fixes
|
|
285
|
+
|
|
286
|
+
- $ boundary, scope-granular imports, JSX attrs; Rust alias + Java/C# qualifier identity (87ff714)
|
|
287
|
+
|
|
288
|
+
## 5.3.2 - 2026-09-07
|
|
289
|
+
|
|
290
|
+
### Fixes
|
|
291
|
+
|
|
292
|
+
- Python alias pairing, endpoints client evidence + uncertain band, usages text lines, Unicode identifier boundaries (e58814a)
|
|
293
|
+
|
|
294
|
+
## 5.3.1 - 2026-09-06
|
|
295
|
+
|
|
296
|
+
### Fixes
|
|
297
|
+
|
|
298
|
+
- Python scope-name memo, impact type-reference band, untracked files in check, hub/endpoint disclosure (051c370)
|
|
299
|
+
|
|
300
|
+
## 5.3.0 - 2026-09-06
|
|
301
|
+
|
|
302
|
+
### Fixes
|
|
303
|
+
|
|
304
|
+
- 5.3.0 batch (b3fb8cc)
|
|
305
|
+
- README example is two ucn commands; --lines records drop indentation (a9e33e7)
|
|
306
|
+
- README shows the shell session; show --lines lists callers only by default (bd119c8)
|
|
307
|
+
- --lines lists the whole band with text; fold signatures; structural search; raw keeps its note (800cc4d)
|
|
308
|
+
- shell-native output modes — grep-shaped --lines and code-only --raw (3b39ed2)
|
|
309
|
+
- bound orientation HOT refinement; share findCallers derivations per operation (7928d0d)
|
|
310
|
+
- import-binding identity, deferred-edge physics, complete cycle enumeration (f1a4844)
|
|
311
|
+
|
|
312
|
+
### Documentation
|
|
313
|
+
|
|
314
|
+
- README example uses the bare symbol name (595689f)
|
|
315
|
+
|
|
316
|
+
## 5.2.2 - 2026-09-03
|
|
317
|
+
|
|
318
|
+
### Fixes
|
|
319
|
+
|
|
320
|
+
- isolate Go tuple return flow (2b8b5c1)
|
|
321
|
+
- resolve cross-file Go index flow (85fc44d)
|
|
322
|
+
- type Go indexed container values (5a06f2c)
|
|
323
|
+
- capture Go var return flow (19935f2)
|
|
324
|
+
- preserve Go closure return flow (2a35efc)
|
|
325
|
+
- prefer compiler flow over receiver guesses (849ee44)
|
|
326
|
+
- narrow nullable branch joins (e7dd3e3)
|
|
327
|
+
- recognize private Python constructors (042ac99)
|
|
328
|
+
- resolve union-narrowed field flow (a3db0d3)
|
|
329
|
+
- resolve lifecycle field constructors (e6c0b45)
|
|
330
|
+
- resolve forward module receiver types (14bb1df)
|
|
331
|
+
- preserve assigned indexed receiver flow (af6e9c6)
|
|
332
|
+
- resolve Python indexed receiver flow (3f0eba6)
|
|
333
|
+
- resolve Python dotted module calls (11fd0a6)
|
|
334
|
+
- resolve Python class factory flow (cc5fdf4)
|
|
335
|
+
- resolve Python class value aliases (d2791f2)
|
|
336
|
+
- resolve Python factory field flow (90d220a)
|
|
337
|
+
- unwrap Python field contracts (8bea85b)
|
|
338
|
+
- preserve generic field return flow (170621f)
|
|
339
|
+
- infer arrow factory result flow (6fad5de)
|
|
340
|
+
- preserve overload return contracts (5af11cb)
|
|
341
|
+
- type namespace exported values (d195481)
|
|
342
|
+
- resolve namespace spread ownership (3ac55dd)
|
|
343
|
+
- preserve static factory forwarding (9a52519)
|
|
344
|
+
- preserve assigned structural chain flow (684a95e)
|
|
345
|
+
- preserve overloaded factory flow identity (23d5721)
|
|
346
|
+
- improve return-flow accuracy and reuse (6767ef7)
|
|
347
|
+
- improve barrel flow accuracy and query caching (60a3e3f)
|
|
348
|
+
- improve caller accuracy and query performance (5d67502)
|
|
349
|
+
|
|
350
|
+
## 5.2.1 - 2026-08-25
|
|
351
|
+
|
|
352
|
+
### Fixes
|
|
353
|
+
|
|
354
|
+
- accessor impact dependencies, reflection liveness, deferred cycles, plan text review (f115788)
|
|
355
|
+
|
|
356
|
+
## 5.2.0 - 2026-08-24
|
|
357
|
+
|
|
358
|
+
### Fixes
|
|
359
|
+
|
|
360
|
+
- make C++ call identity compiler-exact (d91db34)
|
|
361
|
+
- make C# receiver and overload identity exact (4b965d5)
|
|
362
|
+
- reject shadowed Python constructor guesses (19357cc)
|
|
363
|
+
- make rename plans compiler-exact (f6b505a)
|
|
364
|
+
- close Go interface rename slots (5e22ecf)
|
|
365
|
+
- close module-qualified rename references (a2edb30)
|
|
366
|
+
- fresh/holdout engine batch — receiver-name guess demotion, scope-correct local subclasses, callee bare-call ownership, plan rename closure, Go range typing (2afbf35)
|
|
367
|
+
- overload-ambiguous promotion — C++/Java static-shape families (f250068)
|
|
368
|
+
- Go composite-literal receivers + value-position method references (7b656c1)
|
|
369
|
+
- memoize universal null results in the chained-receiver fold + reuse plan's ground set (3e5184e)
|
|
370
|
+
- trait-declaration pins + trait-slot rename closure (661809b)
|
|
371
|
+
- contract-arm non-slot deferral + method-value references (64e6a0b)
|
|
372
|
+
- structural module-receiver physics (flask outcome-eval families) (d41de4b)
|
|
373
|
+
- plan --rename-to closes the rename set (outcome-eval-measured) (0630a68)
|
|
374
|
+
|
|
375
|
+
### Documentation
|
|
376
|
+
|
|
377
|
+
- refresh v5.2 release evidence and agent guidance (c962018)
|
|
378
|
+
|
|
379
|
+
### Tests
|
|
380
|
+
|
|
381
|
+
- isolate MCP protocol fixtures from repository load (45e8282)
|
|
382
|
+
|
|
383
|
+
### Evaluation
|
|
384
|
+
|
|
385
|
+
- task-outcome instrument (paired toolchain-judged tasks) + unverified-tier census (aa43fd4)
|
|
386
|
+
|
|
387
|
+
### Other
|
|
388
|
+
|
|
389
|
+
- harden MCP supply chain and stdio transport (f925938)
|
|
390
|
+
- outcome-eval: oracle-enumerated targets, multi-seed boards, javac judge (d1fcc60)
|
|
391
|
+
- outcome-eval hardening: pool graduation, tri-state delete verdict, outcome gate (386f8bf)
|
|
392
|
+
|
|
393
|
+
## 5.1.1 - 2026-08-18
|
|
394
|
+
|
|
395
|
+
### Fixes
|
|
396
|
+
|
|
397
|
+
- compile-time-dispatch stays report-only in the hard floors (564e1d1)
|
|
398
|
+
|
|
399
|
+
## 5.1.0 - 2026-08-18
|
|
400
|
+
|
|
401
|
+
### Fixes
|
|
402
|
+
|
|
403
|
+
- CJS reassignment exclusions and oracle gate restoration (c7b3ed0)
|
|
404
|
+
|
|
405
|
+
### Other
|
|
406
|
+
|
|
407
|
+
- Release UCN 5.1.0 reliability improvements (d7259af)
|
|
408
|
+
- Preserve callable factory alias return types (5385162)
|
|
409
|
+
- Preserve ESM namespace member ownership (94040cd)
|
|
410
|
+
- Improve CommonJS ownership and ambiguity guidance (6cdcc2e)
|
|
411
|
+
- Harden oracle gates and semantic identity (1d5b24f)
|
|
412
|
+
|
|
413
|
+
## 5.0.6 - 2026-08-13
|
|
414
|
+
|
|
415
|
+
### Maintenance
|
|
416
|
+
|
|
417
|
+
- harden mcp-publisher install against transient/upstream download failures (6575499)
|
|
418
|
+
|
|
419
|
+
## 5.0.5 - 2026-08-13
|
|
420
|
+
|
|
421
|
+
### Fixes
|
|
422
|
+
|
|
423
|
+
- block file disclosure outside project root in stacktrace (\#285) (f4303c8)
|
|
424
|
+
|
|
425
|
+
## 5.0.4 - 2026-08-12
|
|
426
|
+
|
|
427
|
+
### Fixes
|
|
428
|
+
|
|
429
|
+
- keep truncated MCP payload in the text block, retier usages/tests (\#284) (c53f5c8)
|
|
430
|
+
|
|
431
|
+
## 5.0.3 - 2026-08-12
|
|
432
|
+
|
|
433
|
+
### Fixes
|
|
434
|
+
|
|
435
|
+
- keyword-binding validation, router mount prefixes, surface trust (\#281-\#283) (56d16ab)
|
|
436
|
+
|
|
437
|
+
## 5.0.2 - 2026-08-12
|
|
438
|
+
|
|
439
|
+
### Fixes
|
|
440
|
+
|
|
441
|
+
- keep server.json inside MCP registry validation limits (ca4bde9)
|
|
442
|
+
|
|
443
|
+
## 5.0.1 - 2026-08-11
|
|
444
|
+
|
|
445
|
+
### Features
|
|
446
|
+
|
|
447
|
+
- harden UCN v5 prerelease reliability (a26919d)
|
|
448
|
+
- complete UCN v5 release-grade engine (d28e1ae)
|
|
449
|
+
- gate cross-command disagreements (de228f0)
|
|
450
|
+
- harden v5 agent workflows (d3008e1)
|
|
451
|
+
- release UCN v5 (c3700ae)
|
|
452
|
+
|
|
453
|
+
### Fixes
|
|
454
|
+
|
|
455
|
+
- pin Roslyn helper SDK selection to the 9.x band (32c2ad3)
|
|
456
|
+
- complete the C++ operator name canon engine+oracle; surface Roslyn build errors (ef13026)
|
|
457
|
+
- per-host-class throughput baselines; floors stay a reference-class claim (3d84936)
|
|
458
|
+
- state throughput budgets on reference hardware via a frozen host probe (ba2e7cb)
|
|
459
|
+
- make v5 performance evidence release-blocking (d3743aa)
|
|
460
|
+
- close final v5 release gaps (ac840b6)
|
|
461
|
+
- close v5 release-readiness audit (e84f112)
|
|
462
|
+
- mixed-language account contract + v4 command migration guidance (5a57266)
|
|
463
|
+
- v5 release-audit repair — 16 findings + verified remainder (9c25faa)
|
|
464
|
+
- close v5 agent trust gaps (32596ea)
|
|
465
|
+
- harden v5 agent trust surface (5b24314)
|
|
466
|
+
- align semantic commands and grep handoff (58eab11)
|
|
467
|
+
|
|
468
|
+
### Documentation
|
|
469
|
+
|
|
470
|
+
- absolute demo image URL so npm renders it (56d792d)
|
|
471
|
+
- link CI eval workflow instead of local reports (d4481aa)
|
|
472
|
+
- update README for v5 (072d5a8)
|
|
473
|
+
- restore the README visual product story (97b45da)
|
|
474
|
+
- make the README value-first (bd27979)
|
package/README.md
CHANGED
|
@@ -82,9 +82,14 @@ visible, and the tree's accounting reports where exploration stopped.
|
|
|
82
82
|
`impact` connects a symbol or Git diff to its callers. `tests` follows indexed
|
|
83
83
|
call and reference paths to identify statically linked tests, including links
|
|
84
84
|
several hops away. `plan` previews a rename or signature change with source
|
|
85
|
-
locations and review items; it does not edit files.
|
|
85
|
+
locations and review items; it does not edit files. `plan --delete` assesses a
|
|
86
|
+
deletion from static evidence: `no-static-dependents`, `has-static-dependents`
|
|
87
|
+
with the first use, or `review` with the reason. Together these commands
|
|
86
88
|
support code exploration, refactoring, and change review from a terminal or
|
|
87
89
|
an AI agent.
|
|
90
|
+
Each linked test is named by its file, suites and name, and where the test
|
|
91
|
+
runner is proven by the project's own files, `tests` and `check` print the
|
|
92
|
+
command that runs it.
|
|
88
93
|
|
|
89
94
|
## What an answer establishes
|
|
90
95
|
|
|
@@ -95,13 +100,16 @@ A matching method name alone does not establish which implementation runs;
|
|
|
95
100
|
receiver and ownership evidence determine how the candidate is classified.
|
|
96
101
|
|
|
97
102
|
In ripgrep at [`82313cf9`](https://github.com/BurntSushi/ripgrep/commit/82313cf95849bfe425109ad9506a52154879b1b1),
|
|
98
|
-
the selected `file_name` helper has four confirmed call sites
|
|
99
|
-
|
|
100
|
-
|
|
103
|
+
the selected `file_name` helper has four confirmed call sites among the 29 lines
|
|
104
|
+
that mention the name. The other 25 are accounted for as well: 17 are not calls
|
|
105
|
+
and 8 are attributed to other targets with the same name. This animation is a
|
|
106
|
+
capture from September 2026, when one of those eight was still an unverified
|
|
107
|
+
candidate. It shows the same 29 lines alongside import relationships and
|
|
108
|
+
same-name definitions drawn from UCN's output.
|
|
101
109
|
|
|
102
110
|
<a href="assets/readme/ucn-evidence-graph.gif"><img src="assets/readme/ucn-evidence-graph.gif" width="736" alt="Captured ripgrep findings for file_name: 29 matching lines in six files, partitioned into 4 confirmed calls, 1 unverified candidate, 17 non-call lines, 7 other-target lines, and 0 unaccounted. The graph shows selected import relationships and the distinct definitions; motion is illustrative."></a>
|
|
103
111
|
|
|
104
|
-
Captured findings · [Still image](assets/readme/ucn-evidence-graph.png) · [Data](assets/readme/ucn-evidence-graph.json)
|
|
112
|
+
Captured findings, September 6, 2026 · [Still image](assets/readme/ucn-evidence-graph.png) · [Data](assets/readme/ucn-evidence-graph.json)
|
|
105
113
|
|
|
106
114
|
The ACCOUNT line reconciles the observed name occurrences: confirmed calls,
|
|
107
115
|
unverified candidates, non-call occurrences, and matches attributed to another
|
|
@@ -120,9 +128,9 @@ needs the compiler and tests.
|
|
|
120
128
|
## Accuracy and validation
|
|
121
129
|
|
|
122
130
|
Release gates compare UCN's answers with independent compilers and language
|
|
123
|
-
servers on a ten-repository board of pinned production codebases. The
|
|
124
|
-
November
|
|
125
|
-
for Roslyn, recorded these sampled caller results:
|
|
131
|
+
servers on a ten-repository board of pinned production codebases. The
|
|
132
|
+
November 14, 2026 release dry run on GitHub Actions, using clangd 18.1.3 for
|
|
133
|
+
C/C++ and .NET 11.0.100 for Roslyn, recorded these sampled caller results:
|
|
126
134
|
|
|
127
135
|
| Repository | Pinned commit | Oracle | Symbols sampled | Confirmed precision | In-scope recall |
|
|
128
136
|
|---|---|---|---:|---:|---:|
|
|
@@ -130,33 +138,43 @@ for Roslyn, recorded these sampled caller results:
|
|
|
130
138
|
| httpx | `b5addb64` | Pyright | 50 | 100% | 100% |
|
|
131
139
|
| cobra | `ad460ea8` | gopls | 50 | 100% | 100% |
|
|
132
140
|
| viper | `528f7416` | gopls | 50 | 100% | 100% |
|
|
133
|
-
| ripgrep | `82313cf9` | rust-analyzer |
|
|
141
|
+
| ripgrep | `82313cf9` | rust-analyzer | 42 | 100% | 100% |
|
|
134
142
|
| clap | `d3e59a9a` | rust-analyzer | 50 | 100% | 100% |
|
|
135
143
|
| javapoet | `b9017a95` | JDT LS | 50 | 100% | 100% |
|
|
136
144
|
| newtonsoft-json | `4f73e743` | Roslyn | 50 | 100% | 100% |
|
|
137
145
|
| cjson | `c859b25d` | clangd | 50 | 100% | 100% |
|
|
138
146
|
| fmt | `e424e3f2` | clangd | 50 | 100% | 100% |
|
|
139
147
|
|
|
140
|
-
That evaluation scored 9,
|
|
141
|
-
|
|
148
|
+
That evaluation scored 9,616 confirmed caller edges, all correct;
|
|
149
|
+
23 further edges were unscored. It reported zero missing in-scope
|
|
142
150
|
oracle edges in both caller and callee answers. The separate value-reference
|
|
143
|
-
sample scored 1,
|
|
151
|
+
sample scored 1,307 confirmed sites, all correct, with 4 unscored and zero
|
|
144
152
|
missing in-scope sites.
|
|
145
|
-
All 8,
|
|
153
|
+
All 8,400 cross-command comparisons agreed.
|
|
146
154
|
The default dead-code audit found zero false-dead results among 7 scored
|
|
147
155
|
claims; 4 additional claims could not be pinned by the oracle and were unscored.
|
|
148
156
|
|
|
157
|
+
The release gate also runs three matrices of small projects written by the
|
|
158
|
+
evaluation, each judged by the language's own compiler or test runner. In the
|
|
159
|
+
same run, across 68 deletions, `plan --delete` reported `no-static-dependents`
|
|
160
|
+
for none that a compiler rejects. Across 369 single changes, `check` called
|
|
161
|
+
none ready that a compiler rejects and blocked none that it accepts. Of 338
|
|
162
|
+
test projects, 333 were judged by their own test runners, with zero failures
|
|
163
|
+
in the matrix's test-discovery and command-selection checks. These checks
|
|
164
|
+
account for skipped and conditional tests and each runner's selection scope;
|
|
165
|
+
five projects were not runner-judged.
|
|
166
|
+
|
|
149
167
|
The samples are deterministic and stratified by reference activity. Confirmed
|
|
150
168
|
precision applies to scored claims; recall counts in-scope oracle edges found
|
|
151
169
|
in either the confirmed or unverified band. Unverified candidates, oracle
|
|
152
170
|
abstentions, and unscored findings remain separate. These measurements do not
|
|
153
171
|
establish complete runtime knowledge.
|
|
154
172
|
|
|
155
|
-
The scheduled board covers
|
|
173
|
+
The scheduled board covers 44 pinned repositories: the ten above plus zod,
|
|
156
174
|
express, hono, zustand, fastify, dayjs, rich, click, attrs, grpc-go, chi, cursive,
|
|
157
175
|
itertools, rayon, rand, gson, jsoup, pino, tanstack-form, tqdm, zap, nom, guice,
|
|
158
176
|
dapper, lz4, pugixml, stateless, luxon, arrow, more-itertools, rust-url,
|
|
159
|
-
indicatif, and
|
|
177
|
+
indicatif, cachetools, and djangoproject. A rotating fresh-repository arm checks 13 untuned codebases.
|
|
160
178
|
Repositories used to repair a finding move to the pinned board and receive
|
|
161
179
|
untuned replacements. A fresh failure fails the weekly run; independent
|
|
162
180
|
checks still run and upload their reports.
|
|
@@ -166,7 +184,7 @@ The [Publish workflow](https://github.com/mleoca/ucn/actions/workflows/publish.y
|
|
|
166
184
|
gates releases, and the [Eval workflow](https://github.com/mleoca/ucn/actions/workflows/eval.yml)
|
|
167
185
|
runs the checks on schedule and on demand. Their run pages provide CI results
|
|
168
186
|
and evaluation artifacts. Reproduce the checks locally with the oracle
|
|
169
|
-
dependencies installed:
|
|
187
|
+
dependencies and the matrices' test runners installed:
|
|
170
188
|
|
|
171
189
|
```bash
|
|
172
190
|
npm run verify
|
|
@@ -187,7 +205,7 @@ npm run trust:gate
|
|
|
187
205
|
| Symbol or Git-diff impact | `impact [symbol] [--staged]` |
|
|
188
206
|
| Direct or transitively linked tests | `tests <symbol> [--depth=N]` |
|
|
189
207
|
| Signature or pre-commit validation | `check [symbol] [--staged]` |
|
|
190
|
-
| Refactor preview | `plan <symbol> --rename-to=...` |
|
|
208
|
+
| Refactor preview and deletion assessment | `plan <symbol> --rename-to=...` or `--delete` |
|
|
191
209
|
| Imports, importers, and cycles | `deps [file] [--direction=...] [--cycles]` |
|
|
192
210
|
| Project or file public API | `api [file]` |
|
|
193
211
|
| Runtime and framework roots | `entrypoints` |
|
|
@@ -196,7 +214,8 @@ npm run trust:gate
|
|
|
196
214
|
| Likely missing awaits | `audit-async` |
|
|
197
215
|
| Stack-trace frame resolution | `stacktrace <text>` |
|
|
198
216
|
|
|
199
|
-
`--staged` selects the Git-diff form of `impact` or `check`, without a symbol
|
|
217
|
+
`--staged` selects the Git-diff form of `impact` or `check`, without a symbol,
|
|
218
|
+
and reads the staged tree from the git index, not the worktree.
|
|
200
219
|
|
|
201
220
|
`deps --cycles` groups circular dependencies and, in JS/TS and Python,
|
|
202
221
|
distinguishes eager imports from deferred or type-only edges. Enumeration limits are disclosed. `repo`
|
|
@@ -225,17 +244,20 @@ CLI JSON is uncapped by `--max-chars`, even when explicitly supplied;
|
|
|
225
244
|
|
|
226
245
|
Listings are deterministic for a given source tree: a fresh build, a cache
|
|
227
246
|
load, and an incremental rebuild return the same records in the same order.
|
|
228
|
-
`--lines` listings have no default row cap. Explicit limits disclose what they omit
|
|
229
|
-
|
|
247
|
+
`--lines` listings have no default row cap. Explicit limits disclose what they omit.
|
|
248
|
+
Under an explicit `--max-chars` a listing prints the rows that fit, whole, and
|
|
249
|
+
one `# truncated: X of Y rows omitted` line on stderr.
|
|
230
250
|
`source --raw` extracts complete functions and classes unless an explicit
|
|
231
|
-
line limit is requested; any resulting truncation is reported on stderr.
|
|
251
|
+
line limit is requested; any resulting truncation is reported on stderr. Raw
|
|
252
|
+
source is never cut by a character budget: one it exceeds fails before any output.
|
|
232
253
|
|
|
233
254
|
Ordinary text-mode command errors also exit 2. JSON keeps exit 0 for successful
|
|
234
255
|
empty results and exit 1 for command errors (`meta.ok: false` plus `error`).
|
|
235
256
|
An exception inside UCN is reported as `Internal error: ...` (JSON adds
|
|
236
257
|
`meta.internalError: true`), never as an answer about the code.
|
|
237
|
-
Target-less `check` exits 1 when `TRUST` is `BLOCKED
|
|
238
|
-
checks, and 2 if it could not run. `
|
|
258
|
+
Target-less `check` exits 1 when `TRUST` is `BLOCKED` (a break was observed),
|
|
259
|
+
0 for other completed checks, and 2 if it could not run. `--strict` also exits
|
|
260
|
+
1 for `REVIEW_REQUIRED`. `check <symbol>` exits 1 for a signature
|
|
239
261
|
mismatch or an unverified call site.
|
|
240
262
|
|
|
241
263
|
Outside `--lines`, `find`, text `search`, `deadcode`, `api`, and
|
|
@@ -246,11 +268,25 @@ test files included, unless a limit or `--exclude-tests` is given. Broad `find`
|
|
|
246
268
|
totals before calculating definition-pinned caller activity, and disclose
|
|
247
269
|
that selection when limited.
|
|
248
270
|
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
271
|
+
Some source is read without being analyzed: files named `*.min.js` and
|
|
272
|
+
`*.bundle.js`, paths excluded in `.ucn.json`, files over the size limit, and
|
|
273
|
+
unsupported languages. It is searched for each name. An answer lists such an
|
|
274
|
+
occurrence and limits its completeness claim to indexed source only when the
|
|
275
|
+
name occurs there; every other answer is unaffected. A path that cannot be read
|
|
276
|
+
at all degrades every caller account. `*.map` files are data and belong to no
|
|
277
|
+
claim. `--include-bundled` (MCP `include_bundled=true`) indexes the JavaScript
|
|
278
|
+
bundles while respecting user exclusions; it bypasses the shared cache.
|
|
279
|
+
|
|
280
|
+
`.ucn.json` at the project root configures discovery:
|
|
281
|
+
|
|
282
|
+
| Key | Effect |
|
|
283
|
+
|-----|--------|
|
|
284
|
+
| `exclude` | Patterns that are not indexed. Their source is still searched per name. |
|
|
285
|
+
| `outsideProject` | Patterns that are not part of the project, such as vendored trees. No claim covers them; `repo --sections=health` lists them. |
|
|
286
|
+
| `kind` | `"application"` declares that nothing outside the repository consumes its exports, so `deadcode` and `plan --delete` assess exported symbols. Anything else is a library: exported symbols are review. |
|
|
287
|
+
| `maxFiles`, `maxDepth`, `maxFileSize` | Discovery limits. |
|
|
288
|
+
| `textScanBudgetBytes` | Bytes of unindexed source searched per name (default 256 MB). Source past the budget counts as unreadable. |
|
|
289
|
+
| `aliases`, `includePaths` | Import resolution. |
|
|
254
290
|
|
|
255
291
|
## AI setup
|
|
256
292
|
|
|
@@ -342,7 +378,11 @@ view. C# source generators and external assemblies are also outside the
|
|
|
342
378
|
index. HTML has regression coverage but no compiler/LSP repository oracle.
|
|
343
379
|
|
|
344
380
|
The CLI, MCP, and skill share the same resolution rules and evidence. Changing
|
|
345
|
-
the transport does not change what the engine knows about the code.
|
|
381
|
+
the transport does not change what the engine knows about the code. Their
|
|
382
|
+
parameters are one table: `ucn --help` lists every value set, bound and default,
|
|
383
|
+
and the MCP input schema states the same ones.
|
|
384
|
+
|
|
385
|
+
Changes per release are in [CHANGELOG.md](CHANGELOG.md).
|
|
346
386
|
|
|
347
387
|
---
|
|
348
388
|
|