ucn 5.5.3 → 5.6.1

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