@cejel/cejel 0.4.5 → 0.4.7

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/README.md CHANGED
@@ -32,12 +32,26 @@ certificate + badge over all of them. See "Aggregate your scanners" below.
32
32
  The public CLI default is `witan-rubric-v17-2026-07-24`, the last rubric to clear Cejel's
33
33
  preregistered 200-repository untouched holdout. Published calibration figures apply only to that
34
34
  exact rubric and frozen evaluation population. Later rubrics—including the current v18 through
35
- v22 prospective series—are available only to explicit evaluation harnesses. Prospective rubrics
35
+ v23 prospective series—are available only to explicit evaluation harnesses. Prospective rubrics
36
36
  inherit none of v17's calibration figures; a bounded paired repair or corpus-delta result can
37
37
  validate its stated construction without transferring precision, recall, or false-positive-rate
38
38
  claims. Promoting a prospective rubric to the public default requires a fresh authenticated
39
39
  untouched holdout, every preregistered gate to pass, and a separately recorded promotion decision.
40
40
 
41
+ ### Measured recall (bounded)
42
+
43
+ > **Measured recall (bounded).** Cejel publishes no general detection-recall figure. On a frozen,
44
+ > preregistered, in-scope held-out fixture set of 30 named defects, the released public default
45
+ > (v17, tree `a857f0b3`) cited **16/30**, two-sided 95% Wilson interval **[36.1%, 69.8%]**; the
46
+ > prospective v22 detector (commit `8a289ea`, tree `10960a03`) cited **24/30**, two-sided 95%
47
+ > Wilson interval **[62.7%, 90.5%]**. Same fixtures, same partition, same controls in both runs.
48
+ > v22 is prospective and not the shipped default. Full preregistrations and results:
49
+ > `docs/experiments/in-scope-detection-recall-v3-result-2026-08-09.md` and
50
+ > `docs/experiments/in-scope-detection-recall-v4-result-2026-08-11.md`.
51
+
52
+ The [defect-class census](docs/defect-class-census.md) publishes the coverage-breadth
53
+ boundary—which defect classes any shipped rule targets—and is explicitly not a recall claim.
54
+
41
55
  ## Install
42
56
 
43
57
  No account, no key, no signup.
@@ -79,7 +93,7 @@ if (-not $expected -or $actual -ne $expected.ToLowerInvariant()) {
79
93
  ```
80
94
 
81
95
  > **Windows signing status:** `cejel-Windows-x86_64.exe` is intentionally unsigned in
82
- > 0.4.5 and may trigger Microsoft SmartScreen. The release build removes Node's inherited
96
+ > 0.4.7 and may trigger Microsoft SmartScreen. The release build removes Node's inherited
83
97
  > signature before SEA injection and fails unless Windows reports the result as `NotSigned`;
84
98
  > it does not ship an invalid signature. Before running it, verify `SHA256SUMS` and the
85
99
  > GitHub build-provenance attestation. Each binary also has an attached SPDX SBOM and an
@@ -102,7 +116,7 @@ docker run --rm --network=none -v "$PWD:/w" -w /w -v "$PWD/cejel:/cejel:ro" debi
102
116
  npx @cejel/cejel@latest .
103
117
  ```
104
118
 
105
- > **Distribution note:** Cejel `0.4.5` is the coordinated release version for npm,
119
+ > **Distribution note:** Cejel `0.4.7` is the coordinated release version for npm,
106
120
  > standalone binaries, Docker/OCI, GitHub Action, Homebrew, and MCP Registry.
107
121
 
108
122
  `npx` can reuse a stale cached package. Force the current npm release with the `@latest`
@@ -139,6 +153,9 @@ The npm package is scoped as `@cejel/cejel`; its executable remains the short co
139
153
  min-score: "2.5" # optional: fail the build below this
140
154
  ```
141
155
 
156
+ For an executed public example that binds a release artifact to the same commit named by its
157
+ Cejel certificate, see [Certified releases with GitHub build provenance](./docs/certified-release-example.md).
158
+
142
159
  **From source** — it is AGPL and it runs offline, so reading it is rather the point:
143
160
 
144
161
  ```bash
@@ -161,16 +178,16 @@ gh attestation verify ./cejel-Windows-x86_64.exe -R BargLabs/cejel
161
178
  This is cryptographically signed provenance. It is distinct from Apple Developer ID or
162
179
  Microsoft Authenticode code-signing.
163
180
 
164
- **Docker / OCI.** The current container release is `0.4.5`:
181
+ **Docker / OCI.** The current container release is `0.4.7`:
165
182
 
166
183
  ```bash
167
- docker run --rm -i -v "$PWD:/workspace:ro" ghcr.io/barglabs/cejel:0.4.5
184
+ docker run --rm -i -v "$PWD:/workspace:ro" ghcr.io/barglabs/cejel:0.4.7
168
185
  ```
169
186
 
170
187
  The image defaults to `cejel-mcp` over stdio. To use the CLI instead:
171
188
 
172
189
  ```bash
173
- docker run --rm -v "$PWD:/workspace:ro" --entrypoint cejel ghcr.io/barglabs/cejel:0.4.5 .
190
+ docker run --rm -v "$PWD:/workspace:ro" --entrypoint cejel ghcr.io/barglabs/cejel:0.4.7 .
174
191
  ```
175
192
 
176
193
  The OCI image carries an SBOM, maximum-mode build provenance, and a signed registry
@@ -274,10 +291,20 @@ prints that boundary on every successful verification.
274
291
  - `--rubric-pin <version>` — Explicit opt-in only: pin an alternate rubric instead of the
275
292
  calibrated public default. It
276
293
  accepts the calibrated version or any published prospective rubric
277
- (`witan-rubric-v18-prospective-*` through `v22`) and fails closed, naming what was accepted, on
278
- anything else. Omit this flag for the calibrated result every default scan produces — a
279
- prospective pin carries no precision/recall claim, and the terminal certificate, HTML
280
- certificate, and Markdown report all state that plainly whenever one is used.
294
+ (`witan-rubric-v18-prospective-*` through `v23`) and fails closed, naming what was accepted, on
295
+ anything else. `v23` is prospective and uncalibrated, like every rubric after v17: the public
296
+ default (`WITAN_LAST_CALIBRATED_RUBRIC_VERSION`) is still `witan-rubric-v17-2026-07-24`, and v23
297
+ inherits none of v17's precision, recall, or false-positive-rate figures. It inherits v22
298
+ detector/scoring behavior and adds bounded A1 coverage-flag recognition (#276) plus per-signal
299
+ (rather than per-criterion) abstention for A1's `coverage_percent`/`non_hollow_test_share`
300
+ metrics (#278); every other criterion still abstains
301
+ criterion-wide under v23, same as v17/v22. Omit this flag for the calibrated result every
302
+ default scan produces — a prospective pin carries no precision/recall claim, and the terminal
303
+ certificate, HTML certificate, and Markdown report all state that plainly whenever one is used.
304
+ - `--run-attempt <n>` — record which CI run attempt produced this certificate, surfaced on the
305
+ human-readable certificate and as an additive-optional `predicate.githubRunAttempt` field on
306
+ `attestation.json`. The GitHub Action sets this automatically from `GITHUB_RUN_ATTEMPT`; omit it
307
+ for a local scan or any other CI — Cejel never fabricates or defaults a run attempt.
281
308
  - `--quiet` — suppress the terminal certificate (files are still written)
282
309
  - `-h`, `--help` — print usage and exit successfully
283
310
  - `-v`, `--version` — print the version derived from the package manifest and exit successfully
@@ -348,6 +375,7 @@ Three ways a scanner's output gets ingested:
348
375
 
349
376
  ```json
350
377
  {
378
+ "version": "1.0",
351
379
  "tool": "my-scanner",
352
380
  "signals": [
353
381
  {
@@ -370,6 +398,12 @@ Three ways a scanner's output gets ingested:
370
398
  (0–1, default `0.5`) bounds how much this signal can move that dimension; `severity` is
371
399
  `critical` | `warning` | `info`; `location` is optional.
372
400
 
401
+ The version field is required. Cejel rejects unversioned generic documents and unknown major
402
+ versions rather than guessing. See the [generic ingest contract](docs/ingest-contract.md), its
403
+ [published JSON Schema](docs/schemas/cejel-ingest-v1.schema.json), and the
404
+ [synthetic CI heal-log mapping](docs/heal-log-mapping.md). Output-field stability and version
405
+ routing are documented in [format stability](docs/format-stability.md).
406
+
373
407
  ## Displaying the trust badge
374
408
 
375
409
  Endpoint JSON (host `badge.json` anywhere static — a repo file, a gist, GitHub Pages — and
@@ -485,7 +519,7 @@ The OCI image is an alternative when Docker is the preferred execution boundary.
485
519
  the host path with the repository OpenClaw should allow Cejel to read:
486
520
 
487
521
  ```bash
488
- npx -y openclaw@latest mcp set cejel-oci '{"command":"docker","args":["run","--rm","-i","-v","/absolute/path/to/repo:/workspace:ro","ghcr.io/barglabs/cejel:0.4.5"]}'
522
+ npx -y openclaw@latest mcp set cejel-oci '{"command":"docker","args":["run","--rm","-i","-v","/absolute/path/to/repo:/workspace:ro","ghcr.io/barglabs/cejel:0.4.7"]}'
489
523
  npx -y openclaw@latest mcp doctor cejel-oci --probe
490
524
  ```
491
525
 
@@ -5,20 +5,20 @@ import {
5
5
  deriveProductIdentity,
6
6
  runCejelScan,
7
7
  serializeWitanReport
8
- } from "../chunk-4IXESHG7.js";
8
+ } from "../chunk-QTLLASOO.js";
9
9
  import {
10
10
  listCejelLlmPackFiles
11
- } from "../chunk-RW6YJVHZ.js";
12
- import "../chunk-EPK7UTIK.js";
11
+ } from "../chunk-EP7YYWEP.js";
12
+ import "../chunk-OIGCYULH.js";
13
13
  import {
14
14
  external_exports
15
- } from "../chunk-KGFGX3TP.js";
15
+ } from "../chunk-UYJBSQCV.js";
16
16
  import {
17
17
  init_esm_shims,
18
18
  readRepoText,
19
19
  recordContentSkip,
20
20
  recordFilesystemSkip
21
- } from "../chunk-R4DPQLS2.js";
21
+ } from "../chunk-ZNVILRHK.js";
22
22
 
23
23
  // src/calibration/llm-detector.ts
24
24
  init_esm_shims();
@@ -5,10 +5,10 @@ import {
5
5
  describeGitFailure,
6
6
  execGit,
7
7
  isExpectedGitAbsence
8
- } from "./chunk-EPK7UTIK.js";
8
+ } from "./chunk-OIGCYULH.js";
9
9
  import {
10
10
  init_esm_shims
11
- } from "./chunk-R4DPQLS2.js";
11
+ } from "./chunk-ZNVILRHK.js";
12
12
 
13
13
  // src/packs/llm/files.ts
14
14
  init_esm_shims();
@@ -3,7 +3,7 @@ import { createRequire as __cejelCreateRequire } from 'node:module';
3
3
  const require = __cejelCreateRequire(import.meta.url);
4
4
  import {
5
5
  init_esm_shims
6
- } from "./chunk-R4DPQLS2.js";
6
+ } from "./chunk-ZNVILRHK.js";
7
7
 
8
8
  // src/witan/git-exec.ts
9
9
  init_esm_shims();