@cejel/cejel 0.4.2 → 0.4.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.
package/README.md CHANGED
@@ -68,7 +68,7 @@ if (-not $expected -or $actual -ne $expected.ToLowerInvariant()) {
68
68
  ```
69
69
 
70
70
  > **Windows signing status:** `cejel-Windows-x86_64.exe` is intentionally unsigned in
71
- > 0.4.2 and may trigger Microsoft SmartScreen. The release build removes Node's inherited
71
+ > 0.4.3 and may trigger Microsoft SmartScreen. The release build removes Node's inherited
72
72
  > signature before SEA injection and fails unless Windows reports the result as `NotSigned`;
73
73
  > it does not ship an invalid signature. Before running it, verify `SHA256SUMS` and the
74
74
  > GitHub build-provenance attestation. Each binary also has an attached SPDX SBOM and an
@@ -91,7 +91,7 @@ docker run --rm --network=none -v "$PWD:/w" -w /w -v "$PWD/cejel:/cejel:ro" debi
91
91
  npx @cejel/cejel@latest .
92
92
  ```
93
93
 
94
- > **Distribution note:** Cejel `0.4.2` is the coordinated release version for npm,
94
+ > **Distribution note:** Cejel `0.4.3` is the coordinated release version for npm,
95
95
  > standalone binaries, Docker/OCI, GitHub Action, Homebrew, and MCP Registry.
96
96
 
97
97
  `npx` can reuse a stale cached package. Force the current npm release with the `@latest`
@@ -105,7 +105,7 @@ If a root `package.json` still carries a template name, override only the certif
105
105
  name while keeping the repository-derived stable slug:
106
106
 
107
107
  ```bash
108
- npx @cejel/cejel . --name "Customer Portal"
108
+ npx @cejel/cejel@latest . --name "Customer Portal"
109
109
  ```
110
110
 
111
111
  The npm package is scoped as `@cejel/cejel`; its executable remains the short command `cejel`.
@@ -140,16 +140,16 @@ gh attestation verify ./cejel-Windows-x86_64.exe -R BargLabs/cejel
140
140
  This is cryptographically signed provenance. It is distinct from Apple Developer ID or
141
141
  Microsoft Authenticode code-signing.
142
142
 
143
- **Docker / OCI.** The current container release is `0.4.2`:
143
+ **Docker / OCI.** The current container release is `0.4.3`:
144
144
 
145
145
  ```bash
146
- docker run --rm -i -v "$PWD:/workspace:ro" ghcr.io/barglabs/cejel:0.4.2
146
+ docker run --rm -i -v "$PWD:/workspace:ro" ghcr.io/barglabs/cejel:0.4.3
147
147
  ```
148
148
 
149
149
  The image defaults to `cejel-mcp` over stdio. To use the CLI instead:
150
150
 
151
151
  ```bash
152
- docker run --rm -v "$PWD:/workspace:ro" --entrypoint cejel ghcr.io/barglabs/cejel:0.4.2 .
152
+ docker run --rm -v "$PWD:/workspace:ro" --entrypoint cejel ghcr.io/barglabs/cejel:0.4.3 .
153
153
  ```
154
154
 
155
155
  The OCI image carries an SBOM, maximum-mode build provenance, and a signed registry
@@ -162,7 +162,7 @@ projects, the public Cejel repository itself, and one explicitly labeled transpa
162
162
  snapshot from the private studio monorepo where Cejel was built, with a per-repository
163
163
  evidence report for every row under [`leaderboard/reports/`](./leaderboard/reports/). The
164
164
  board is also hosted at [cejel.dev](https://cejel.dev). Every score is produced by the same
165
- sealed public scorer used by `npx @cejel/cejel .`; no private domain collector contributes.
165
+ sealed public scorer used by `npx @cejel/cejel@latest .`; no private domain collector contributes.
166
166
  For each public-repository row, check out the immutable source commit printed in its report
167
167
  and run the public scorer to reproduce the score, verdict, measured coverage, and evidence.
168
168
  The private Alfred snapshot discloses its limitation instead: its source commit and withheld
@@ -426,7 +426,7 @@ The OCI image is an alternative when Docker is the preferred execution boundary.
426
426
  the host path with the repository OpenClaw should allow Cejel to read:
427
427
 
428
428
  ```bash
429
- openclaw mcp set cejel-oci '{"command":"docker","args":["run","--rm","-i","-v","/absolute/path/to/repo:/workspace:ro","ghcr.io/barglabs/cejel:0.4.2"]}'
429
+ openclaw mcp set cejel-oci '{"command":"docker","args":["run","--rm","-i","-v","/absolute/path/to/repo:/workspace:ro","ghcr.io/barglabs/cejel:0.4.3"]}'
430
430
  openclaw mcp doctor cejel-oci --probe
431
431
  ```
432
432
 
@@ -4771,6 +4771,11 @@ function isCoverageNotMeasured(criterion, metric2) {
4771
4771
  ...criterion.findings.map((finding) => finding.evidence)
4772
4772
  ].some((evidence) => evidence.kind === "coverage");
4773
4773
  }
4774
+ function labelAlreadyStatesUnit(label, unit) {
4775
+ if (!unit) return false;
4776
+ const escapedUnit = unit.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
4777
+ return new RegExp(`(?:^|[\\s-])${escapedUnit}$`, "i").test(label.trim());
4778
+ }
4774
4779
  function formatCertificateMetricValue(criterion, metric2) {
4775
4780
  if (isCoverageNotMeasured(criterion, metric2)) {
4776
4781
  return "no coverage report found \u2014 not measured";
@@ -4781,7 +4786,7 @@ function formatCertificateMetricValue(criterion, metric2) {
4781
4786
  const comparison = `${tests} test file${metric2.value === 1 ? "" : "s"} / ${sources} source file${metric2.max === 1 ? "" : "s"}`;
4782
4787
  return metric2.value > metric2.max ? `${comparison} (credit capped at parity)` : comparison;
4783
4788
  }
4784
- const displayUnit = metric2.name === "prod_readiness_primitives" || metric2.name === "pr_trace_primitives" ? "checks" : metric2.unit;
4789
+ const displayUnit = metric2.name === "prod_readiness_primitives" || metric2.name === "pr_trace_primitives" ? "checks" : labelAlreadyStatesUnit(formatCertificateMetricLabel(metric2), metric2.unit) ? void 0 : metric2.unit;
4785
4790
  const unit = displayUnit ? ` ${displayUnit}` : "";
4786
4791
  if (metric2.max === void 0) return `${formatMetricNumber(metric2.value)}${unit}`;
4787
4792
  if (metric2.kind === "saturating_count" && metric2.value > metric2.max) {
@@ -4892,7 +4897,7 @@ function renderFindingSummary(criterion, finding) {
4892
4897
  return `${criterion.id} dimension band is ${band} at ${score}/4.0. Lowest contributing measurements: ${measurements}. To improve: ${actions}.`;
4893
4898
  }
4894
4899
  function selectLowestDrivers(metrics) {
4895
- return [...metrics].filter((metric2) => metric2.max !== void 0).sort((left, right) => {
4900
+ return [...metrics].filter((metric2) => metric2.max !== void 0 && normalizedMetricValue(metric2) < 1).sort((left, right) => {
4896
4901
  const leftRatio = normalizedMetricValue(left);
4897
4902
  const rightRatio = normalizedMetricValue(right);
4898
4903
  if (leftRatio !== rightRatio) return leftRatio - rightRatio;
@@ -5345,11 +5350,12 @@ h3 { font-size: 15px; line-height: 1.35; font-weight: 600; margin-bottom: 0; }
5345
5350
  .term-help { position: relative; cursor: help; outline: none; }
5346
5351
  .term-help:focus-visible { box-shadow: 0 0 0 2px var(--periwinkle); border-radius: 3px; }
5347
5352
  .term-tooltip {
5348
- position: absolute; z-index: 10; left: 0; bottom: calc(100% + 8px); width: min(320px, 75vw);
5353
+ position: absolute; z-index: 100; left: 0; bottom: calc(100% + 8px); width: min(320px, 75vw);
5349
5354
  visibility: hidden; opacity: 0; pointer-events: none; white-space: normal;
5350
5355
  border: 1px solid var(--line-strong); border-radius: 6px; padding: 9px 11px;
5351
5356
  background: #101b2a; color: var(--text); font-family: var(--sans); font-size: 12px;
5352
5357
  font-weight: 400; line-height: 1.45; text-transform: none; letter-spacing: normal;
5358
+ box-shadow: 0 10px 28px rgba(0, 0, 0, .55);
5353
5359
  transition: opacity .12s ease;
5354
5360
  }
5355
5361
  .term-help:hover > .term-tooltip, .term-help:focus-within > .term-tooltip { visibility: visible; opacity: 1; }
@@ -7128,7 +7134,7 @@ function collectA3ProdReadinessEvidence(repoPath, repoFiles, useV27Detectors) {
7128
7134
  metrics: [
7129
7135
  metric(
7130
7136
  "prod_readiness_primitives",
7131
- "Production-readiness primitive coverage",
7137
+ "Production-readiness basic checks",
7132
7138
  [
7133
7139
  packageJson && (scripts.has("build") || scripts.has("typecheck")),
7134
7140
  workflows.length > 0,
@@ -7139,8 +7145,8 @@ function collectA3ProdReadinessEvidence(repoPath, repoFiles, useV27Detectors) {
7139
7145
  ].filter(Boolean).length,
7140
7146
  6,
7141
7147
  0.55,
7142
- "primitives",
7143
- "Counts distinct static production-readiness primitives instead of treating presence as enough."
7148
+ "checks",
7149
+ "Counts distinct static production-readiness checks instead of treating presence as enough."
7144
7150
  ),
7145
7151
  metric(
7146
7152
  "prod_workflow_depth",
@@ -7481,7 +7487,7 @@ function collectB2PrTraceEvidence(repoPath, repoFiles) {
7481
7487
  // sat well under half credit here even with a healthy PR-trace posture.
7482
7488
  metric(
7483
7489
  "pr_trace_primitives",
7484
- "PR trace primitive coverage",
7490
+ "PR trace basic checks",
7485
7491
  workflows.length + (prTemplate ? 1 : 0) + (branchProtectionDoc ? 1 : 0),
7486
7492
  2,
7487
7493
  0.8,
@@ -11337,7 +11343,7 @@ function renderFindingSummary2(criterion, finding) {
11337
11343
  return `${criterion.id} dimension band is ${band} at ${score}/4.0. Lowest contributing measurements: ${measurements}. To improve: ${actions}.`;
11338
11344
  }
11339
11345
  function selectLowestDrivers2(metrics) {
11340
- return [...metrics].filter((metric2) => metric2.max !== void 0).sort((left, right) => {
11346
+ return [...metrics].filter((metric2) => metric2.max !== void 0 && normalizedMetricValue2(metric2) < 1).sort((left, right) => {
11341
11347
  const leftRatio = normalizedMetricValue2(left);
11342
11348
  const rightRatio = normalizedMetricValue2(right);
11343
11349
  if (leftRatio !== rightRatio) return leftRatio - rightRatio;
package/dist/index.js CHANGED
@@ -15,7 +15,7 @@ import {
15
15
  runCejelScan,
16
16
  serializeWitanReport,
17
17
  verifyWitanAttestationBinding
18
- } from "./chunk-WLOMKEFR.js";
18
+ } from "./chunk-ITHPLYKX.js";
19
19
  import {
20
20
  init_esm_shims
21
21
  } from "./chunk-LZVKQV3R.js";
package/dist/mcp/index.js CHANGED
@@ -9,7 +9,7 @@ import {
9
9
  renderWitanBadgeSvg,
10
10
  renderWitanHtmlReport,
11
11
  runCejelScan
12
- } from "../chunk-WLOMKEFR.js";
12
+ } from "../chunk-ITHPLYKX.js";
13
13
  import {
14
14
  __commonJS,
15
15
  __export,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cejel/cejel",
3
- "version": "0.4.2",
3
+ "version": "0.4.3",
4
4
  "mcpName": "io.github.BargLabs/cejel",
5
5
  "private": false,
6
6
  "publishConfig": {