@actuarial-ts/compliance 0.4.0 → 0.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +46 -82
- package/dist/bundle.d.ts +7 -10
- package/dist/bundle.d.ts.map +1 -1
- package/dist/bundle.js +33 -22
- package/dist/bundle.js.map +1 -1
- package/dist/diagnosticRun.d.ts +83 -0
- package/dist/diagnosticRun.d.ts.map +1 -0
- package/dist/diagnosticRun.js +216 -0
- package/dist/diagnosticRun.js.map +1 -0
- package/dist/errors.d.ts +8 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +16 -0
- package/dist/errors.js.map +1 -0
- package/dist/index.d.ts +3 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -1
- package/dist/index.js.map +1 -1
- package/dist/version.d.ts +2 -0
- package/dist/version.d.ts.map +1 -0
- package/dist/version.js +2 -0
- package/dist/version.js.map +1 -0
- package/package.json +4 -3
- package/src/bundle.ts +27 -20
- package/src/diagnosticRun.ts +148 -0
- package/src/errors.ts +12 -0
- package/src/index.ts +3 -1
- package/src/version.ts +1 -0
- package/dist/diagnostics.d.ts +0 -75
- package/dist/diagnostics.d.ts.map +0 -1
- package/dist/diagnostics.js +0 -44
- package/dist/diagnostics.js.map +0 -1
- package/src/diagnostics.ts +0 -104
package/README.md
CHANGED
|
@@ -1,96 +1,60 @@
|
|
|
1
1
|
# @actuarial-ts/compliance
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
-
|
|
14
|
-
appendix from the analysis itself — written to the "another qualified
|
|
15
|
-
actuary could appraise it" bar, deterministic to the byte.
|
|
16
|
-
- **Model cards** (ASOP 56): intended use, specification, key assumptions,
|
|
17
|
-
known weaknesses, and sensitivities for every method the SDK ships (a
|
|
18
|
-
cross-package sync test enforces the completeness, so the registry can
|
|
19
|
-
never silently fall behind core) — the
|
|
20
|
-
"basic understanding" content an actuary relying on vendor models must
|
|
21
|
-
hold and disclose.
|
|
22
|
-
- **Reproducibility bundles** (ASOP 21 / 56): canonical serialization of
|
|
23
|
-
inputs, parameters, and results with an integrity tag, so an analysis
|
|
24
|
-
re-runs identically years later for an auditor or examiner.
|
|
25
|
-
- **Diagnostics provenance composition**: `createDiagnosticsProvenance`
|
|
26
|
-
snapshots formula-pack/metric versions, executable-definition metadata,
|
|
27
|
-
layer configuration, exposure basis and scale, sparse/age conventions,
|
|
28
|
-
cutoffs, caller-selected filters/groups, and caller-owned input IDs/hashes.
|
|
29
|
-
- **Actual-vs-expected roll-forward**: expected emergence from the prior
|
|
30
|
-
valuation's pattern versus actual, by origin.
|
|
31
|
-
|
|
32
|
-
Everything here is pure, deterministic, and browser-safe: no clock reads,
|
|
33
|
-
no randomness, no node builtins. Identical inputs produce byte-identical
|
|
34
|
-
documents.
|
|
35
|
-
|
|
36
|
-
## Quickstart
|
|
3
|
+
Documentation, judgment, provenance, and reproducibility primitives for actuarial-ts. The package is designed to support compliance work under applicable ASOPs; it neither determines compliance nor replaces the actuary’s review.
|
|
4
|
+
|
|
5
|
+
```bash
|
|
6
|
+
npm install @actuarial-ts/compliance@0.6.0 @actuarial-ts/core@0.6.0 @actuarial-ts/data@0.6.0 @actuarial-ts/interchange@0.6.0
|
|
7
|
+
```
|
|
8
|
+
|
|
9
|
+
Node 20+, ESM.
|
|
10
|
+
|
|
11
|
+
## Diagnostic provenance
|
|
12
|
+
|
|
13
|
+
`createDiagnosticRunIdentity` accepts only an owner-authenticated, completed data-package run. It does not accept caller-restated formulas, filters, review status, or result identities.
|
|
37
14
|
|
|
38
15
|
```ts
|
|
39
|
-
import {
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
recordAssumption,
|
|
43
|
-
generateDisclosure,
|
|
44
|
-
} from "@actuarial-ts/compliance";
|
|
45
|
-
|
|
46
|
-
let ledger = createLedger();
|
|
47
|
-
ledger = recordAssumption(ledger, {
|
|
48
|
-
timestamp: "2026-01-05T10:05:00Z",
|
|
49
|
-
actor: "actuary",
|
|
50
|
-
field: "paid.tailFactor",
|
|
51
|
-
value: 1.02,
|
|
52
|
-
rationale: "Exponential-decay fit valid with R^2 0.97; judgmentally confirmed",
|
|
53
|
-
source: "fitted",
|
|
54
|
-
});
|
|
16
|
+
import { createBundle, createDiagnosticRunIdentity } from "@actuarial-ts/compliance";
|
|
17
|
+
|
|
18
|
+
if (outcome.status !== "completed") throw new Error(`diagnostics blocked at ${outcome.stage}`);
|
|
55
19
|
|
|
56
|
-
const
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
basis: { grossNet: "gross", laeTreatment: "dcc-only" },
|
|
64
|
-
accountingDate: "2025-12-31",
|
|
65
|
-
valuationDate: "2025-12-31",
|
|
66
|
-
},
|
|
67
|
-
methods: [
|
|
68
|
-
{ methodId: "chainLadder", basisLabel: "paid", parameters: { selected, tailFactor: 1.02 }, resultSummary: { ultimate: cl.totals.ultimate, unpaid: cl.totals.unpaid } },
|
|
69
|
-
{ methodId: "mack", basisLabel: "paid", resultSummary: { standardError: mack.totals.standardError } },
|
|
20
|
+
const provenance = await createDiagnosticRunIdentity({
|
|
21
|
+
completedRun: outcome,
|
|
22
|
+
artifacts: [
|
|
23
|
+
{ id: "loss-run", scope: "input", assurance: "sdk-computed", bytes: lossRunBytes },
|
|
24
|
+
{ id: "exposures", scope: "input", assurance: "sdk-computed", bytes: exposureBytes },
|
|
25
|
+
{ id: "source-archive", scope: "input", assurance: "caller-declared", algorithm: "sha-256", value: archiveSha256, byteLength: archiveByteLength },
|
|
26
|
+
{ id: "transform-script", scope: "preparation", assurance: "caller-declared", algorithm: "git-sha", value: transformCommit, byteLength: 0 },
|
|
70
27
|
],
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
28
|
+
lineage: [
|
|
29
|
+
{ artifactId: "loss-run", inputArtifactIds: ["source-archive", "transform-script"] },
|
|
30
|
+
],
|
|
31
|
+
});
|
|
32
|
+
|
|
33
|
+
const bundle = createBundle({
|
|
34
|
+
inputs,
|
|
35
|
+
parameters,
|
|
36
|
+
results: outcome.result,
|
|
37
|
+
sdkVersions: { ...provenance.manifest.packageVersions },
|
|
38
|
+
createdAt: "2026-09-03T00:00:00Z",
|
|
39
|
+
diagnosticRuns: [provenance],
|
|
40
|
+
wrap: { triangles: [], selections: [], results: [] },
|
|
74
41
|
});
|
|
75
42
|
```
|
|
76
43
|
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
and
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
44
|
+
SDK-computed evidence requires actual `Uint8Array` bytes and records SHA-256 plus exact byte length. Caller-declared digests remain explicitly unverified. All evidence is synchronously validated and copied before hashing. Source, dataset fallback, external transformation, layer-comparability rationale, and fail-override references must resolve to the correct artifact scope. Lineage must have unique producers, resolve completely, be acyclic, and contain no orphan evidence.
|
|
45
|
+
|
|
46
|
+
The manifest contains the complete normalized definition, preparation identity and input audit, filter, cutoffs, expected-grid identity, grouping, review identity, two-gate execution policy, artifact graph, and core/data/compliance versions. The provenance adds the authentic complete result and separate run, result-content, and run-result binding fingerprints. Creation verifies preparation integrity, regenerates review and both gates, reruns core, and compares normalized output before stamping.
|
|
47
|
+
|
|
48
|
+
The returned `VerifiedDiagnosticRunProvenance` is frozen and registered in private owner state. A cast, clone, or parsed JSON object cannot author a new bundle. Use `verifyDiagnosticRunIdentity(stored, sameRunAndEvidence)` to regenerate and authenticate stored provenance; it reports the first mismatching JSON path and returns regenerated authentic review text rather than trusting stored prose.
|
|
49
|
+
|
|
50
|
+
Wrapped bundles include one deduplicated typed `diagnostic-definition` document per definition and require the outer SDK versions/generator to agree with every run manifest. FNV-1a/JCS tags are deterministic integrity aids, not cryptographic authentication.
|
|
51
|
+
|
|
52
|
+
Material host judgments worth recording in the assumption ledger include amount basis and limit application, expense treatment, missingness, exposure timing, period convention, filters/grouping, communicated scale, and any policy that permits a failed review. Helpers never invent an actuary’s rationale.
|
|
83
53
|
|
|
84
|
-
|
|
54
|
+
The package also provides estimate metadata, assumption ledgers, ASOP No. 41 draft disclosure generation, ASOP No. 56 model cards, actual-versus-expected roll-forward, and canonical reproducibility bundles.
|
|
85
55
|
|
|
86
|
-
|
|
87
|
-
be "ASOP-compliant" on its own — compliance is a property of a credentialed
|
|
88
|
-
actuary's work in context. This package is **designed to support the
|
|
89
|
-
actuary's compliance** with ASOP Nos. 41, 43, 23, 56, 21, and 20 by generating
|
|
90
|
-
the disclosures, documentation, and audit artifacts those standards call
|
|
91
|
-
for. The generated documents are draft support material for the responsible
|
|
92
|
-
actuary to review, edit, and adopt.
|
|
56
|
+
See the [formula catalog](https://github.com/yerromnitsuj/actng/blob/v0.6.0/docs/reference/diagnostic-formulas.md) and [migration guide](https://github.com/yerromnitsuj/actng/blob/v0.6.0/docs/migrations/0.6-generalized-diagnostics.md).
|
|
93
57
|
|
|
94
58
|
## License
|
|
95
59
|
|
|
96
|
-
Apache-2.0.
|
|
60
|
+
Apache-2.0. See LICENSE and NOTICE.
|
package/dist/bundle.d.ts
CHANGED
|
@@ -26,7 +26,10 @@
|
|
|
26
26
|
* responsibility for compliance remains with the credentialed actuary.
|
|
27
27
|
*/
|
|
28
28
|
import { canonicalJson, fnv1a64 } from "@actuarial-ts/core";
|
|
29
|
-
import
|
|
29
|
+
import { BundleDoc, MethodResultDoc, SelectionDoc, StochasticResultDoc, TriangleDoc } from "@actuarial-ts/interchange";
|
|
30
|
+
import type { VerifiedDiagnosticRunProvenance } from "./diagnosticRun.js";
|
|
31
|
+
export { ComplianceError, COMPLIANCE_ERROR_CODES, type ComplianceErrorCode } from "./errors.js";
|
|
32
|
+
export { COMPLIANCE_PACKAGE_VERSION } from "./version.js";
|
|
30
33
|
export { canonicalJson, fnv1a64 };
|
|
31
34
|
/**
|
|
32
35
|
* The wrapped reproducibility bundle: the interchange BundleDoc (spec 3.2),
|
|
@@ -44,13 +47,6 @@ export type WrappedBundleDoc = BundleDoc;
|
|
|
44
47
|
* of this package. Add the code here when introducing a new throw.
|
|
45
48
|
* (UNSUPPORTED_VALUE moved to core's registry with canonicalJson in 0.2.0.)
|
|
46
49
|
*/
|
|
47
|
-
export declare const COMPLIANCE_ERROR_CODES: readonly ["BAD_BUNDLE", "BAD_CDF", "MISSING_RATIONALE"];
|
|
48
|
-
export type ComplianceErrorCode = (typeof COMPLIANCE_ERROR_CODES)[number];
|
|
49
|
-
/** Thrown for invalid compliance input (bad bundles, judgment without rationale, non-positive CDFs). */
|
|
50
|
-
export declare class ComplianceError extends Error {
|
|
51
|
-
readonly code: ComplianceErrorCode;
|
|
52
|
-
constructor(code: ComplianceErrorCode, message: string);
|
|
53
|
-
}
|
|
54
50
|
/**
|
|
55
51
|
* The interchange version the wrapped form is written under. Kept in literal
|
|
56
52
|
* sync with `@actuarial-ts/interchange`'s INTERCHANGE_SPEC_VERSION (the dep
|
|
@@ -58,14 +54,13 @@ export declare class ComplianceError extends Error {
|
|
|
58
54
|
* test parses the emitted doc with the real interchange parser, which
|
|
59
55
|
* refuses a wrong-major version — drift fails loudly.
|
|
60
56
|
*/
|
|
61
|
-
export declare const WRAPPED_BUNDLE_INTERCHANGE_VERSION = "1.
|
|
57
|
+
export declare const WRAPPED_BUNDLE_INTERCHANGE_VERSION = "1.1.0";
|
|
62
58
|
/**
|
|
63
59
|
* This package's version, stamped into a wrapped bundle's `generator`
|
|
64
60
|
* envelope field. A sync test asserts it matches package.json so it cannot
|
|
65
61
|
* silently drift (mirroring interchange's INTERCHANGE_PACKAGE_VERSION
|
|
66
62
|
* discipline).
|
|
67
63
|
*/
|
|
68
|
-
export declare const COMPLIANCE_PACKAGE_VERSION = "0.4.0";
|
|
69
64
|
/**
|
|
70
65
|
* The interchange mirror for a wrapped bundle (spec 3.2): the triangles the
|
|
71
66
|
* analysis consumed, the selections it applied, and the results it produced,
|
|
@@ -113,6 +108,8 @@ export interface CreateBundleInput {
|
|
|
113
108
|
name: string;
|
|
114
109
|
version: string;
|
|
115
110
|
};
|
|
111
|
+
/** Authenticated diagnostic runs included in the canonical body and, when wrapped, as typed definition documents. */
|
|
112
|
+
diagnosticRuns?: readonly VerifiedDiagnosticRunProvenance[];
|
|
116
113
|
}
|
|
117
114
|
export interface ReproducibilityBundle {
|
|
118
115
|
/** Canonical JSON of the full bundle body; the reproducibility record itself. */
|
package/dist/bundle.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bundle.d.ts","sourceRoot":"","sources":["../src/bundle.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAEH,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAC5D,OAAO,
|
|
1
|
+
{"version":3,"file":"bundle.d.ts","sourceRoot":"","sources":["../src/bundle.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAEH,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAC5D,OAAO,EAIL,SAAS,EACT,eAAe,EACf,YAAY,EACZ,mBAAmB,EACnB,WAAW,EACZ,MAAM,2BAA2B,CAAC;AACnC,OAAO,KAAK,EAAE,+BAA+B,EAAE,MAAM,oBAAoB,CAAC;AAI1E,OAAO,EAAE,eAAe,EAAE,sBAAsB,EAAE,KAAK,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAChG,OAAO,EAAE,0BAA0B,EAAE,MAAM,cAAc,CAAC;AAE1D,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,CAAC;AAElC;;;;;;;;;GASG;AACH,MAAM,MAAM,gBAAgB,GAAG,SAAS,CAAC;AAEzC;;;;GAIG;AAIH;;;;;;GAMG;AACH,eAAO,MAAM,kCAAkC,UAA2B,CAAC;AAE3E;;;;;GAKG;AAEH;;;;;;GAMG;AACH,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,WAAW,EAAE,CAAC;IACzB,UAAU,EAAE,YAAY,EAAE,CAAC;IAC3B,OAAO,EAAE,CAAC,eAAe,GAAG,mBAAmB,CAAC,EAAE,CAAC;CACpD;AAED,MAAM,WAAW,iBAAiB;IAChC,gGAAgG;IAChG,MAAM,EAAE,OAAO,CAAC;IAChB,wFAAwF;IACxF,UAAU,EAAE,OAAO,CAAC;IACpB,qFAAqF;IACrF,OAAO,EAAE,OAAO,CAAC;IACjB,6EAA6E;IAC7E,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACpC,gFAAgF;IAChF,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,8DAA8D;IAC9D,SAAS,EAAE,MAAM,CAAC;IAClB;;;;;OAKG;IACH,IAAI,CAAC,EAAE,eAAe,CAAC;IACvB;;;;;;;;;;OAUG;IACH,SAAS,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IAC9C,qHAAqH;IACrH,cAAc,CAAC,EAAE,SAAS,+BAA+B,EAAE,CAAC;CAC7D;AAED,MAAM,WAAW,qBAAqB;IACpC,iFAAiF;IACjF,OAAO,EAAE,MAAM,CAAC;IAChB,gEAAgE;IAChE,IAAI,EAAE,MAAM,CAAC;CACd;AAED,4EAA4E;AAC5E,MAAM,WAAW,mBAAoB,SAAQ,qBAAqB;IAChE;;;;OAIG;IACH,OAAO,EAAE,gBAAgB,CAAC;CAC3B;AAED;;;;;;;;;GASG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,iBAAiB,GAAG;IAAE,IAAI,EAAE,eAAe,CAAA;CAAE,GAAG,mBAAmB,CAAC;AACxG,wBAAgB,YAAY,CAAC,KAAK,EAAE,iBAAiB,GAAG,qBAAqB,CAAC;AAmD9E,mEAAmE;AACnE,MAAM,WAAW,mBAAmB;IAClC,EAAE,EAAE,OAAO,CAAC;IACZ,2EAA2E;IAC3E,QAAQ,EAAE,MAAM,CAAC;IACjB,2CAA2C;IAC3C,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;CACvB;AAED,MAAM,WAAW,kBAAkB;IACjC,UAAU,EAAE,OAAO,CAAC;IACpB;;;;;;;;OAQG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,oEAAoE;IACpE,cAAc,CAAC,EAAE,mBAAmB,CAAC;CACtC;AAyFD;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,YAAY,CAC1B,MAAM,EAAE,qBAAqB,GAAG,gBAAgB,EAChD,YAAY,EAAE,OAAO,GACpB,kBAAkB,CAEpB"}
|
package/dist/bundle.js
CHANGED
|
@@ -26,26 +26,18 @@
|
|
|
26
26
|
* responsibility for compliance remains with the credentialed actuary.
|
|
27
27
|
*/
|
|
28
28
|
import { canonicalJson, fnv1a64 } from "@actuarial-ts/core";
|
|
29
|
+
import { INTERCHANGE_SPEC_VERSION, diagnosticDefinitionToDoc, } from "@actuarial-ts/interchange";
|
|
30
|
+
import { assertVerifiedDiagnosticRunProvenance, verifiedDefinitionForBundle } from "./diagnosticRun.js";
|
|
31
|
+
import { ComplianceError } from "./errors.js";
|
|
32
|
+
import { COMPLIANCE_PACKAGE_VERSION } from "./version.js";
|
|
33
|
+
export { ComplianceError, COMPLIANCE_ERROR_CODES } from "./errors.js";
|
|
34
|
+
export { COMPLIANCE_PACKAGE_VERSION } from "./version.js";
|
|
29
35
|
export { canonicalJson, fnv1a64 };
|
|
30
36
|
/**
|
|
31
37
|
* Every machine-readable code a ComplianceError can carry, across all modules
|
|
32
38
|
* of this package. Add the code here when introducing a new throw.
|
|
33
39
|
* (UNSUPPORTED_VALUE moved to core's registry with canonicalJson in 0.2.0.)
|
|
34
40
|
*/
|
|
35
|
-
export const COMPLIANCE_ERROR_CODES = [
|
|
36
|
-
"BAD_BUNDLE",
|
|
37
|
-
"BAD_CDF",
|
|
38
|
-
"MISSING_RATIONALE",
|
|
39
|
-
];
|
|
40
|
-
/** Thrown for invalid compliance input (bad bundles, judgment without rationale, non-positive CDFs). */
|
|
41
|
-
export class ComplianceError extends Error {
|
|
42
|
-
code;
|
|
43
|
-
constructor(code, message) {
|
|
44
|
-
super(message);
|
|
45
|
-
this.name = "ComplianceError";
|
|
46
|
-
this.code = code;
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
41
|
/**
|
|
50
42
|
* The interchange version the wrapped form is written under. Kept in literal
|
|
51
43
|
* sync with `@actuarial-ts/interchange`'s INTERCHANGE_SPEC_VERSION (the dep
|
|
@@ -53,14 +45,7 @@ export class ComplianceError extends Error {
|
|
|
53
45
|
* test parses the emitted doc with the real interchange parser, which
|
|
54
46
|
* refuses a wrong-major version — drift fails loudly.
|
|
55
47
|
*/
|
|
56
|
-
export const WRAPPED_BUNDLE_INTERCHANGE_VERSION =
|
|
57
|
-
/**
|
|
58
|
-
* This package's version, stamped into a wrapped bundle's `generator`
|
|
59
|
-
* envelope field. A sync test asserts it matches package.json so it cannot
|
|
60
|
-
* silently drift (mirroring interchange's INTERCHANGE_PACKAGE_VERSION
|
|
61
|
-
* discipline).
|
|
62
|
-
*/
|
|
63
|
-
export const COMPLIANCE_PACKAGE_VERSION = "0.4.0";
|
|
48
|
+
export const WRAPPED_BUNDLE_INTERCHANGE_VERSION = INTERCHANGE_SPEC_VERSION;
|
|
64
49
|
export function createBundle(input) {
|
|
65
50
|
const body = {
|
|
66
51
|
createdAt: input.createdAt,
|
|
@@ -71,6 +56,23 @@ export function createBundle(input) {
|
|
|
71
56
|
};
|
|
72
57
|
if (input.seeds !== undefined)
|
|
73
58
|
body["seeds"] = input.seeds;
|
|
59
|
+
if (input.diagnosticRuns !== undefined) {
|
|
60
|
+
for (const run of input.diagnosticRuns)
|
|
61
|
+
assertVerifiedDiagnosticRunProvenance(run);
|
|
62
|
+
if (input.diagnosticRuns.length > 0) {
|
|
63
|
+
const expected = input.diagnosticRuns[0].manifest.packageVersions;
|
|
64
|
+
for (const [runIndex, run] of input.diagnosticRuns.entries()) {
|
|
65
|
+
if (canonicalJson(run.manifest.packageVersions) !== canonicalJson(expected))
|
|
66
|
+
throw new ComplianceError("BAD_DIAGNOSTIC_RUN", "Diagnostic runs disagree on SDK package versions", `$.diagnosticRuns[${runIndex}].manifest.packageVersions`);
|
|
67
|
+
}
|
|
68
|
+
for (const [name, version] of Object.entries(expected))
|
|
69
|
+
if (input.sdkVersions[name] !== version)
|
|
70
|
+
throw new ComplianceError("BAD_DIAGNOSTIC_RUN", `Outer sdkVersions must record ${name} at ${version}`, `$.sdkVersions.${name}`);
|
|
71
|
+
if (input.wrap !== undefined && input.generator !== undefined && (input.generator.name !== "@actuarial-ts/compliance" || input.generator.version !== COMPLIANCE_PACKAGE_VERSION))
|
|
72
|
+
throw new ComplianceError("BAD_DIAGNOSTIC_RUN", "Wrapped diagnostic bundles require the actual compliance generator stamp", "$.generator");
|
|
73
|
+
}
|
|
74
|
+
body["diagnosticRuns"] = input.diagnosticRuns;
|
|
75
|
+
}
|
|
74
76
|
const payload = canonicalJson(body);
|
|
75
77
|
const inner = { payload, hash: fnv1a64(payload) };
|
|
76
78
|
if (input.wrap === undefined)
|
|
@@ -79,10 +81,19 @@ export function createBundle(input) {
|
|
|
79
81
|
// tag is fnv1a64(canonicalJson({ bundle, interchange })) — exactly
|
|
80
82
|
// interchange's semanticBodyOf for kind "bundle" (spec 3.2).
|
|
81
83
|
const bundleSegment = { hash: inner.hash, payload: inner.payload };
|
|
84
|
+
const definitions = new Map();
|
|
85
|
+
for (const run of input.diagnosticRuns ?? []) {
|
|
86
|
+
const compiled = verifiedDefinitionForBundle(run);
|
|
87
|
+
definitions.set(run.definitionIdentities.definition, diagnosticDefinitionToDoc(compiled, {
|
|
88
|
+
createdAt: input.createdAt,
|
|
89
|
+
generator: { name: "@actuarial-ts/compliance", version: COMPLIANCE_PACKAGE_VERSION },
|
|
90
|
+
}));
|
|
91
|
+
}
|
|
82
92
|
const interchange = {
|
|
83
93
|
triangles: [...input.wrap.triangles],
|
|
84
94
|
selections: [...input.wrap.selections],
|
|
85
95
|
results: [...input.wrap.results],
|
|
96
|
+
...(definitions.size === 0 ? {} : { diagnosticDefinitions: [...definitions.values()].sort((a, b) => a.diagnosticDefinition.identities.definition < b.diagnosticDefinition.identities.definition ? -1 : 1) }),
|
|
86
97
|
};
|
|
87
98
|
const wrapped = {
|
|
88
99
|
interchangeVersion: WRAPPED_BUNDLE_INTERCHANGE_VERSION,
|
package/dist/bundle.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bundle.js","sourceRoot":"","sources":["../src/bundle.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAEH,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"bundle.js","sourceRoot":"","sources":["../src/bundle.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import { type DiagnosticDeepReadonly, type CompiledDiagnosticDefinition, type JsonValue as CoreDiagnosticJsonValue, type NormalizedDiagnosticDefinitionIdentity, type NormalizedDiagnosticPreparationIdentity, type NormalizedDiagnosticResultIdentity } from "@actuarial-ts/core";
|
|
2
|
+
import { type CompletedValidatedMetricDiagnosticsRun, type DiagnosticReviewIdentityBody, type DiagnosticReviewReceipt } from "@actuarial-ts/data";
|
|
3
|
+
export interface DiagnosticArtifactDigestBase {
|
|
4
|
+
readonly id: string;
|
|
5
|
+
readonly scope: "input" | "preparation";
|
|
6
|
+
readonly algorithm: string;
|
|
7
|
+
readonly value: string;
|
|
8
|
+
readonly byteLength: number;
|
|
9
|
+
}
|
|
10
|
+
export type DiagnosticArtifactDigest = DiagnosticArtifactDigestBase & {
|
|
11
|
+
readonly assurance: "sdk-computed" | "caller-declared";
|
|
12
|
+
};
|
|
13
|
+
export type DiagnosticArtifactEvidence = {
|
|
14
|
+
readonly id: string;
|
|
15
|
+
readonly scope: "input" | "preparation";
|
|
16
|
+
readonly assurance: "sdk-computed";
|
|
17
|
+
readonly bytes: Uint8Array;
|
|
18
|
+
} | {
|
|
19
|
+
readonly id: string;
|
|
20
|
+
readonly scope: "input" | "preparation";
|
|
21
|
+
readonly assurance: "caller-declared";
|
|
22
|
+
readonly algorithm: string;
|
|
23
|
+
readonly value: string;
|
|
24
|
+
readonly byteLength: number;
|
|
25
|
+
};
|
|
26
|
+
export interface DiagnosticPreparationLineage {
|
|
27
|
+
readonly artifactId: string;
|
|
28
|
+
readonly inputArtifactIds: readonly string[];
|
|
29
|
+
}
|
|
30
|
+
export interface DiagnosticRunManifest {
|
|
31
|
+
readonly definitionIntegrity: string;
|
|
32
|
+
readonly runPresetId: string | null;
|
|
33
|
+
readonly datasetArtifactId: string | null;
|
|
34
|
+
readonly packageVersions: Readonly<Record<string, string>>;
|
|
35
|
+
readonly preparation: DiagnosticDeepReadonly<NormalizedDiagnosticPreparationIdentity>;
|
|
36
|
+
readonly preparationFingerprint: string;
|
|
37
|
+
readonly expectedGridFingerprint: string | null;
|
|
38
|
+
readonly executionPolicy: {
|
|
39
|
+
readonly review: {
|
|
40
|
+
readonly body: DiagnosticReviewIdentityBody;
|
|
41
|
+
readonly reportFingerprint: string;
|
|
42
|
+
};
|
|
43
|
+
readonly gate: CompletedValidatedMetricDiagnosticsRun["gate"];
|
|
44
|
+
};
|
|
45
|
+
readonly groupMap: Readonly<Record<string, string>>;
|
|
46
|
+
readonly groupDimensions: Readonly<Record<string, CoreDiagnosticJsonValue>>;
|
|
47
|
+
readonly artifacts: readonly DiagnosticArtifactDigest[];
|
|
48
|
+
readonly lineage: readonly DiagnosticPreparationLineage[];
|
|
49
|
+
}
|
|
50
|
+
export type NormalizedDiagnosticRunManifestIdentity = DiagnosticDeepReadonly<DiagnosticRunManifest>;
|
|
51
|
+
export interface DiagnosticRunIdentity {
|
|
52
|
+
readonly runFingerprint: string;
|
|
53
|
+
readonly resultFingerprint: string;
|
|
54
|
+
readonly runResultFingerprint: string;
|
|
55
|
+
}
|
|
56
|
+
export interface DiagnosticRunProvenance extends DiagnosticRunIdentity {
|
|
57
|
+
readonly definition: DiagnosticDeepReadonly<NormalizedDiagnosticDefinitionIdentity>;
|
|
58
|
+
readonly definitionIdentities: {
|
|
59
|
+
readonly algorithm: "fnv1a64-jcs-v1";
|
|
60
|
+
readonly formulaById: Readonly<Record<string, string>>;
|
|
61
|
+
readonly calculationByInstanceId: Readonly<Record<string, string>>;
|
|
62
|
+
readonly definition: string;
|
|
63
|
+
};
|
|
64
|
+
readonly manifest: NormalizedDiagnosticRunManifestIdentity;
|
|
65
|
+
readonly review: DiagnosticReviewReceipt;
|
|
66
|
+
readonly result: DiagnosticDeepReadonly<NormalizedDiagnosticResultIdentity>;
|
|
67
|
+
}
|
|
68
|
+
declare const verifiedDiagnosticRunProvenanceBrand: unique symbol;
|
|
69
|
+
export interface VerifiedDiagnosticRunProvenance extends DiagnosticRunProvenance {
|
|
70
|
+
readonly [verifiedDiagnosticRunProvenanceBrand]: true;
|
|
71
|
+
}
|
|
72
|
+
export interface CreateDiagnosticRunIdentityInput {
|
|
73
|
+
readonly completedRun: CompletedValidatedMetricDiagnosticsRun;
|
|
74
|
+
readonly artifacts?: readonly DiagnosticArtifactEvidence[];
|
|
75
|
+
readonly lineage?: readonly DiagnosticPreparationLineage[];
|
|
76
|
+
}
|
|
77
|
+
export declare function createDiagnosticRunIdentity(input: CreateDiagnosticRunIdentityInput): Promise<VerifiedDiagnosticRunProvenance>;
|
|
78
|
+
export declare function assertVerifiedDiagnosticRunProvenance(value: unknown): asserts value is VerifiedDiagnosticRunProvenance;
|
|
79
|
+
/** @internal Bundle authoring uses owner state rather than trusting the public snapshot. */
|
|
80
|
+
export declare function verifiedDefinitionForBundle(value: VerifiedDiagnosticRunProvenance): CompiledDiagnosticDefinition;
|
|
81
|
+
export declare function verifyDiagnosticRunIdentity(candidate: unknown, input: CreateDiagnosticRunIdentityInput): Promise<VerifiedDiagnosticRunProvenance>;
|
|
82
|
+
export {};
|
|
83
|
+
//# sourceMappingURL=diagnosticRun.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"diagnosticRun.d.ts","sourceRoot":"","sources":["../src/diagnosticRun.ts"],"names":[],"mappings":"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"}
|