@mikeargento/bitgraph-player 0.2.1 → 0.3.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/SPEC.md CHANGED
@@ -1,7 +1,10 @@
1
- # BitGraph Player specification, version 1
1
+ # BitGraph Player specification
2
2
 
3
- This document is the normative semantics of `bitgraph-player/1` rules and
4
- `bitgraph-player-verdict/1` verdicts. The TypeScript package in this
3
+ This document is the normative semantics of `bitgraph-player/1` and
4
+ `bitgraph-player/2` rules and their verdicts (`bitgraph-player-verdict/1`
5
+ and `/2`). Sections 1 through 8 define format 1; section 9 defines the
6
+ format 2 extension. A format 1 rule MUST evaluate identically under an
7
+ evaluator that also implements format 2, to the byte. The TypeScript package in this
5
8
  directory is the reference implementation; a conforming Player in any
6
9
  language MUST reach the same result and, for the serialization defined in
7
10
  section 7, the same bytes.
@@ -41,11 +44,12 @@ A rule is a JSON object with exactly these top-level fields:
41
44
 
42
45
  | field | required | value |
43
46
  |---|---|---|
44
- | `rule` | yes | the string `"bitgraph-player/1"` |
47
+ | `rule` | yes | `"bitgraph-player/1"`, or `"bitgraph-player/2"` (section 9) |
45
48
  | `id` | yes | non-empty string naming the rule |
46
49
  | `cast` | yes | object of at least one role (section 3) |
47
50
  | `world` | yes | the string `"closed"` (the only defined value) |
48
51
  | `requires` | yes | `{ "ordering": "hash-linked" \| "assumption-dependent" }` |
52
+ | `trustedKeys` | no | format 2 only (section 9.1) |
49
53
  | `claim` | yes | a claim (section 5) |
50
54
  | `then` | no | `{ "label": <non-empty string> }` |
51
55
 
@@ -237,3 +241,85 @@ These requirements govern evaluation invocations. A command-line Player
237
241
  MAY offer authoring conveniences (such as rule scaffolding) as distinct
238
242
  subcommands; those are outside this specification and MUST NOT change
239
243
  the behavior of evaluation invocations.
244
+
245
+ ## 9. Format 2: trustedKeys and signedBy
246
+
247
+ Format 2 (`"rule": "bitgraph-player/2"`) is format 1 plus signature
248
+ claims. Everything in sections 1 through 8 applies unchanged. Two
249
+ additions:
250
+
251
+ ### 9.1 trustedKeys
252
+
253
+ An optional top-level object naming keys the rule author trusts:
254
+
255
+ "trustedKeys": { "<name>": { "alg": "ed25519" | "es256",
256
+ "publicKey": "<base64>" } }
257
+
258
+ Key names obey the role-name grammar (at least one non-digit). For
259
+ `ed25519` the publicKey is the raw 32-byte key in standard base64 — the
260
+ spelling bitgraph/1 proofs use for signer keys. For `es256` (ECDSA P-256
261
+ over SHA-256) it is SPKI DER in base64.
262
+
263
+ The name-to-key binding is DECLARED trust: the verdict surfaces every
264
+ entry in `declared` as `{ assertion: "trusted-key", verifiedHere: false }`.
265
+ Player verifies signature MATH against the key material; that the key
266
+ belongs to the named party is the rule author's assertion, exactly like a
267
+ cast digest's `means`. SIGNED_BY remains not a BitGraph primitive:
268
+ format 2 does not change what the chain knows, only what a rule can
269
+ verify about supplied evidence.
270
+
271
+ ### 9.2 The bitgraph-sig/1 evidence file
272
+
273
+ A signature file is a JSON object:
274
+
275
+ { "sig": "bitgraph-sig/1", "over": <digest>, "alg": <alg>,
276
+ "publicKey": <base64>, "signature": <base64> }
277
+
278
+ `over` accepts the digest spellings of section 3. The signed message is
279
+ the UTF-8 bytes of:
280
+
281
+ "bitgraph-sig/1\n" + lowercase hex SHA-256 of the target bytes
282
+
283
+ Domain separation is deliberate: a signature made in any other protocol
284
+ over the same digest is not a bitgraph-sig. For `ed25519` the signature
285
+ is the raw 64-byte form, base64; for `es256` it is DER-encoded ECDSA,
286
+ base64, verified over SHA-256 of the message.
287
+
288
+ ### 9.3 The signedBy claim
289
+
290
+ { "signedBy": [<roleName>, <trustedKeyName>] }
291
+
292
+ Valid only in format 2. The key name MUST be declared in trustedKeys;
293
+ an unresolvable reference is a parse error. Semantics:
294
+
295
+ | situation | result |
296
+ |---|---|
297
+ | role not declared in the cast | UNDETERMINED |
298
+ | trusted key material not decodable | UNDETERMINED |
299
+ | a supplied evidence file parses as bitgraph-sig/1, its `over` decodes to the role's digest bytes, its alg and publicKey equal the trusted key's, and the signature verifies | TRUE |
300
+ | otherwise | UNDETERMINED |
301
+
302
+ **signedBy is TRUE or UNDETERMINED, never FALSE.** "This key never
303
+ signed these bytes" is a negative over an open world: signatures can
304
+ exist outside any bundle, so absence of one proves nothing, and
305
+ `not(signedBy(...))` is therefore permanently UNDETERMINED under the
306
+ section 1 tables. A malformed or non-verifying signature file is not
307
+ evidence and not an error.
308
+
309
+ The claim is about BITS, not occurrences: it evaluates against the
310
+ declared role digest whether or not the role resolved to a recording.
311
+ Signature claims carry no ordering tier and never contribute to
312
+ `weakestEvidence`; a signature file's own causal position, when it has
313
+ been recorded, is claimed with the ordinary ordering predicates over a
314
+ role declaring the signature file's digest.
315
+
316
+ ### 9.4 Evidence supply
317
+
318
+ Evaluation is a pure function; candidate signature bytes are an input.
319
+ A command-line Player evaluating a bundle MUST take as candidates every
320
+ bundle artifact that is matched to an observed proof and no larger than
321
+ 1,048,576 bytes, keyed by content hash; embedders MAY supply additional
322
+ candidates. Candidates are scanned in ascending content-hash order and
323
+ the first verifying file decides, so the verdict is deterministic for a
324
+ given evidence set. A format 2 verdict is `bitgraph-player-verdict/2`;
325
+ the serialization discipline of section 7 is unchanged.
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=sig-v2.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sig-v2.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/sig-v2.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,266 @@
1
+ // Copyright (c) 2024-2026 Mike Argento. Licensed under the MIT License. See LICENSE.
2
+ /**
3
+ * Format 2: trustedKeys + signedBy.
4
+ *
5
+ * The invariants under test:
6
+ * - signedBy is TRUE or UNDETERMINED, never FALSE, so not(signedBy)
7
+ * is permanently UNDETERMINED: no open-world negative escapes.
8
+ * - Signature math is derived; the name-to-key binding is declared.
9
+ * - A /1 rule parses and evaluates exactly as before (verdict/1), and
10
+ * /2-only syntax in a /1 rule is a parse error.
11
+ * - Broken signature files are noise, never evidence and never errors.
12
+ *
13
+ * All evidence is synthetic and in-memory. No ledger writes, ever.
14
+ */
15
+ import { strict as assert } from "node:assert";
16
+ import { createHash, generateKeyPairSync, sign as cryptoSign } from "node:crypto";
17
+ import { test } from "node:test";
18
+ import { evaluate } from "../evaluate.js";
19
+ import { playAudit, claimUsesSignatures } from "../play.js";
20
+ import { parseRule, RuleError } from "../rule.js";
21
+ import { parseSigFile, sigMessage } from "../sig.js";
22
+ import { resolveCast } from "../cast.js";
23
+ import { digestFor, makeAudit } from "./fixtures.js";
24
+ // ---------------------------------------------------------------------------
25
+ // Key + signature helpers (in-memory, per-run keys; verification is the
26
+ // deterministic part under test, not key generation)
27
+ // ---------------------------------------------------------------------------
28
+ function ed25519Pair() {
29
+ const { publicKey, privateKey } = generateKeyPairSync("ed25519");
30
+ const spki = publicKey.export({ format: "der", type: "spki" });
31
+ // Raw key = last 32 bytes of the SPKI encoding.
32
+ return { publicKeyB64: spki.subarray(spki.length - 32).toString("base64"), privateKey };
33
+ }
34
+ function es256Pair() {
35
+ const { publicKey, privateKey } = generateKeyPairSync("ec", { namedCurve: "P-256" });
36
+ const spki = publicKey.export({ format: "der", type: "spki" });
37
+ return { publicKeyB64: spki.toString("base64"), privateKey };
38
+ }
39
+ function hexOfB64(digestB64) {
40
+ return Buffer.from(digestB64, "base64").toString("hex");
41
+ }
42
+ function makeSigBytes(alg, publicKeyB64, privateKey, overHex) {
43
+ const message = sigMessage(overHex);
44
+ const signature = alg === "ed25519"
45
+ ? cryptoSign(null, message, privateKey)
46
+ : cryptoSign("sha256", message, privateKey);
47
+ return Buffer.from(JSON.stringify({
48
+ sig: "bitgraph-sig/1",
49
+ over: `sha256:${overHex}`,
50
+ alg,
51
+ publicKey: publicKeyB64,
52
+ signature: signature.toString("base64"),
53
+ }));
54
+ }
55
+ function evidenceOf(...items) {
56
+ const map = new Map();
57
+ for (const bytes of items) {
58
+ map.set(createHash("sha256").update(bytes).digest("hex"), bytes);
59
+ }
60
+ return map;
61
+ }
62
+ const WORK = digestFor("work");
63
+ function v2Rule(publicKeyB64, alg, claim) {
64
+ return JSON.stringify({
65
+ rule: "bitgraph-player/2",
66
+ id: "test-v2",
67
+ cast: { work: { digest: WORK } },
68
+ world: "closed",
69
+ requires: { ordering: "assumption-dependent" },
70
+ trustedKeys: { mike: { alg, publicKey: publicKeyB64 } },
71
+ claim,
72
+ });
73
+ }
74
+ function auditWithWork() {
75
+ return makeAudit({
76
+ proofs: [{ name: "w", digestB64: WORK, epochId: "e1", counter: "1" }],
77
+ partitions: [{ epochId: "e1", members: ["w"] }],
78
+ });
79
+ }
80
+ // ---------------------------------------------------------------------------
81
+ // Parsing
82
+ // ---------------------------------------------------------------------------
83
+ test("signedBy in a /1 rule is a parse error", () => {
84
+ const text = JSON.stringify({
85
+ rule: "bitgraph-player/1",
86
+ id: "r",
87
+ cast: { work: { digest: WORK } },
88
+ world: "closed",
89
+ requires: { ordering: "hash-linked" },
90
+ claim: { signedBy: ["work", "mike"] },
91
+ });
92
+ assert.throws(() => parseRule(text), RuleError);
93
+ });
94
+ test("trustedKeys in a /1 rule is a parse error", () => {
95
+ const text = JSON.stringify({
96
+ rule: "bitgraph-player/1",
97
+ id: "r",
98
+ cast: { work: { digest: WORK } },
99
+ world: "closed",
100
+ requires: { ordering: "hash-linked" },
101
+ trustedKeys: { mike: { alg: "ed25519", publicKey: "A".repeat(43) + "=" } },
102
+ claim: { exists: "work" },
103
+ });
104
+ assert.throws(() => parseRule(text), RuleError);
105
+ });
106
+ test("signedBy referencing an undeclared trusted key is a parse error", () => {
107
+ const { publicKeyB64 } = ed25519Pair();
108
+ const text = v2Rule(publicKeyB64, "ed25519", { signedBy: ["work", "ghost"] });
109
+ assert.throws(() => parseRule(text), /does not declare/);
110
+ });
111
+ test("trustedKeys entries are strictly validated", () => {
112
+ for (const bad of [
113
+ { alg: "rsa", publicKey: "x" },
114
+ { alg: "ed25519" },
115
+ { publicKey: "x" },
116
+ { alg: "ed25519", publicKey: "x", extra: 1 },
117
+ ]) {
118
+ const text = JSON.stringify({
119
+ rule: "bitgraph-player/2",
120
+ id: "r",
121
+ cast: { work: { digest: WORK } },
122
+ world: "closed",
123
+ requires: { ordering: "hash-linked" },
124
+ trustedKeys: { mike: bad },
125
+ claim: { exists: "work" },
126
+ });
127
+ assert.throws(() => parseRule(text), RuleError, JSON.stringify(bad));
128
+ }
129
+ });
130
+ test("pure-integer trusted key names are rejected", () => {
131
+ const text = JSON.stringify({
132
+ rule: "bitgraph-player/2",
133
+ id: "r",
134
+ cast: { work: { digest: WORK } },
135
+ world: "closed",
136
+ requires: { ordering: "hash-linked" },
137
+ trustedKeys: { "42": { alg: "ed25519", publicKey: "A".repeat(43) + "=" } },
138
+ claim: { exists: "work" },
139
+ });
140
+ assert.throws(() => parseRule(text), /non-digit/);
141
+ });
142
+ test("claimUsesSignatures walks the tree", () => {
143
+ assert.equal(claimUsesSignatures({ exists: "x" }), false);
144
+ assert.equal(claimUsesSignatures({ all: [{ exists: "x" }, { not: { signedBy: ["x", "k"] } }] }), true);
145
+ });
146
+ // ---------------------------------------------------------------------------
147
+ // Signature file parsing
148
+ // ---------------------------------------------------------------------------
149
+ test("parseSigFile accepts a well-formed file and rejects noise", () => {
150
+ const { publicKeyB64, privateKey } = ed25519Pair();
151
+ const good = makeSigBytes("ed25519", publicKeyB64, privateKey, hexOfB64(WORK));
152
+ assert.notEqual(parseSigFile(good), undefined);
153
+ assert.equal(parseSigFile(Buffer.from("not json")), undefined);
154
+ assert.equal(parseSigFile(Buffer.from(JSON.stringify({ sig: "other/1" }))), undefined);
155
+ assert.equal(parseSigFile(Buffer.from(JSON.stringify({ sig: "bitgraph-sig/1", over: "x", alg: "rsa" }))), undefined);
156
+ });
157
+ // ---------------------------------------------------------------------------
158
+ // Evaluation: ed25519 and es256
159
+ // ---------------------------------------------------------------------------
160
+ for (const alg of ["ed25519", "es256"]) {
161
+ test(`signedBy(${alg}): valid signature in evidence evaluates TRUE with derived math`, () => {
162
+ const pair = alg === "ed25519" ? ed25519Pair() : es256Pair();
163
+ const rule = parseRule(v2Rule(pair.publicKeyB64, alg, { signedBy: ["work", "mike"] }));
164
+ const audit = auditWithWork();
165
+ const evidence = evidenceOf(makeSigBytes(alg, pair.publicKeyB64, pair.privateKey, hexOfB64(WORK)));
166
+ const result = playAudit(rule, "0".repeat(64), audit, evidence);
167
+ assert.equal(result.verdict.result, "TRUE");
168
+ assert.equal(result.verdict.verdict, "bitgraph-player-verdict/2");
169
+ const step = result.verdict.derived.find((s) => s.claim.startsWith("signedBy"));
170
+ assert.ok(step !== undefined);
171
+ assert.equal(step.result, "TRUE");
172
+ // The binding is declared, alongside the math being derived.
173
+ const trusted = result.verdict.declared.find((d) => d.assertion === "trusted-key");
174
+ assert.ok(trusted !== undefined);
175
+ assert.equal(trusted["keyName"], "mike");
176
+ assert.equal(trusted.verifiedHere, false);
177
+ });
178
+ test(`signedBy(${alg}): tampered signature is noise, evaluates UNDETERMINED`, () => {
179
+ const pair = alg === "ed25519" ? ed25519Pair() : es256Pair();
180
+ const rule = parseRule(v2Rule(pair.publicKeyB64, alg, { signedBy: ["work", "mike"] }));
181
+ const bytes = makeSigBytes(alg, pair.publicKeyB64, pair.privateKey, hexOfB64(WORK));
182
+ const parsed = JSON.parse(Buffer.from(bytes).toString("utf8"));
183
+ const sigBytes = Buffer.from(parsed["signature"], "base64");
184
+ sigBytes[0] = sigBytes[0] ^ 0xff;
185
+ parsed["signature"] = sigBytes.toString("base64");
186
+ const tampered = Buffer.from(JSON.stringify(parsed));
187
+ const result = playAudit(rule, "0".repeat(64), auditWithWork(), evidenceOf(tampered));
188
+ assert.equal(result.verdict.result, "UNDETERMINED");
189
+ });
190
+ }
191
+ test("a non-P-256 key declared as es256 is undecodable key material: UNDETERMINED, never a verify", () => {
192
+ const { publicKey, privateKey } = generateKeyPairSync("ec", { namedCurve: "secp384r1" });
193
+ const spki = publicKey.export({ format: "der", type: "spki" }).toString("base64");
194
+ const rule = parseRule(v2Rule(spki, "es256", { signedBy: ["work", "mike"] }));
195
+ const evidence = evidenceOf(makeSigBytes("es256", spki, privateKey, hexOfB64(WORK)));
196
+ const result = playAudit(rule, "0".repeat(64), auditWithWork(), evidence);
197
+ assert.equal(result.verdict.result, "UNDETERMINED");
198
+ const step = result.verdict.derived.find((s) => s.claim.startsWith("signedBy"));
199
+ assert.ok(step !== undefined);
200
+ assert.match(String(step.because["reason"]), /not decodable/);
201
+ });
202
+ test("signedBy with empty evidence is UNDETERMINED, and not(signedBy) stays UNDETERMINED", () => {
203
+ const { publicKeyB64 } = ed25519Pair();
204
+ const rule = parseRule(v2Rule(publicKeyB64, "ed25519", { not: { signedBy: ["work", "mike"] } }));
205
+ const result = playAudit(rule, "0".repeat(64), auditWithWork());
206
+ // Never FALSE and never TRUE: the open world stays open.
207
+ assert.equal(result.verdict.result, "UNDETERMINED");
208
+ });
209
+ test("signedBy by the wrong key is UNDETERMINED, never FALSE", () => {
210
+ const right = ed25519Pair();
211
+ const wrong = ed25519Pair();
212
+ const rule = parseRule(v2Rule(right.publicKeyB64, "ed25519", { signedBy: ["work", "mike"] }));
213
+ const evidence = evidenceOf(makeSigBytes("ed25519", wrong.publicKeyB64, wrong.privateKey, hexOfB64(WORK)));
214
+ const result = playAudit(rule, "0".repeat(64), auditWithWork(), evidence);
215
+ assert.equal(result.verdict.result, "UNDETERMINED");
216
+ });
217
+ test("signedBy over a different digest does not satisfy the role's claim", () => {
218
+ const pair = ed25519Pair();
219
+ const rule = parseRule(v2Rule(pair.publicKeyB64, "ed25519", { signedBy: ["work", "mike"] }));
220
+ const other = digestFor("other");
221
+ const evidence = evidenceOf(makeSigBytes("ed25519", pair.publicKeyB64, pair.privateKey, hexOfB64(other)));
222
+ const result = playAudit(rule, "0".repeat(64), auditWithWork(), evidence);
223
+ assert.equal(result.verdict.result, "UNDETERMINED");
224
+ });
225
+ test("signedBy evaluates against the declared digest even when the role has no recording", () => {
226
+ const pair = ed25519Pair();
227
+ const text = JSON.stringify({
228
+ rule: "bitgraph-player/2",
229
+ id: "r",
230
+ cast: { work: { digest: WORK, optional: true } },
231
+ world: "closed",
232
+ requires: { ordering: "hash-linked" },
233
+ trustedKeys: { mike: { alg: "ed25519", publicKey: pair.publicKeyB64 } },
234
+ claim: { signedBy: ["work", "mike"] },
235
+ });
236
+ const rule = parseRule(text);
237
+ const audit = makeAudit({ proofs: [], partitions: [] });
238
+ const evidence = evidenceOf(makeSigBytes("ed25519", pair.publicKeyB64, pair.privateKey, hexOfB64(WORK)));
239
+ const resolutions = resolveCast(rule.cast, audit);
240
+ const evaluation = evaluate(rule, resolutions, audit, evidence);
241
+ assert.equal(evaluation.result, "TRUE");
242
+ });
243
+ test("a /1 rule still yields a /1 verdict and ignores supplied evidence", () => {
244
+ const text = JSON.stringify({
245
+ rule: "bitgraph-player/1",
246
+ id: "r",
247
+ cast: { work: { digest: WORK } },
248
+ world: "closed",
249
+ requires: { ordering: "assumption-dependent" },
250
+ claim: { exists: "work" },
251
+ });
252
+ const rule = parseRule(text);
253
+ const result = playAudit(rule, "0".repeat(64), auditWithWork(), evidenceOf(Buffer.from("junk")));
254
+ assert.equal(result.verdict.verdict, "bitgraph-player-verdict/1");
255
+ assert.equal(result.verdict.result, "TRUE");
256
+ });
257
+ test("multiple candidates: the winner is deterministic and reported by content hash", () => {
258
+ const pair = ed25519Pair();
259
+ const rule = parseRule(v2Rule(pair.publicKeyB64, "ed25519", { signedBy: ["work", "mike"] }));
260
+ const sig = makeSigBytes("ed25519", pair.publicKeyB64, pair.privateKey, hexOfB64(WORK));
261
+ const junk = Buffer.from("{}");
262
+ const a = playAudit(rule, "0".repeat(64), auditWithWork(), evidenceOf(sig, junk));
263
+ const b = playAudit(rule, "0".repeat(64), auditWithWork(), evidenceOf(junk, sig));
264
+ assert.equal(a.bytes, b.bytes);
265
+ });
266
+ //# sourceMappingURL=sig-v2.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sig-v2.test.js","sourceRoot":"","sources":["../../src/__tests__/sig-v2.test.ts"],"names":[],"mappings":"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"}
@@ -1,23 +1,3 @@
1
- /**
2
- * The evaluator: walks the claim tree over resolved recordings and the
3
- * ordering adapter, under strong Kleene semantics.
4
- *
5
- * Deliberate properties:
6
- *
7
- * - FULL WALK, no short-circuit. Every sub-claim is evaluated and recorded
8
- * so the verdict is a complete replayable trace, not just an outcome.
9
- *
10
- * - CLOSED WORLD, scoped to the cast. An absent OPTIONAL role is a
11
- * definite absence within the declared universe: positive claims about
12
- * it are FALSE, so negatives over it hold. An absent REQUIRED role, an
13
- * ambiguous role, and a role the cast never declared are UNDETERMINED —
14
- * the evidence does not decide, and saying FALSE would be a lie.
15
- *
16
- * - THE FLOOR GATES EVIDENCE, NOT POLARITY. When an ordering answer rests
17
- * on a tier below requires.ordering, the answer is UNDETERMINED whether
18
- * it would have been TRUE or FALSE: the rule author said not to trust
19
- * that evidence in either direction.
20
- */
21
1
  import type { AuditResult } from "@mikeargento/bitgraph-audit";
22
2
  import type { DerivedStep, EvidenceTier, Resolution, Rule, ThreeValued } from "./types.js";
23
3
  export interface Evaluation {
@@ -26,5 +6,12 @@ export interface Evaluation {
26
6
  /** Weakest tier among ordering answers that actually decided a step. */
27
7
  weakestEvidence?: EvidenceTier;
28
8
  }
29
- export declare function evaluate(rule: Rule, resolutions: Map<string, Resolution>, audit: AuditResult): Evaluation;
9
+ /**
10
+ * Signature evidence for format-2 signedBy claims: candidate file bytes
11
+ * keyed by lowercase hex SHA-256. Collected by the caller (play() streams
12
+ * size-capped matched artifacts from the bundle); evaluate() itself stays
13
+ * a pure function over its arguments.
14
+ */
15
+ export type SigEvidence = ReadonlyMap<string, Uint8Array>;
16
+ export declare function evaluate(rule: Rule, resolutions: Map<string, Resolution>, audit: AuditResult, sigEvidence?: SigEvidence): Evaluation;
30
17
  //# sourceMappingURL=evaluate.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"evaluate.d.ts","sourceRoot":"","sources":["../src/evaluate.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAiB,MAAM,6BAA6B,CAAC;AAI9E,OAAO,KAAK,EAEV,WAAW,EACX,YAAY,EACZ,UAAU,EACV,IAAI,EACJ,WAAW,EACZ,MAAM,YAAY,CAAC;AAEpB,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,WAAW,CAAC;IACpB,KAAK,EAAE,WAAW,EAAE,CAAC;IACrB,wEAAwE;IACxE,eAAe,CAAC,EAAE,YAAY,CAAC;CAChC;AAsLD,wBAAgB,QAAQ,CACtB,IAAI,EAAE,IAAI,EACV,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,EACpC,KAAK,EAAE,WAAW,GACjB,UAAU,CAUZ"}
1
+ {"version":3,"file":"evaluate.d.ts","sourceRoot":"","sources":["../src/evaluate.ts"],"names":[],"mappings":"AAwBA,OAAO,KAAK,EAAE,WAAW,EAAiB,MAAM,6BAA6B,CAAC;AAM9E,OAAO,KAAK,EAEV,WAAW,EACX,YAAY,EACZ,UAAU,EACV,IAAI,EACJ,WAAW,EACZ,MAAM,YAAY,CAAC;AAEpB,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,WAAW,CAAC;IACpB,KAAK,EAAE,WAAW,EAAE,CAAC;IACrB,wEAAwE;IACxE,eAAe,CAAC,EAAE,YAAY,CAAC;CAChC;AAED;;;;;GAKG;AACH,MAAM,MAAM,WAAW,GAAG,WAAW,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;AA2Q1D,wBAAgB,QAAQ,CACtB,IAAI,EAAE,IAAI,EACV,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,EACpC,KAAK,EAAE,WAAW,EAClB,WAAW,GAAE,WAAuB,GACnC,UAAU,CAkBZ"}
package/dist/evaluate.js CHANGED
@@ -1,6 +1,8 @@
1
1
  // Copyright (c) 2024-2026 Mike Argento. Licensed under the MIT License. See LICENSE.
2
2
  import { kleeneAll, kleeneAny, kleeneNot } from "./logic.js";
3
3
  import { compare } from "./order.js";
4
+ import { decodeDigestBytes, normalizeDigest } from "./rule.js";
5
+ import { keyObjectFor, parseSigFile, verifySigFile } from "./sig.js";
4
6
  import { basisTier, meetsFloor } from "./types.js";
5
7
  function positionOf(proof) {
6
8
  const out = { proofHash: proof.proofHash };
@@ -137,9 +139,90 @@ function evalPrecedes(ctx, claim, x, y) {
137
139
  because,
138
140
  });
139
141
  }
142
+ /**
143
+ * signedBy(role, keyName): TRUE when a valid bitgraph-sig/1 by the named
144
+ * trusted key over the role's digest is present in the supplied evidence;
145
+ * UNDETERMINED otherwise, NEVER FALSE. Absence of a signature from a
146
+ * bundle proves nothing about the world, and `not(signedBy(...))` is
147
+ * therefore permanently UNDETERMINED by the Kleene table.
148
+ *
149
+ * The claim is about BITS, not occurrences: it evaluates against the
150
+ * declared role digest whether or not the role resolved to a recording.
151
+ * Only an undeclared role is UNDETERMINED for want of a digest.
152
+ */
153
+ function evalSignedBy(ctx, role, keyName) {
154
+ const claim = `signedBy(${role}, ${keyName})`;
155
+ const entry = ctx.rule.cast[role];
156
+ if (entry === undefined) {
157
+ return record(ctx, {
158
+ claim,
159
+ result: "UNDETERMINED",
160
+ because: { reason: `role "${role}" is not declared in the cast` },
161
+ });
162
+ }
163
+ // parseRule guarantees the key name resolves; guard for direct API use.
164
+ const key = ctx.rule.trustedKeys?.[keyName];
165
+ if (key === undefined) {
166
+ return record(ctx, {
167
+ claim,
168
+ result: "UNDETERMINED",
169
+ because: { reason: `trusted key "${keyName}" is not declared` },
170
+ });
171
+ }
172
+ if (!ctx.keyObjects.has(keyName))
173
+ ctx.keyObjects.set(keyName, keyObjectFor(key));
174
+ const keyObject = ctx.keyObjects.get(keyName);
175
+ if (keyObject === undefined) {
176
+ return record(ctx, {
177
+ claim,
178
+ result: "UNDETERMINED",
179
+ because: {
180
+ reason: `trusted key "${keyName}" is not decodable as ${key.alg} key material; no signature can verify against it`,
181
+ },
182
+ });
183
+ }
184
+ const digestB64 = normalizeDigest(entry.digest);
185
+ const targetHex = decodeDigestBytes(digestB64).toString("hex");
186
+ // Deterministic scan: candidates in ascending content-hash order.
187
+ const candidates = [...ctx.sigEvidence.keys()].sort();
188
+ let parsedCount = 0;
189
+ for (const sha256Hex of candidates) {
190
+ const bytes = ctx.sigEvidence.get(sha256Hex);
191
+ const sig = parseSigFile(bytes);
192
+ if (sig === undefined)
193
+ continue;
194
+ parsedCount += 1;
195
+ if (verifySigFile(sig, key, keyObject, targetHex, decodeDigestBytes)) {
196
+ return record(ctx, {
197
+ claim,
198
+ result: "TRUE",
199
+ because: {
200
+ signatureSha256Hex: sha256Hex,
201
+ alg: key.alg,
202
+ keyName,
203
+ over: `sha256:${targetHex}`,
204
+ note: "signature math verified here; that this key belongs to the named party is declared, never derived",
205
+ },
206
+ });
207
+ }
208
+ }
209
+ return record(ctx, {
210
+ claim,
211
+ result: "UNDETERMINED",
212
+ because: {
213
+ reason: `no valid bitgraph-sig/1 by trusted key "${keyName}" over the role digest is present in the ` +
214
+ `supplied evidence (${ctx.sigEvidence.size} candidate file(s), ${parsedCount} parsed as signatures); ` +
215
+ `absence of a signature from a bundle proves nothing`,
216
+ },
217
+ });
218
+ }
140
219
  function evalClaim(ctx, claim) {
141
220
  if ("exists" in claim)
142
221
  return evalExists(ctx, claim.exists);
222
+ if ("signedBy" in claim) {
223
+ const [role, keyName] = claim.signedBy;
224
+ return evalSignedBy(ctx, role, keyName);
225
+ }
143
226
  if ("before" in claim) {
144
227
  const [x, y] = claim.before;
145
228
  return evalPrecedes(ctx, `before(${x}, ${y})`, x, y);
@@ -162,8 +245,16 @@ function evalClaim(ctx, claim) {
162
245
  return kleeneAny(claim.any.map((c) => evalClaim(ctx, c)));
163
246
  return kleeneNot(evalClaim(ctx, claim.not));
164
247
  }
165
- export function evaluate(rule, resolutions, audit) {
166
- const ctx = { rule, resolutions, audit, steps: [], usedTiers: new Set() };
248
+ export function evaluate(rule, resolutions, audit, sigEvidence = new Map()) {
249
+ const ctx = {
250
+ rule,
251
+ resolutions,
252
+ audit,
253
+ steps: [],
254
+ usedTiers: new Set(),
255
+ sigEvidence,
256
+ keyObjects: new Map(),
257
+ };
167
258
  const result = evalClaim(ctx, rule.claim);
168
259
  const evaluation = { result, steps: ctx.steps };
169
260
  if (ctx.usedTiers.has("assumption-dependent")) {
@@ -1 +1 @@
1
- {"version":3,"file":"evaluate.js","sourceRoot":"","sources":["../src/evaluate.ts"],"names":[],"mappings":"AAAA,qFAAqF;AAwBrF,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAC7D,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AACrC,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAyBnD,SAAS,UAAU,CAAC,KAAoB;IACtC,MAAM,GAAG,GAA4B,EAAE,SAAS,EAAE,KAAK,CAAC,SAAS,EAAE,CAAC;IACpE,IAAI,KAAK,CAAC,OAAO,KAAK,SAAS;QAAE,GAAG,CAAC,SAAS,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC;IAChE,GAAG,CAAC,SAAS,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC;IAC/B,IAAI,KAAK,CAAC,OAAO,KAAK,SAAS;QAAE,GAAG,CAAC,SAAS,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC;IAChE,IAAI,KAAK,CAAC,WAAW,KAAK,SAAS;QAAE,GAAG,CAAC,aAAa,CAAC,GAAG,KAAK,CAAC,WAAW,CAAC;IAC5E,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;;;;GAKG;AACH,SAAS,QAAQ,CACf,GAAQ,EACR,IAAY;IAKZ,MAAM,GAAG,GAAG,GAAG,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACtC,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;QACtB,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,MAAM,EAAE,SAAS,IAAI,+BAA+B,EAAE,CAAC;IACxF,CAAC;IACD,QAAQ,GAAG,CAAC,IAAI,EAAE,CAAC;QACjB,KAAK,UAAU;YACb,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,CAAC;QAChD,KAAK,QAAQ;YACX,OAAO,GAAG,CAAC,QAAQ;gBACjB,CAAC,CAAC,EAAE,IAAI,EAAE,mBAAmB,EAAE;gBAC/B,CAAC,CAAC;oBACE,IAAI,EAAE,cAAc;oBACpB,MAAM,EAAE,kBAAkB,IAAI,2CAA2C;iBAC1E,CAAC;QACR,KAAK,WAAW;YACd,OAAO;gBACL,IAAI,EAAE,cAAc;gBACpB,MAAM,EAAE,SAAS,IAAI,aAAa,GAAG,CAAC,UAAU,yCAAyC;aAC1F,CAAC;QACJ,KAAK,SAAS;YACZ,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,MAAM,EAAE,SAAS,IAAI,MAAM,GAAG,CAAC,MAAM,EAAE,EAAE,CAAC;IAC7E,CAAC;AACH,CAAC;AAED,SAAS,MAAM,CAAC,GAAQ,EAAE,IAAiB;IACzC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACrB,OAAO,IAAI,CAAC,MAAM,CAAC;AACrB,CAAC;AAED,SAAS,UAAU,CAAC,GAAQ,EAAE,IAAY;IACxC,MAAM,CAAC,GAAG,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;IAC9B,MAAM,KAAK,GAAG,UAAU,IAAI,GAAG,CAAC;IAChC,IAAI,CAAC,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;QAC1B,OAAO,MAAM,CAAC,GAAG,EAAE;YACjB,KAAK;YACL,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE;SAC5C,CAAC,CAAC;IACL,CAAC;IACD,IAAI,CAAC,CAAC,IAAI,KAAK,mBAAmB,EAAE,CAAC;QACnC,OAAO,MAAM,CAAC,GAAG,EAAE;YACjB,KAAK;YACL,MAAM,EAAE,OAAO;YACf,OAAO,EAAE;gBACP,MAAM,EAAE,kHAAkH;aAC3H;SACF,CAAC,CAAC;IACL,CAAC;IACD,OAAO,MAAM,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,cAAc,EAAE,OAAO,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;AACvF,CAAC;AAED,kEAAkE;AAClE,SAAS,YAAY,CAAC,GAAQ,EAAE,KAAa,EAAE,CAAS,EAAE,CAAS;IACjE,MAAM,EAAE,GAAG,QAAQ,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;IAC5B,MAAM,EAAE,GAAG,QAAQ,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;IAE5B,KAAK,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI;QACtB,CAAC,CAAC,EAAE,EAAE,CAAC;QACP,CAAC,CAAC,EAAE,EAAE,CAAC;KACC,EAAE,CAAC;QACX,IAAI,CAAC,CAAC,IAAI,KAAK,cAAc,EAAE,CAAC;YAC9B,OAAO,MAAM,CAAC,GAAG,EAAE;gBACjB,KAAK;gBACL,MAAM,EAAE,cAAc;gBACtB,OAAO,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,IAAI,EAAE;aACpC,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IACD,IAAI,EAAE,CAAC,IAAI,KAAK,mBAAmB,IAAI,EAAE,CAAC,IAAI,KAAK,mBAAmB,EAAE,CAAC;QACvE,MAAM,MAAM,GAAG,EAAE,CAAC,IAAI,KAAK,mBAAmB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACvD,OAAO,MAAM,CAAC,GAAG,EAAE;YACjB,KAAK;YACL,MAAM,EAAE,OAAO;YACf,OAAO,EAAE;gBACP,MAAM,EAAE,SAAS,MAAM,8FAA8F;aACtH;SACF,CAAC,CAAC;IACL,CAAC;IAED,MAAM,CAAC,GAAI,EAAiD,CAAC,KAAK,CAAC;IACnE,MAAM,CAAC,GAAI,EAAiD,CAAC,KAAK,CAAC;IACnE,MAAM,KAAK,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC;IACvC,MAAM,OAAO,GAA4B;QACvC,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC;QAChB,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC;QAChB,QAAQ,EAAE,KAAK,CAAC,QAAQ;QACxB,MAAM,EAAE,KAAK,CAAC,MAAM;KACrB,CAAC;IAEF,IAAI,KAAK,CAAC,QAAQ,KAAK,MAAM,EAAE,CAAC;QAC9B,OAAO,MAAM,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC;IAC1D,CAAC;IACD,IAAI,KAAK,CAAC,QAAQ,KAAK,WAAW,EAAE,CAAC;QACnC,OAAO,MAAM,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,cAAc,EAAE,OAAO,EAAE,CAAC,CAAC;IACjE,CAAC;IAED,MAAM,KAAK,GAAG,KAAK,CAAC,KAAwC,CAAC;IAC7D,sEAAsE;IACtE,wEAAwE;IACxE,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,IAAI,SAAS,CAAC,KAAK,CAAC,CAAC;IAC5C,OAAO,CAAC,QAAQ,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC;IACjC,OAAO,CAAC,qBAAqB,CAAC,GAAG,KAAK,CAAC,mBAAmB,CAAC;IAE3D,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;QAClD,OAAO,CAAC,OAAO,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC;QAC9C,OAAO,MAAM,CAAC,GAAG,EAAE;YACjB,KAAK;YACL,MAAM,EAAE,cAAc;YACtB,KAAK;YACL,YAAY,EAAE,IAAI;YAClB,OAAO,EAAE;gBACP,GAAG,OAAO;gBACV,MAAM,EAAE,uBAAuB,KAAK,YAAY,IAAI,2CAA2C,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,IAAI;aAC9H;SACF,CAAC,CAAC;IACL,CAAC;IAED,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACxB,OAAO,MAAM,CAAC,GAAG,EAAE;QACjB,KAAK;QACL,MAAM,EAAE,KAAK,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO;QACtD,KAAK;QACL,YAAY,EAAE,IAAI;QAClB,OAAO;KACR,CAAC,CAAC;AACL,CAAC;AAED,SAAS,SAAS,CAAC,GAAQ,EAAE,KAAY;IACvC,IAAI,QAAQ,IAAI,KAAK;QAAE,OAAO,UAAU,CAAC,GAAG,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IAC5D,IAAI,QAAQ,IAAI,KAAK,EAAE,CAAC;QACtB,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC;QAC5B,OAAO,YAAY,CAAC,GAAG,EAAE,UAAU,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IACvD,CAAC;IACD,IAAI,OAAO,IAAI,KAAK,EAAE,CAAC;QACrB,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC;QAC3B,+CAA+C;QAC/C,OAAO,YAAY,CAAC,GAAG,EAAE,SAAS,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IACtD,CAAC;IACD,IAAI,SAAS,IAAI,KAAK,EAAE,CAAC;QACvB,MAAM,CAAC,OAAO,EAAE,KAAK,EAAE,KAAK,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC;QAC9C,2EAA2E;QAC3E,MAAM,SAAS,GAAG,YAAY,CAAC,GAAG,EAAE,WAAW,OAAO,KAAK,KAAK,KAAK,KAAK,YAAY,OAAO,KAAK,KAAK,GAAG,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;QAC5H,MAAM,UAAU,GAAG,YAAY,CAAC,GAAG,EAAE,WAAW,OAAO,KAAK,KAAK,KAAK,KAAK,aAAa,OAAO,KAAK,KAAK,GAAG,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;QAC9H,OAAO,SAAS,CAAC,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC,CAAC;IAC5C,CAAC;IACD,IAAI,KAAK,IAAI,KAAK;QAAE,OAAO,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAC9E,IAAI,KAAK,IAAI,KAAK;QAAE,OAAO,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAC9E,OAAO,SAAS,CAAC,SAAS,CAAC,GAAG,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;AAC9C,CAAC;AAED,MAAM,UAAU,QAAQ,CACtB,IAAU,EACV,WAAoC,EACpC,KAAkB;IAElB,MAAM,GAAG,GAAQ,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE,SAAS,EAAE,IAAI,GAAG,EAAE,EAAE,CAAC;IAC/E,MAAM,MAAM,GAAG,SAAS,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;IAC1C,MAAM,UAAU,GAAe,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,CAAC;IAC5D,IAAI,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,sBAAsB,CAAC,EAAE,CAAC;QAC9C,UAAU,CAAC,eAAe,GAAG,sBAAsB,CAAC;IACtD,CAAC;SAAM,IAAI,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,aAAa,CAAC,EAAE,CAAC;QAC5C,UAAU,CAAC,eAAe,GAAG,aAAa,CAAC;IAC7C,CAAC;IACD,OAAO,UAAU,CAAC;AACpB,CAAC"}
1
+ {"version":3,"file":"evaluate.js","sourceRoot":"","sources":["../src/evaluate.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -10,11 +10,14 @@
10
10
  * evaluation time. It decides; it does not enforce — no field in the rule
11
11
  * format is capable of causing an action.
12
12
  */
13
- export type { CastEntry, CastPin, Claim, DeclaredEntry, DerivedStep, EvidenceTier, OrderBasis, OrderResult, Resolution, Rule, ThreeValued, Verdict, } from "./types.js";
13
+ export type { CastEntry, CastPin, Claim, DeclaredEntry, DerivedStep, EvidenceTier, OrderBasis, OrderResult, Resolution, Rule, RuleFormat, ThreeValued, Verdict, } from "./types.js";
14
14
  export { basisTier, meetsFloor } from "./types.js";
15
- export { parseRule, normalizeDigest, RuleError } from "./rule.js";
16
- export { play, playAudit, PlayError } from "./play.js";
15
+ export { parseRule, normalizeDigest, decodeDigestBytes, RuleError } from "./rule.js";
16
+ export { play, playAudit, claimUsesSignatures, SIG_EVIDENCE_MAX_BYTES, PlayError } from "./play.js";
17
17
  export type { PlayResult, PlayStage } from "./play.js";
18
+ export { parseSigFile, verifySigFile, keyObjectFor, sigMessage } from "./sig.js";
19
+ export type { SigAlg, SigFile, TrustedKey } from "./sig.js";
20
+ export type { SigEvidence } from "./evaluate.js";
18
21
  export { scaffoldRule, roleNameForFile, ORDERING_PLACEHOLDER } from "./init.js";
19
22
  export type { ScaffoldEntry } from "./init.js";
20
23
  export { resolveCast, resolveRole } from "./cast.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;GAWG;AAEH,YAAY,EACV,SAAS,EACT,OAAO,EACP,KAAK,EACL,aAAa,EACb,WAAW,EACX,YAAY,EACZ,UAAU,EACV,WAAW,EACX,UAAU,EACV,IAAI,EACJ,WAAW,EACX,OAAO,GACR,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAEnD,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAClE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACvD,YAAY,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAC;AAChF,YAAY,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACrD,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AACrC,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAC7D,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,YAAY,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;GAWG;AAEH,YAAY,EACV,SAAS,EACT,OAAO,EACP,KAAK,EACL,aAAa,EACb,WAAW,EACX,YAAY,EACZ,UAAU,EACV,WAAW,EACX,UAAU,EACV,IAAI,EACJ,UAAU,EACV,WAAW,EACX,OAAO,GACR,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAEnD,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,iBAAiB,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACrF,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,mBAAmB,EAAE,sBAAsB,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACpG,YAAY,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AACjF,YAAY,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAC5D,YAAY,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAC;AAChF,YAAY,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACrD,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AACrC,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAC7D,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,YAAY,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC"}