ppef 1.3.0 → 1.4.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 CHANGED
@@ -316,6 +316,32 @@ Standalone evaluator configs reference schema `$defs`:
316
316
  }
317
317
  ```
318
318
 
319
+ ## Cross-Language Specification
320
+
321
+ PPEF is designed for cross-language interoperability. A Python runner can produce results consumable by the TypeScript aggregator, and vice versa.
322
+
323
+ The specification lives in [`spec/`](spec/) and comprises three layers:
324
+
325
+ | Layer | Location | Purpose |
326
+ |-------|----------|---------|
327
+ | JSON Schema | [`ppef.schema.json`](ppef.schema.json) | Machine-readable type definitions for all input and output types |
328
+ | Conformance Vectors | [`spec/conformance/`](spec/conformance/) | Pinned input/output pairs that any implementation must reproduce |
329
+ | Prose Specification | [`spec/README.md`](spec/README.md) | Execution semantics, module contracts, statistical algorithms |
330
+
331
+ All output types are available as `$defs` in the schema, enabling validation from any language:
332
+
333
+ ```
334
+ ppef.schema.json#/$defs/EvaluationResult
335
+ ppef.schema.json#/$defs/ResultBatch
336
+ ppef.schema.json#/$defs/AggregationOutput
337
+ ppef.schema.json#/$defs/ClaimEvaluationSummary
338
+ ppef.schema.json#/$defs/MetricsEvaluationSummary
339
+ ppef.schema.json#/$defs/RobustnessAnalysisOutput
340
+ ppef.schema.json#/$defs/ExploratoryEvaluationSummary
341
+ ```
342
+
343
+ Run ID generation uses [RFC 8785 (JSON Canonicalization Scheme)](https://www.rfc-editor.org/rfc/rfc8785) for deterministic cross-language hashing. Libraries exist for Python (`jcs`), Rust (`serde_jcs`), Go (`go-jcs`), and others.
344
+
319
345
  ## Architecture
320
346
 
321
347
  ### Data Flow Pipeline
@@ -380,7 +406,7 @@ Available subpaths: `ppef/types`, `ppef/registry`, `ppef/executor`, `ppef/collec
380
406
  - Conventional commits enforced via commitlint + husky
381
407
  - Semantic release from main branch
382
408
  - No `any` types — use `unknown` with type guards
383
- - Executor produces deterministic `runId` via SHA-256 hash of inputs
409
+ - Executor produces deterministic `runId` via SHA-256 hash of RFC 8785 (JCS) canonicalized inputs
384
410
 
385
411
  ## License
386
412
 
@@ -6,7 +6,47 @@
6
6
  */
7
7
  import { describe, it } from "node:test";
8
8
  import { strict as assert } from "node:assert";
9
- import { generateRunId, generateConfigHash, validateRunId, parseRunId, } from "../run-id.js";
9
+ import { canonicalize, generateRunId, generateConfigHash, validateRunId, parseRunId, } from "../run-id.js";
10
+ describe("canonicalize (RFC 8785 JCS)", () => {
11
+ it("should sort object keys lexicographically", () => {
12
+ assert.strictEqual(canonicalize({ z: 1, a: 2 }), '{"a":2,"z":1}');
13
+ });
14
+ it("should omit undefined values", () => {
15
+ assert.strictEqual(canonicalize({ a: 1, b: undefined, c: 3 }), '{"a":1,"c":3}');
16
+ });
17
+ it("should handle nested objects with sorted keys", () => {
18
+ assert.strictEqual(canonicalize({ b: { d: 1, c: 2 }, a: 3 }), '{"a":3,"b":{"c":2,"d":1}}');
19
+ });
20
+ it("should handle arrays", () => {
21
+ assert.strictEqual(canonicalize([3, 1, 2]), "[3,1,2]");
22
+ });
23
+ it("should handle strings with JSON escaping", () => {
24
+ assert.strictEqual(canonicalize("hello"), '"hello"');
25
+ assert.strictEqual(canonicalize('a"b'), '"a\\"b"');
26
+ });
27
+ it("should handle numbers per RFC 8785", () => {
28
+ assert.strictEqual(canonicalize(42), "42");
29
+ assert.strictEqual(canonicalize(0.5), "0.5");
30
+ assert.strictEqual(canonicalize(-0), "0");
31
+ assert.strictEqual(canonicalize(Infinity), "null");
32
+ assert.strictEqual(canonicalize(NaN), "null");
33
+ });
34
+ it("should handle booleans and null", () => {
35
+ assert.strictEqual(canonicalize(true), "true");
36
+ assert.strictEqual(canonicalize(false), "false");
37
+ assert.strictEqual(canonicalize(null), "null");
38
+ });
39
+ it("should handle empty objects and arrays", () => {
40
+ assert.strictEqual(canonicalize({}), "{}");
41
+ assert.strictEqual(canonicalize([]), "[]");
42
+ });
43
+ it("should produce no whitespace", () => {
44
+ const result = canonicalize({ a: [1, 2], b: { c: 3 } });
45
+ assert.ok(!result.includes(" "));
46
+ assert.ok(!result.includes("\n"));
47
+ assert.ok(!result.includes("\t"));
48
+ });
49
+ });
10
50
  describe("generateRunId", () => {
11
51
  it("should generate consistent IDs for same inputs", () => {
12
52
  const inputs = {
@@ -1 +1 @@
1
- {"version":3,"file":"run-id.unit.test.js","sourceRoot":"","sources":["../../../src/executor/__tests__/run-id.unit.test.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,EAAE,MAAM,IAAI,MAAM,EAAE,MAAM,aAAa,CAAC;AAE/C,OAAO,EACN,aAAa,EACb,kBAAkB,EAClB,aAAa,EACb,UAAU,GAEV,MAAM,cAAc,CAAC;AAEtB,QAAQ,CAAC,eAAe,EAAE,GAAG,EAAE;IAC9B,EAAE,CAAC,gDAAgD,EAAE,GAAG,EAAE;QACzD,MAAM,MAAM,GAAgB;YAC3B,KAAK,EAAE,2BAA2B;YAClC,MAAM,EAAE,WAAW;YACnB,IAAI,EAAE,EAAE;YACR,UAAU,EAAE,CAAC;SACb,CAAC;QAEF,MAAM,GAAG,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC;QAClC,MAAM,GAAG,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC;QAElC,MAAM,CAAC,WAAW,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QAC7B,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IACpC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oDAAoD,EAAE,GAAG,EAAE;QAC7D,MAAM,OAAO,GAAgB;YAC5B,KAAK,EAAE,OAAO;YACd,MAAM,EAAE,QAAQ;YAChB,IAAI,EAAE,EAAE;SACR,CAAC;QACF,MAAM,OAAO,GAAgB;YAC5B,KAAK,EAAE,OAAO;YACd,MAAM,EAAE,QAAQ;YAChB,IAAI,EAAE,EAAE;SACR,CAAC;QAEF,MAAM,CAAC,cAAc,CAAC,aAAa,CAAC,OAAO,CAAC,EAAE,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC;IACvE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+BAA+B,EAAE,GAAG,EAAE;QACxC,MAAM,OAAO,GAAgB;YAC5B,KAAK,EAAE,OAAO;YACd,MAAM,EAAE,QAAQ;SAChB,CAAC;QACF,MAAM,OAAO,GAAgB;YAC5B,KAAK,EAAE,OAAO;YACd,MAAM,EAAE,QAAQ;YAChB,IAAI,EAAE,EAAE;YACR,UAAU,EAAE,CAAC;YACb,UAAU,EAAE,QAAQ;SACpB,CAAC;QAEF,MAAM,CAAC,WAAW,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QACtD,MAAM,CAAC,WAAW,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QACtD,MAAM,CAAC,cAAc,CAAC,aAAa,CAAC,OAAO,CAAC,EAAE,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC;IACvE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uCAAuC,EAAE,GAAG,EAAE;QAChD,MAAM,MAAM,GAAgB,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;QAC9D,MAAM,EAAE,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC;QAEjC,MAAM,CAAC,EAAE,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;IACtC,CAAC,CAAC,CAAC;AACJ,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,oBAAoB,EAAE,GAAG,EAAE;IACnC,EAAE,CAAC,mDAAmD,EAAE,GAAG,EAAE;QAC5D,MAAM,MAAM,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,UAAU,EAAE,GAAG,EAAE,CAAC;QAEnD,MAAM,KAAK,GAAG,kBAAkB,CAAC,MAAM,CAAC,CAAC;QACzC,MAAM,KAAK,GAAG,kBAAkB,CAAC,MAAM,CAAC,CAAC;QAEzC,MAAM,CAAC,WAAW,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QACjC,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IACrC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wDAAwD,EAAE,GAAG,EAAE;QACjE,MAAM,OAAO,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC;QACnC,MAAM,OAAO,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC;QAEnC,MAAM,CAAC,cAAc,CAAC,kBAAkB,CAAC,OAAO,CAAC,EAAE,kBAAkB,CAAC,OAAO,CAAC,CAAC,CAAC;IACjF,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8BAA8B,EAAE,GAAG,EAAE;QACvC,MAAM,OAAO,GAAG,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC;QACzC,MAAM,OAAO,GAAG,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC;QAEzC,MAAM,CAAC,cAAc,CAAC,kBAAkB,CAAC,OAAO,CAAC,EAAE,kBAAkB,CAAC,OAAO,CAAC,CAAC,CAAC;IACjF,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sBAAsB,EAAE,GAAG,EAAE;QAC/B,MAAM,OAAO,GAAG,EAAE,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;QACrC,MAAM,OAAO,GAAG,EAAE,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;QAErC,MAAM,CAAC,cAAc,CAAC,kBAAkB,CAAC,OAAO,CAAC,EAAE,kBAAkB,CAAC,OAAO,CAAC,CAAC,CAAC;IACjF,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uCAAuC,EAAE,GAAG,EAAE;QAChD,MAAM,IAAI,GAAG,kBAAkB,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;QAChD,MAAM,CAAC,EAAE,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IACvC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4BAA4B,EAAE,GAAG,EAAE;QACrC,MAAM,IAAI,GAAG,kBAAkB,CAAC,EAAE,CAAC,CAAC;QACpC,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IACpC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gDAAgD,EAAE,GAAG,EAAE;QACzD,MAAM,KAAK,GAAG,kBAAkB,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;QACvD,MAAM,KAAK,GAAG,kBAAkB,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;QAEvD,MAAM,CAAC,WAAW,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IAClC,CAAC,CAAC,CAAC;AACJ,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,eAAe,EAAE,GAAG,EAAE;IAC9B,EAAE,CAAC,wCAAwC,EAAE,GAAG,EAAE;QACjD,MAAM,MAAM,GAAgB,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;QAC9D,MAAM,KAAK,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC;QAEpC,MAAM,CAAC,WAAW,CAAC,aAAa,CAAC,KAAK,EAAE,MAAM,CAAC,EAAE,IAAI,CAAC,CAAC;IACxD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6CAA6C,EAAE,GAAG,EAAE;QACtD,MAAM,MAAM,GAAgB,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;QAC9D,MAAM,KAAK,GAAG,aAAa,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;QAEhE,MAAM,CAAC,WAAW,CAAC,aAAa,CAAC,KAAK,EAAE,MAAM,CAAC,EAAE,KAAK,CAAC,CAAC;IACzD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+CAA+C,EAAE,GAAG,EAAE;QACxD,MAAM,MAAM,GAAgB,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;QAE9D,MAAM,CAAC,WAAW,CAAC,aAAa,CAAC,gBAAgB,EAAE,MAAM,CAAC,EAAE,KAAK,CAAC,CAAC;QACnE,MAAM,CAAC,WAAW,CAAC,aAAa,CAAC,EAAE,EAAE,MAAM,CAAC,EAAE,KAAK,CAAC,CAAC;QACrD,MAAM,CAAC,WAAW,CAAC,aAAa,CAAC,KAAK,EAAE,MAAM,CAAC,EAAE,KAAK,CAAC,CAAC;IACzD,CAAC,CAAC,CAAC;AACJ,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,YAAY,EAAE,GAAG,EAAE;IAC3B,EAAE,CAAC,6CAA6C,EAAE,GAAG,EAAE;QACtD,MAAM,MAAM,GAAG,UAAU,CAAC,kBAAkB,CAAC,CAAC;QAE9C,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QACvC,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IACvC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yCAAyC,EAAE,GAAG,EAAE;QAClD,MAAM,MAAM,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC;QAEpC,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QACxC,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IACtC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+CAA+C,EAAE,GAAG,EAAE;QACxD,MAAM,MAAM,GAAG,UAAU,CAAC,kBAAkB,CAAC,CAAC;QAE9C,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QACxC,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IACvC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2DAA2D,EAAE,GAAG,EAAE;QACpE,MAAM,MAAM,GAAG,UAAU,CAAC,kBAAkB,CAAC,CAAC;QAE9C,wEAAwE;QACxE,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QACvC,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IACvC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4BAA4B,EAAE,GAAG,EAAE;QACrC,MAAM,MAAM,GAAG,UAAU,CAAC,EAAE,CAAC,CAAC;QAE9B,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QACxC,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IACtC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+CAA+C,EAAE,GAAG,EAAE;QACxD,MAAM,MAAM,GAAG,UAAU,CAAC,iBAAiB,CAAC,CAAC;QAE7C,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QACxC,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IACvC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yBAAyB,EAAE,GAAG,EAAE;QAClC,MAAM,MAAM,GAAG,UAAU,CAAC,kBAAkB,CAAC,CAAC;QAE9C,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QACvC,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IACvC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uBAAuB,EAAE,GAAG,EAAE;QAChC,MAAM,MAAM,GAAG,UAAU,CAAC,kBAAkB,CAAC,CAAC;QAE9C,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QACvC,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IACvC,CAAC,CAAC,CAAC;AACJ,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"run-id.unit.test.js","sourceRoot":"","sources":["../../../src/executor/__tests__/run-id.unit.test.ts"],"names":[],"mappings":"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"}
@@ -8,7 +8,7 @@ export { type CheckpointStorage, createCheckpointStorage, FileStorage, type File
8
8
  export { createExecutor, DEFAULT_EXECUTOR_CONFIG, type ExecutionProgress, type ExecutionSummary, Executor, type ExecutorConfig, type PlannedRun, } from "./executor.js";
9
9
  export { calculateResources, calculateResourcesSync, type ResourceLimits, } from "./resource-calculator.js";
10
10
  export { executeParallel, type ParallelExecutorOptions, shardPath } from "./parallel-executor.js";
11
- export { generateConfigHash, generateRunId, parseRunId, type RunIdInputs, validateRunId, } from "./run-id.js";
11
+ export { canonicalize, generateConfigHash, generateRunId, parseRunId, type RunIdInputs, validateRunId, } from "./run-id.js";
12
12
  export { executeWithWorkerThreads, type ILogger, type IWorker, type IWorkerEntryPath, type IWorkerFactory, type RunBatch, type WorkerThreadsExecutorOptions, WorkerThreadsExecutor, ConsoleLogger, WorkerFactory, WorkerEntryPath, } from "./worker-threads-executor.js";
13
13
  export { type SerializedCase, type SerializedSut, type WorkerMessage, type WorkerResponse, type WorkerSuccessMessage, type WorkerErrorMessage, type WorkerOutputMessage, WorkerExecutor, type IParentPort, type IModuleLoader, } from "./worker-executor.js";
14
14
  export { BinarySut, createBinarySut, type BinarySutConfig, type CreateBinarySutOptions, } from "./binary-sut.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/executor/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EACN,KAAK,cAAc,EACnB,iBAAiB,EACjB,KAAK,wBAAwB,EAC7B,KAAK,cAAc,EACnB,2BAA2B,EAC3B,YAAY,GACZ,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACN,KAAK,iBAAiB,EACtB,uBAAuB,EACvB,WAAW,EACX,KAAK,UAAU,EACf,eAAe,EACf,UAAU,EACV,YAAY,EACZ,KAAK,IAAI,EACT,cAAc,GACd,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACN,cAAc,EACd,uBAAuB,EACvB,KAAK,iBAAiB,EACtB,KAAK,gBAAgB,EACrB,QAAQ,EACR,KAAK,cAAc,EACnB,KAAK,UAAU,GACf,MAAM,eAAe,CAAC;AACvB,OAAO,EACN,kBAAkB,EAClB,sBAAsB,EACtB,KAAK,cAAc,GACnB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,eAAe,EAAE,KAAK,uBAAuB,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAClG,OAAO,EACN,kBAAkB,EAClB,aAAa,EACb,UAAU,EACV,KAAK,WAAW,EAChB,aAAa,GACb,MAAM,aAAa,CAAC;AACrB,OAAO,EACN,wBAAwB,EACxB,KAAK,OAAO,EACZ,KAAK,OAAO,EACZ,KAAK,gBAAgB,EACrB,KAAK,cAAc,EACnB,KAAK,QAAQ,EACb,KAAK,4BAA4B,EACjC,qBAAqB,EACrB,aAAa,EACb,aAAa,EACb,eAAe,GACf,MAAM,8BAA8B,CAAC;AACtC,OAAO,EACN,KAAK,cAAc,EACnB,KAAK,aAAa,EAClB,KAAK,aAAa,EAClB,KAAK,cAAc,EACnB,KAAK,oBAAoB,EACzB,KAAK,kBAAkB,EACvB,KAAK,mBAAmB,EACxB,cAAc,EACd,KAAK,WAAW,EAChB,KAAK,aAAa,GAClB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACN,SAAS,EACT,eAAe,EACf,KAAK,eAAe,EACpB,KAAK,sBAAsB,GAC3B,MAAM,iBAAiB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/executor/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EACN,KAAK,cAAc,EACnB,iBAAiB,EACjB,KAAK,wBAAwB,EAC7B,KAAK,cAAc,EACnB,2BAA2B,EAC3B,YAAY,GACZ,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACN,KAAK,iBAAiB,EACtB,uBAAuB,EACvB,WAAW,EACX,KAAK,UAAU,EACf,eAAe,EACf,UAAU,EACV,YAAY,EACZ,KAAK,IAAI,EACT,cAAc,GACd,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACN,cAAc,EACd,uBAAuB,EACvB,KAAK,iBAAiB,EACtB,KAAK,gBAAgB,EACrB,QAAQ,EACR,KAAK,cAAc,EACnB,KAAK,UAAU,GACf,MAAM,eAAe,CAAC;AACvB,OAAO,EACN,kBAAkB,EAClB,sBAAsB,EACtB,KAAK,cAAc,GACnB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,eAAe,EAAE,KAAK,uBAAuB,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAClG,OAAO,EACN,YAAY,EACZ,kBAAkB,EAClB,aAAa,EACb,UAAU,EACV,KAAK,WAAW,EAChB,aAAa,GACb,MAAM,aAAa,CAAC;AACrB,OAAO,EACN,wBAAwB,EACxB,KAAK,OAAO,EACZ,KAAK,OAAO,EACZ,KAAK,gBAAgB,EACrB,KAAK,cAAc,EACnB,KAAK,QAAQ,EACb,KAAK,4BAA4B,EACjC,qBAAqB,EACrB,aAAa,EACb,aAAa,EACb,eAAe,GACf,MAAM,8BAA8B,CAAC;AACtC,OAAO,EACN,KAAK,cAAc,EACnB,KAAK,aAAa,EAClB,KAAK,aAAa,EAClB,KAAK,cAAc,EACnB,KAAK,oBAAoB,EACzB,KAAK,kBAAkB,EACvB,KAAK,mBAAmB,EACxB,cAAc,EACd,KAAK,WAAW,EAChB,KAAK,aAAa,GAClB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACN,SAAS,EACT,eAAe,EACf,KAAK,eAAe,EACpB,KAAK,sBAAsB,GAC3B,MAAM,iBAAiB,CAAC"}
@@ -8,7 +8,7 @@ export { createCheckpointStorage, FileStorage, getGitNamespace, GitStorage, InMe
8
8
  export { createExecutor, DEFAULT_EXECUTOR_CONFIG, Executor, } from "./executor.js";
9
9
  export { calculateResources, calculateResourcesSync, } from "./resource-calculator.js";
10
10
  export { executeParallel, shardPath } from "./parallel-executor.js";
11
- export { generateConfigHash, generateRunId, parseRunId, validateRunId, } from "./run-id.js";
11
+ export { canonicalize, generateConfigHash, generateRunId, parseRunId, validateRunId, } from "./run-id.js";
12
12
  export { executeWithWorkerThreads, WorkerThreadsExecutor, ConsoleLogger, WorkerFactory, WorkerEntryPath, } from "./worker-threads-executor.js";
13
13
  export { WorkerExecutor, } from "./worker-executor.js";
14
14
  export { BinarySut, createBinarySut, } from "./binary-sut.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/executor/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAEN,iBAAiB,EAGjB,2BAA2B,EAC3B,YAAY,GACZ,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAEN,uBAAuB,EACvB,WAAW,EAEX,eAAe,EACf,UAAU,EACV,YAAY,EAEZ,cAAc,GACd,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACN,cAAc,EACd,uBAAuB,EAGvB,QAAQ,GAGR,MAAM,eAAe,CAAC;AACvB,OAAO,EACN,kBAAkB,EAClB,sBAAsB,GAEtB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,eAAe,EAAgC,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAClG,OAAO,EACN,kBAAkB,EAClB,aAAa,EACb,UAAU,EAEV,aAAa,GACb,MAAM,aAAa,CAAC;AACrB,OAAO,EACN,wBAAwB,EAOxB,qBAAqB,EACrB,aAAa,EACb,aAAa,EACb,eAAe,GACf,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAQN,cAAc,GAGd,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACN,SAAS,EACT,eAAe,GAGf,MAAM,iBAAiB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/executor/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAEN,iBAAiB,EAGjB,2BAA2B,EAC3B,YAAY,GACZ,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAEN,uBAAuB,EACvB,WAAW,EAEX,eAAe,EACf,UAAU,EACV,YAAY,EAEZ,cAAc,GACd,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACN,cAAc,EACd,uBAAuB,EAGvB,QAAQ,GAGR,MAAM,eAAe,CAAC;AACvB,OAAO,EACN,kBAAkB,EAClB,sBAAsB,GAEtB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,eAAe,EAAgC,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAClG,OAAO,EACN,YAAY,EACZ,kBAAkB,EAClB,aAAa,EACb,UAAU,EAEV,aAAa,GACb,MAAM,aAAa,CAAC;AACrB,OAAO,EACN,wBAAwB,EAOxB,qBAAqB,EACrB,aAAa,EACb,aAAa,EACb,eAAe,GACf,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAQN,cAAc,GAGd,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACN,SAAS,EACT,eAAe,GAGf,MAAM,iBAAiB,CAAC"}
@@ -4,6 +4,10 @@
4
4
  * Generates reproducible run IDs based on canonical inputs.
5
5
  * The same inputs will always produce the same run ID, enabling
6
6
  * exact result matching across executions.
7
+ *
8
+ * Canonicalization follows RFC 8785 (JSON Canonicalization Scheme / JCS).
9
+ * This ensures cross-language determinism: Python, Rust, Go, etc. all
10
+ * have JCS libraries that produce identical byte output.
7
11
  */
8
12
  /**
9
13
  * Input components for run ID generation.
@@ -20,11 +24,25 @@ export interface RunIdInputs {
20
24
  /** Repetition number for statistical runs */
21
25
  repetition?: number;
22
26
  }
27
+ /**
28
+ * Serialize a value to RFC 8785 (JCS) canonical JSON.
29
+ *
30
+ * Rules:
31
+ * - Object keys are sorted lexicographically (by UTF-16 code units)
32
+ * - No whitespace
33
+ * - Undefined values and undefined object properties are omitted
34
+ * - Numbers use ECMAScript toString() (which matches RFC 8785 for finite numbers)
35
+ * - Strings use minimal JSON escaping
36
+ *
37
+ * @param value - Value to canonicalize
38
+ * @returns Canonical JSON string
39
+ */
40
+ export declare const canonicalize: (value: unknown) => string;
23
41
  /**
24
42
  * Generate a deterministic run ID from inputs.
25
43
  *
26
- * The run ID is a SHA-256 hash of the canonical JSON representation
27
- * of the inputs, truncated to 16 hex characters.
44
+ * The run ID is a SHA-256 hash of the RFC 8785 (JCS) canonical JSON
45
+ * representation of the inputs, truncated to 16 hex characters.
28
46
  *
29
47
  * @param inputs - Components to hash
30
48
  * @returns 16-character hex string
@@ -1 +1 @@
1
- {"version":3,"file":"run-id.d.ts","sourceRoot":"","sources":["../../src/executor/run-id.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH;;GAEG;AACH,MAAM,WAAW,WAAW;IAC3B,qBAAqB;IACrB,KAAK,EAAE,MAAM,CAAC;IAEd,sBAAsB;IACtB,MAAM,EAAE,MAAM,CAAC;IAEf,kCAAkC;IAClC,IAAI,CAAC,EAAE,MAAM,CAAC;IAEd,oCAAoC;IACpC,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB,6CAA6C;IAC7C,UAAU,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,eAAO,MAAM,aAAa,GAAI,QAAQ,WAAW,KAAG,MAInD,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,kBAAkB,GAAI,QAAQ,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAG,MAUpE,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,aAAa,GAAI,OAAO,MAAM,EAAE,QAAQ,WAAW,KAAG,OACnC,CAAC;AAEjC;;;;;;;GAOG;AACH,eAAO,MAAM,UAAU,GAAI,OAAO,MAAM,KAAG;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAM1E,CAAC"}
1
+ {"version":3,"file":"run-id.d.ts","sourceRoot":"","sources":["../../src/executor/run-id.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAIH;;GAEG;AACH,MAAM,WAAW,WAAW;IAC3B,qBAAqB;IACrB,KAAK,EAAE,MAAM,CAAC;IAEd,sBAAsB;IACtB,MAAM,EAAE,MAAM,CAAC;IAEf,kCAAkC;IAClC,IAAI,CAAC,EAAE,MAAM,CAAC;IAEd,oCAAoC;IACpC,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB,6CAA6C;IAC7C,UAAU,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,YAAY,GAAI,OAAO,OAAO,KAAG,MAsC7C,CAAC;AAEF;;;;;;;;;;;;;;;;;;;GAmBG;AACH,eAAO,MAAM,aAAa,GAAI,QAAQ,WAAW,KAAG,MAGnD,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,kBAAkB,GAAI,QAAQ,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAG,MAGpE,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,aAAa,GAAI,OAAO,MAAM,EAAE,QAAQ,WAAW,KAAG,OACnC,CAAC;AAEjC;;;;;;;GAOG;AACH,eAAO,MAAM,UAAU,GAAI,OAAO,MAAM,KAAG;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAM1E,CAAC"}
@@ -4,13 +4,63 @@
4
4
  * Generates reproducible run IDs based on canonical inputs.
5
5
  * The same inputs will always produce the same run ID, enabling
6
6
  * exact result matching across executions.
7
+ *
8
+ * Canonicalization follows RFC 8785 (JSON Canonicalization Scheme / JCS).
9
+ * This ensures cross-language determinism: Python, Rust, Go, etc. all
10
+ * have JCS libraries that produce identical byte output.
7
11
  */
8
12
  import { createHash } from "node:crypto";
13
+ /**
14
+ * Serialize a value to RFC 8785 (JCS) canonical JSON.
15
+ *
16
+ * Rules:
17
+ * - Object keys are sorted lexicographically (by UTF-16 code units)
18
+ * - No whitespace
19
+ * - Undefined values and undefined object properties are omitted
20
+ * - Numbers use ECMAScript toString() (which matches RFC 8785 for finite numbers)
21
+ * - Strings use minimal JSON escaping
22
+ *
23
+ * @param value - Value to canonicalize
24
+ * @returns Canonical JSON string
25
+ */
26
+ export const canonicalize = (value) => {
27
+ if (value === null || value === undefined) {
28
+ return "null";
29
+ }
30
+ if (typeof value === "boolean") {
31
+ return value ? "true" : "false";
32
+ }
33
+ if (typeof value === "number") {
34
+ if (!Number.isFinite(value)) {
35
+ return "null";
36
+ }
37
+ // ECMAScript Number.toString() matches RFC 8785 for finite numbers
38
+ return Object.is(value, -0) ? "0" : String(value);
39
+ }
40
+ if (typeof value === "string") {
41
+ return JSON.stringify(value);
42
+ }
43
+ if (Array.isArray(value)) {
44
+ const items = value.map((item) => canonicalize(item));
45
+ return `[${items.join(",")}]`;
46
+ }
47
+ if (typeof value === "object") {
48
+ const obj = Object.entries(value);
49
+ const keys = obj
50
+ .filter(([, v]) => v !== undefined)
51
+ .map(([k]) => k)
52
+ .sort();
53
+ const entries = Object.fromEntries(obj);
54
+ const pairs = keys.map((k) => `${JSON.stringify(k)}:${canonicalize(entries[k])}`);
55
+ return `{${pairs.join(",")}}`;
56
+ }
57
+ return "null";
58
+ };
9
59
  /**
10
60
  * Generate a deterministic run ID from inputs.
11
61
  *
12
- * The run ID is a SHA-256 hash of the canonical JSON representation
13
- * of the inputs, truncated to 16 hex characters.
62
+ * The run ID is a SHA-256 hash of the RFC 8785 (JCS) canonical JSON
63
+ * representation of the inputs, truncated to 16 hex characters.
14
64
  *
15
65
  * @param inputs - Components to hash
16
66
  * @returns 16-character hex string
@@ -27,8 +77,7 @@ import { createHash } from "node:crypto";
27
77
  * ```
28
78
  */
29
79
  export const generateRunId = (inputs) => {
30
- // Sort keys for canonical ordering
31
- const canonical = JSON.stringify(inputs, Object.keys(inputs).sort());
80
+ const canonical = canonicalize(inputs);
32
81
  return createHash("sha256").update(canonical).digest("hex").slice(0, 16);
33
82
  };
34
83
  /**
@@ -38,14 +87,7 @@ export const generateRunId = (inputs) => {
38
87
  * @returns 8-character hex string
39
88
  */
40
89
  export const generateConfigHash = (config) => {
41
- // Sort keys for consistent ordering, then stringify without replacer
42
- // (using replacer array would filter nested properties)
43
- const sortedKeys = Object.keys(config).sort();
44
- const sortedObj = {};
45
- for (const key of sortedKeys) {
46
- sortedObj[key] = config[key];
47
- }
48
- const canonical = JSON.stringify(sortedObj);
90
+ const canonical = canonicalize(config);
49
91
  return createHash("sha256").update(canonical).digest("hex").slice(0, 8);
50
92
  };
51
93
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"run-id.js","sourceRoot":"","sources":["../../src/executor/run-id.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAsBzC;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,MAAmB,EAAU,EAAE;IAC5D,mCAAmC;IACnC,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IACrE,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AAC1E,CAAC,CAAC;AAEF;;;;;GAKG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,MAA+B,EAAU,EAAE;IAC7E,qEAAqE;IACrE,wDAAwD;IACxD,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC;IAC9C,MAAM,SAAS,GAA4B,EAAE,CAAC;IAC9C,KAAK,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;QAC9B,SAAS,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;IAC9B,CAAC;IACD,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;IAC5C,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AACzE,CAAC,CAAC;AAEF;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,KAAa,EAAE,MAAmB,EAAW,EAAE,CAC5E,KAAK,KAAK,aAAa,CAAC,MAAM,CAAC,CAAC;AAEjC;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,KAAa,EAAsC,EAAE;IAC/E,MAAM,KAAK,GAAG,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACzC,OAAO;QACN,KAAK,EAAE,KAAK,IAAI,KAAK,CAAC,MAAM,KAAK,EAAE;QACnC,MAAM,EAAE,KAAK,CAAC,MAAM;KACpB,CAAC;AACH,CAAC,CAAC"}
1
+ {"version":3,"file":"run-id.js","sourceRoot":"","sources":["../../src/executor/run-id.ts"],"names":[],"mappings":"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"}