qlm-measure 0.4.1 → 0.7.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/dist/cli.js CHANGED
@@ -9,7 +9,7 @@ import { verifyRecord } from "./verifier/verify-record.js";
9
9
  import { verifyRecordV03 } from "./verifier-v03.js";
10
10
  import { verifyChain, listSchemes } from "./schemes/node.js";
11
11
  import { CATALOG, SHIPPED_CHECKS, SHIPPED_CHECKS_V03, PLANNED_CHECKS, CATALOG_BY_ID, CATEGORIES, CATEGORIES_V03 } from "./checks.js";
12
- const VERSION = "0.4.1";
12
+ const VERSION = "0.7.0";
13
13
  function loadRecords(path) {
14
14
  let raw;
15
15
  if (path === "-") {
package/dist/index.d.ts CHANGED
@@ -40,7 +40,8 @@ export { OntologyClient } from "./clients/ontology-client.js";
40
40
  export type { OntologyClientConfig, DatasetName } from "./clients/ontology-client.js";
41
41
  export { EngineClient } from "./clients/engine-client.js";
42
42
  export type { EngineClientConfig, ModelStateSummary } from "./clients/engine-client.js";
43
- export { SCHEMES, getScheme, familySchemes, listSchemes, sortKeysDeep, TPC_CLINICAL_V1, TPC_CLINICAL_V2, TPC_CLINICAL_V3, TPC_CLINICAL_V4, PLAY_CLINICAL_1_0, TPC_SIGNALS, computeEventHashWith, computeEventHashAsyncWith, sealEventWith, detectSchemeWith, verifyChainWith, } from "./schemes/index.js";
44
- export type { ChainScheme, ChainEvent, ChainVerification, VerifyChainOptions, HashFn, AsyncHashFn } from "./schemes/index.js";
43
+ export { SCHEMES, getScheme, familySchemes, listSchemes, sortKeysDeep, TPC_CLINICAL_V1, TPC_CLINICAL_V2, TPC_CLINICAL_V3, TPC_CLINICAL_V4, PLAY_CLINICAL_1_0, TPC_SIGNALS, computeEventHashWith, computeEventHashAsyncWith, sealEventWith, detectSchemeWith, verifyChainWith, fnv1a64Hex, djb2Hex, digestFor, linkOf, } from "./schemes/index.js";
44
+ export { PRODUCT_SCHEMES, PLAY_EMIT_1, PLAY_MEASURE_SESSION_1, PLAY_ENCOUNTER_FNV64_1, PLAY_RESEARCH_PROVENANCE_1, QCORE_QINVERSE_DJB2_1, STUDIO_LOOP_1, DP_LEDGER_V3, TPC_DSE_JOURNAL_1, YARDSTICK_SPINE_1, LABPATH_LEARNING_EVIDENCE_V1, TPC_TRANSCRIPT_1, TPC_DIFFERENTIAL_COMMIT_1, TPC_DIFFERENTIAL_COMMIT_2, TPC_RCT_INPUT_1, canonicalizeRfc8785, sortObjectLocale, } from "./schemes/products.js";
45
+ export type { ChainScheme, ChainEvent, ChainVerification, VerifyChainOptions, HashFn, AsyncHashFn, Digest } from "./schemes/index.js";
45
46
  export { computeEventHash, sealEvent, detectScheme, verifyChain, sha256Hex } from "./schemes/node.js";
46
47
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAGH,YAAY,EACV,YAAY,EACZ,aAAa,EACb,UAAU,EACV,YAAY,EACZ,aAAa,GACd,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAC1D,YAAY,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AACtE,YAAY,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AACtE,YAAY,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AACjF,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AAGnE,OAAO,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAC;AACtE,YAAY,EAAE,aAAa,EAAE,MAAM,kCAAkC,CAAC;AAGtE,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAC3D,YAAY,EAAE,kBAAkB,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAC;AACjF,OAAO,EAAE,eAAe,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC/F,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAGpF,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACjG,YAAY,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAG5C,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAG9D,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,YAAY,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAGrD,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,YAAY,EAAE,oBAAoB,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAG3E,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAC9D,YAAY,EAAE,oBAAoB,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AACtF,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC1D,YAAY,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAGxF,OAAO,EACL,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,WAAW,EAAE,YAAY,EAC5D,eAAe,EAAE,eAAe,EAAE,eAAe,EAAE,eAAe,EAAE,iBAAiB,EAAE,WAAW,EAClG,oBAAoB,EAAE,yBAAyB,EAAE,aAAa,EAAE,gBAAgB,EAAE,eAAe,GAClG,MAAM,oBAAoB,CAAC;AAC5B,YAAY,EAAE,WAAW,EAAE,UAAU,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAC9H,OAAO,EAAE,gBAAgB,EAAE,SAAS,EAAE,YAAY,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAGH,YAAY,EACV,YAAY,EACZ,aAAa,EACb,UAAU,EACV,YAAY,EACZ,aAAa,GACd,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAC1D,YAAY,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AACtE,YAAY,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AACtE,YAAY,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AACjF,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AAGnE,OAAO,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAC;AACtE,YAAY,EAAE,aAAa,EAAE,MAAM,kCAAkC,CAAC;AAGtE,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAC3D,YAAY,EAAE,kBAAkB,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAC;AACjF,OAAO,EAAE,eAAe,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC/F,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAGpF,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACjG,YAAY,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAG5C,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAG9D,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,YAAY,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAGrD,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,YAAY,EAAE,oBAAoB,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAG3E,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAC9D,YAAY,EAAE,oBAAoB,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AACtF,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC1D,YAAY,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAGxF,OAAO,EACL,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,WAAW,EAAE,YAAY,EAC5D,eAAe,EAAE,eAAe,EAAE,eAAe,EAAE,eAAe,EAAE,iBAAiB,EAAE,WAAW,EAClG,oBAAoB,EAAE,yBAAyB,EAAE,aAAa,EAAE,gBAAgB,EAAE,eAAe,EACjG,UAAU,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,GACvC,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,eAAe,EAAE,WAAW,EAAE,sBAAsB,EAAE,sBAAsB,EAAE,0BAA0B,EACxG,qBAAqB,EAAE,aAAa,EAAE,YAAY,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,4BAA4B,EAAE,gBAAgB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,eAAe,EAAE,mBAAmB,EAAE,gBAAgB,GACvP,MAAM,uBAAuB,CAAC;AAC/B,YAAY,EAAE,WAAW,EAAE,UAAU,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AACtI,OAAO,EAAE,gBAAgB,EAAE,SAAS,EAAE,YAAY,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC"}
package/dist/index.js CHANGED
@@ -37,6 +37,7 @@ export { verifyRecordV03 } from "./verifier-v03.js";
37
37
  export { OntologyClient } from "./clients/ontology-client.js";
38
38
  export { EngineClient } from "./clients/engine-client.js";
39
39
  // ── Chain schemes (per-event hash chains sealed by QLM products; 0.4.0) ──────
40
- export { SCHEMES, getScheme, familySchemes, listSchemes, sortKeysDeep, TPC_CLINICAL_V1, TPC_CLINICAL_V2, TPC_CLINICAL_V3, TPC_CLINICAL_V4, PLAY_CLINICAL_1_0, TPC_SIGNALS, computeEventHashWith, computeEventHashAsyncWith, sealEventWith, detectSchemeWith, verifyChainWith, } from "./schemes/index.js";
40
+ export { SCHEMES, getScheme, familySchemes, listSchemes, sortKeysDeep, TPC_CLINICAL_V1, TPC_CLINICAL_V2, TPC_CLINICAL_V3, TPC_CLINICAL_V4, PLAY_CLINICAL_1_0, TPC_SIGNALS, computeEventHashWith, computeEventHashAsyncWith, sealEventWith, detectSchemeWith, verifyChainWith, fnv1a64Hex, djb2Hex, digestFor, linkOf, } from "./schemes/index.js";
41
+ export { PRODUCT_SCHEMES, PLAY_EMIT_1, PLAY_MEASURE_SESSION_1, PLAY_ENCOUNTER_FNV64_1, PLAY_RESEARCH_PROVENANCE_1, QCORE_QINVERSE_DJB2_1, STUDIO_LOOP_1, DP_LEDGER_V3, TPC_DSE_JOURNAL_1, YARDSTICK_SPINE_1, LABPATH_LEARNING_EVIDENCE_V1, TPC_TRANSCRIPT_1, TPC_DIFFERENTIAL_COMMIT_1, TPC_DIFFERENTIAL_COMMIT_2, TPC_RCT_INPUT_1, canonicalizeRfc8785, sortObjectLocale, } from "./schemes/products.js";
41
42
  export { computeEventHash, sealEvent, detectScheme, verifyChain, sha256Hex } from "./schemes/node.js";
42
43
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAUH,OAAO,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAI1D,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AAEnE,UAAU;AACV,OAAO,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAC;AAGtE,WAAW;AACX,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAE3D,OAAO,EAAE,eAAe,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC/F,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAEpF,gBAAgB;AAChB,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAGjG,QAAQ;AACR,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAE9D,wBAAwB;AACxB,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAGzC,gBAAgB;AAChB,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAGpD,UAAU;AACV,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAE9D,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAG1D,gFAAgF;AAChF,OAAO,EACL,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,WAAW,EAAE,YAAY,EAC5D,eAAe,EAAE,eAAe,EAAE,eAAe,EAAE,eAAe,EAAE,iBAAiB,EAAE,WAAW,EAClG,oBAAoB,EAAE,yBAAyB,EAAE,aAAa,EAAE,gBAAgB,EAAE,eAAe,GAClG,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EAAE,gBAAgB,EAAE,SAAS,EAAE,YAAY,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAUH,OAAO,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAI1D,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AAEnE,UAAU;AACV,OAAO,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAC;AAGtE,WAAW;AACX,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAE3D,OAAO,EAAE,eAAe,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC/F,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAEpF,gBAAgB;AAChB,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAGjG,QAAQ;AACR,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAE9D,wBAAwB;AACxB,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAGzC,gBAAgB;AAChB,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAGpD,UAAU;AACV,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAE9D,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAG1D,gFAAgF;AAChF,OAAO,EACL,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,WAAW,EAAE,YAAY,EAC5D,eAAe,EAAE,eAAe,EAAE,eAAe,EAAE,eAAe,EAAE,iBAAiB,EAAE,WAAW,EAClG,oBAAoB,EAAE,yBAAyB,EAAE,aAAa,EAAE,gBAAgB,EAAE,eAAe,EACjG,UAAU,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,GACvC,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,eAAe,EAAE,WAAW,EAAE,sBAAsB,EAAE,sBAAsB,EAAE,0BAA0B,EACxG,qBAAqB,EAAE,aAAa,EAAE,YAAY,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,4BAA4B,EAAE,gBAAgB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,eAAe,EAAE,mBAAmB,EAAE,gBAAgB,GACvP,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EAAE,gBAAgB,EAAE,SAAS,EAAE,YAAY,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC"}
@@ -18,6 +18,7 @@
18
18
  export type HashFn = (canonical: string) => string;
19
19
  export type AsyncHashFn = (canonical: string) => Promise<string>;
20
20
  export type ChainEvent = Record<string, unknown>;
21
+ export type Digest = "sha256" | "fnv1a64" | "djb2-32";
21
22
  export interface ChainScheme {
22
23
  /** Stable identifier, e.g. "tpc/clinical-v2". */
23
24
  id: string;
@@ -27,19 +28,41 @@ export interface ChainScheme {
27
28
  since: string;
28
29
  /** Field carrying this event's hash. */
29
30
  hashField: string;
30
- /** Field carrying the previous event's hash. */
31
- prevField: string;
32
- /** Value of `prevField` on the first event of a chain. */
33
- genesis: string;
31
+ /**
32
+ * Field carrying the previous event's hash, or null when the record stores no
33
+ * link field. With `link: "implicit"` the previous hash still enters the
34
+ * canonical form (threaded from the previous record); with `link: "none"`
35
+ * the scheme is a content hash and records are independent.
36
+ */
37
+ prevField: string | null;
38
+ /** Value of `prevField` on the first event; null means absent/null is the genesis. */
39
+ genesis: string | null;
40
+ /** How records bind to their predecessor. Default: "explicit" when prevField is set, else "none". */
41
+ link?: "explicit" | "implicit" | "none";
42
+ /** Digest over the canonical string. Default sha256 (injected); the others are built in. */
43
+ digest?: Digest;
44
+ /** Keep only the first N hex characters of the digest (play/measure-session stores 32). */
45
+ truncate?: number;
34
46
  /** Structural precondition for trying this scheme on an event. */
35
47
  applies(event: ChainEvent): boolean;
36
- /** The exact string that is hashed. Never includes `hashField`. */
37
- canonical(event: ChainEvent): string;
48
+ /**
49
+ * The exact string that is hashed. Never includes `hashField`. `prev` is the
50
+ * previous record's stored hash (the genesis value for the first record);
51
+ * schemes with an explicit link normally read the event's own field instead.
52
+ */
53
+ canonical(event: ChainEvent, prev?: string): string;
38
54
  /** Schema errors for one event (not integrity errors). Empty when valid. */
39
55
  validate(event: ChainEvent): string[];
40
56
  /** Scheme ids that may appear in the same chain as this one without the chain counting as mixed. */
41
57
  coexists?: string[];
42
58
  }
59
+ export declare function linkOf(s: ChainScheme): "explicit" | "implicit" | "none";
60
+ /** FNV-1a 64-bit over UTF-16 code units, 16 hex chars (qlm-games snapshot-commit hashSnapshotSync). */
61
+ export declare function fnv1a64Hex(str: string): string;
62
+ /** djb2, 32-bit wrap, unsigned hex padded to 8 (q-core evidence-chain hashString). */
63
+ export declare function djb2Hex(str: string): string;
64
+ /** The digest a scheme seals with: built in for fnv/djb2, the injected function for sha256. */
65
+ export declare function digestFor(scheme: ChainScheme, sha256: HashFn): HashFn;
43
66
  /** Recursively sorts object keys; arrays keep their order. Mirrors Play's residency canonicalize(). */
44
67
  export declare function sortKeysDeep(value: unknown): unknown;
45
68
  export declare const TPC_SIGNALS: readonly ["demonstrated", "partial", "missed_opportunity", "not_observable"];
@@ -61,13 +84,20 @@ export declare const SCHEMES: Readonly<Record<string, ChainScheme>>;
61
84
  export declare function getScheme(id: string): ChainScheme;
62
85
  /** Schemes of a family, newest first — the order detection tries them in. */
63
86
  export declare function familySchemes(family: string): ChainScheme[];
64
- export declare function listSchemes(): Array<Pick<ChainScheme, "id" | "family" | "since" | "hashField" | "prevField">>;
65
- export declare function computeEventHashWith(hash: HashFn, event: ChainEvent, schemeId: string): string;
66
- export declare function computeEventHashAsyncWith(hash: AsyncHashFn, event: ChainEvent, schemeId: string): Promise<string>;
67
- /** Returns a copy of `event` with the scheme's hash field set. Never mutates the input. */
68
- export declare function sealEventWith<E extends ChainEvent>(hash: HashFn, event: E, schemeId: string): E;
87
+ export declare function listSchemes(): Array<Pick<ChainScheme, "id" | "family" | "since" | "hashField" | "prevField"> & {
88
+ link: string;
89
+ digest: Digest;
90
+ }>;
91
+ export declare function computeEventHashWith(hash: HashFn, event: ChainEvent, schemeId: string, prev?: string): string;
92
+ export declare function computeEventHashAsyncWith(hash: AsyncHashFn, event: ChainEvent, schemeId: string, prev?: string): Promise<string>;
93
+ /**
94
+ * Returns a copy of `event` with the scheme's hash field set. Never mutates the
95
+ * input. `prev` is required for implicit-link schemes (the previous record's
96
+ * hash, or the genesis value for the first record).
97
+ */
98
+ export declare function sealEventWith<E extends ChainEvent>(hash: HashFn, event: E, schemeId: string, prev?: string): E;
69
99
  /** Which scheme of `family` the event's stored hash was sealed under, or null. Tries newest first. */
70
- export declare function detectSchemeWith(hash: HashFn, event: ChainEvent, family: string): string | null;
100
+ export declare function detectSchemeWith(hash: HashFn, event: ChainEvent, family: string, prev?: string): string | null;
71
101
  export interface ChainVerification {
72
102
  clean: boolean;
73
103
  errors: string[];
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/schemes/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/schemes/index.ts"],"names":[],"mappings":"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"}
@@ -15,6 +15,40 @@
15
15
  * Python twin: `python/qlm_measure/schemes.py`. Both are checked against
16
16
  * `schema/vectors/chains/*.json`.
17
17
  */
18
+ import { PRODUCT_SCHEMES } from "./products.js";
19
+ export function linkOf(s) {
20
+ return s.link ?? (s.prevField ? "explicit" : "none");
21
+ }
22
+ // ── Built-in non-cryptographic digests (products that sealed with them) ───
23
+ /** UTF-16 code units, as JavaScript's charCodeAt yields them. */
24
+ function utf16Units(str) {
25
+ const out = [];
26
+ for (let i = 0; i < str.length; i++)
27
+ out.push(str.charCodeAt(i));
28
+ return out;
29
+ }
30
+ /** FNV-1a 64-bit over UTF-16 code units, 16 hex chars (qlm-games snapshot-commit hashSnapshotSync). */
31
+ export function fnv1a64Hex(str) {
32
+ let h = BigInt("0xcbf29ce484222325");
33
+ const prime = BigInt("0x100000001b3");
34
+ for (const c of utf16Units(str)) {
35
+ h ^= BigInt(c);
36
+ h = BigInt.asUintN(64, h * prime);
37
+ }
38
+ return h.toString(16).padStart(16, "0");
39
+ }
40
+ /** djb2, 32-bit wrap, unsigned hex padded to 8 (q-core evidence-chain hashString). */
41
+ export function djb2Hex(str) {
42
+ let hash = 5381;
43
+ for (const c of utf16Units(str))
44
+ hash = ((hash << 5) + hash + c) | 0;
45
+ return (hash >>> 0).toString(16).padStart(8, "0");
46
+ }
47
+ /** The digest a scheme seals with: built in for fnv/djb2, the injected function for sha256. */
48
+ export function digestFor(scheme, sha256) {
49
+ const base = scheme.digest === "fnv1a64" ? fnv1a64Hex : scheme.digest === "djb2-32" ? djb2Hex : sha256;
50
+ return scheme.truncate ? (c) => base(c).slice(0, scheme.truncate) : base;
51
+ }
18
52
  // ── Canonical forms ───────────────────────────────────────────────────────
19
53
  /** Recursively sorts object keys; arrays keep their order. Mirrors Play's residency canonicalize(). */
20
54
  export function sortKeysDeep(value) {
@@ -52,6 +86,8 @@ function tpcArray(event, variant) {
52
86
  }
53
87
  /** A schema 0.4 event: one with event_kind. Only tpc/clinical-v4 seals it, so its payload is always covered. */
54
88
  const hasEventKind = (e) => e.event_kind !== undefined;
89
+ /** Commit/skip events share the clinical chain but have their own schemes (tpc/differential-commit-1 and -2). */
90
+ const isCommitEvent = (e) => e.type === "differential_commit" || e.type === "commit_skipped";
55
91
  function tpcValidate(event) {
56
92
  const errors = [];
57
93
  if (event.type !== "clinical_evidence")
@@ -75,19 +111,19 @@ function tpcValidate(event) {
75
111
  const tpcCommon = { family: "tpc/clinical", hashField: "hash", prevField: "prev_hash", genesis: "genesis", validate: tpcValidate };
76
112
  export const TPC_CLINICAL_V1 = {
77
113
  ...tpcCommon, id: "tpc/clinical-v1", since: "2026-08-31",
78
- applies: (e) => !hasEventKind(e),
114
+ applies: (e) => !hasEventKind(e) && !isCommitEvent(e),
79
115
  canonical: (e) => JSON.stringify(tpcArray(e, 1)),
80
116
  };
81
117
  /** 2026-09-10 (teachproof ac9375b): triage_class and engine_version join the hash, null when absent. */
82
118
  export const TPC_CLINICAL_V2 = {
83
119
  ...tpcCommon, id: "tpc/clinical-v2", since: "2026-09-10",
84
- applies: (e) => !hasEventKind(e),
120
+ applies: (e) => !hasEventKind(e) && !isCommitEvent(e),
85
121
  canonical: (e) => JSON.stringify(tpcArray(e, 2)),
86
122
  };
87
123
  /** 2026-09-14: mapping_version joins the hash on events that carry it. */
88
124
  export const TPC_CLINICAL_V3 = {
89
125
  ...tpcCommon, id: "tpc/clinical-v3", since: "2026-09-14",
90
- applies: (e) => e.mapping_version !== undefined && !hasEventKind(e),
126
+ applies: (e) => e.mapping_version !== undefined && !hasEventKind(e) && !isCommitEvent(e),
91
127
  canonical: (e) => JSON.stringify(tpcArray(e, 3)),
92
128
  coexists: ["tpc/clinical-v4"],
93
129
  };
@@ -101,7 +137,7 @@ const TPC_EVENT_KIND = /^[a-z]+\.[a-z_]+$/;
101
137
  */
102
138
  export const TPC_CLINICAL_V4 = {
103
139
  ...tpcCommon, id: "tpc/clinical-v4", since: "2026-09-25",
104
- applies: hasEventKind,
140
+ applies: (e) => hasEventKind(e) && !isCommitEvent(e),
105
141
  canonical: (e) => JSON.stringify(tpcArray(e, 4)),
106
142
  validate: (e) => {
107
143
  const errors = tpcValidate(e);
@@ -143,7 +179,7 @@ export const PLAY_CLINICAL_1_0 = {
143
179
  },
144
180
  };
145
181
  // ── Registry ──────────────────────────────────────────────────────────────
146
- const ALL = [TPC_CLINICAL_V4, TPC_CLINICAL_V3, TPC_CLINICAL_V2, TPC_CLINICAL_V1, PLAY_CLINICAL_1_0];
182
+ const ALL = [TPC_CLINICAL_V4, TPC_CLINICAL_V3, TPC_CLINICAL_V2, TPC_CLINICAL_V1, PLAY_CLINICAL_1_0, ...PRODUCT_SCHEMES];
147
183
  export const SCHEMES = Object.freeze(Object.fromEntries(ALL.map((s) => [s.id, s])));
148
184
  export function getScheme(id) {
149
185
  const s = SCHEMES[id];
@@ -159,48 +195,63 @@ export function familySchemes(family) {
159
195
  return out;
160
196
  }
161
197
  export function listSchemes() {
162
- return ALL.map(({ id, family, since, hashField, prevField }) => ({ id, family, since, hashField, prevField }));
198
+ return ALL.map((s) => ({ id: s.id, family: s.family, since: s.since, hashField: s.hashField, prevField: s.prevField, link: linkOf(s), digest: s.digest ?? "sha256" }));
163
199
  }
164
200
  // ── Sealing and detection ─────────────────────────────────────────────────
165
- export function computeEventHashWith(hash, event, schemeId) {
166
- return hash(getScheme(schemeId).canonical(event));
201
+ export function computeEventHashWith(hash, event, schemeId, prev) {
202
+ const scheme = getScheme(schemeId);
203
+ return digestFor(scheme, hash)(scheme.canonical(event, prev));
167
204
  }
168
- export async function computeEventHashAsyncWith(hash, event, schemeId) {
169
- return hash(getScheme(schemeId).canonical(event));
205
+ export async function computeEventHashAsyncWith(hash, event, schemeId, prev) {
206
+ const scheme = getScheme(schemeId);
207
+ if (scheme.digest && scheme.digest !== "sha256")
208
+ return digestFor(scheme, () => "")(scheme.canonical(event, prev));
209
+ const full = await hash(scheme.canonical(event, prev));
210
+ return scheme.truncate ? full.slice(0, scheme.truncate) : full;
170
211
  }
171
- /** Returns a copy of `event` with the scheme's hash field set. Never mutates the input. */
172
- export function sealEventWith(hash, event, schemeId) {
212
+ /**
213
+ * Returns a copy of `event` with the scheme's hash field set. Never mutates the
214
+ * input. `prev` is required for implicit-link schemes (the previous record's
215
+ * hash, or the genesis value for the first record).
216
+ */
217
+ export function sealEventWith(hash, event, schemeId, prev) {
173
218
  const scheme = getScheme(schemeId);
219
+ if (linkOf(scheme) === "implicit" && prev === undefined)
220
+ throw new Error(`${schemeId}: prev is required (implicit link)`);
174
221
  const { [scheme.hashField]: _drop, ...rest } = event;
175
222
  void _drop;
176
- return { ...rest, [scheme.hashField]: hash(scheme.canonical(rest)) };
223
+ return { ...rest, [scheme.hashField]: digestFor(scheme, hash)(scheme.canonical(rest, prev)) };
177
224
  }
178
225
  /** Which scheme of `family` the event's stored hash was sealed under, or null. Tries newest first. */
179
- export function detectSchemeWith(hash, event, family) {
226
+ export function detectSchemeWith(hash, event, family, prev) {
180
227
  for (const s of familySchemes(family)) {
181
228
  if (!s.applies(event))
182
229
  continue;
183
- if (event[s.hashField] === hash(s.canonical(event)))
230
+ if (event[s.hashField] === digestFor(s, hash)(s.canonical(event, prev)))
184
231
  return s.id;
185
232
  }
186
233
  return null;
187
234
  }
235
+ const isAbsent = (v) => v === undefined || v === null;
188
236
  export function verifyChainWith(hash, events, opts) {
189
237
  if (!opts.scheme && !opts.family)
190
238
  throw new Error("verifyChain: pass { family } or { scheme }");
191
239
  const candidates = opts.scheme ? [getScheme(opts.scheme)] : familySchemes(opts.family);
192
240
  const { hashField, prevField, genesis } = candidates[0];
241
+ const link = linkOf(candidates[0]);
193
242
  const rejectMixed = opts.rejectMixed ?? true;
194
243
  const errors = [];
195
244
  const seen = new Set();
196
245
  const perScheme = {};
197
246
  let gaps = 0, duplicates = 0, tampered = 0, schemaErrors = 0;
198
247
  events.forEach((e, i) => {
248
+ // The previous record's stored hash, threaded for implicit-link schemes.
249
+ const prev = i === 0 ? (genesis ?? "") : String(events[i - 1][hashField] ?? "");
199
250
  let matched = null;
200
251
  for (const s of candidates) {
201
252
  if (!s.applies(e))
202
253
  continue;
203
- if (e[hashField] === hash(s.canonical(e))) {
254
+ if (e[hashField] === digestFor(s, hash)(s.canonical(e, prev))) {
204
255
  matched = s;
205
256
  break;
206
257
  }
@@ -218,16 +269,19 @@ export function verifyChainWith(hash, events, opts) {
218
269
  tampered++;
219
270
  }
220
271
  const h = e[hashField];
221
- if (i === 0) {
222
- if (e[prevField] !== genesis) {
223
- errors.push(`[${i}] first event ${prevField} must be ${JSON.stringify(genesis)}`);
272
+ if (link === "explicit" && prevField) {
273
+ if (i === 0) {
274
+ const ok = genesis === null ? isAbsent(e[prevField]) : e[prevField] === genesis;
275
+ if (!ok) {
276
+ errors.push(`[${i}] first event ${prevField} must be ${genesis === null ? "absent" : JSON.stringify(genesis)}`);
277
+ gaps++;
278
+ }
279
+ }
280
+ else if (e[prevField] !== events[i - 1][hashField]) {
281
+ errors.push(`[${i}] chain gap`);
224
282
  gaps++;
225
283
  }
226
284
  }
227
- else if (e[prevField] !== events[i - 1][hashField]) {
228
- errors.push(`[${i}] chain gap`);
229
- gaps++;
230
- }
231
285
  if (typeof h === "string") {
232
286
  if (seen.has(h)) {
233
287
  errors.push(`[${i}] duplicate hash`);
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/schemes/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AA8BH,6EAA6E;AAE7E,uGAAuG;AACvG,MAAM,UAAU,YAAY,CAAC,KAAc;IACzC,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,KAAK,CAAC;IACxD,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;IACzD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,MAAM,MAAM,GAA4B,EAAE,CAAC;QAC3C,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,KAAgC,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC;YACvE,MAAM,CAAC,GAAG,CAAC,GAAG,YAAY,CAAE,KAAiC,CAAC,GAAG,CAAC,CAAC,CAAC;QACtE,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,6EAA6E;AAC7E,gDAAgD;AAChD,+EAA+E;AAC/E,0DAA0D;AAE1D,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,cAAc,EAAE,SAAS,EAAE,oBAAoB,EAAE,gBAAgB,CAAU,CAAC;AAExG,MAAM,eAAe,GAAG;IACtB,MAAM,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,EAAE,WAAW;IACnD,QAAQ,EAAE,UAAU,EAAE,WAAW,EAAE,YAAY,EAAE,WAAW;CACpD,CAAC;AAEX,SAAS,QAAQ,CAAC,KAAiB,EAAE,OAAsB;IACzD,MAAM,GAAG,GAAc,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAC5D,IAAI,OAAO,IAAI,CAAC;QAAE,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,IAAI,IAAI,EAAE,KAAK,CAAC,cAAc,IAAI,IAAI,CAAC,CAAC;IACrF,IAAI,OAAO,KAAK,CAAC;QAAE,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;IACnD,IAAI,OAAO,KAAK,CAAC;QAAE,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,eAAe,IAAI,IAAI,EAAE,KAAK,CAAC,UAAU,EAAE,YAAY,CAAC,KAAK,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,CAAC;IAChH,OAAO,GAAG,CAAC;AACb,CAAC;AAED,gHAAgH;AAChH,MAAM,YAAY,GAAG,CAAC,CAAa,EAAW,EAAE,CAAC,CAAC,CAAC,UAAU,KAAK,SAAS,CAAC;AAE5E,SAAS,WAAW,CAAC,KAAiB;IACpC,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,IAAI,KAAK,CAAC,IAAI,KAAK,mBAAmB;QAAE,MAAM,CAAC,IAAI,CAAC,iBAAiB,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC3F,IAAI,CAAC,KAAK,CAAC,OAAO;QAAE,MAAM,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;IACnD,IAAI,CAAC,KAAK,CAAC,SAAS;QAAE,MAAM,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;IACvD,IAAI,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,GAAG,CAAC;QAAE,MAAM,CAAC,IAAI,CAAC,iBAAiB,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACzG,IAAI,CAAC,KAAK,CAAC,SAAS;QAAE,MAAM,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;IACvD,IAAI,CAAE,WAAiC,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAgB,CAAC;QAAE,MAAM,CAAC,IAAI,CAAC,mBAAmB,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IACjI,IAAI,OAAO,KAAK,CAAC,QAAQ,KAAK,QAAQ,IAAI,KAAK,CAAC,QAAQ,GAAG,CAAC,IAAI,KAAK,CAAC,QAAQ,GAAG,CAAC;QAAE,MAAM,CAAC,IAAI,CAAC,qBAAqB,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;IAC/I,IAAI,OAAO,KAAK,CAAC,UAAU,KAAK,QAAQ,IAAI,KAAK,CAAC,UAAU,GAAG,CAAC,IAAI,KAAK,CAAC,UAAU,GAAG,CAAC;QAAE,MAAM,CAAC,IAAI,CAAC,uBAAuB,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;IACzJ,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,SAAS,GAAG,EAAE,MAAM,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,WAAW,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,WAAW,EAAE,CAAC;AAEnI,MAAM,CAAC,MAAM,eAAe,GAAgB;IAC1C,GAAG,SAAS,EAAE,EAAE,EAAE,iBAAiB,EAAE,KAAK,EAAE,YAAY;IACxD,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC;IAChC,SAAS,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;CACjD,CAAC;AAEF,wGAAwG;AACxG,MAAM,CAAC,MAAM,eAAe,GAAgB;IAC1C,GAAG,SAAS,EAAE,EAAE,EAAE,iBAAiB,EAAE,KAAK,EAAE,YAAY;IACxD,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC;IAChC,SAAS,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;CACjD,CAAC;AAEF,0EAA0E;AAC1E,MAAM,CAAC,MAAM,eAAe,GAAgB;IAC1C,GAAG,SAAS,EAAE,EAAE,EAAE,iBAAiB,EAAE,KAAK,EAAE,YAAY;IACxD,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,eAAe,KAAK,SAAS,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC;IACnE,SAAS,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAChD,QAAQ,EAAE,CAAC,iBAAiB,CAAC;CAC9B,CAAC;AAEF,MAAM,cAAc,GAAG,mBAAmB,CAAC;AAE3C;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,eAAe,GAAgB;IAC1C,GAAG,SAAS,EAAE,EAAE,EAAE,iBAAiB,EAAE,KAAK,EAAE,YAAY;IACxD,OAAO,EAAE,YAAY;IACrB,SAAS,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAChD,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE;QACd,MAAM,MAAM,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;QAC9B,IAAI,OAAO,CAAC,CAAC,UAAU,KAAK,QAAQ,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC;YAAE,MAAM,CAAC,IAAI,CAAC,uBAAuB,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;QACvI,IAAI,CAAC,CAAC,CAAC,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC;YAAE,MAAM,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC;QACtH,OAAO,MAAM,CAAC;IAChB,CAAC;IACD,QAAQ,EAAE,CAAC,iBAAiB,CAAC;CAC9B,CAAC;AAEF,6EAA6E;AAC7E,+CAA+C;AAC/C,kEAAkE;AAClE,6EAA6E;AAC7E,2DAA2D;AAE3D,MAAM,kBAAkB,GAAG;IACzB,SAAS,EAAE,IAAI,EAAE,aAAa,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,YAAY,EAAE,eAAe,EAAE,UAAU;CACvG,CAAC;AAEX,MAAM,CAAC,MAAM,iBAAiB,GAAgB;IAC5C,EAAE,EAAE,wBAAwB,EAAE,MAAM,EAAE,eAAe,EAAE,KAAK,EAAE,YAAY;IAC1E,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,OAAO,EAAE,EAAE;IACrD,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,KAAK,UAAU;IAC9C,SAAS,EAAE,CAAC,CAAC,EAAE,EAAE;QACf,MAAM,MAAM,GAA4B,EAAE,CAAC;QAC3C,KAAK,MAAM,CAAC,IAAI,kBAAkB;YAAE,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACrD,OAAO,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC;IAC9C,CAAC;IACD,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE;QACd,MAAM,MAAM,GAAa,EAAE,CAAC;QAC5B,IAAI,CAAC,CAAC,aAAa,KAAK,UAAU;YAAE,MAAM,CAAC,IAAI,CAAC,0BAA0B,MAAM,CAAC,CAAC,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;QACrG,KAAK,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,CAAU,EAAE,CAAC;YAClE,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,QAAQ,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;gBAAE,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;QACrE,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;CACF,CAAC;AAEF,6EAA6E;AAE7E,MAAM,GAAG,GAAkB,CAAC,eAAe,EAAE,eAAe,EAAE,eAAe,EAAE,eAAe,EAAE,iBAAiB,CAAC,CAAC;AAEnH,MAAM,CAAC,MAAM,OAAO,GAA0C,MAAM,CAAC,MAAM,CACzE,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAC9C,CAAC;AAEF,MAAM,UAAU,SAAS,CAAC,EAAU;IAClC,MAAM,CAAC,GAAG,OAAO,CAAC,EAAE,CAAC,CAAC;IACtB,IAAI,CAAC,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,yBAAyB,EAAE,YAAY,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACnG,OAAO,CAAC,CAAC;AACX,CAAC;AAED,6EAA6E;AAC7E,MAAM,UAAU,aAAa,CAAC,MAAc;IAC1C,MAAM,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC;IACnD,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,yBAAyB,MAAM,EAAE,CAAC,CAAC;IACzE,OAAO,GAAG,CAAC;AACb,CAAC;AAED,MAAM,UAAU,WAAW;IACzB,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC;AACjH,CAAC;AAED,6EAA6E;AAE7E,MAAM,UAAU,oBAAoB,CAAC,IAAY,EAAE,KAAiB,EAAE,QAAgB;IACpF,OAAO,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;AACpD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,yBAAyB,CAAC,IAAiB,EAAE,KAAiB,EAAE,QAAgB;IACpG,OAAO,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;AACpD,CAAC;AAED,2FAA2F;AAC3F,MAAM,UAAU,aAAa,CAAuB,IAAY,EAAE,KAAQ,EAAE,QAAgB;IAC1F,MAAM,MAAM,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;IACnC,MAAM,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,GAAG,IAAI,EAAE,GAAG,KAAgC,CAAC;IAChF,KAAK,KAAK,CAAC;IACX,OAAO,EAAE,GAAI,IAAU,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;AAC9E,CAAC;AAED,sGAAsG;AACtG,MAAM,UAAU,gBAAgB,CAAC,IAAY,EAAE,KAAiB,EAAE,MAAc;IAC9E,KAAK,MAAM,CAAC,IAAI,aAAa,CAAC,MAAM,CAAC,EAAE,CAAC;QACtC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC;YAAE,SAAS;QAChC,IAAI,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;YAAE,OAAO,CAAC,CAAC,EAAE,CAAC;IACnE,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AA6BD,MAAM,UAAU,eAAe,CAAC,IAAY,EAAE,MAAoB,EAAE,IAAwB;IAC1F,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,MAAM;QAAE,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC;IAChG,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,IAAI,CAAC,MAAO,CAAC,CAAC;IACxF,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,OAAO,EAAE,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;IACxD,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC;IAE7C,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,MAAM,SAAS,GAA2B,EAAE,CAAC;IAC7C,IAAI,IAAI,GAAG,CAAC,EAAE,UAAU,GAAG,CAAC,EAAE,QAAQ,GAAG,CAAC,EAAE,YAAY,GAAG,CAAC,CAAC;IAE7D,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QACtB,IAAI,OAAO,GAAuB,IAAI,CAAC;QACvC,KAAK,MAAM,CAAC,IAAI,UAAU,EAAE,CAAC;YAC3B,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;gBAAE,SAAS;YAC5B,IAAI,CAAC,CAAC,SAAS,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;gBAAC,OAAO,GAAG,CAAC,CAAC;gBAAC,MAAM;YAAC,CAAC;QACpE,CAAC;QACD,8FAA8F;QAC9F,MAAM,eAAe,GAAG,OAAO,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,UAAU,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAC7G,KAAK,MAAM,GAAG,IAAI,eAAe,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;YAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC,CAAC;YAAC,YAAY,EAAE,CAAC;QAAC,CAAC;QAEhG,IAAI,OAAO;YAAE,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC,GAAG,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;aACjE,CAAC;YAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC;YAAC,QAAQ,EAAE,CAAC;QAAC,CAAC;QAEpE,MAAM,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC;QACvB,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;YACZ,IAAI,CAAC,CAAC,SAAS,CAAC,KAAK,OAAO,EAAE,CAAC;gBAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,SAAS,YAAY,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;gBAAC,IAAI,EAAE,CAAC;YAAC,CAAC;QAC9H,CAAC;aAAM,IAAI,CAAC,CAAC,SAAS,CAAC,KAAK,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,EAAE,CAAC;YAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;YAAC,IAAI,EAAE,CAAC;QAAC,CAAC;QAClG,IAAI,OAAO,CAAC,KAAK,QAAQ,EAAE,CAAC;YAC1B,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;gBAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;gBAAC,UAAU,EAAE,CAAC;YAAC,CAAC;YACxE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACd,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACnC,yEAAyE;IACzE,6DAA6D;IAC7D,MAAM,OAAO,GAAG,CAAC,CAAS,EAAE,CAAS,EAAW,EAAE,CAChD,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;IACzF,MAAM,KAAK,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAC/E,MAAM,MAAM,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC;IAC9D,MAAM,UAAU,GAAG,GAAG,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;IACxG,IAAI,KAAK,IAAI,WAAW,EAAE,CAAC;QACzB,MAAM,CAAC,IAAI,CAAC,uBAAuB,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC7F,CAAC;IAED,OAAO;QACL,KAAK,EAAE,MAAM,CAAC,MAAM,KAAK,CAAC;QAC1B,MAAM;QACN,KAAK,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,aAAa,EAAE,YAAY,EAAE,WAAW,EAAE,UAAU,EAAE,OAAO,EAAE,SAAS,EAAE;KACtI,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/schemes/index.ts"],"names":[],"mappings":"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"}
@@ -1,8 +1,8 @@
1
1
  import { type ChainEvent, type VerifyChainOptions, type ChainVerification } from "./index.js";
2
2
  export declare const sha256Hex: (s: string) => string;
3
- export declare const computeEventHash: (event: ChainEvent, schemeId: string) => string;
4
- export declare const sealEvent: <E extends ChainEvent>(event: E, schemeId: string) => E;
5
- export declare const detectScheme: (event: ChainEvent, family: string) => string | null;
3
+ export declare const computeEventHash: (event: ChainEvent, schemeId: string, prev?: string) => string;
4
+ export declare const sealEvent: <E extends ChainEvent>(event: E, schemeId: string, prev?: string) => E;
5
+ export declare const detectScheme: (event: ChainEvent, family: string, prev?: string) => string | null;
6
6
  export declare const verifyChain: (events: ChainEvent[], opts: VerifyChainOptions) => ChainVerification;
7
7
  export * from "./index.js";
8
8
  //# sourceMappingURL=node.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"node.d.ts","sourceRoot":"","sources":["../../src/schemes/node.ts"],"names":[],"mappings":"AAOA,OAAO,EAEL,KAAK,UAAU,EAAE,KAAK,kBAAkB,EAAE,KAAK,iBAAiB,EACjE,MAAM,YAAY,CAAC;AAEpB,eAAO,MAAM,SAAS,GAAI,GAAG,MAAM,KAAG,MAAsD,CAAC;AAE7F,eAAO,MAAM,gBAAgB,GAAI,OAAO,UAAU,EAAE,UAAU,MAAM,KAAG,MACrB,CAAC;AAEnD,eAAO,MAAM,SAAS,GAAI,CAAC,SAAS,UAAU,EAAE,OAAO,CAAC,EAAE,UAAU,MAAM,KAAG,CAClC,CAAC;AAE5C,eAAO,MAAM,YAAY,GAAI,OAAO,UAAU,EAAE,QAAQ,MAAM,KAAG,MAAM,GAAG,IAC9B,CAAC;AAE7C,eAAO,MAAM,WAAW,GAAI,QAAQ,UAAU,EAAE,EAAE,MAAM,kBAAkB,KAAG,iBACnC,CAAC;AAE3C,cAAc,YAAY,CAAC"}
1
+ {"version":3,"file":"node.d.ts","sourceRoot":"","sources":["../../src/schemes/node.ts"],"names":[],"mappings":"AAOA,OAAO,EAEL,KAAK,UAAU,EAAE,KAAK,kBAAkB,EAAE,KAAK,iBAAiB,EACjE,MAAM,YAAY,CAAC;AAEpB,eAAO,MAAM,SAAS,GAAI,GAAG,MAAM,KAAG,MAAsD,CAAC;AAE7F,eAAO,MAAM,gBAAgB,GAAI,OAAO,UAAU,EAAE,UAAU,MAAM,EAAE,OAAO,MAAM,KAAG,MAC9B,CAAC;AAEzD,eAAO,MAAM,SAAS,GAAI,CAAC,SAAS,UAAU,EAAE,OAAO,CAAC,EAAE,UAAU,MAAM,EAAE,OAAO,MAAM,KAAG,CAC3C,CAAC;AAElD,eAAO,MAAM,YAAY,GAAI,OAAO,UAAU,EAAE,QAAQ,MAAM,EAAE,OAAO,MAAM,KAAG,MAAM,GAAG,IACvC,CAAC;AAEnD,eAAO,MAAM,WAAW,GAAI,QAAQ,UAAU,EAAE,EAAE,MAAM,kBAAkB,KAAG,iBACnC,CAAC;AAE3C,cAAc,YAAY,CAAC"}
@@ -7,9 +7,9 @@
7
7
  import { createHash } from "crypto";
8
8
  import { computeEventHashWith, sealEventWith, detectSchemeWith, verifyChainWith, } from "./index.js";
9
9
  export const sha256Hex = (s) => createHash("sha256").update(s).digest("hex");
10
- export const computeEventHash = (event, schemeId) => computeEventHashWith(sha256Hex, event, schemeId);
11
- export const sealEvent = (event, schemeId) => sealEventWith(sha256Hex, event, schemeId);
12
- export const detectScheme = (event, family) => detectSchemeWith(sha256Hex, event, family);
10
+ export const computeEventHash = (event, schemeId, prev) => computeEventHashWith(sha256Hex, event, schemeId, prev);
11
+ export const sealEvent = (event, schemeId, prev) => sealEventWith(sha256Hex, event, schemeId, prev);
12
+ export const detectScheme = (event, family, prev) => detectSchemeWith(sha256Hex, event, family, prev);
13
13
  export const verifyChain = (events, opts) => verifyChainWith(sha256Hex, events, opts);
14
14
  export * from "./index.js";
15
15
  //# sourceMappingURL=node.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"node.js","sourceRoot":"","sources":["../../src/schemes/node.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AACpC,OAAO,EACL,oBAAoB,EAAE,aAAa,EAAE,gBAAgB,EAAE,eAAe,GAEvE,MAAM,YAAY,CAAC;AAEpB,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,CAAS,EAAU,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAE7F,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,KAAiB,EAAE,QAAgB,EAAU,EAAE,CAC9E,oBAAoB,CAAC,SAAS,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC;AAEnD,MAAM,CAAC,MAAM,SAAS,GAAG,CAAuB,KAAQ,EAAE,QAAgB,EAAK,EAAE,CAC/E,aAAa,CAAC,SAAS,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC;AAE5C,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,KAAiB,EAAE,MAAc,EAAiB,EAAE,CAC/E,gBAAgB,CAAC,SAAS,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;AAE7C,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,MAAoB,EAAE,IAAwB,EAAqB,EAAE,CAC/F,eAAe,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;AAE3C,cAAc,YAAY,CAAC"}
1
+ {"version":3,"file":"node.js","sourceRoot":"","sources":["../../src/schemes/node.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AACpC,OAAO,EACL,oBAAoB,EAAE,aAAa,EAAE,gBAAgB,EAAE,eAAe,GAEvE,MAAM,YAAY,CAAC;AAEpB,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,CAAS,EAAU,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAE7F,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,KAAiB,EAAE,QAAgB,EAAE,IAAa,EAAU,EAAE,CAC7F,oBAAoB,CAAC,SAAS,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC;AAEzD,MAAM,CAAC,MAAM,SAAS,GAAG,CAAuB,KAAQ,EAAE,QAAgB,EAAE,IAAa,EAAK,EAAE,CAC9F,aAAa,CAAC,SAAS,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC;AAElD,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,KAAiB,EAAE,MAAc,EAAE,IAAa,EAAiB,EAAE,CAC9F,gBAAgB,CAAC,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;AAEnD,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,MAAoB,EAAE,IAAwB,EAAqB,EAAE,CAC/F,eAAe,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;AAE3C,cAAc,YAAY,CAAC"}
@@ -0,0 +1,36 @@
1
+ /**
2
+ * Product envelope schemes — the per-record hashes QLM products seal besides
3
+ * the clinical chains in ./index.ts. Each is a verbatim, named definition of
4
+ * what the product's own code hashed on the date given; the vectors in
5
+ * schema/vectors/chains were generated from the original functions.
6
+ *
7
+ * This file imports only types from ./index.ts so the two modules do not form
8
+ * a runtime cycle. Python twin: python/qlm_measure/schemes.py.
9
+ */
10
+ import type { ChainScheme } from "./index.js";
11
+ export declare const PLAY_EMIT_1: ChainScheme;
12
+ export declare const PLAY_MEASURE_SESSION_1: ChainScheme;
13
+ export declare const PLAY_ENCOUNTER_FNV64_1: ChainScheme;
14
+ export declare const PLAY_RESEARCH_PROVENANCE_1: ChainScheme;
15
+ export declare const QCORE_QINVERSE_DJB2_1: ChainScheme;
16
+ export declare const STUDIO_LOOP_1: ChainScheme;
17
+ export declare function canonicalizeRfc8785(value: unknown): string;
18
+ export declare const DP_LEDGER_V3: ChainScheme;
19
+ export declare const TPC_DSE_JOURNAL_1: ChainScheme;
20
+ export declare const YARDSTICK_SPINE_1: ChainScheme;
21
+ export declare function sortObjectLocale(value: unknown): unknown;
22
+ export declare const LABPATH_LEARNING_EVIDENCE_V1: ChainScheme;
23
+ export declare const TPC_TRANSCRIPT_1: ChainScheme;
24
+ export declare const TPC_DIFFERENTIAL_COMMIT_1: ChainScheme;
25
+ export declare const TPC_DIFFERENTIAL_COMMIT_2: ChainScheme;
26
+ export declare const TPC_RCT_INPUT_1: ChainScheme;
27
+ export declare const PLAY_WORLD_TRACE_IDENTITY_1: ChainScheme;
28
+ export declare const PLAY_WORLD_TRACE_TSIM_1: ChainScheme;
29
+ export declare const PLAY_WORLD_TRACE_1: ChainScheme;
30
+ export declare const TPC_YARDSTICK_RECORD_2: ChainScheme;
31
+ export declare const TPC_YARDSTICK_RECORD_1: ChainScheme;
32
+ export declare const TPC_INTERVENTION_1: ChainScheme;
33
+ export declare const TPC_REHEARSAL_STAGE_1: ChainScheme;
34
+ export declare const YARDSTICK_ACTIVITY_1: ChainScheme;
35
+ export declare const PRODUCT_SCHEMES: ChainScheme[];
36
+ //# sourceMappingURL=products.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"products.d.ts","sourceRoot":"","sources":["../../src/schemes/products.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,KAAK,EAAc,WAAW,EAAE,MAAM,YAAY,CAAC;AAoB1D,eAAO,MAAM,WAAW,EAAE,WAazB,CAAC;AAQF,eAAO,MAAM,sBAAsB,EAAE,WAgBpC,CAAC;AAQF,eAAO,MAAM,sBAAsB,EAAE,WAapC,CAAC;AAQF,eAAO,MAAM,0BAA0B,EAAE,WAqBxC,CAAC;AAQF,eAAO,MAAM,qBAAqB,EAAE,WAWnC,CAAC;AAQF,eAAO,MAAM,aAAa,EAAE,WAe3B,CAAC;AAUF,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAgB1D;AAQD,eAAO,MAAM,YAAY,EAAE,WAoB1B,CAAC;AAMF,eAAO,MAAM,iBAAiB,EAAE,WAW/B,CAAC;AAMF,eAAO,MAAM,iBAAiB,EAAE,WAc/B,CAAC;AAOF,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAQxD;AACD,eAAO,MAAM,4BAA4B,EAAE,WAc1C,CAAC;AAOF,eAAO,MAAM,gBAAgB,EAAE,WAS9B,CAAC;AA2CF,eAAO,MAAM,yBAAyB,EAAE,WASvC,CAAC;AAkEF,eAAO,MAAM,yBAAyB,EAAE,WAOvC,CAAC;AAOF,eAAO,MAAM,eAAe,EAAE,WAS7B,CAAC;AA8BF,eAAO,MAAM,2BAA2B,EAAE,WAKzC,CAAC;AACF,eAAO,MAAM,uBAAuB,EAAE,WAIrC,CAAC;AACF,eAAO,MAAM,kBAAkB,EAAE,WAIhC,CAAC;AA6BF,eAAO,MAAM,sBAAsB,EAAE,WAIpC,CAAC;AACF,eAAO,MAAM,sBAAsB,EAAE,WAIpC,CAAC;AAMF,eAAO,MAAM,kBAAkB,EAAE,WAUhC,CAAC;AAMF,eAAO,MAAM,qBAAqB,EAAE,WAYnC,CAAC;AAUF,eAAO,MAAM,oBAAoB,EAAE,WAelC,CAAC;AAEF,eAAO,MAAM,eAAe,EAAE,WAAW,EAMxC,CAAC"}
@@ -0,0 +1,629 @@
1
+ const str = (v) => (v === undefined || v === null ? "" : String(v));
2
+ /** Same as index.ts sortKeysDeep (this module imports only types from there). */
3
+ function sortKeysDeep(value) {
4
+ if (value === null || value === undefined)
5
+ return value;
6
+ if (Array.isArray(value))
7
+ return value.map(sortKeysDeep);
8
+ if (typeof value === "object") {
9
+ const sorted = {};
10
+ for (const key of Object.keys(value).sort())
11
+ sorted[key] = sortKeysDeep(value[key]);
12
+ return sorted;
13
+ }
14
+ return value;
15
+ }
16
+ // ── play/emit-1 — qlm-games src/app/api/evidence/emit/route.ts ────────────
17
+ // computeChainHash(event, prevHash): sha256 of JSON.stringify({student_id,
18
+ // product, construct, signal, weight, prev_hash: prevHash || "genesis"}).
19
+ // Stored row: chain_hash / prev_hash ("genesis" on the first row).
20
+ export const PLAY_EMIT_1 = {
21
+ id: "play/emit-1", family: "play/emit", since: "2026-09-01",
22
+ hashField: "chain_hash", prevField: "prev_hash", genesis: "genesis",
23
+ applies: () => true,
24
+ canonical: (e) => JSON.stringify({
25
+ student_id: e.student_id, product: e.product, construct: e.construct, signal: e.signal, weight: e.weight,
26
+ prev_hash: e.prev_hash || "genesis",
27
+ }),
28
+ validate: (e) => {
29
+ const errors = [];
30
+ for (const f of ["student_id", "product", "construct", "signal"])
31
+ if (typeof e[f] !== "string" || !e[f])
32
+ errors.push(`missing ${f}`);
33
+ return errors;
34
+ },
35
+ };
36
+ // ── play/measure-session-1 — qlm-games src/app/api/measure/session/route.ts ─
37
+ // computeEventHash(studyId, sessionId, event): sha256 hex truncated to 32 of
38
+ // JSON.stringify({studyId, sessionId, studentId ?? 'unknown', timestamp ?? '',
39
+ // correct, domain ?? '', responseTimeMs ?? null, sequenceNumber ?? null}).
40
+ // A content hash used for idempotent replay; records carry no link.
41
+ // The stored row's study_id / session_id / student_id are the hash inputs.
42
+ export const PLAY_MEASURE_SESSION_1 = {
43
+ id: "play/measure-session-1", family: "play/measure-session", since: "2026-08-20",
44
+ hashField: "event_hash", prevField: null, genesis: null, link: "none", truncate: 32,
45
+ applies: () => true,
46
+ canonical: (e) => JSON.stringify({
47
+ studyId: e.studyId ?? e.study_id, sessionId: e.sessionId ?? e.session_id,
48
+ studentId: e.studentId ?? e.student_id ?? "unknown", timestamp: e.timestamp ?? "",
49
+ correct: e.correct, domain: e.domain ?? "", responseTimeMs: e.responseTimeMs ?? e.response_time_ms ?? null,
50
+ sequenceNumber: e.sequenceNumber ?? e.sequence_number ?? null,
51
+ }),
52
+ validate: (e) => {
53
+ const errors = [];
54
+ if (!(e.studyId ?? e.study_id))
55
+ errors.push("missing studyId");
56
+ if (!(e.sessionId ?? e.session_id))
57
+ errors.push("missing sessionId");
58
+ return errors;
59
+ },
60
+ };
61
+ // ── play/encounter-fnv64-1 — qlm-games src/lib/credentials/platform/evidence-schema.ts
62
+ // computeEventHash: hashSnapshotSync (FNV-1a 64 over UTF-16 units) of
63
+ // JSON.stringify({eventId, ts, encounterId, actor, source, type, payload,
64
+ // consentRef, prevHash}) in that insertion order. Fields: eventHash / prevHash
65
+ // ("" on the first event). It labels itself schemaVersion "clin-1.0", which is
66
+ // NOT the SHA-256 residency scheme play/clinical-clin-1.0.
67
+ export const PLAY_ENCOUNTER_FNV64_1 = {
68
+ id: "play/encounter-fnv64-1", family: "play/encounter", since: "2026-08-16",
69
+ hashField: "eventHash", prevField: "prevHash", genesis: "", digest: "fnv1a64",
70
+ applies: (e) => e.eventHash !== undefined || e.schemaVersion === "clin-1.0",
71
+ canonical: (e) => JSON.stringify({
72
+ eventId: e.eventId, ts: e.ts, encounterId: e.encounterId, actor: e.actor, source: e.source,
73
+ type: e.type, payload: e.payload, consentRef: e.consentRef, prevHash: e.prevHash,
74
+ }),
75
+ validate: (e) => {
76
+ const errors = [];
77
+ for (const f of ["eventId", "ts", "encounterId", "type"])
78
+ if (typeof e[f] !== "string" || !e[f])
79
+ errors.push(`missing ${f}`);
80
+ return errors;
81
+ },
82
+ };
83
+ // ── play/research-provenance-1 — qlm-games src/lib/research/evidence-provenance-chain.ts
84
+ // computeChainHash(chain): sha256 of the concatenation (no separators) of
85
+ // designLayer.blueprintId, JSON.stringify(designLayer.auditResult.scores),
86
+ // String(runtimeLayer.worldId)+String(eventCount)+String(evidenceChainIntegrity),
87
+ // then proofLayer.protocolCommitmentHash+bridgeCertificateHash if present, then
88
+ // lineageLayer.closureRate+allLineagesClosed if present. One record, no link.
89
+ export const PLAY_RESEARCH_PROVENANCE_1 = {
90
+ id: "play/research-provenance-1", family: "play/research-provenance", since: "2026-08-25",
91
+ hashField: "chainHash", prevField: null, genesis: null, link: "none",
92
+ applies: (e) => typeof e.designLayer === "object" && e.designLayer !== null,
93
+ canonical: (e) => {
94
+ const d = e.designLayer;
95
+ const r = e.runtimeLayer;
96
+ const p = e.proofLayer;
97
+ const l = e.lineageLayer;
98
+ const parts = [];
99
+ parts.push(str(d.blueprintId));
100
+ parts.push(JSON.stringify(d.auditResult.scores));
101
+ parts.push(String(r.worldId) + String(r.eventCount) + String(r.evidenceChainIntegrity));
102
+ if (p)
103
+ parts.push(String(p.protocolCommitmentHash) + String(p.bridgeCertificateHash));
104
+ if (l)
105
+ parts.push(String(l.closureRate) + String(l.allLineagesClosed));
106
+ return parts.join("");
107
+ },
108
+ validate: (e) => {
109
+ const errors = [];
110
+ if (!e.designLayer)
111
+ errors.push("missing designLayer");
112
+ if (!e.runtimeLayer)
113
+ errors.push("missing runtimeLayer");
114
+ return errors;
115
+ },
116
+ };
117
+ // ── qcore/qinverse-djb2-1 — qlm-games src/lib/q-core/qinverse/evidence-chain.ts
118
+ // (identical copy in crucible-teacher). computeEventHash: djb2 (32-bit) of
119
+ // JSON.stringify({eventId, type, data, prevHash, sequence, seed}); fields
120
+ // hash / prevHash ("genesis" first). djb2 is not collision resistant: the
121
+ // chain is order-evident, not tamper-evident. A SHA-256 successor scheme is
122
+ // the product's call; verification of what was sealed needs this one.
123
+ export const QCORE_QINVERSE_DJB2_1 = {
124
+ id: "qcore/qinverse-djb2-1", family: "qcore/qinverse", since: "2026-08-10",
125
+ hashField: "hash", prevField: "prevHash", genesis: "genesis", digest: "djb2-32",
126
+ applies: () => true,
127
+ canonical: (e) => JSON.stringify({ eventId: e.eventId, type: e.type, data: e.data, prevHash: e.prevHash, sequence: e.sequence, seed: e.seed }),
128
+ validate: (e) => {
129
+ const errors = [];
130
+ if (typeof e.eventId !== "string" || !e.eventId)
131
+ errors.push("missing eventId");
132
+ if (typeof e.sequence !== "number")
133
+ errors.push("missing sequence");
134
+ return errors;
135
+ },
136
+ };
137
+ // ── studio/loop-1 — qlm-studio src/lib/loop/evidence.ts ───────────────────
138
+ // hashEvent(prevHash, event): sha256 of canonical({prevHash, ...event}) where
139
+ // canonical = JSON.stringify(sortedKeys.map(k => [k, value])) over exactly
140
+ // {sessionId, participantId, stage, event, at, payload}; the stored `id` is
141
+ // not hashed. Fields hash / prevHash ("genesis" first).
142
+ const STUDIO_FIELDS = ["sessionId", "participantId", "stage", "event", "at", "payload"];
143
+ export const STUDIO_LOOP_1 = {
144
+ id: "studio/loop-1", family: "studio/loop", since: "2026-09-05",
145
+ hashField: "hash", prevField: "prevHash", genesis: "genesis",
146
+ applies: () => true,
147
+ canonical: (e) => {
148
+ const input = { prevHash: e.prevHash };
149
+ for (const f of STUDIO_FIELDS)
150
+ input[f] = e[f];
151
+ const keys = Object.keys(input).sort();
152
+ return JSON.stringify(keys.map((k) => [k, input[k]]));
153
+ },
154
+ validate: (e) => {
155
+ const errors = [];
156
+ for (const f of ["sessionId", "participantId", "stage", "event", "at"])
157
+ if (typeof e[f] !== "string" || !e[f])
158
+ errors.push(`missing ${f}`);
159
+ return errors;
160
+ },
161
+ };
162
+ // ── dp/ledger-v3 — art-of-kings src/lib/engine/v3/event-ledger.ts ────────
163
+ // computeEventHash(event, previousEventHash): sha256 over
164
+ // (previousEventHash ?? "") followed by canonicalize(event), where the event
165
+ // excludes eventHash, eventSignature, signatureKeyVersion and receivedAt, and
166
+ // canonicalize is the RFC 8785-style form below (sorted keys, JSON scalars,
167
+ // undefined → null). previousEventHash is absent on the first event.
168
+ // eventSignature (HMAC over the hash) is a tenant signature, not the chain
169
+ // link, and is outside this scheme.
170
+ export function canonicalizeRfc8785(value) {
171
+ if (value === undefined)
172
+ return "null";
173
+ if (value === null)
174
+ return "null";
175
+ if (typeof value === "boolean")
176
+ return value.toString();
177
+ if (typeof value === "number") {
178
+ if (!isFinite(value))
179
+ throw new Error("Non-finite number in canonical event");
180
+ return JSON.stringify(value);
181
+ }
182
+ if (typeof value === "string")
183
+ return JSON.stringify(value);
184
+ if (Array.isArray(value))
185
+ return "[" + value.map(canonicalizeRfc8785).join(",") + "]";
186
+ if (typeof value === "object") {
187
+ const sorted = Object.keys(value).sort()
188
+ .map((k) => JSON.stringify(k) + ":" + canonicalizeRfc8785(value[k]));
189
+ return "{" + sorted.join(",") + "}";
190
+ }
191
+ throw new Error(`Unserializable type: ${typeof value}`);
192
+ }
193
+ const DP_EXCLUDED = new Set(["eventHash", "eventSignature", "signatureKeyVersion", "receivedAt"]);
194
+ /** The envelope keys buildEvent always sets (undefined optionals canonicalize to null). */
195
+ const DP_FIELDS = [
196
+ "eventId", "tenantId", "sessionId", "learnerId", "actorUserId", "actorRole", "eventSeq", "eventType", "occurredAt",
197
+ "requestId", "idempotencyKey", "scenarioId", "scenarioVersion", "turnId", "checkpointId", "stateBeforeHash", "stateAfterHash",
198
+ "knowledgeSnapshotId", "payloadSchema", "payloadVersion", "payload", "previousEventHash",
199
+ ];
200
+ export const DP_LEDGER_V3 = {
201
+ id: "dp/ledger-v3", family: "dp/ledger", since: "2026-08-28",
202
+ hashField: "eventHash", prevField: "previousEventHash", genesis: null,
203
+ applies: () => true,
204
+ canonical: (e) => {
205
+ // The sealer canonicalized every envelope key (absent optionals as null),
206
+ // so a stored row that dropped them is canonicalized as the sealer saw it;
207
+ // any extra stored key outside the excluded four is hashed too, as the
208
+ // product's own verifier would.
209
+ const rest = {};
210
+ for (const k of DP_FIELDS)
211
+ rest[k] = e[k] === undefined ? null : e[k];
212
+ for (const k of Object.keys(e))
213
+ if (!DP_EXCLUDED.has(k) && !(k in rest))
214
+ rest[k] = e[k];
215
+ return str(e.previousEventHash) + canonicalizeRfc8785(rest);
216
+ },
217
+ validate: (e) => {
218
+ const errors = [];
219
+ for (const f of ["eventId", "tenantId", "sessionId", "eventType"])
220
+ if (typeof e[f] !== "string" || !e[f])
221
+ errors.push(`missing ${f}`);
222
+ if (typeof e.eventSeq !== "number")
223
+ errors.push("missing eventSeq");
224
+ return errors;
225
+ },
226
+ };
227
+ // ── tpc/dse-journal-1 — teachproof src/lib/tutor-lab/dse/journal.ts ──────
228
+ // computeEntryHash(prevHash, entry): sha256 of prevHash + JSON.stringify({seq,
229
+ // eventType, data}). Entries store `hash` only; the link is implicit in order
230
+ // (the previous entry's hash, "" for the first). `timestamp` is not hashed.
231
+ export const TPC_DSE_JOURNAL_1 = {
232
+ id: "tpc/dse-journal-1", family: "tpc/dse-journal", since: "2026-09-08",
233
+ hashField: "hash", prevField: null, genesis: "", link: "implicit",
234
+ applies: () => true,
235
+ canonical: (e, prev) => (prev ?? "") + JSON.stringify({ seq: e.seq, eventType: e.eventType, data: e.data }),
236
+ validate: (e) => {
237
+ const errors = [];
238
+ if (typeof e.seq !== "number")
239
+ errors.push("missing seq");
240
+ if (typeof e.eventType !== "string" || !e.eventType)
241
+ errors.push("missing eventType");
242
+ return errors;
243
+ },
244
+ };
245
+ // ── yardstick/spine-1 — yardstick/project_spine/models.py ResponseRecord ──
246
+ // compute_chain_hash(previous_hash): sha256 of the UTF-8 bytes of
247
+ // f"{previous_hash}:{enrollment_id}:{item_id}:{response}:{correct}" with
248
+ // Python's str() forms: UUIDs as text, booleans as True/False.
249
+ export const YARDSTICK_SPINE_1 = {
250
+ id: "yardstick/spine-1", family: "yardstick/spine", since: "2026-08-30",
251
+ hashField: "chain_hash", prevField: "previous_hash", genesis: "",
252
+ applies: () => true,
253
+ canonical: (e) => {
254
+ // Python's f-string forms: True/False for booleans, None for a missing value — including previous_hash.
255
+ const py = (v) => (v === true ? "True" : v === false ? "False" : v === null || v === undefined ? "None" : String(v));
256
+ return `${py(e.previous_hash)}:${py(e.enrollment_id)}:${py(e.item_id)}:${py(e.response)}:${py(e.correct)}`;
257
+ },
258
+ validate: (e) => {
259
+ const errors = [];
260
+ for (const f of ["enrollment_id", "item_id"])
261
+ if (typeof e[f] !== "string" || !e[f])
262
+ errors.push(`missing ${f}`);
263
+ return errors;
264
+ },
265
+ };
266
+ // ── labpath/learning-evidence-v1 — qlm-games src/lib/ecogenesis/labpath/learning-evidence-event.ts
267
+ // hashLearningEvidenceEvent(draft): sha256 of JSON.stringify(sortObject(draft))
268
+ // where draft is the whole event minus `hash` and sortObject orders keys at
269
+ // every depth with String.prototype.localeCompare. Fields hash / prev_hash
270
+ // (null on the first event).
271
+ export function sortObjectLocale(value) {
272
+ if (Array.isArray(value))
273
+ return value.map(sortObjectLocale);
274
+ if (!value || typeof value !== "object")
275
+ return value;
276
+ return Object.fromEntries(Object.entries(value)
277
+ .sort(([a], [b]) => a.localeCompare(b))
278
+ .map(([key, nested]) => [key, sortObjectLocale(nested)]));
279
+ }
280
+ export const LABPATH_LEARNING_EVIDENCE_V1 = {
281
+ id: "labpath/learning-evidence-v1", family: "labpath/learning-evidence", since: "2026-09-12",
282
+ hashField: "hash", prevField: "prev_hash", genesis: null,
283
+ applies: (e) => typeof e.event_id === "string",
284
+ canonical: (e) => {
285
+ const { hash: _h, ...draft } = e;
286
+ void _h;
287
+ return JSON.stringify(sortObjectLocale(draft));
288
+ },
289
+ validate: (e) => {
290
+ const errors = [];
291
+ for (const f of ["event_id", "learner_id", "ts", "world_id", "session_id"])
292
+ if (typeof e[f] !== "string" || !e[f])
293
+ errors.push(`missing ${f}`);
294
+ return errors;
295
+ },
296
+ };
297
+ // ── tpc/transcript-1 — teachproof src/app/api/clinical/evidence/process/route.ts
298
+ // Stage 3 seals an evidence item: sha256 of JSON.stringify({text, turns,
299
+ // sourceType, duration}) — the item's transcript column — and stores the
300
+ // previous item's hash as prev_hash (null on the learner's first item). The
301
+ // link is stored, not hashed; the verifier checks it separately.
302
+ export const TPC_TRANSCRIPT_1 = {
303
+ id: "tpc/transcript-1", family: "tpc/transcript", since: "2026-08-20",
304
+ hashField: "hash", prevField: "prev_hash", genesis: null,
305
+ applies: (e) => typeof e.transcript === "object" && e.transcript !== null,
306
+ canonical: (e) => {
307
+ const t = e.transcript;
308
+ return JSON.stringify({ text: t.text, turns: t.turns, sourceType: t.sourceType, duration: t.duration });
309
+ },
310
+ validate: (e) => (typeof e.transcript === "object" && e.transcript !== null ? [] : ["missing transcript"]),
311
+ };
312
+ // ── tpc/differential-commit-1 — teachproof src/lib/clinical/longitudinal/events/differential-commit.ts
313
+ // Commit and skip events are appended to the clinical evidence chain (same
314
+ // hash/prev_hash fields, so they coexist with tpc/clinical-v*). hashCommit:
315
+ // sha256 of JSON.stringify(canonical) where canonical is
316
+ // ["differential_commit", learner, encounter, checkpoint, rankedDifferential, whyText, nextAction, discipline, prev_hash]
317
+ // or ["commit_skipped", learner, encounter, checkpoint, reason, prev_hash]. `turn` is not hashed.
318
+ // 0.7.0: a record that carries commit_schema is never this scheme's, so a
319
+ // version 2 commit's added fields are always covered (version 2, below), and
320
+ // a commit that carries those fields without commit_schema fails validation
321
+ // rather than verifying with them unhashed. Skip records stay here, and
322
+ // acted_without_commit joins the reasons (TPC-SPEC-002 E6). The canonical
323
+ // form is unchanged.
324
+ const isCommitType = (e) => e.type === "differential_commit" || e.type === "commit_skipped";
325
+ const COMMIT_SKIP_REASONS = ["skip", "timeout", "not_reached", "acted_without_commit"];
326
+ /** The fields version 2 appends to version 1's list, in hash order. */
327
+ const COMMIT_V2_FIELDS = ["concepts", "statuses", "confidence", "evidenceLinks", "discriminator", "planLinks", "trigger", "captureSnapshot", "supersedes"];
328
+ const commitV1List = (e) => ["differential_commit", e.learner, e.encounter, e.checkpoint, e.rankedDifferential, e.whyText, e.nextAction, e.discipline, e.prev_hash];
329
+ function commitValidate(e) {
330
+ const errors = [];
331
+ for (const f of ["learner", "encounter", "checkpoint"])
332
+ if (typeof e[f] !== "string" || !e[f])
333
+ errors.push(`missing ${f}`);
334
+ if (e.type === "commit_skipped" && !COMMIT_SKIP_REASONS.includes(e.reason))
335
+ errors.push(`invalid reason: ${String(e.reason)}`);
336
+ return errors;
337
+ }
338
+ /**
339
+ * Version 1's checks. As the family's last scheme it also checks a commit
340
+ * record no scheme applies to, so it says why: a commit_schema that is not
341
+ * version 2's, or version 2's fields on a record without it.
342
+ */
343
+ function commitV1Validate(e) {
344
+ const errors = commitValidate(e);
345
+ if (e.commit_schema !== undefined) {
346
+ errors.push(e.type !== "differential_commit" ? `${String(e.type)} carries no commit_schema`
347
+ : e.commit_schema === 2 ? "a commit with commit_schema 2 is tpc/differential-commit-2's"
348
+ : `invalid commit_schema: ${String(e.commit_schema)}`);
349
+ }
350
+ else if (e.type === "differential_commit") {
351
+ const added = COMMIT_V2_FIELDS.filter((f) => e[f] !== undefined);
352
+ if (added.length > 0)
353
+ errors.push(`fields without commit_schema 2: ${added.join(", ")}`);
354
+ }
355
+ return errors;
356
+ }
357
+ export const TPC_DIFFERENTIAL_COMMIT_1 = {
358
+ id: "tpc/differential-commit-1", family: "tpc/clinical", since: "2026-09-14",
359
+ hashField: "hash", prevField: "prev_hash", genesis: "genesis",
360
+ applies: (e) => isCommitType(e) && e.commit_schema === undefined,
361
+ canonical: (e) => JSON.stringify(e.type === "differential_commit"
362
+ ? commitV1List(e)
363
+ : ["commit_skipped", e.learner, e.encounter, e.checkpoint, e.reason, e.prev_hash]),
364
+ validate: commitV1Validate,
365
+ coexists: ["tpc/clinical-v1", "tpc/clinical-v2", "tpc/clinical-v3", "tpc/clinical-v4", "tpc/differential-commit-2"],
366
+ };
367
+ // ── tpc/differential-commit-2 — TPC-SPEC-002 E4, the commit model ─────────
368
+ // A commit that carries commit_schema: 2. Version 1's list is hashed as it
369
+ // was, then commit_schema and the E4 fields append in this fixed order, each
370
+ // with its keys sorted at every depth (stored rows may reorder keys):
371
+ // [...version 1's list, commit_schema, concepts, statuses, confidence,
372
+ // evidenceLinks, discriminator, planLinks, trigger, captureSnapshot, supersedes]
373
+ // Missing fields hash as null and fail validation: every field is written,
374
+ // null where empty. The objects inside take only their named keys, so every
375
+ // valid record hashes the same in JavaScript and Python. Records sealed under
376
+ // version 1 keep verifying under it, and the two coexist in one chain. Its
377
+ // definition; there is no older sealer.
378
+ const COMMIT_CHECKPOINTS = ["pre_brief", "post_history", "on_evidence", "pre_close"];
379
+ const COMMIT_DISCIPLINES = ["OD", "RN", "GM"];
380
+ const COMMIT_STATUSES = ["leading", "active", "ruled_out"];
381
+ const DISCRIMINATOR_KINDS = ["question", "test", "finding", "time"];
382
+ const MAX_RANKED = 5;
383
+ const isRecord = (v) => typeof v === "object" && v !== null && !Array.isArray(v);
384
+ const nonEmpty = (v) => typeof v === "string" && v !== "";
385
+ /** An object with no key but these (each still checked on its own). */
386
+ const onlyKeys = (o, keys) => Object.keys(o).every((k) => keys.includes(k));
387
+ /** A 1-based position in rankedDifferential. */
388
+ const isRank = (v, n) => typeof v === "number" && Number.isInteger(v) && v >= 1 && v <= n;
389
+ function commitV2Validate(e) {
390
+ const errors = commitValidate(e);
391
+ if (e.commit_schema !== 2)
392
+ errors.push(`invalid commit_schema: ${String(e.commit_schema)}`);
393
+ if (nonEmpty(e.checkpoint) && !COMMIT_CHECKPOINTS.includes(e.checkpoint))
394
+ errors.push(`invalid checkpoint: ${e.checkpoint}`);
395
+ const ranked = e.rankedDifferential;
396
+ const n = Array.isArray(ranked) ? ranked.length : 0;
397
+ if (!Array.isArray(ranked) || n < 1 || n > MAX_RANKED || !ranked.every(nonEmpty))
398
+ errors.push(`rankedDifferential must be 1 to ${MAX_RANKED} non-empty strings`);
399
+ if (typeof e.whyText !== "string")
400
+ errors.push("whyText must be a string");
401
+ if (e.nextAction !== null && typeof e.nextAction !== "string")
402
+ errors.push("nextAction must be a string or null");
403
+ if (!COMMIT_DISCIPLINES.includes(e.discipline))
404
+ errors.push(`invalid discipline: ${String(e.discipline)}`);
405
+ const perEntry = (f, what, ok) => {
406
+ const a = e[f];
407
+ if (!Array.isArray(a) || a.length !== n || !a.every(ok))
408
+ errors.push(`${f} must hold one ${what} per ranked entry`);
409
+ };
410
+ perEntry("concepts", "concept id or null", (c) => c === null || nonEmpty(c));
411
+ perEntry("statuses", "of leading, active, ruled_out", (s) => COMMIT_STATUSES.includes(s));
412
+ perEntry("confidence", "number 0 to 100 or null", (c) => c === null || (typeof c === "number" && c >= 0 && c <= 100));
413
+ const snapshot = Array.isArray(e.captureSnapshot) && e.captureSnapshot.every(nonEmpty) ? e.captureSnapshot : null;
414
+ if (!snapshot)
415
+ errors.push("captureSnapshot must be an array of non-empty strings");
416
+ // E4: evidence links point only into the capture snapshot.
417
+ if (!Array.isArray(e.evidenceLinks))
418
+ errors.push("evidenceLinks must be an array");
419
+ else
420
+ e.evidenceLinks.forEach((l, i) => {
421
+ if (!isRecord(l) || !onlyKeys(l, ["rank", "ref", "direction"]) || !isRank(l.rank, n) || !nonEmpty(l.ref) || (l.direction !== "for" && l.direction !== "against")) {
422
+ errors.push(`invalid evidenceLinks[${i}]`);
423
+ }
424
+ else if (snapshot && !snapshot.includes(l.ref))
425
+ errors.push(`evidenceLinks[${i}] ref not in captureSnapshot: ${l.ref}`);
426
+ });
427
+ const d = e.discriminator;
428
+ if (d !== null && (!isRecord(d) || !onlyKeys(d, ["kind", "ref", "text"]) || !DISCRIMINATOR_KINDS.includes(d.kind)
429
+ || (d.ref !== null && !nonEmpty(d.ref)) || typeof d.text !== "string")) {
430
+ errors.push("invalid discriminator");
431
+ }
432
+ if (!Array.isArray(e.planLinks))
433
+ errors.push("planLinks must be an array");
434
+ else
435
+ e.planLinks.forEach((l, i) => {
436
+ if (!isRecord(l) || !onlyKeys(l, ["rank", "ref"]) || !isRank(l.rank, n) || !nonEmpty(l.ref))
437
+ errors.push(`invalid planLinks[${i}]`);
438
+ });
439
+ if (e.trigger !== null && !nonEmpty(e.trigger))
440
+ errors.push("trigger must be a non-empty string or null");
441
+ else if (e.checkpoint === "on_evidence" && e.trigger === null)
442
+ errors.push("on_evidence needs a trigger");
443
+ if (e.supersedes !== null && !nonEmpty(e.supersedes))
444
+ errors.push("supersedes must be a hash or null");
445
+ return errors;
446
+ }
447
+ export const TPC_DIFFERENTIAL_COMMIT_2 = {
448
+ id: "tpc/differential-commit-2", family: "tpc/clinical", since: "2026-09-28",
449
+ hashField: "hash", prevField: "prev_hash", genesis: "genesis",
450
+ applies: (e) => e.type === "differential_commit" && e.commit_schema === 2,
451
+ canonical: (e) => JSON.stringify([...commitV1List(e), e.commit_schema, ...COMMIT_V2_FIELDS.map((f) => sortKeysDeep(e[f] ?? null))]),
452
+ validate: commitV2Validate,
453
+ coexists: ["tpc/clinical-v1", "tpc/clinical-v2", "tpc/clinical-v3", "tpc/clinical-v4", "tpc/differential-commit-1"],
454
+ };
455
+ // ── tpc/rct-input-1 — teachproof src/lib/rct/result-ledger.ts ────────────
456
+ // ledgerFromAnalysis fingerprints the analysis inputs: sha256 of
457
+ // JSON.stringify({studyId, nTreatment, nControl, totalOutcomeEvents,
458
+ // sourcePipes, dimensions: [{dimension, treatmentN, controlN, treatmentMean,
459
+ // controlMean}]}); every ledger entry carries it as inputHash. Unlinked.
460
+ export const TPC_RCT_INPUT_1 = {
461
+ id: "tpc/rct-input-1", family: "tpc/rct-input", since: "2026-09-22",
462
+ hashField: "inputHash", prevField: null, genesis: null, link: "none",
463
+ applies: (e) => Array.isArray(e.dimensions),
464
+ canonical: (e) => JSON.stringify({
465
+ studyId: e.studyId, nTreatment: e.nTreatment, nControl: e.nControl, totalOutcomeEvents: e.totalOutcomeEvents, sourcePipes: e.sourcePipes,
466
+ dimensions: e.dimensions.map((d) => ({ dimension: d.dimension, treatmentN: d.treatmentN, controlN: d.controlN, treatmentMean: d.treatmentMean, controlMean: d.controlMean })),
467
+ }),
468
+ validate: (e) => (typeof e.studyId === "string" && e.studyId ? [] : ["missing studyId"]),
469
+ };
470
+ // ═══════════════════════════════════════════════════════════════════════════
471
+ // 0.6.0 — chains found by the 2026-09-27 audit (docs/PLATFORM.md §12). They
472
+ // were missed by the first inventory because it grepped for function names
473
+ // and the CI gate filtered by file name; both are now digest-based.
474
+ // ═══════════════════════════════════════════════════════════════════════════
475
+ // ── play/world-trace — qlm-games src/app/ecogenesis/worlds/components/*World.tsx
476
+ // Every LabPath world component sealed its own "world-trace/1" trace in the
477
+ // browser with a local djb2: hash = djb2(prevHash + JSON.stringify(array)),
478
+ // prevHash "00000000" on the first event, kept in localStorage and exported
479
+ // as <world>-evidence.json. Fifty files, three canonical arrays:
480
+ // play/world-trace-1 [seq, type, payload] 46 worlds
481
+ // play/world-trace-tsim-1 [seq, type, payload, tSim] simpleforces, soundlab, statesofmatter
482
+ // play/world-trace-identity-1 [seq, type, payload, {missionId, band, seed}] cybersim, schemaVersion "world-trace/2"
483
+ // djb2 is not collision resistant: a trace is order-evident, not tamper-evident.
484
+ const WORLD_TRACE_TSIM_WORLDS = new Set(["simpleforces", "soundlab", "statesofmatter"]);
485
+ function worldTraceValidate(e) {
486
+ const errors = [];
487
+ if (typeof e.seq !== "number")
488
+ errors.push("missing seq");
489
+ if (typeof e.type !== "string" || !e.type)
490
+ errors.push("missing type");
491
+ if (typeof e.prevHash !== "string")
492
+ errors.push("missing prevHash");
493
+ if (!e.payload || typeof e.payload !== "object" || Array.isArray(e.payload))
494
+ errors.push("payload must be an object");
495
+ return errors;
496
+ }
497
+ const worldTraceCommon = { family: "play/world-trace", hashField: "hash", prevField: "prevHash", genesis: "00000000", digest: "djb2-32", validate: worldTraceValidate };
498
+ const isWorldTrace2 = (e) => e.schemaVersion === "world-trace/2";
499
+ const isTsimWorld = (e) => WORLD_TRACE_TSIM_WORLDS.has(String(e.worldId));
500
+ export const PLAY_WORLD_TRACE_IDENTITY_1 = {
501
+ ...worldTraceCommon, id: "play/world-trace-identity-1", since: "2026-09-24",
502
+ applies: (e) => isWorldTrace2(e),
503
+ // The sealer hashed its identity object literal {missionId, band, seed} in that key order.
504
+ canonical: (e) => String(e.prevHash) + JSON.stringify([e.seq, e.type, e.payload, { missionId: e.missionId, band: e.band, seed: e.seed }]),
505
+ };
506
+ export const PLAY_WORLD_TRACE_TSIM_1 = {
507
+ ...worldTraceCommon, id: "play/world-trace-tsim-1", since: "2026-09-24",
508
+ applies: (e) => !isWorldTrace2(e) && isTsimWorld(e),
509
+ canonical: (e) => String(e.prevHash) + JSON.stringify([e.seq, e.type, e.payload, e.tSim]),
510
+ };
511
+ export const PLAY_WORLD_TRACE_1 = {
512
+ ...worldTraceCommon, id: "play/world-trace-1", since: "2026-09-24",
513
+ applies: (e) => !isWorldTrace2(e) && !isTsimWorld(e),
514
+ canonical: (e) => String(e.prevHash) + JSON.stringify([e.seq, e.type, e.payload]),
515
+ };
516
+ // ── tpc/yardstick-record — teachproof src/lib/yardstick/record-types.ts ──
517
+ // computeDigest(content): sha256 of JSON.stringify(content, Object.keys(content).sort())
518
+ // over {sequence, type, studyId, timestamp, payload, prevDigest}; fields
519
+ // digest / prevDigest ("0" × 64 on the first record). The records live in
520
+ // teachproof_studies.record_sequence.
521
+ //
522
+ // An array replacer is a property whitelist that JSON.stringify applies at
523
+ // EVERY depth, so `payload` serializes as `{}` unless a nested key happens
524
+ // to be named like a top-level one: version 1 does not cover the payload.
525
+ // It is kept verbatim so sealed sequences still verify; version 2 hashes
526
+ // the same six fields with keys sorted at every depth and covers the
527
+ // payload. The two coexist in one sequence (old records v1, new v2).
528
+ const YR_FIELDS = ["sequence", "type", "studyId", "timestamp", "payload", "prevDigest"];
529
+ const YR_REPLACER = [...YR_FIELDS].sort();
530
+ function yrContent(e) {
531
+ const c = {};
532
+ for (const f of YR_FIELDS)
533
+ c[f] = e[f];
534
+ return c;
535
+ }
536
+ function yrValidate(e) {
537
+ const errors = [];
538
+ if (typeof e.sequence !== "number")
539
+ errors.push("missing sequence");
540
+ for (const f of ["type", "studyId", "timestamp"])
541
+ if (typeof e[f] !== "string" || !e[f])
542
+ errors.push(`missing ${f}`);
543
+ if (!e.payload || typeof e.payload !== "object" || Array.isArray(e.payload))
544
+ errors.push("payload must be an object");
545
+ return errors;
546
+ }
547
+ const yrCommon = { family: "tpc/yardstick-record", hashField: "digest", prevField: "prevDigest", genesis: "0".repeat(64), applies: () => true, validate: yrValidate };
548
+ export const TPC_YARDSTICK_RECORD_2 = {
549
+ ...yrCommon, id: "tpc/yardstick-record-2", since: "2026-09-28",
550
+ canonical: (e) => JSON.stringify(sortKeysDeep(yrContent(e))),
551
+ coexists: ["tpc/yardstick-record-1"],
552
+ };
553
+ export const TPC_YARDSTICK_RECORD_1 = {
554
+ ...yrCommon, id: "tpc/yardstick-record-1", since: "2026-09-21",
555
+ canonical: (e) => JSON.stringify(yrContent(e), YR_REPLACER),
556
+ coexists: ["tpc/yardstick-record-2"],
557
+ };
558
+ // ── tpc/intervention-1 — teachproof src/lib/clinical/longitudinal/programos/intervention-loop.ts
559
+ // recordAction: sha256 of JSON.stringify([type, provenance, flagId, actor,
560
+ // actionType, constructId, rationale, timestamp, prevHash]); fields hash /
561
+ // prevHash ("genesis" first). id, windowOpportunities and windowDays are not hashed.
562
+ export const TPC_INTERVENTION_1 = {
563
+ id: "tpc/intervention-1", family: "tpc/intervention", since: "2026-09-21",
564
+ hashField: "hash", prevField: "prevHash", genesis: "genesis",
565
+ applies: () => true,
566
+ canonical: (e) => JSON.stringify([e.type, e.provenance, e.flagId, e.actor, e.actionType, e.constructId, e.rationale, e.timestamp, e.prevHash]),
567
+ validate: (e) => {
568
+ const errors = [];
569
+ for (const f of ["flagId", "actor", "actionType", "constructId", "timestamp"])
570
+ if (typeof e[f] !== "string" || !e[f])
571
+ errors.push(`missing ${f}`);
572
+ return errors;
573
+ },
574
+ };
575
+ // ── tpc/rehearsal-stage-1 — teachproof src/lib/clinical/longitudinal/study/rehearsal-runner.ts
576
+ // recordStage: sha256 of JSON.stringify([stage, passed, timestamp, prevHash])
577
+ // where prevHash is the previous stage's hash ("genesis" first) and is not
578
+ // stored on the result: the link is implicit in order.
579
+ export const TPC_REHEARSAL_STAGE_1 = {
580
+ id: "tpc/rehearsal-stage-1", family: "tpc/rehearsal-stage", since: "2026-09-21",
581
+ hashField: "hash", prevField: null, genesis: "genesis", link: "implicit",
582
+ applies: () => true,
583
+ canonical: (e, prev) => JSON.stringify([e.stage, e.passed, e.timestamp, prev ?? "genesis"]),
584
+ validate: (e) => {
585
+ const errors = [];
586
+ if (typeof e.stage !== "string" || !e.stage)
587
+ errors.push("missing stage");
588
+ if (typeof e.passed !== "boolean")
589
+ errors.push("missing passed");
590
+ if (typeof e.timestamp !== "string" || !e.timestamp)
591
+ errors.push("missing timestamp");
592
+ return errors;
593
+ },
594
+ };
595
+ // ── yardstick/activity-1 — yardstick packages/engine/studies/activity.py ──
596
+ // _entry_hash(entry, prev): sha256 of prev + "\n" + json.dumps(body,
597
+ // sort_keys=True, separators=(",", ":"), ensure_ascii=False) where body is
598
+ // the entry minus `hash` (so `prev`, `scheme` and `seq` are hashed); fields
599
+ // hash / prev ("0" × 64 first). One activity.jsonl per study.
600
+ // The Python twin is the reference. This form equals Python's for strings,
601
+ // integers, booleans, null, lists and objects; a float would differ where
602
+ // Python and JavaScript print it differently (5.0 vs 5) and entries carry none.
603
+ export const YARDSTICK_ACTIVITY_1 = {
604
+ id: "yardstick/activity-1", family: "yardstick/activity", since: "2026-09-26",
605
+ hashField: "hash", prevField: "prev", genesis: "0".repeat(64),
606
+ applies: () => true,
607
+ canonical: (e) => {
608
+ const { hash: _h, ...body } = e;
609
+ void _h;
610
+ return String(e.prev) + "\n" + JSON.stringify(sortKeysDeep(body));
611
+ },
612
+ validate: (e) => {
613
+ const errors = [];
614
+ if (typeof e.seq !== "number")
615
+ errors.push("missing seq");
616
+ for (const f of ["at", "who", "action"])
617
+ if (typeof e[f] !== "string" || !e[f])
618
+ errors.push(`missing ${f}`);
619
+ return errors;
620
+ },
621
+ };
622
+ export const PRODUCT_SCHEMES = [
623
+ PLAY_EMIT_1, PLAY_MEASURE_SESSION_1, PLAY_ENCOUNTER_FNV64_1, PLAY_RESEARCH_PROVENANCE_1,
624
+ QCORE_QINVERSE_DJB2_1, STUDIO_LOOP_1, DP_LEDGER_V3, TPC_DSE_JOURNAL_1, YARDSTICK_SPINE_1, LABPATH_LEARNING_EVIDENCE_V1,
625
+ TPC_TRANSCRIPT_1, TPC_DIFFERENTIAL_COMMIT_2, TPC_DIFFERENTIAL_COMMIT_1, TPC_RCT_INPUT_1,
626
+ PLAY_WORLD_TRACE_IDENTITY_1, PLAY_WORLD_TRACE_TSIM_1, PLAY_WORLD_TRACE_1,
627
+ TPC_YARDSTICK_RECORD_2, TPC_YARDSTICK_RECORD_1, TPC_INTERVENTION_1, TPC_REHEARSAL_STAGE_1, YARDSTICK_ACTIVITY_1,
628
+ ];
629
+ //# sourceMappingURL=products.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"products.js","sourceRoot":"","sources":["../../src/schemes/products.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "qlm-measure",
3
- "version": "0.4.1",
3
+ "version": "0.7.0",
4
4
  "description": "Open measurement SDK for education AI \u2014 evidence events, record verification, and dataset clients",
5
5
  "license": "Apache-2.0",
6
6
  "type": "module",
@@ -41,6 +41,11 @@
41
41
  "import": "./dist/schemes/node.js",
42
42
  "types": "./dist/schemes/node.d.ts",
43
43
  "default": "./dist/schemes/node.js"
44
+ },
45
+ "./schemes/products": {
46
+ "import": "./dist/schemes/products.js",
47
+ "types": "./dist/schemes/products.d.ts",
48
+ "default": "./dist/schemes/products.js"
44
49
  }
45
50
  },
46
51
  "bin": {