44
55### Changed: license details are no longer requested on the full-scan diff
66
7- The internal full-scan diff request (` fullscans.stream_diff ` , used to compare
8- alerts between two scans) now always sets ` include_license_details=false ` ,
9- regardless of the ` --exclude-license-details ` flag.
10-
11- ** Why this is safe (no output changes):** the license fields the diff endpoint
12- can embed were never actually consumed off the diff:
13-
14- - With ` --generate-license ` ** off** , the only consumer of a package's
15- ` licenseDetails ` /` licenseAttrib ` — the legal/FOSSA artifact builder — is never
16- invoked, so the embedded license data was parsed and immediately discarded.
17- - With ` --generate-license ` ** on** , the CLI re-fetches license data from the
18- dedicated PURL endpoint (` get_license_text_via_purl ` ) and ** overwrites**
19- whatever the diff embedded before anything reads it.
20-
21- So in every code path the diff's license payload was dead weight. On large
22- dependency trees it inflated the diff response past ~ 2.3 MB and truncated it
23- mid-string, crashing ` response.json() ` with
24- ` Unterminated string starting at: ... ` (CE-224, reported by the ` tremendous `
25- org). Dropping it keeps the diff lean with ** zero change to any output
26- artifact** (SBOM, legal/FOSSA attribution, report contents).
27-
28- ** Why a minor bump (2.4.0), not a patch:** this is a deliberate default-behavior
29- change. 2.3.0 fixed the ` --exclude-license-details ` flag so it correctly
30- propagated to the diff; this release goes further and makes the lean diff the
31- default so the crash cannot recur even when the flag is not passed. Per the
32- project's semver policy a default-behavior change warrants a minor bump, even
33- though outputs are provably unchanged.
34-
35- ** Effect on ` --exclude-license-details ` :** the flag still works, but its scope is
36- now narrower — it controls only the human-facing dashboard report URL
37- (` ?include_license_details=false ` ), not the internal diff payload. Its ` --help `
38- text was updated to reflect this.
39-
40- Override seam: ` Core.get_added_and_removed_packages(..., include_license_details=True) `
41- can still request embedded license details explicitly (used in tests); nothing
42- in the CLI wires the user flag to it anymore.
7+ - Full-scan diff requests now always set ` include_license_details=false ` , keeping
8+ large diff responses smaller and avoiding truncation crashes on large repos.
9+ - ` --exclude-license-details ` still controls the dashboard report URL, but no
10+ longer affects the internal diff request. Its ` --help ` text has been updated
11+ to reflect the narrower scope.
12+ - License artifact output is unchanged: ` --generate-license ` continues to fetch
13+ license details from the dedicated PURL endpoint.
4314
4415## 2.3.1
4516
@@ -72,40 +43,21 @@ Details:
7243
7344### New: ` --exit-code-on-api-error `
7445
75- Adds a configurable exit code for API / infrastructure failures (timeouts,
76- network errors, unexpected exceptions), so CI pipelines can distinguish them
77- from blocking security findings (exit ` 1 ` ):
78-
79- ```
80- socketcli --exit-code-on-api-error 100 ...
81- ```
82-
83- Default is ` 3 ` (the code the CLI already used for these errors), so ** default
84- behavior is unchanged** — the exit code only changes when you pass the flag.
85- Set it to a Buildkite ` soft_fail ` code, or to ` 0 ` to swallow infra errors.
86-
87- ** Interaction to be aware of:** ` --disable-blocking ` forces exit ` 0 ` for * all*
88- outcomes and therefore overrides ` --exit-code-on-api-error ` . Use the new flag
89- * without* ` --disable-blocking ` if you want a custom infra-error code to take
90- effect. See the exit-code reference in the README.
91-
92- > A future ` 3.0 ` release is planned to make infrastructure errors exit non-zero
93- > even under ` --disable-blocking ` (so outages stop being silently swallowed).
94- > That is a breaking change and is intentionally ** not** in this release.
46+ - Added ` --exit-code-on-api-error ` so CI can distinguish API / infrastructure
47+ failures from blocking security findings. The default remains ` 3 ` ; the flag
48+ only changes behavior when set explicitly.
49+ - ` --disable-blocking ` still takes precedence and exits ` 0 ` for all outcomes.
9550
9651### New: commit message auto-truncation
9752
98- ` --commit-message ` values longer than 200 characters are now automatically
99- truncated before being sent to the API, preventing HTTP 413 errors from
100- oversized URL query parameters (common with AI-generated commit messages or
101- ` $BUILDKITE_MESSAGE ` ).
53+ - ` --commit-message ` values longer than 200 characters are now truncated before
54+ being sent to the API, preventing HTTP 413 errors from oversized query
55+ parameters.
10256
10357### Improved: Buildkite log formatting
10458
105- When running inside a Buildkite job (` BUILDKITE=true ` ), infrastructure errors
106- emit Buildkite log section markers (` ^^^ +++ ` / ` --- :warning: ` ) so the error
107- section auto-expands in the BK UI, plus a ` soft_fail ` hint. No effect on other
108- CI platforms.
59+ - Infrastructure errors now emit Buildkite log section markers when
60+ ` BUILDKITE=true ` , making those failures easier to find in Buildkite logs.
10961
11062### Fixed
11163
@@ -114,6 +66,7 @@ CI platforms.
11466 which was constructed without the CLI timeout and defaulted to 1200s.
11567- ` --exclude-license-details ` now propagates to the full-scan diff comparison
11668 request (it was only applied to full-scan params / report URLs before).
69+
11770## 2.2.93
11871
11972- Bundled twelve Dependabot dependency updates: ` urllib3 ` , ` gitpython ` , ` python-dotenv ` , ` pytest ` , ` uv ` , ` cryptography ` , ` pygments ` , ` requests ` , and ` idna ` (main app), plus ` axios ` , ` requests ` , and ` flask ` (e2e fixtures). ` idna ` 3.11 → 3.15 includes the fix for CVE-2026 -45409.
0 commit comments