@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 +8 -8
- package/dist/{chunk-WLOMKEFR.js → chunk-ITHPLYKX.js} +14 -8
- package/dist/index.js +1 -1
- package/dist/mcp/index.js +1 -1
- package/package.json +1 -1
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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:
|
|
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
|
|
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
|
-
"
|
|
7143
|
-
"Counts distinct static production-readiness
|
|
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
|
|
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
package/dist/mcp/index.js
CHANGED