circle-ir-ai 4.16.1 → 4.16.3

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 (2) hide show
  1. package/CHANGELOG.md +50 -0
  2. package/package.json +4 -3
package/CHANGELOG.md CHANGED
@@ -7,6 +7,56 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [4.16.3] - 2026-09-24
11
+
12
+ ### Changed
13
+ - **circle-ir 4.9.25 → 4.9.26.** Go/C# precision + recall batch. Not a lockstep tag — one of
14
+ these fixes a bug that shipped in our current pin.
15
+ - **cognium-dev#472 — Go taint no longer leaks to a same-named local in another function.**
16
+ The argument-expression matcher links source to sink by variable name, and its same-method
17
+ gate compared method *names*: it never ran for assignment-shaped sources (`a := os.Args`) and
18
+ could not separate two functions sharing a name (`(*A).ServeHTTP` / `(*C).ServeHTTP`). So a
19
+ `b := []byte("x")` in one function inherited the taint of `b, _ := io.ReadAll(r.Body)` in
20
+ another. **This shipped in 4.9.23–4.9.25 via the #459 `r.Body` source — i.e. it is live in our
21
+ 4.16.2 pin.** Go now compares the enclosing function by line range; package-level sources stay
22
+ unscoped and closures share their handler's scope. 36 flows removed across 175 Go repos
23
+ (33 re-attributed to the correct source, 3 cross-function sinks dropped).
24
+ - **cognium-dev#343** — Go `bufio.NewScanner`/`NewReader` over the request body: `sc.Text()`,
25
+ `sc.Bytes()`, `br.ReadString(…)` now seed `http_body`.
26
+ - **cognium-dev#339** — C# bare expression-statement sinks with an inline request read
27
+ (`File.Create(Path.Combine(dir, file.FileName));`) were silent while the assigned form fired.
28
+ - **cognium-dev#473** — `initParser` cached a *failed* init forever, so one bad `wasmPath` or a
29
+ transient fetch failure poisoned every later `initParser`/`initAnalyzer` call in the process.
30
+
31
+ **Baseline impact (expected, not regression):** Go counts move in **both** directions. #472
32
+ re-attributes source lines, so a baseline keyed on `sink@source->sink` shows one removal plus one
33
+ addition per affected flow; #343/#339 add genuinely new Go/C# findings. No API or output-shape
34
+ change. Lockfile refreshed; single circle-ir copy verified.
35
+
36
+
37
+ ## [4.16.2] - 2026-09-24
38
+
39
+ ### Changed
40
+ - **circle-ir 4.9.23 → 4.9.25.** Two `analyzeProject` robustness fixes from 4.9.24, both of
41
+ which turned a scannable repo into a hard failure, plus the 4.9.25 lockstep tag (no library
42
+ change). Neither changes detection on ordinary source.
43
+ - **cognium-dev#458 / #420 — a Python starred parameter no longer fails the project analysis
44
+ closed.** `CrossFileResolver` interpolated a method parameter straight into `\b<name>\b`, so
45
+ `*args` / `**kwargs` arrived with their stars, `*` read as a quantifier, the pattern failed to
46
+ compile ("Nothing to repeat") and the whole `analyzeProject` call failed. This is the direct
47
+ cause of a chunk of the `meta.crossFile.error` rows our #482 pass reports — 42 errors on the
48
+ 485-repo Cisco sweep of 2026-09-23, with urllib3 / fickling / haystack among the 6-in-95
49
+ upstream measured. Expect that error count to drop on the next sweep. Per-file `analyze()` was
50
+ never affected.
51
+ - **cognium-dev#460 / #421 — minified / bundled files no longer wedge the project scan.**
52
+ `analyze()` now returns a minimal IR for any file whose longest line exceeds 10,000 characters.
53
+ Our own `crossFile` guard (#482) already skipped these at a **tighter** 5,000 characters, so
54
+ this is belt-and-braces for that path — but it also protects every *other* `analyzeProject`
55
+ caller, which our guard never covered. NodeGoat drops ~56 s → ~0.4 s upstream.
56
+
57
+ Lockfile refreshed; single circle-ir copy verified.
58
+
59
+
10
60
  ## [4.16.1] - 2026-09-23
11
61
 
12
62
  ### Fixed
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "circle-ir-ai",
3
- "version": "4.16.1",
3
+ "version": "4.16.3",
4
4
  "description": "LLM-enhanced SAST analysis built on circle-ir",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.js",
@@ -69,7 +69,8 @@
69
69
  "benchmark:csharp": "tsx benchmarks/runners/run-csharp.ts",
70
70
  "benchmark:csharp-product": "tsx benchmarks/runners/run-csharp-product.ts",
71
71
  "benchmark:csharp-juliet": "tsx benchmarks/runners/run-csharp-juliet.ts",
72
- "benchmark:vuln-localization": "tsx benchmarks/runners/run-vuln-localization.ts --limit 20"
72
+ "benchmark:vuln-localization": "tsx benchmarks/runners/run-vuln-localization.ts --limit 20",
73
+ "test:coverage": "vitest run --coverage"
73
74
  },
74
75
  "keywords": [
75
76
  "sast",
@@ -103,7 +104,7 @@
103
104
  "@ax-llm/ax": "^20.0.0",
104
105
  "@cognium/project-profile-detect": "^1.1.0",
105
106
  "@mastra/core": "^1.18.0",
106
- "circle-ir": "4.9.23",
107
+ "circle-ir": "4.9.26",
107
108
  "minimatch": "^10.2.5",
108
109
  "p-queue": "^9.1.0"
109
110
  },