ucn 5.5.2 → 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.
Files changed (74) hide show
  1. package/.claude/skills/ucn/SKILL.md +35 -12
  2. package/.claude/skills/ucn/references/commands.md +21 -17
  3. package/.claude/skills/ucn/references/resolution-rules.md +4 -0
  4. package/.claude/skills/ucn/references/trust-contract.md +4 -4
  5. package/CHANGELOG.md +474 -0
  6. package/README.md +71 -29
  7. package/cli/flags.js +184 -0
  8. package/cli/index.js +138 -324
  9. package/core/account.js +44 -87
  10. package/core/analysis.js +273 -107
  11. package/core/ast-analysis.js +2 -0
  12. package/core/bridge.js +29 -65
  13. package/core/cache.js +101 -16
  14. package/core/callers.js +352 -70
  15. package/core/capture.js +331 -0
  16. package/core/change-kinds.js +888 -0
  17. package/core/check.js +1117 -139
  18. package/core/client-receivers.js +189 -0
  19. package/core/command-contracts.js +7 -6
  20. package/core/constructed-class.js +1195 -0
  21. package/core/contract-membership.js +142 -0
  22. package/core/deadcode.js +388 -85
  23. package/core/deletion.js +401 -0
  24. package/core/discovery.js +104 -9
  25. package/core/entrypoints.js +12 -6
  26. package/core/evidence-bands.js +68 -0
  27. package/core/evidence-bands.json +44 -0
  28. package/core/execute.js +172 -161
  29. package/core/hot-summary.js +241 -0
  30. package/core/index-ir.js +3 -1
  31. package/core/inprocess-clients.js +41 -15
  32. package/core/ir.js +5 -1
  33. package/core/member-signatures.js +789 -0
  34. package/core/output/analysis-ext.js +20 -10
  35. package/core/output/analysis.js +98 -60
  36. package/core/output/check.js +98 -37
  37. package/core/output/doctor.js +34 -1
  38. package/core/output/find.js +2 -1
  39. package/core/output/lines.js +63 -3
  40. package/core/output/public.js +30 -11
  41. package/core/output/refactoring.js +32 -0
  42. package/core/output/reporting.js +21 -2
  43. package/core/output/search.js +11 -2
  44. package/core/output/tracing.js +35 -7
  45. package/core/output-budget.js +124 -57
  46. package/core/parallel-build.js +3 -3
  47. package/core/project.js +106 -23
  48. package/core/provenance-type.js +12 -5
  49. package/core/public-command.js +35 -9
  50. package/core/python-modules.js +6 -0
  51. package/core/reflection.js +166 -23
  52. package/core/registry.js +623 -72
  53. package/core/reporting.js +69 -34
  54. package/core/request-helpers.js +63 -7
  55. package/core/review-items.js +75 -0
  56. package/core/search.js +89 -128
  57. package/core/shared.js +0 -45
  58. package/core/snapshot.js +350 -0
  59. package/core/source-universe.js +707 -0
  60. package/core/test-units.js +3624 -0
  61. package/core/tracing.js +150 -96
  62. package/core/verify.js +27 -11
  63. package/languages/adapter.js +8 -3
  64. package/languages/c-family.js +12 -0
  65. package/languages/csharp.js +634 -0
  66. package/languages/go.js +120 -0
  67. package/languages/index.js +422 -4
  68. package/languages/java.js +712 -0
  69. package/languages/javascript.js +1460 -2
  70. package/languages/lexical-scope.js +68 -0
  71. package/languages/python.js +1672 -1
  72. package/languages/rust.js +91 -0
  73. package/mcp/server.js +44 -110
  74. package/package.json +11 -6
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. Together these commands
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 and one unverified
99
- candidate. This animation accounts for all 29 matching lines, alongside import
100
- relationships and same-name definitions drawn from UCN's output.
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 local
124
- November 6, 2026 evaluation, using clangd 18.1.8 for C/C++ and .NET 10.0.403
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 | 41 | 100% | 100% |
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,677 confirmed caller edges, all correct;
141
- 41 further edges were unscored. It reported zero missing in-scope
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,241 confirmed sites, all correct, with 4 unscored and zero
151
+ sample scored 1,307 confirmed sites, all correct, with 4 unscored and zero
144
152
  missing in-scope sites.
145
- All 8,000 cross-command comparisons agreed.
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 43 pinned repositories: the ten above plus zod,
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 cachetools. A rotating fresh-repository arm checks 13 untuned codebases.
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`
@@ -220,20 +239,25 @@ records carry a tab-separated reason. An empty `--lines` listing exits 1, an
220
239
  error exits 2, and a successful listing exits 0. `--lines` supports `find`, `show`,
221
240
  `usages`, `search`, and `impact`; `show --lines` lists callers by default.
222
241
  Use `--json` when the script needs structured fields or a tree result.
242
+ CLI JSON is uncapped by `--max-chars`, even when explicitly supplied;
243
+ `meta.maxChars` reports `"not-applied"`. Use command limits to narrow the result.
223
244
 
224
245
  Listings are deterministic for a given source tree: a fresh build, a cache
225
246
  load, and an incremental rebuild return the same records in the same order.
226
- `--lines` listings have no default row cap. Explicit limits disclose what they omit,
227
- and a shell-mode character budget fails before writing partial output.
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.
228
250
  `source --raw` extracts complete functions and classes unless an explicit
229
- 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.
230
253
 
231
254
  Ordinary text-mode command errors also exit 2. JSON keeps exit 0 for successful
232
255
  empty results and exit 1 for command errors (`meta.ok: false` plus `error`).
233
256
  An exception inside UCN is reported as `Internal error: ...` (JSON adds
234
257
  `meta.internalError: true`), never as an answer about the code.
235
- Target-less `check` exits 1 when `TRUST` is `BLOCKED`, 0 for other completed
236
- checks, and 2 if it could not run. `check <symbol>` exits 1 for a signature
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
237
261
  mismatch or an unverified call site.
238
262
 
239
263
  Outside `--lines`, `find`, text `search`, `deadcode`, `api`, and
@@ -244,11 +268,25 @@ test files included, unless a limit or `--exclude-tests` is given. Broad `find`
244
268
  totals before calculating definition-pinned caller activity, and disclose
245
269
  that selection when limited.
246
270
 
247
- Files named `*.min.js`, `*.bundle.js`, and `*.map` are reported as skipped
248
- sources and make completeness partial. `--include-bundled` (MCP
249
- `include_bundled=true`) indexes the JavaScript bundles while respecting user
250
- exclusions; it bypasses the shared cache. Source maps remain disclosed but
251
- unindexed.
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. |
252
290
 
253
291
  ## AI setup
254
292
 
@@ -340,7 +378,11 @@ view. C# source generators and external assemblies are also outside the
340
378
  index. HTML has regression coverage but no compiler/LSP repository oracle.
341
379
 
342
380
  The CLI, MCP, and skill share the same resolution rules and evidence. Changing
343
- 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).
344
386
 
345
387
  ---
346
388