ohrisk 0.127.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +571 -0
- package/LICENSE +21 -0
- package/README.md +416 -0
- package/dist/cli.js +21875 -0
- package/package.json +53 -0
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,571 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
## 0.127.0 - 2026-06-20
|
|
4
|
+
|
|
5
|
+
### Fixed
|
|
6
|
+
|
|
7
|
+
- SARIF reports now use the bundled CLI version constant instead of reading
|
|
8
|
+
`package.json` at runtime, so packaged npm installs can emit SARIF without
|
|
9
|
+
crashing outside the source repository.
|
|
10
|
+
- Deno object-form npm dependency ranges such as `^4.3.0` now resolve to the
|
|
11
|
+
unique matching locked package record instead of dropping the transitive
|
|
12
|
+
dependency.
|
|
13
|
+
- Release package smoke tests now exercise the packed CLI's JSON, SARIF,
|
|
14
|
+
CycloneDX, and Markdown scan outputs.
|
|
15
|
+
- Remote artifact fetches now follow HTTP redirects only after validating each
|
|
16
|
+
target URL and DNS result, and the default Node fetch path validates the DNS
|
|
17
|
+
answer used for the actual connection.
|
|
18
|
+
- The build step now fails when `package.json` and `src/cli/version.ts` declare
|
|
19
|
+
different versions, preventing packaged CLI version drift.
|
|
20
|
+
|
|
21
|
+
## 0.126.0 - 2026-06-20
|
|
22
|
+
|
|
23
|
+
### Added
|
|
24
|
+
|
|
25
|
+
- npm `npm-shrinkwrap.json` projects are now discovered and scanned with the
|
|
26
|
+
package-lock parser while preserving the shrinkwrap lockfile kind in reports.
|
|
27
|
+
|
|
28
|
+
## 0.125.0 - 2026-06-20
|
|
29
|
+
|
|
30
|
+
### Added
|
|
31
|
+
|
|
32
|
+
- Deno `deno.lock` projects are now discovered and scanned for npm package
|
|
33
|
+
dependencies recorded in the lockfile.
|
|
34
|
+
|
|
35
|
+
## 0.124.0 - 2026-06-20
|
|
36
|
+
|
|
37
|
+
### Changed
|
|
38
|
+
|
|
39
|
+
- The published CLI now ships as a Node-compatible bundle, so npm, pnpm, Yarn,
|
|
40
|
+
npx, pnpm dlx, and yarn dlx users can run Ohrisk without installing Bun.
|
|
41
|
+
|
|
42
|
+
## 0.123.0 - 2026-06-20
|
|
43
|
+
|
|
44
|
+
### Fixed
|
|
45
|
+
|
|
46
|
+
- npm package-lock v1 parsing now links hoisted dependencies through their requiring parents instead of treating them as direct root dependencies.
|
|
47
|
+
|
|
48
|
+
## 0.122.0 - 2026-06-20
|
|
49
|
+
|
|
50
|
+
### Fixed
|
|
51
|
+
|
|
52
|
+
- Explicit commercial-use restriction evidence now remains high risk even when package metadata declares a permissive license.
|
|
53
|
+
|
|
54
|
+
## 0.121.0 - 2026-06-20
|
|
55
|
+
|
|
56
|
+
### Fixed
|
|
57
|
+
|
|
58
|
+
- `UNLICENSE` evidence file variants such as `UNLICENSE.md` are now recognized during package license evidence collection.
|
|
59
|
+
|
|
60
|
+
## 0.120.0 - 2026-06-20
|
|
61
|
+
|
|
62
|
+
### Fixed
|
|
63
|
+
|
|
64
|
+
- Markdown scan reports now show the package/project name instead of the absolute project root, keeping PR-facing artifacts from leaking local or CI workspace paths.
|
|
65
|
+
|
|
66
|
+
## 0.119.0 - 2026-06-20
|
|
67
|
+
|
|
68
|
+
### Fixed
|
|
69
|
+
|
|
70
|
+
- `ohrisk diff` now reads and validates the requested baseline ref before collecting current package evidence, so invalid baselines fail without first touching current remote package artifacts.
|
|
71
|
+
|
|
72
|
+
## 0.118.0 - 2026-06-20
|
|
73
|
+
|
|
74
|
+
### Fixed
|
|
75
|
+
|
|
76
|
+
- Remote artifact response handling now only trusts decimal `Content-Length` values, falling back to streamed byte limits for malformed size headers.
|
|
77
|
+
|
|
78
|
+
## 0.117.0 - 2026-06-20
|
|
79
|
+
|
|
80
|
+
### Fixed
|
|
81
|
+
|
|
82
|
+
- Package tarball parsing now enforces a maximum entry count, preventing archives with excessive headers from consuming unbounded parser work inside the unpacked size limit.
|
|
83
|
+
|
|
84
|
+
## 0.116.0 - 2026-06-20
|
|
85
|
+
|
|
86
|
+
### Fixed
|
|
87
|
+
|
|
88
|
+
- Package tarball decompression is now bounded by a maximum unpacked size, preventing small compressed artifacts from expanding into oversized in-memory tar data during evidence collection.
|
|
89
|
+
|
|
90
|
+
## 0.115.0 - 2026-06-20
|
|
91
|
+
|
|
92
|
+
### Fixed
|
|
93
|
+
|
|
94
|
+
- Failed registry metadata and tarball HTTP responses now cancel their response bodies without waiting for cleanup, so error responses do not leave unread artifact streams behind.
|
|
95
|
+
|
|
96
|
+
## 0.114.0 - 2026-06-20
|
|
97
|
+
|
|
98
|
+
### Fixed
|
|
99
|
+
|
|
100
|
+
- Artifact response cancellation no longer blocks scan failures when a stream's `cancel()` handler stalls, so oversized registry metadata and tarball responses fail promptly after cleanup has been requested.
|
|
101
|
+
|
|
102
|
+
## 0.113.0 - 2026-06-20
|
|
103
|
+
|
|
104
|
+
### Fixed
|
|
105
|
+
|
|
106
|
+
- Oversized registry metadata and tarball responses are now cancelled when their `Content-Length` exceeds Ohrisk's configured response limit, so rejected streamed responses do not stay open after the scan moves on.
|
|
107
|
+
|
|
108
|
+
## 0.112.0 - 2026-06-20
|
|
109
|
+
|
|
110
|
+
### Fixed
|
|
111
|
+
|
|
112
|
+
- Remote artifact body streams are now cancelled when the artifact fetch timeout fires, preventing stalled response readers from surviving after the CLI has already reported a timeout.
|
|
113
|
+
|
|
114
|
+
## 0.111.0 - 2026-06-20
|
|
115
|
+
|
|
116
|
+
### Fixed
|
|
117
|
+
|
|
118
|
+
- Artifact fetch diagnostic causes now redact credential-like URL text before surfacing errors.
|
|
119
|
+
|
|
120
|
+
## 0.110.0 - 2026-06-20
|
|
121
|
+
|
|
122
|
+
### Fixed
|
|
123
|
+
|
|
124
|
+
- Local artifact error details now redact credential-like URL text from resolved specifiers, derived artifact paths, and diagnostic causes.
|
|
125
|
+
|
|
126
|
+
## 0.109.0 - 2026-06-20
|
|
127
|
+
|
|
128
|
+
### Fixed
|
|
129
|
+
|
|
130
|
+
- Remote artifact URLs with embedded credentials are now rejected before fetch, and credential-bearing URL fields are redacted in error details.
|
|
131
|
+
|
|
132
|
+
## 0.108.0 - 2026-06-20
|
|
133
|
+
|
|
134
|
+
### Fixed
|
|
135
|
+
|
|
136
|
+
- Remote artifact IPv6 host checks now reject additional special-purpose ranges such as local-use NAT64, discard-only, Teredo, benchmarking, and ORCHID addresses before fetch.
|
|
137
|
+
|
|
138
|
+
## 0.107.0 - 2026-06-20
|
|
139
|
+
|
|
140
|
+
### Fixed
|
|
141
|
+
|
|
142
|
+
- IPv6 artifact hosts that embed IPv4 addresses through NAT64, 6to4, or IPv4-compatible forms now reuse the IPv4 host block policy before fetch.
|
|
143
|
+
|
|
144
|
+
## 0.106.0 - 2026-06-20
|
|
145
|
+
|
|
146
|
+
### Fixed
|
|
147
|
+
|
|
148
|
+
- IPv4-mapped IPv6 artifact hosts now classify their embedded IPv4 address before fetch, so mapped loopback and private addresses are rejected with the same host policy as ordinary IPv4 literals.
|
|
149
|
+
|
|
150
|
+
## 0.105.0 - 2026-06-20
|
|
151
|
+
|
|
152
|
+
### Fixed
|
|
153
|
+
|
|
154
|
+
- Remote artifact fetches now resolve hostname targets before fetch and reject DNS answers that point at localhost, private, link-local, or reserved network addresses.
|
|
155
|
+
|
|
156
|
+
## 0.104.0 - 2026-06-20
|
|
157
|
+
|
|
158
|
+
### Fixed
|
|
159
|
+
|
|
160
|
+
- Remote artifact fetches now request manual redirect handling so tarball URLs cannot be silently followed to another host.
|
|
161
|
+
|
|
162
|
+
## 0.103.0 - 2026-06-20
|
|
163
|
+
|
|
164
|
+
### Fixed
|
|
165
|
+
|
|
166
|
+
- Remote package tarball URLs now reject obvious localhost, private, link-local, and reserved host targets before fetch.
|
|
167
|
+
|
|
168
|
+
## 0.102.0 - 2026-06-20
|
|
169
|
+
|
|
170
|
+
### Fixed
|
|
171
|
+
|
|
172
|
+
- Remote registry metadata and tarball reads now require a readable response body stream instead of falling back to unbounded `arrayBuffer()` reads.
|
|
173
|
+
|
|
174
|
+
## 0.101.0 - 2026-06-20
|
|
175
|
+
|
|
176
|
+
### Fixed
|
|
177
|
+
|
|
178
|
+
- Waiver files and installed `node_modules` package metadata checks now use bounded reads before parsing or trusting package evidence.
|
|
179
|
+
|
|
180
|
+
## 0.100.0 - 2026-06-20
|
|
181
|
+
|
|
182
|
+
### Fixed
|
|
183
|
+
|
|
184
|
+
- Project lockfile reads now enforce maximum input sizes before parsing Bun, npm, pnpm, and Yarn lockfiles, including Yarn root and workspace package manifests.
|
|
185
|
+
|
|
186
|
+
## 0.99.0 - 2026-06-20
|
|
187
|
+
|
|
188
|
+
### Fixed
|
|
189
|
+
|
|
190
|
+
- Local package directory evidence now bounds `package.json` and license evidence file reads, preventing oversized local metadata or NOTICE/LICENSE files from being loaded into memory.
|
|
191
|
+
|
|
192
|
+
## 0.98.0 - 2026-06-20
|
|
193
|
+
|
|
194
|
+
### Fixed
|
|
195
|
+
|
|
196
|
+
- Local package tarball evidence now enforces the same maximum artifact size before reading bytes, preventing oversized `file:` artifacts from being loaded into memory.
|
|
197
|
+
|
|
198
|
+
## 0.97.0 - 2026-06-19
|
|
199
|
+
|
|
200
|
+
### Fixed
|
|
201
|
+
|
|
202
|
+
- Remote registry metadata and tarball evidence reads now enforce bounded response sizes, preventing oversized artifact responses from being loaded into memory during scans.
|
|
203
|
+
|
|
204
|
+
## 0.96.0 - 2026-06-19
|
|
205
|
+
|
|
206
|
+
### Fixed
|
|
207
|
+
|
|
208
|
+
- Remote evidence timeouts now cover response body reads as well as the initial fetch, preventing scans from hanging after response headers arrive.
|
|
209
|
+
|
|
210
|
+
## 0.95.0 - 2026-06-19
|
|
211
|
+
|
|
212
|
+
### Fixed
|
|
213
|
+
|
|
214
|
+
- Remote registry and tarball evidence fetches now use a bounded timeout so stalled network reads fail honestly instead of hanging scans indefinitely.
|
|
215
|
+
|
|
216
|
+
## 0.94.0 - 2026-06-19
|
|
217
|
+
|
|
218
|
+
### Fixed
|
|
219
|
+
|
|
220
|
+
- Registry metadata now fails clearly when it advertises a non-HTTP tarball URL instead of treating package evidence as silently unavailable.
|
|
221
|
+
|
|
222
|
+
## 0.93.0 - 2026-06-19
|
|
223
|
+
|
|
224
|
+
### Fixed
|
|
225
|
+
|
|
226
|
+
- Package tarball parsing now rejects entries with invalid tar header checksums before trusting package metadata.
|
|
227
|
+
|
|
228
|
+
## 0.92.0 - 2026-06-19
|
|
229
|
+
|
|
230
|
+
### Fixed
|
|
231
|
+
|
|
232
|
+
- Package tarball parsing now rejects entries whose declared size extends beyond the archive data before trusting package metadata.
|
|
233
|
+
|
|
234
|
+
## 0.91.0 - 2026-06-19
|
|
235
|
+
|
|
236
|
+
### Fixed
|
|
237
|
+
|
|
238
|
+
- CycloneDX SBOM metadata now avoids exposing local project root and lockfile absolute paths in CI artifacts.
|
|
239
|
+
|
|
240
|
+
## 0.90.0 - 2026-06-19
|
|
241
|
+
|
|
242
|
+
### Fixed
|
|
243
|
+
|
|
244
|
+
- Git baseline read failures now refer to the failed baseline file, not only lockfiles, because the same reader also loads Yarn workspace manifests during diff scans.
|
|
245
|
+
|
|
246
|
+
## 0.89.0 - 2026-06-19
|
|
247
|
+
|
|
248
|
+
### Fixed
|
|
249
|
+
|
|
250
|
+
- Command-specific help output now lists the supported `--help` and `-h` flags for every help target.
|
|
251
|
+
|
|
252
|
+
## 0.88.0 - 2026-06-19
|
|
253
|
+
|
|
254
|
+
### Fixed
|
|
255
|
+
|
|
256
|
+
- Kept the exported `OhriskErrorCode` type aligned with every runtime error code emitted by lockfile and workspace parsing paths.
|
|
257
|
+
|
|
258
|
+
## 0.87.0 - 2026-06-19
|
|
259
|
+
|
|
260
|
+
### Fixed
|
|
261
|
+
|
|
262
|
+
- Git baseline reads now report missing files separately from other git ref failures, allowing newly added Yarn workspaces to diff cleanly without hiding non-missing baseline read errors.
|
|
263
|
+
|
|
264
|
+
## 0.86.0 - 2026-06-19
|
|
265
|
+
|
|
266
|
+
### Fixed
|
|
267
|
+
|
|
268
|
+
- Git baseline reads now reject lockfile paths that escape the current project root, preventing diff baselines from reading sibling repository files.
|
|
269
|
+
|
|
270
|
+
## 0.85.0 - 2026-06-19
|
|
271
|
+
|
|
272
|
+
### Fixed
|
|
273
|
+
|
|
274
|
+
- Git baseline reads now stop option parsing before the refspec, preventing option-like refs from being misread as successful baseline file contents.
|
|
275
|
+
|
|
276
|
+
## 0.84.0 - 2026-06-19
|
|
277
|
+
|
|
278
|
+
### Fixed
|
|
279
|
+
|
|
280
|
+
- Yarn workspace discovery now ignores workspace patterns that resolve outside the project root instead of scanning sibling directories as project roots.
|
|
281
|
+
|
|
282
|
+
## 0.83.0 - 2026-06-19
|
|
283
|
+
|
|
284
|
+
### Fixed
|
|
285
|
+
|
|
286
|
+
- URL-encoded `file:` dependency artifact paths now resolve to the decoded local path before reading package evidence.
|
|
287
|
+
|
|
288
|
+
## 0.82.0 - 2026-06-19
|
|
289
|
+
|
|
290
|
+
### Fixed
|
|
291
|
+
|
|
292
|
+
- `node_modules` evidence lookup now rejects invalid package names before resolving paths, preventing malformed lockfile package names from escaping the `node_modules` directory.
|
|
293
|
+
|
|
294
|
+
## 0.81.0 - 2026-06-19
|
|
295
|
+
|
|
296
|
+
### Fixed
|
|
297
|
+
|
|
298
|
+
- Local package directories and package tarballs now reject non-object `package.json` metadata as package metadata failures instead of accepting arrays as empty package records.
|
|
299
|
+
|
|
300
|
+
## 0.80.0 - 2026-06-19
|
|
301
|
+
|
|
302
|
+
### Fixed
|
|
303
|
+
|
|
304
|
+
- `node_modules` package evidence is now used only when the installed package name and version match the lockfile node, preventing stale installs from masking the license evidence for the locked package version.
|
|
305
|
+
- Bun local tarball lock entries now preserve the artifact reference, dependency metadata, and integrity from Bun's three-field tuple shape.
|
|
306
|
+
|
|
307
|
+
## 0.79.0 - 2026-06-19
|
|
308
|
+
|
|
309
|
+
### Fixed
|
|
310
|
+
|
|
311
|
+
- `ohrisk diff` now reads Yarn v1 workspace package manifests from the baseline git ref so unchanged workspace dependency risks are not reported as new findings.
|
|
312
|
+
|
|
313
|
+
## 0.78.0 - 2026-06-19
|
|
314
|
+
|
|
315
|
+
### Fixed
|
|
316
|
+
|
|
317
|
+
- Yarn v1 workspace package manifests are now scanned as dependency roots instead of relying only on the root `package.json`.
|
|
318
|
+
|
|
319
|
+
## 0.77.0 - 2026-06-19
|
|
320
|
+
|
|
321
|
+
### Fixed
|
|
322
|
+
|
|
323
|
+
- npm `package-lock.json` workspace package entries now scan their own dependency roots instead of relying only on the root package dependencies.
|
|
324
|
+
|
|
325
|
+
## 0.76.0 - 2026-06-19
|
|
326
|
+
|
|
327
|
+
### Fixed
|
|
328
|
+
|
|
329
|
+
- Bun workspace lockfiles and pnpm workspace lockfiles now scan dependencies from every workspace/importer entry instead of only the root or first entry.
|
|
330
|
+
|
|
331
|
+
## 0.75.0 - 2026-06-19
|
|
332
|
+
|
|
333
|
+
### Fixed
|
|
334
|
+
|
|
335
|
+
- CycloneDX SBOM dependency relationships now preserve child edges when dependency paths contain npm alias segments such as `compat-parent -> actual-package@1.0.0`.
|
|
336
|
+
|
|
337
|
+
## 0.74.0 - 2026-06-19
|
|
338
|
+
|
|
339
|
+
### Fixed
|
|
340
|
+
|
|
341
|
+
- License files containing `SPDX-License-Identifier:` now provide medium-confidence SPDX expression evidence instead of falling through as custom text.
|
|
342
|
+
|
|
343
|
+
## 0.73.0 - 2026-06-19
|
|
344
|
+
|
|
345
|
+
### Fixed
|
|
346
|
+
|
|
347
|
+
- Tarball evidence collection now ignores nested license-like files such as `vendor/LICENSE` so vendored fixtures or examples are not mistaken for the package's own license evidence.
|
|
348
|
+
|
|
349
|
+
## 0.72.0 - 2026-06-19
|
|
350
|
+
|
|
351
|
+
### Fixed
|
|
352
|
+
|
|
353
|
+
- Slash- and comma-separated package license shorthands such as `MIT/Apache-2.0` and `MIT, Apache-2.0` now normalize as `OR` choices instead of falling through as malformed metadata.
|
|
354
|
+
|
|
355
|
+
## 0.71.0 - 2026-06-19
|
|
356
|
+
|
|
357
|
+
### Fixed
|
|
358
|
+
|
|
359
|
+
- Source-available shorthand license expressions such as `BUSL`, `SSPL`, and `Elastic License` now normalize to high-risk source-available licenses instead of falling through as unknown identifiers.
|
|
360
|
+
|
|
361
|
+
## 0.70.0 - 2026-06-19
|
|
362
|
+
|
|
363
|
+
### Fixed
|
|
364
|
+
|
|
365
|
+
- Options that require values now reject the next option token instead of treating it as a file path, profile, lockfile path, or threshold value.
|
|
366
|
+
|
|
367
|
+
## 0.69.0 - 2026-06-19
|
|
368
|
+
|
|
369
|
+
### Fixed
|
|
370
|
+
|
|
371
|
+
- Markdown scan and diff reports now preserve table structure when dynamic fields contain backticks, pipes, or newlines.
|
|
372
|
+
- Markdown report escaping is shared across scan and diff output to prevent formatter drift.
|
|
373
|
+
|
|
374
|
+
## 0.68.0 - 2026-06-19
|
|
375
|
+
|
|
376
|
+
### Fixed
|
|
377
|
+
|
|
378
|
+
- Malformed `package.json` files inside package tarballs now report package metadata parse failures instead of generic tarball parse failures.
|
|
379
|
+
|
|
380
|
+
## 0.67.0 - 2026-06-19
|
|
381
|
+
|
|
382
|
+
### Fixed
|
|
383
|
+
|
|
384
|
+
- Registry metadata JSON parse failures now report unsupported input instead of a network read failure.
|
|
385
|
+
|
|
386
|
+
## 0.66.0 - 2026-06-19
|
|
387
|
+
|
|
388
|
+
### Fixed
|
|
389
|
+
|
|
390
|
+
- Integrity verification now rejects malformed or wrong-length SRI digests before comparing package tarball bytes.
|
|
391
|
+
|
|
392
|
+
## 0.65.0 - 2026-06-19
|
|
393
|
+
|
|
394
|
+
### Fixed
|
|
395
|
+
|
|
396
|
+
- Project discovery now ignores directories that use supported lockfile names and reports explicit lockfile directory paths as invalid input.
|
|
397
|
+
|
|
398
|
+
## 0.64.0 - 2026-06-19
|
|
399
|
+
|
|
400
|
+
### Added
|
|
401
|
+
|
|
402
|
+
- `scan`, `ci`, and `diff` now accept `--lockfile <path>` so projects with multiple supported lockfiles can select the intended lockfile explicitly.
|
|
403
|
+
|
|
404
|
+
## 0.63.0 - 2026-06-19
|
|
405
|
+
|
|
406
|
+
### Fixed
|
|
407
|
+
|
|
408
|
+
- Legacy `package-lock.json` v1 parsing now preserves nested optional dependency flags instead of inheriting production scope from the parent.
|
|
409
|
+
|
|
410
|
+
## 0.62.0 - 2026-06-19
|
|
411
|
+
|
|
412
|
+
### Fixed
|
|
413
|
+
|
|
414
|
+
- Bun lockfile parsing now preserves nested optional and peer dependency edges instead of reporting them as production edges.
|
|
415
|
+
|
|
416
|
+
## 0.61.0 - 2026-06-19
|
|
417
|
+
|
|
418
|
+
### Fixed
|
|
419
|
+
|
|
420
|
+
- `pnpm-lock.yaml` parsing now preserves nested optional and peer dependency edges from package snapshots.
|
|
421
|
+
- Yarn v1 lockfile parsing now preserves nested optional dependency edges instead of reporting them as production edges.
|
|
422
|
+
|
|
423
|
+
## 0.60.0 - 2026-06-19
|
|
424
|
+
|
|
425
|
+
### Fixed
|
|
426
|
+
|
|
427
|
+
- Modern `package-lock.json` parsing now preserves nested `optionalDependencies` and `peerDependencies` edges instead of dropping those transitive packages.
|
|
428
|
+
|
|
429
|
+
## 0.59.0 - 2026-06-19
|
|
430
|
+
|
|
431
|
+
### Added
|
|
432
|
+
|
|
433
|
+
- Release verification now installs the packed tarball into a temporary consumer project and smoke-tests the packaged `ohrisk` bin with `version` and `scan --json`.
|
|
434
|
+
- Usage documentation now shows the installed `ohrisk` CLI command instead of source-tree development commands.
|
|
435
|
+
|
|
436
|
+
## 0.58.0 - 2026-06-19
|
|
437
|
+
|
|
438
|
+
### Added
|
|
439
|
+
|
|
440
|
+
- Command-specific help is now also available through `ohrisk <command> --help` and `ohrisk <command> -h`.
|
|
441
|
+
|
|
442
|
+
## 0.57.0 - 2026-06-19
|
|
443
|
+
|
|
444
|
+
### Added
|
|
445
|
+
|
|
446
|
+
- `ohrisk help <command>` now prints command-specific usage and option details for `scan`, `ci`, `diff`, `explain`, `help`, and `version`.
|
|
447
|
+
|
|
448
|
+
## 0.56.0 - 2026-06-19
|
|
449
|
+
|
|
450
|
+
### Added
|
|
451
|
+
|
|
452
|
+
- License evidence collection now recognizes `UNLICENSE` plus hyphen and underscore variants such as `LICENSE-MIT`, `LICENCE_APACHE`, `COPYING-LESSER`, and `NOTICE_THIRD_PARTY`.
|
|
453
|
+
|
|
454
|
+
## 0.55.1 - 2026-06-19
|
|
455
|
+
|
|
456
|
+
### Fixed
|
|
457
|
+
|
|
458
|
+
- Commercial restriction signals no longer override parseable `OR` license choices when a lower-risk branch is available.
|
|
459
|
+
|
|
460
|
+
## 0.55.0 - 2026-06-19
|
|
461
|
+
|
|
462
|
+
### Added
|
|
463
|
+
|
|
464
|
+
- License normalization now recognizes common source-available restriction aliases such as Commons Clause, BUSL, SSPL, Elastic License, and PolyForm variants.
|
|
465
|
+
- Package metadata license strings with explicit commercial-use restrictions now produce high-risk commercial restriction signals.
|
|
466
|
+
|
|
467
|
+
## 0.54.0 - 2026-06-19
|
|
468
|
+
|
|
469
|
+
### Added
|
|
470
|
+
|
|
471
|
+
- CycloneDX SBOM components now include active Ohrisk risk decision properties for audit workflows.
|
|
472
|
+
- CycloneDX SBOM metadata now includes the Ohrisk waiver mode.
|
|
473
|
+
|
|
474
|
+
## 0.53.0 - 2026-06-19
|
|
475
|
+
|
|
476
|
+
### Added
|
|
477
|
+
|
|
478
|
+
- Reports now expose waiver mode so raw `--no-waivers` audits are distinguishable from normal local waiver scans.
|
|
479
|
+
|
|
480
|
+
## 0.52.1 - 2026-06-19
|
|
481
|
+
|
|
482
|
+
### Fixed
|
|
483
|
+
|
|
484
|
+
- README report examples now match the current terminal and Markdown fingerprint output.
|
|
485
|
+
|
|
486
|
+
## 0.52.0 - 2026-06-19
|
|
487
|
+
|
|
488
|
+
First public release candidate for Ohrisk.
|
|
489
|
+
|
|
490
|
+
### Added
|
|
491
|
+
|
|
492
|
+
- `ohrisk scan` for local Bun `bun.lock` projects.
|
|
493
|
+
- `package-lock.json` graph parsing for modern npm lockfiles with a `packages` section.
|
|
494
|
+
- npm v1 `package-lock.json` dependency-tree parsing.
|
|
495
|
+
- `pnpm-lock.yaml` graph parsing for importer, package, and snapshot dependency data.
|
|
496
|
+
- Yarn v1 `yarn.lock` graph parsing with root dependency classification from `package.json`.
|
|
497
|
+
- `--profile saas` and `--profile distributed-app` risk profiles.
|
|
498
|
+
- `--prod` filtering that excludes development-only dependencies while keeping production-relevant optional and peer dependency risk visible.
|
|
499
|
+
- `--json` output that reuses the terminal report finding model.
|
|
500
|
+
- `--sarif` output for SARIF 2.1.0 code scanning upload.
|
|
501
|
+
- `--markdown` output for PR comments and release notes.
|
|
502
|
+
- `--cyclonedx` output for CycloneDX 1.5 JSON SBOMs.
|
|
503
|
+
- Diff reports surface new or changed NOTICE and attribution work as the next action.
|
|
504
|
+
- `--output <file>` for writing scan, ci, diff, and explain reports to disk.
|
|
505
|
+
- `ohrisk ci --fail-on <severity>` for non-zero exits when findings meet a configured threshold.
|
|
506
|
+
- `ohrisk ci --strict-waivers` for non-zero exits when local waivers are expired or unmatched.
|
|
507
|
+
- `ohrisk scan --no-waivers` and `ohrisk ci --no-waivers` for raw audits that ignore local waiver files.
|
|
508
|
+
- `ohrisk explain <license-expression>` for profile-aware license risk explanation without scanning a project.
|
|
509
|
+
- `ohrisk diff <baseline-ref>` for git-ref baseline comparison that reports only new or meaningfully changed findings.
|
|
510
|
+
- `--version` and `-v` package version output.
|
|
511
|
+
- `help` and `version` command aliases for the global CLI.
|
|
512
|
+
- Unknown option errors list the supported `--help` and `-h` aliases.
|
|
513
|
+
- Diff output-format conflict errors no longer advertise unsupported SARIF output.
|
|
514
|
+
- Top-level `help` and `version` aliases validate trailing arguments instead of silently ignoring them.
|
|
515
|
+
- Help output and README examples document the supported `help <command>` shape.
|
|
516
|
+
- Project discovery with clear failures for unsupported or ambiguous lockfiles.
|
|
517
|
+
- Bun lockfile dependency graph parsing with direct, transitive, production, and development dependency context.
|
|
518
|
+
- Local `file:` package evidence collection.
|
|
519
|
+
- Installed `node_modules` package evidence collection before network fallback.
|
|
520
|
+
- HTTP(S) tarball evidence collection when the lockfile points directly to a tarball.
|
|
521
|
+
- npm registry metadata lookup when the lockfile does not contain a direct tarball URL.
|
|
522
|
+
- `package.json` license field, legacy `licenses` field, `LICENSE`, `LICENCE`, `COPYING`, and `NOTICE` evidence handling.
|
|
523
|
+
- SPDX-like license expression parsing with simple `AND` and `OR` handling.
|
|
524
|
+
- SPDX `WITH` exception handling, deprecated package license object handling, and explicit `UNLICENSED` risk classification.
|
|
525
|
+
- Common human-readable license metadata aliases such as `Apache License, Version 2.0`, `BSD 2-Clause`, and `ISC License` are normalized.
|
|
526
|
+
- Common permissive and public-domain-style SPDX licenses `0BSD`, `CC0-1.0`, and `Unlicense` are classified as low risk.
|
|
527
|
+
- NOTICE evidence is surfaced as attribution-preservation action text without raising severity.
|
|
528
|
+
- Source-available restriction licenses `Elastic-2.0`, `PolyForm-Noncommercial-1.0.0`, and `PolyForm-Free-Trial-1.0.0` are classified as high risk.
|
|
529
|
+
- `Zlib` is classified as a low-risk permissive license.
|
|
530
|
+
- Explicit commercial restriction text detection for Commons Clause, BUSL, and non-commercial license evidence.
|
|
531
|
+
- `UNLICENSED` packages get specific reason and action text instead of generic high-risk wording.
|
|
532
|
+
- Source-available restriction licenses get specific high-risk reason text.
|
|
533
|
+
- Recognizable standard license text in `LICENSE` and `COPYING` files is used as medium-confidence evidence when package license metadata is absent.
|
|
534
|
+
- Recognizable standard license files can resolve malformed package metadata pointers such as `SEE LICENSE IN LICENSE`.
|
|
535
|
+
- Standard license file detection covers `Unlicense` and `CC0-1.0` public-domain-style text.
|
|
536
|
+
- Standard license file detection covers Zlib license text.
|
|
537
|
+
- Standard license file detection covers GPL-2.0, LGPL-2.0, and LGPL-2.1 text in addition to existing GPL-family v3 detection.
|
|
538
|
+
- Specific finding reason text for explicit commercial-use restriction evidence.
|
|
539
|
+
- Markdown scan and diff reports include finding reasons for PR review.
|
|
540
|
+
- Findings include human-readable action text alongside the stable recommendation enum.
|
|
541
|
+
- Findings include stable IDs for JSON, terminal, Markdown, SARIF, and diff matching.
|
|
542
|
+
- Diff matching ignores reason and evidence prose churn while still surfacing severity, recommendation, or action changes.
|
|
543
|
+
- Findings include exact fingerprints for SARIF partial fingerprints and downstream audit trails.
|
|
544
|
+
- Terminal and Markdown scan, CI, and diff reports include finding fingerprints for waiver and audit workflows.
|
|
545
|
+
- npm alias dependencies resolve to the actual package identity while keeping the alias visible in dependency paths.
|
|
546
|
+
- Installed `node_modules` evidence lookup checks npm alias install names before registry fallback.
|
|
547
|
+
- pnpm alias package keys such as `alias@npm:actual@version` resolve to the actual package identity.
|
|
548
|
+
- Local and remote package tarballs are verified against lockfile integrity digests before license evidence is trusted.
|
|
549
|
+
- SARIF result properties include structured reason and action fields.
|
|
550
|
+
- Markdown scan reports include license confidence counts.
|
|
551
|
+
- Terminal and Markdown scan summaries include missing and malformed license counts.
|
|
552
|
+
- Risk findings include structured dependency type and direct/transitive scope.
|
|
553
|
+
- Scan and diff reports choose the next action from the actual finding recommendations.
|
|
554
|
+
- JSON scan and diff reports include the same next action used by human-readable reports.
|
|
555
|
+
- JSON reports include `failOn`, `failed`, and `failingFindingCount` when a CI or diff threshold is configured.
|
|
556
|
+
- Terminal and Markdown reports show threshold pass/fail lines when a CI or diff threshold is configured.
|
|
557
|
+
- `.ohrisk-waivers.json` local waivers by finding ID or fingerprint.
|
|
558
|
+
- Scan and CI JSON, terminal, and Markdown reports separate active findings from waived findings.
|
|
559
|
+
- SARIF reports include waived findings as externally suppressed results with waiver reason metadata.
|
|
560
|
+
- Expired local waivers are reported with target, reason, and expiry date without being applied.
|
|
561
|
+
- Unmatched active waivers are reported with target and reason without being applied.
|
|
562
|
+
- JSON, terminal, Markdown, and SARIF reports show strict waiver drift status when `ci --strict-waivers` is enabled.
|
|
563
|
+
- Unknown-risk findings now distinguish missing, malformed, and unrecognized license metadata in reason and action text.
|
|
564
|
+
- Risk findings for low, review, high, and unknown license evidence.
|
|
565
|
+
- Terminal findings sorted by severity with package path, recommendation, and evidence snippets.
|
|
566
|
+
|
|
567
|
+
### Not Included Yet
|
|
568
|
+
|
|
569
|
+
- Central approval or legal workflow management.
|
|
570
|
+
- GitHub App integration.
|
|
571
|
+
- Ecosystem adapters beyond npm-style lockfiles.
|
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 0disoft
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|