@cejel/cejel 0.4.10 → 0.5.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/README.md +9 -9
- package/dist/calibration/llm-detector.js +5 -5
- package/dist/{chunk-TUUNJP27.js → chunk-2453M7C2.js} +8525 -8096
- package/dist/{chunk-IHT7B6L7.js → chunk-63XQDYQ5.js} +1 -1
- package/dist/{chunk-GKYTLWQK.js → chunk-FSMZV3Y6.js} +1 -1
- package/dist/{chunk-IN2LPGGU.js → chunk-M6YYPJSN.js} +2 -2
- package/dist/{chunk-PTZU6G4E.js → chunk-O3MHSK25.js} +34 -6
- package/dist/{chunk-IQ42TE5H.js → chunk-RH6FKREX.js} +1 -1
- package/dist/index.js +823 -27
- package/dist/mcp/index.js +4 -4
- package/dist/packs/d-series/index.js +4 -4
- package/dist/packs/decision-contracts/index.js +3 -3
- package/docs/security/README.md +78 -0
- package/docs/security/issuer-revocations +18 -0
- package/docs/security/issuer-signers +34 -0
- package/package.json +5 -2
package/dist/mcp/index.js
CHANGED
|
@@ -5,20 +5,20 @@ import {
|
|
|
5
5
|
renderWitanBadgeSvg,
|
|
6
6
|
renderWitanHtmlReport,
|
|
7
7
|
runCejelScan
|
|
8
|
-
} from "../chunk-
|
|
9
|
-
import "../chunk-
|
|
8
|
+
} from "../chunk-2453M7C2.js";
|
|
9
|
+
import "../chunk-63XQDYQ5.js";
|
|
10
10
|
import {
|
|
11
11
|
ZodFirstPartyTypeKind,
|
|
12
12
|
ZodOptional,
|
|
13
13
|
external_exports,
|
|
14
14
|
objectType
|
|
15
|
-
} from "../chunk-
|
|
15
|
+
} from "../chunk-FSMZV3Y6.js";
|
|
16
16
|
import {
|
|
17
17
|
__commonJS,
|
|
18
18
|
__export,
|
|
19
19
|
__toESM,
|
|
20
20
|
init_esm_shims
|
|
21
|
-
} from "../chunk-
|
|
21
|
+
} from "../chunk-O3MHSK25.js";
|
|
22
22
|
|
|
23
23
|
// node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/compile/codegen/code.js
|
|
24
24
|
var require_code = __commonJS({
|
|
@@ -3,18 +3,18 @@ import { createRequire as __cejelCreateRequire } from 'node:module';
|
|
|
3
3
|
const require = __cejelCreateRequire(import.meta.url);
|
|
4
4
|
import {
|
|
5
5
|
listCejelLlmPackFiles
|
|
6
|
-
} from "../../chunk-
|
|
6
|
+
} from "../../chunk-M6YYPJSN.js";
|
|
7
7
|
import {
|
|
8
8
|
execGit
|
|
9
|
-
} from "../../chunk-
|
|
9
|
+
} from "../../chunk-63XQDYQ5.js";
|
|
10
10
|
import {
|
|
11
11
|
require_typescript
|
|
12
|
-
} from "../../chunk-
|
|
12
|
+
} from "../../chunk-RH6FKREX.js";
|
|
13
13
|
import {
|
|
14
14
|
__toESM,
|
|
15
15
|
init_esm_shims,
|
|
16
16
|
readRepoText
|
|
17
|
-
} from "../../chunk-
|
|
17
|
+
} from "../../chunk-O3MHSK25.js";
|
|
18
18
|
|
|
19
19
|
// src/packs/d-series/index.ts
|
|
20
20
|
init_esm_shims();
|
|
@@ -3,15 +3,15 @@ import { createRequire as __cejelCreateRequire } from 'node:module';
|
|
|
3
3
|
const require = __cejelCreateRequire(import.meta.url);
|
|
4
4
|
import {
|
|
5
5
|
external_exports
|
|
6
|
-
} from "../../chunk-
|
|
6
|
+
} from "../../chunk-FSMZV3Y6.js";
|
|
7
7
|
import {
|
|
8
8
|
require_typescript
|
|
9
|
-
} from "../../chunk-
|
|
9
|
+
} from "../../chunk-RH6FKREX.js";
|
|
10
10
|
import {
|
|
11
11
|
__toESM,
|
|
12
12
|
init_esm_shims,
|
|
13
13
|
readRepoText
|
|
14
|
-
} from "../../chunk-
|
|
14
|
+
} from "../../chunk-O3MHSK25.js";
|
|
15
15
|
|
|
16
16
|
// src/packs/decision-contracts/index.ts
|
|
17
17
|
init_esm_shims();
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
# Calibration record authority in this repository
|
|
2
|
+
|
|
3
|
+
`docs/calibration/**` is treated as an authority path: B10, the cycle-13 freeze and the
|
|
4
|
+
disclosure boundary all rest on records kept there. Until 2026-09-16 nothing in this repository
|
|
5
|
+
could establish that authority. This page says what changed, and what did not.
|
|
6
|
+
|
|
7
|
+
## What was measured, 2026-09-16
|
|
8
|
+
|
|
9
|
+
Every commit that has ever touched `docs/calibration/` in this repository, with its git signature
|
|
10
|
+
status (`%G?`: `G` good signature from a listed key, `E` signed by a key this repository does not
|
|
11
|
+
list, `N` unsigned):
|
|
12
|
+
|
|
13
|
+
| commit | `%G?` | subject |
|
|
14
|
+
|---|---|---|
|
|
15
|
+
| `209a058` | E | calibration: publish the v22 detection-recall measurement record (#315) |
|
|
16
|
+
| `ebf4a33` | E | docs(calibration): v17 holdout reveal + hash-conventions doc (#222) |
|
|
17
|
+
| `787b218` | N | docs: record orphaned v0.3.0 provenance |
|
|
18
|
+
| `5afebfe` | N | docs: clarify v0.3.0 tag fast-forward |
|
|
19
|
+
| `bce29c1` | N | docs: record v0.3.0 tag correction |
|
|
20
|
+
| `307330e` | N | docs: preserve terminal GO binding |
|
|
21
|
+
| `f085908` | N | docs: disclose npm provenance gap |
|
|
22
|
+
| `2515814` | E | docs(evidence): free-core v50 multiple-comparisons disclosure (#41) |
|
|
23
|
+
|
|
24
|
+
**Five unsigned, three signed by an unlisted key, none verifiable.** The repository shipped no
|
|
25
|
+
allowed-signers file and no check read a signature, so the `--merge`-not-`--squash` discipline
|
|
26
|
+
that protects a calibration signature preserved something no reader could confirm: `209a058`,
|
|
27
|
+
merged carefully to keep its signature, reads exactly as `ebf4a33`, which was squashed.
|
|
28
|
+
|
|
29
|
+
This is not degradation from a working state. cejel has never produced a verifiable calibration
|
|
30
|
+
signature. Stating it plainly matters because "signed" and "unverifiable" look identical to anyone
|
|
31
|
+
who does not run `%G?` by hand, and a record whose authority cannot be checked is a record, not an
|
|
32
|
+
attestation.
|
|
33
|
+
|
|
34
|
+
## What the gate does
|
|
35
|
+
|
|
36
|
+
`scripts/check-calibration-signatures.mjs`, run on every pull request that touches a guarded path,
|
|
37
|
+
requires each commit touching `docs/calibration/**` or root `FREEZE.md` to carry a signature from a key in
|
|
38
|
+
`docs/security/allowed-signers`. It fails closed: a missing or key-less allowed-signers file is a
|
|
39
|
+
failure rather than a skip, because "nobody may sign" must never read the same as "anybody may".
|
|
40
|
+
`E` fails exactly as `N` does — accepting `E` would have passed the whole history above and
|
|
41
|
+
reported success.
|
|
42
|
+
|
|
43
|
+
A squash merge substitutes GitHub's web-flow key and produces `E`. Merge calibration pull requests
|
|
44
|
+
with `--merge`.
|
|
45
|
+
|
|
46
|
+
## What the gate does not do
|
|
47
|
+
|
|
48
|
+
It does not reach backwards, and no amount of later signing can make the eight commits above
|
|
49
|
+
verifiable. Records that predate the gate carry the authority of the process that produced them
|
|
50
|
+
and of this disclosure — not of a signature anyone can check. A document citing one of them as an
|
|
51
|
+
attestation is overstating it, and should cite this page alongside.
|
|
52
|
+
|
|
53
|
+
The gate also says nothing about *content*. It establishes that a listed key signed the commit, and
|
|
54
|
+
nothing about whether the measurement in it is sound. Provenance is not correctness.
|
|
55
|
+
|
|
56
|
+
Marker supersession uses the same verifier; see [measurement freeze](../measurement-freeze.md) for the chain, parent-pinned allowlist, and operator transition commands.
|
|
57
|
+
|
|
58
|
+
## Allowlist bootstrap provenance — reverified 2026-09-16
|
|
59
|
+
|
|
60
|
+
The initial `docs/security/allowed-signers` file was introduced by
|
|
61
|
+
`77fd3d27850fa928bcea70ba5fae622e8bda4465`, the squash merge of #318. With the
|
|
62
|
+
repository's SSH allowlist explicitly configured, local Git reports `%G?=E` and
|
|
63
|
+
key id `B5690EEEBB952194` (GitHub web-flow). This is not an operator SSH signature
|
|
64
|
+
verifiable under that allowlist. `E` describes this verification environment;
|
|
65
|
+
it does not claim that no one can cryptographically verify GitHub's signature.
|
|
66
|
+
|
|
67
|
+
The forward transition check trusts the parent commit's allowlist. That blocks a
|
|
68
|
+
transition from adding its own key in the same commit, but it does not independently
|
|
69
|
+
establish the identity or authorization of the initial enrolled key. Initial key
|
|
70
|
+
admission remains a bootstrap trust decision, separate from the eight historical
|
|
71
|
+
calibration records listed above.
|
|
72
|
+
|
|
73
|
+
The operator may re-establish that decision with an explicitly reviewed enrollment
|
|
74
|
+
acknowledgement, recording how the key was independently authenticated and preserving
|
|
75
|
+
an operator-signed commit without squashing. A later signature proves possession
|
|
76
|
+
of the signing key; it does not by itself establish the signer's identity or
|
|
77
|
+
retroactively turn `77fd3d2` into an operator-signed admission. This proposal only
|
|
78
|
+
discloses the boundary. It neither changes the allowlist nor signs an acknowledgement.
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
# Withdrawn Cejel issuances. One line per withdrawal:
|
|
2
|
+
#
|
|
3
|
+
# <report-sha256> <YYYY-MM-DD> <one sentence saying why>
|
|
4
|
+
#
|
|
5
|
+
# The digest is the sha256 of the exact report.json bytes the withdrawn issuance countersigned —
|
|
6
|
+
# the same value `cejel verify` prints and the same value the issuance carries as its report.json
|
|
7
|
+
# subject. `cejel verify` reports a listed digest as REVOKED and exits nonzero.
|
|
8
|
+
#
|
|
9
|
+
# APPEND-ONLY. A line here is never removed, edited, or reordered: a withdrawal that could be
|
|
10
|
+
# quietly reversed is not a withdrawal. Correcting a mistaken entry means appending a second line
|
|
11
|
+
# that says so, not deleting the first. This is enforced by
|
|
12
|
+
# src/__tests__/issuance-revocations-append-only.test.ts, which pins the exact bytes below.
|
|
13
|
+
#
|
|
14
|
+
# This file is EMPTY of entries, and it ships empty on purpose. The absence of revocations is a
|
|
15
|
+
# statement a reader can check, not an omission they have to infer. It ships in the npm package and
|
|
16
|
+
# in every release tarball, so the check needs no network call.
|
|
17
|
+
#
|
|
18
|
+
# ---- entries below this line ----
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
# The allowed-signers file for Cejel ISSUANCE countersignatures. One line per signer:
|
|
2
|
+
# <principal> <keytype> <base64-key> [comment], the format `ssh-keygen -Y verify -f` reads.
|
|
3
|
+
#
|
|
4
|
+
# This is a DIFFERENT authority from docs/security/allowed-signers, which governs calibration
|
|
5
|
+
# records. Issuance signatures carry the namespace `cejel-issuance`; calibration authority uses its
|
|
6
|
+
# own. A key listed in one file is not thereby listed in the other, and a signature made under one
|
|
7
|
+
# namespace does not verify under the other.
|
|
8
|
+
#
|
|
9
|
+
# Principal: issuance@barglabs.ai
|
|
10
|
+
#
|
|
11
|
+
# This file names no key on purpose. Admitting one is an authority decision and belongs to the
|
|
12
|
+
# operator, not to an agent: the key listed here is what a relying party will thereafter accept as
|
|
13
|
+
# Barg Labs' issuing hand. `cejel verify` fails closed while this file is empty — a signature made
|
|
14
|
+
# by an unlisted key is reported as "signed by an unlisted key", never as valid.
|
|
15
|
+
#
|
|
16
|
+
# An agent must not write a key into this file.
|
|
17
|
+
#
|
|
18
|
+
# SUPPORTED KEY TYPES: `cejel verify` verifies `ssh-ed25519` only. Any other key type — including
|
|
19
|
+
# the FIDO/hardware-backed `sk-ssh-ed25519@openssh.com` — is reported as NOT VERIFIED rather than
|
|
20
|
+
# valid, and must be checked with OpenSSH directly (see docs/issuance.md). Before enrolling a key
|
|
21
|
+
# here, confirm its type: enrolling one cejel cannot verify ships a certificate whose signature
|
|
22
|
+
# most readers cannot check with the tool they were handed.
|
|
23
|
+
#
|
|
24
|
+
# To verify an issuance with OpenSSH alone, no Cejel involved:
|
|
25
|
+
#
|
|
26
|
+
# ssh-keygen -Y verify -f docs/security/issuer-signers -I issuance@barglabs.ai \
|
|
27
|
+
# -n cejel-issuance -s issuance.json.sig < issuance.json
|
|
28
|
+
#
|
|
29
|
+
# Key rotation is recorded here, in place, with dates: a retired key keeps its line with a comment
|
|
30
|
+
# giving the date it stopped being used, so a reader can still check an issuance made while it was
|
|
31
|
+
# current. A line is never silently deleted.
|
|
32
|
+
#
|
|
33
|
+
# This file ships in the npm package and in every release tarball, so a relying party holds the
|
|
34
|
+
# list without a network call.
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cejel/cejel",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.5.0",
|
|
4
4
|
"mcpName": "io.github.BargLabs/cejel",
|
|
5
5
|
"private": false,
|
|
6
6
|
"publishConfig": {
|
|
@@ -44,7 +44,9 @@
|
|
|
44
44
|
"files": [
|
|
45
45
|
"dist",
|
|
46
46
|
"README.md",
|
|
47
|
-
"LICENSE"
|
|
47
|
+
"LICENSE",
|
|
48
|
+
"docs/security/issuer-signers",
|
|
49
|
+
"docs/security/issuer-revocations"
|
|
48
50
|
],
|
|
49
51
|
"engines": {
|
|
50
52
|
"node": ">=18"
|
|
@@ -61,6 +63,7 @@
|
|
|
61
63
|
"gate:d5": "pnpm run build && node scripts/d5-precision-gate.mjs",
|
|
62
64
|
"gate:d6": "pnpm run build && node scripts/d6-precision-gate.mjs",
|
|
63
65
|
"validate:distribution": "node scripts/validate-distribution-metadata.mjs",
|
|
66
|
+
"test:release": "bash scripts/release_tests.sh",
|
|
64
67
|
"pnpm:devPreinstall": "node scripts/assert-dev-environment.mjs --phase=preinstall",
|
|
65
68
|
"prepublishOnly": "pnpm run build",
|
|
66
69
|
"prepack": "pnpm run build",
|