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 +1 -1
- package/dist/index.d.ts +3 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/dist/schemes/index.d.ts +42 -12
- package/dist/schemes/index.d.ts.map +1 -1
- package/dist/schemes/index.js +77 -23
- package/dist/schemes/index.js.map +1 -1
- package/dist/schemes/node.d.ts +3 -3
- package/dist/schemes/node.d.ts.map +1 -1
- package/dist/schemes/node.js +3 -3
- package/dist/schemes/node.js.map +1 -1
- package/dist/schemes/products.d.ts +36 -0
- package/dist/schemes/products.d.ts.map +1 -0
- package/dist/schemes/products.js +629 -0
- package/dist/schemes/products.js.map +1 -0
- package/package.json +6 -1
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.
|
|
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
|
|
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
|
package/dist/index.d.ts.map
CHANGED
|
@@ -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,
|
|
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,
|
|
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"}
|
package/dist/schemes/index.d.ts
CHANGED
|
@@ -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
|
-
/**
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
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
|
-
/**
|
|
37
|
-
|
|
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
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
export declare function
|
|
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":"AAAA;;;;;;;;;;;;;;;;GAgBG;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/schemes/index.ts"],"names":[],"mappings":"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"}
|
package/dist/schemes/index.js
CHANGED
|
@@ -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
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
/**
|
|
172
|
-
|
|
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 (
|
|
222
|
-
if (
|
|
223
|
-
|
|
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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"}
|
package/dist/schemes/node.d.ts
CHANGED
|
@@ -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,
|
|
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"}
|
package/dist/schemes/node.js
CHANGED
|
@@ -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
|
package/dist/schemes/node.js.map
CHANGED
|
@@ -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,
|
|
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.
|
|
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": {
|