@cejel/cejel 0.4.4 → 0.4.6

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
@@ -79,7 +79,7 @@ if (-not $expected -or $actual -ne $expected.ToLowerInvariant()) {
79
79
  ```
80
80
 
81
81
  > **Windows signing status:** `cejel-Windows-x86_64.exe` is intentionally unsigned in
82
- > 0.4.4 and may trigger Microsoft SmartScreen. The release build removes Node's inherited
82
+ > 0.4.6 and may trigger Microsoft SmartScreen. The release build removes Node's inherited
83
83
  > signature before SEA injection and fails unless Windows reports the result as `NotSigned`;
84
84
  > it does not ship an invalid signature. Before running it, verify `SHA256SUMS` and the
85
85
  > GitHub build-provenance attestation. Each binary also has an attached SPDX SBOM and an
@@ -102,7 +102,7 @@ docker run --rm --network=none -v "$PWD:/w" -w /w -v "$PWD/cejel:/cejel:ro" debi
102
102
  npx @cejel/cejel@latest .
103
103
  ```
104
104
 
105
- > **Distribution note:** Cejel `0.4.4` is the coordinated release version for npm,
105
+ > **Distribution note:** Cejel `0.4.6` is the coordinated release version for npm,
106
106
  > standalone binaries, Docker/OCI, GitHub Action, Homebrew, and MCP Registry.
107
107
 
108
108
  `npx` can reuse a stale cached package. Force the current npm release with the `@latest`
@@ -119,6 +119,16 @@ name while keeping the repository-derived stable slug:
119
119
  npx @cejel/cejel@latest . --name "Customer Portal"
120
120
  ```
121
121
 
122
+ From 0.4.5, use `--product-name` when two checkout directories must emit the
123
+ same identity fields. The supplied value sets both the display name and its slugified stable ID:
124
+
125
+ ```bash
126
+ npx @cejel/cejel@latest . --product-name "Customer Portal"
127
+ ```
128
+
129
+ Product identity is caller context, not scored repository evidence, and is excluded from
130
+ certificate byte-comparison claims.
131
+
122
132
  The npm package is scoped as `@cejel/cejel`; its executable remains the short command `cejel`.
123
133
 
124
134
  **GitHub Action** — score every PR and publish the badge:
@@ -129,6 +139,9 @@ The npm package is scoped as `@cejel/cejel`; its executable remains the short co
129
139
  min-score: "2.5" # optional: fail the build below this
130
140
  ```
131
141
 
142
+ For an executed public example that binds a release artifact to the same commit named by its
143
+ Cejel certificate, see [Certified releases with GitHub build provenance](./docs/certified-release-example.md).
144
+
132
145
  **From source** — it is AGPL and it runs offline, so reading it is rather the point:
133
146
 
134
147
  ```bash
@@ -151,16 +164,16 @@ gh attestation verify ./cejel-Windows-x86_64.exe -R BargLabs/cejel
151
164
  This is cryptographically signed provenance. It is distinct from Apple Developer ID or
152
165
  Microsoft Authenticode code-signing.
153
166
 
154
- **Docker / OCI.** The current container release is `0.4.4`:
167
+ **Docker / OCI.** The current container release is `0.4.6`:
155
168
 
156
169
  ```bash
157
- docker run --rm -i -v "$PWD:/workspace:ro" ghcr.io/barglabs/cejel:0.4.4
170
+ docker run --rm -i -v "$PWD:/workspace:ro" ghcr.io/barglabs/cejel:0.4.6
158
171
  ```
159
172
 
160
173
  The image defaults to `cejel-mcp` over stdio. To use the CLI instead:
161
174
 
162
175
  ```bash
163
- docker run --rm -v "$PWD:/workspace:ro" --entrypoint cejel ghcr.io/barglabs/cejel:0.4.4 .
176
+ docker run --rm -v "$PWD:/workspace:ro" --entrypoint cejel ghcr.io/barglabs/cejel:0.4.6 .
164
177
  ```
165
178
 
166
179
  The OCI image carries an SBOM, maximum-mode build provenance, and a signed registry
@@ -253,9 +266,21 @@ prints that boundary on every successful verification.
253
266
  - `--min-score <n>` — exit non-zero if the overall score is below `n` (0–4), or if Cejel
254
267
  abstains and therefore cannot evaluate the threshold; used by the GitHub Action's optional
255
268
  threshold gate
269
+ - `--product-name <name>` — Set both the caller-context
270
+ display name and slugified product ID so differently named checkouts can emit identical
271
+ certificates.
272
+ - `--name <display>` — override only the displayed project name while leaving the derived slug
273
+ unchanged; retained for compatibility
256
274
  - `--ingest <file|glob>` — fold another scanner's output into the score (repeatable). Accepts
257
275
  SARIF, OpenSSF Scorecard JSON, or the generic Cejel external-signal shape — format is
258
276
  auto-detected. See "Aggregate your scanners" below.
277
+ - `--rubric-pin <version>` — Explicit opt-in only: pin an alternate rubric instead of the
278
+ calibrated public default. It
279
+ accepts the calibrated version or any published prospective rubric
280
+ (`witan-rubric-v18-prospective-*` through `v22`) and fails closed, naming what was accepted, on
281
+ anything else. Omit this flag for the calibrated result every default scan produces — a
282
+ prospective pin carries no precision/recall claim, and the terminal certificate, HTML
283
+ certificate, and Markdown report all state that plainly whenever one is used.
259
284
  - `--quiet` — suppress the terminal certificate (files are still written)
260
285
  - `-h`, `--help` — print usage and exit successfully
261
286
  - `-v`, `--version` — print the version derived from the package manifest and exit successfully
@@ -326,6 +351,7 @@ Three ways a scanner's output gets ingested:
326
351
 
327
352
  ```json
328
353
  {
354
+ "version": "1.0",
329
355
  "tool": "my-scanner",
330
356
  "signals": [
331
357
  {
@@ -348,6 +374,12 @@ Three ways a scanner's output gets ingested:
348
374
  (0–1, default `0.5`) bounds how much this signal can move that dimension; `severity` is
349
375
  `critical` | `warning` | `info`; `location` is optional.
350
376
 
377
+ The version field is required. Cejel rejects unversioned generic documents and unknown major
378
+ versions rather than guessing. See the [generic ingest contract](docs/ingest-contract.md), its
379
+ [published JSON Schema](docs/schemas/cejel-ingest-v1.schema.json), and the
380
+ [synthetic CI heal-log mapping](docs/heal-log-mapping.md). Output-field stability and version
381
+ routing are documented in [format stability](docs/format-stability.md).
382
+
351
383
  ## Displaying the trust badge
352
384
 
353
385
  Endpoint JSON (host `badge.json` anywhere static — a repo file, a gist, GitHub Pages — and
@@ -463,7 +495,7 @@ The OCI image is an alternative when Docker is the preferred execution boundary.
463
495
  the host path with the repository OpenClaw should allow Cejel to read:
464
496
 
465
497
  ```bash
466
- 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.4"]}'
498
+ 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.6"]}'
467
499
  npx -y openclaw@latest mcp doctor cejel-oci --probe
468
500
  ```
469
501
 
@@ -5,20 +5,20 @@ import {
5
5
  deriveProductIdentity,
6
6
  runCejelScan,
7
7
  serializeWitanReport
8
- } from "../chunk-PJEKYFVM.js";
8
+ } from "../chunk-VEJLHO5F.js";
9
9
  import {
10
10
  listCejelLlmPackFiles
11
- } from "../chunk-RW6YJVHZ.js";
12
- import "../chunk-EPK7UTIK.js";
11
+ } from "../chunk-QRWLHTGR.js";
12
+ import "../chunk-BZXBLDCJ.js";
13
13
  import {
14
14
  external_exports
15
- } from "../chunk-KGFGX3TP.js";
15
+ } from "../chunk-Y6NO5HAI.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-H55KECVT.js";
22
22
 
23
23
  // src/calibration/llm-detector.ts
24
24
  init_esm_shims();
@@ -7,7 +7,7 @@ import {
7
7
  __filename,
8
8
  __require,
9
9
  init_esm_shims
10
- } from "./chunk-R4DPQLS2.js";
10
+ } from "./chunk-H55KECVT.js";
11
11
 
12
12
  // node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/typescript.js
13
13
  var require_typescript = __commonJS({
@@ -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-H55KECVT.js";
7
7
 
8
8
  // src/witan/git-exec.ts
9
9
  init_esm_shims();
@@ -54,6 +54,10 @@ var init_esm_shims = __esm({
54
54
  }
55
55
  });
56
56
 
57
+ // src/filesystem-limits.ts
58
+ init_esm_shims();
59
+ var MAX_REPOSITORY_CONTENT_BYTES = 512e3;
60
+
57
61
  // src/witan/content-reads.ts
58
62
  init_esm_shims();
59
63
  import { closeSync, lstatSync, openSync, readFileSync, readSync } from "fs";
@@ -145,6 +149,13 @@ function withContentReadCriterion(criterion, collect) {
145
149
  function recordContentSkip(path2, reason, deduplicate = false) {
146
150
  recordSkip(path2, reason, void 0, false, deduplicate);
147
151
  }
152
+ function recordContentSkipForCriteria(path2, reason, criteria, deduplicate = false) {
153
+ const session = activeSession;
154
+ if (session) {
155
+ for (const criterion of criteria) session.affectedCriteria.add(criterion);
156
+ }
157
+ recordSkip(path2, reason, void 0, false, deduplicate);
158
+ }
148
159
  function recordFilesystemSkip(path2, error, deniedContext = false, deduplicate = true) {
149
160
  const errno = errnoClass(error);
150
161
  if (!errno) throw error;
@@ -161,6 +172,10 @@ function readRepoText(path2, encoding = "utf8") {
161
172
  recordSkip(path2, "non_regular_file", void 0, true, true);
162
173
  return "";
163
174
  }
175
+ if (stat.size > MAX_REPOSITORY_CONTENT_BYTES) {
176
+ recordSkip(path2, "too_large", void 0, true, true);
177
+ return "";
178
+ }
164
179
  } catch (error) {
165
180
  recordFilesystemSkip(path2, error);
166
181
  return "";
@@ -211,9 +226,11 @@ export {
211
226
  __dirname,
212
227
  __filename,
213
228
  init_esm_shims,
229
+ MAX_REPOSITORY_CONTENT_BYTES,
214
230
  trackContentReads,
215
231
  withContentReadCriterion,
216
232
  recordContentSkip,
233
+ recordContentSkipForCriteria,
217
234
  recordFilesystemSkip,
218
235
  readRepoText,
219
236
  readRepoTextPrefix
@@ -5,10 +5,10 @@ import {
5
5
  describeGitFailure,
6
6
  execGit,
7
7
  isExpectedGitAbsence
8
- } from "./chunk-EPK7UTIK.js";
8
+ } from "./chunk-BZXBLDCJ.js";
9
9
  import {
10
10
  init_esm_shims
11
- } from "./chunk-R4DPQLS2.js";
11
+ } from "./chunk-H55KECVT.js";
12
12
 
13
13
  // src/packs/llm/files.ts
14
14
  init_esm_shims();