@openprose/reactor-cradle 0.1.0-rc.1
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/LICENSE +21 -0
- package/README.md +270 -0
- package/dist/assert/index.d.ts +35 -0
- package/dist/assert/index.d.ts.map +1 -0
- package/dist/assert/index.js +398 -0
- package/dist/baselines/cost-thesis/index.d.ts +103 -0
- package/dist/baselines/cost-thesis/index.d.ts.map +1 -0
- package/dist/baselines/cost-thesis/index.js +337 -0
- package/dist/baselines/naive-loop/index.d.ts +46 -0
- package/dist/baselines/naive-loop/index.d.ts.map +1 -0
- package/dist/baselines/naive-loop/index.js +188 -0
- package/dist/baselines/no-memo/index.d.ts +84 -0
- package/dist/baselines/no-memo/index.d.ts.map +1 -0
- package/dist/baselines/no-memo/index.js +226 -0
- package/dist/doubles/clock.d.ts +9 -0
- package/dist/doubles/clock.d.ts.map +1 -0
- package/dist/doubles/clock.js +42 -0
- package/dist/doubles/storage.d.ts +24 -0
- package/dist/doubles/storage.d.ts.map +1 -0
- package/dist/doubles/storage.js +191 -0
- package/dist/eval/index.d.ts +204 -0
- package/dist/eval/index.d.ts.map +1 -0
- package/dist/eval/index.js +596 -0
- package/dist/index.d.ts +24 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +39 -0
- package/dist/policy-author/index.d.ts +103 -0
- package/dist/policy-author/index.d.ts.map +1 -0
- package/dist/policy-author/index.js +358 -0
- package/dist/policy-drift/index.d.ts +64 -0
- package/dist/policy-drift/index.d.ts.map +1 -0
- package/dist/policy-drift/index.js +495 -0
- package/dist/policy-replay/index.d.ts +106 -0
- package/dist/policy-replay/index.d.ts.map +1 -0
- package/dist/policy-replay/index.js +361 -0
- package/dist/provider-parity/index.d.ts +91 -0
- package/dist/provider-parity/index.d.ts.map +1 -0
- package/dist/provider-parity/index.js +439 -0
- package/dist/recompile/index.d.ts +161 -0
- package/dist/recompile/index.d.ts.map +1 -0
- package/dist/recompile/index.js +690 -0
- package/dist/release-candidate/index.d.ts +139 -0
- package/dist/release-candidate/index.d.ts.map +1 -0
- package/dist/release-candidate/index.js +553 -0
- package/dist/release-parity/index.d.ts +80 -0
- package/dist/release-parity/index.d.ts.map +1 -0
- package/dist/release-parity/index.js +1035 -0
- package/dist/replay/model-gateway.d.ts +25 -0
- package/dist/replay/model-gateway.d.ts.map +1 -0
- package/dist/replay/model-gateway.js +166 -0
- package/dist/replay/parity.d.ts +110 -0
- package/dist/replay/parity.d.ts.map +1 -0
- package/dist/replay/parity.js +232 -0
- package/dist/rollback/index.d.ts +106 -0
- package/dist/rollback/index.d.ts.map +1 -0
- package/dist/rollback/index.js +694 -0
- package/dist/scenario/parser.d.ts +11 -0
- package/dist/scenario/parser.d.ts.map +1 -0
- package/dist/scenario/parser.js +490 -0
- package/dist/scenario/runner.d.ts +12 -0
- package/dist/scenario/runner.d.ts.map +1 -0
- package/dist/scenario/runner.js +345 -0
- package/dist/scenario/synthetic-world-adapter.d.ts +4 -0
- package/dist/scenario/synthetic-world-adapter.d.ts.map +1 -0
- package/dist/scenario/synthetic-world-adapter.js +82 -0
- package/dist/scenario/time.d.ts +4 -0
- package/dist/scenario/time.d.ts.map +1 -0
- package/dist/scenario/time.js +45 -0
- package/dist/scenario/types.d.ts +149 -0
- package/dist/scenario/types.d.ts.map +1 -0
- package/dist/scenario/types.js +5 -0
- package/dist/spikes/index.d.ts +10 -0
- package/dist/spikes/index.d.ts.map +1 -0
- package/dist/spikes/index.js +29 -0
- package/dist/spikes/k1-ensemble-spread.d.ts +88 -0
- package/dist/spikes/k1-ensemble-spread.d.ts.map +1 -0
- package/dist/spikes/k1-ensemble-spread.js +396 -0
- package/dist/spikes/k2-policy-author.d.ts +25 -0
- package/dist/spikes/k2-policy-author.d.ts.map +1 -0
- package/dist/spikes/k2-policy-author.js +503 -0
- package/dist/spikes/live-refresh.d.ts +150 -0
- package/dist/spikes/live-refresh.d.ts.map +1 -0
- package/dist/spikes/live-refresh.js +511 -0
- package/dist/world/index.d.ts +2 -0
- package/dist/world/index.d.ts.map +1 -0
- package/dist/world/index.js +17 -0
- package/dist/world/synthetic-world.d.ts +104 -0
- package/dist/world/synthetic-world.d.ts.map +1 -0
- package/dist/world/synthetic-world.js +449 -0
- package/package.json +139 -0
|
@@ -0,0 +1,553 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.renderReleaseCandidateEvidenceBundleMarkdownV0 = exports.createR7ReleaseCandidateEvidenceBundleV0 = exports.R7_REQUIRED_DEFERRED_ROW_IDS_V0 = exports.R7_REQUIRED_COMMAND_IDS_V0 = exports.R7_CRADLE_PUBLIC_IMPORT_SPECIFIERS_V0 = exports.R7_REACTOR_PUBLIC_IMPORT_SPECIFIERS_V0 = exports.R7_RELEASE_CANDIDATE_EVIDENCE_BUNDLE_VERSION_V0 = exports.R7_RELEASE_CANDIDATE_EVIDENCE_BUNDLE_SCHEMA_V0 = void 0;
|
|
4
|
+
exports.buildR7ReleaseCandidateEvidenceBundleV0 = buildR7ReleaseCandidateEvidenceBundleV0;
|
|
5
|
+
exports.assertR7ReleaseCandidateEvidenceBundleV0 = assertR7ReleaseCandidateEvidenceBundleV0;
|
|
6
|
+
exports.renderR7ReleaseCandidateEvidenceBundleMarkdownV0 = renderR7ReleaseCandidateEvidenceBundleMarkdownV0;
|
|
7
|
+
const node_crypto_1 = require("node:crypto");
|
|
8
|
+
const eval_1 = require("../eval");
|
|
9
|
+
const release_parity_1 = require("../release-parity");
|
|
10
|
+
exports.R7_RELEASE_CANDIDATE_EVIDENCE_BUNDLE_SCHEMA_V0 = "openprose.reactor-cradle.release-candidate-evidence-bundle";
|
|
11
|
+
exports.R7_RELEASE_CANDIDATE_EVIDENCE_BUNDLE_VERSION_V0 = 0;
|
|
12
|
+
exports.R7_REACTOR_PUBLIC_IMPORT_SPECIFIERS_V0 = [
|
|
13
|
+
"@openprose/reactor",
|
|
14
|
+
"@openprose/reactor/receipt",
|
|
15
|
+
"@openprose/reactor/cost",
|
|
16
|
+
"@openprose/reactor/kernel",
|
|
17
|
+
"@openprose/reactor/evidence-plan",
|
|
18
|
+
"@openprose/reactor/memo",
|
|
19
|
+
"@openprose/reactor/forecast",
|
|
20
|
+
"@openprose/reactor/sdk",
|
|
21
|
+
"@openprose/reactor/policy",
|
|
22
|
+
"@openprose/reactor/composition",
|
|
23
|
+
"@openprose/reactor/projection",
|
|
24
|
+
];
|
|
25
|
+
exports.R7_CRADLE_PUBLIC_IMPORT_SPECIFIERS_V0 = [
|
|
26
|
+
"@openprose/reactor-cradle",
|
|
27
|
+
"@openprose/reactor-cradle/assert",
|
|
28
|
+
"@openprose/reactor-cradle/eval",
|
|
29
|
+
"@openprose/reactor-cradle/spikes",
|
|
30
|
+
"@openprose/reactor-cradle/spikes/live-refresh",
|
|
31
|
+
"@openprose/reactor-cradle/spikes/k1-ensemble-spread",
|
|
32
|
+
"@openprose/reactor-cradle/spikes/k2-policy-author",
|
|
33
|
+
"@openprose/reactor-cradle/doubles/clock",
|
|
34
|
+
"@openprose/reactor-cradle/doubles/storage",
|
|
35
|
+
"@openprose/reactor-cradle/policy-author",
|
|
36
|
+
"@openprose/reactor-cradle/policy-drift",
|
|
37
|
+
"@openprose/reactor-cradle/policy-replay",
|
|
38
|
+
"@openprose/reactor-cradle/recompile",
|
|
39
|
+
"@openprose/reactor-cradle/release-parity",
|
|
40
|
+
"@openprose/reactor-cradle/release-candidate",
|
|
41
|
+
"@openprose/reactor-cradle/rollback",
|
|
42
|
+
"@openprose/reactor-cradle/replay/model-gateway",
|
|
43
|
+
"@openprose/reactor-cradle/replay/parity",
|
|
44
|
+
"@openprose/reactor-cradle/scenario/parser",
|
|
45
|
+
"@openprose/reactor-cradle/scenario/runner",
|
|
46
|
+
"@openprose/reactor-cradle/scenario/time",
|
|
47
|
+
"@openprose/reactor-cradle/scenario/types",
|
|
48
|
+
"@openprose/reactor-cradle/world",
|
|
49
|
+
];
|
|
50
|
+
exports.R7_REQUIRED_COMMAND_IDS_V0 = [
|
|
51
|
+
"verifier-smoke-tests",
|
|
52
|
+
"reactor-tests",
|
|
53
|
+
"cradle-tests",
|
|
54
|
+
"local-pack",
|
|
55
|
+
"pin-verify",
|
|
56
|
+
"tarball-import-smoke",
|
|
57
|
+
"release-readiness-example-smoke",
|
|
58
|
+
"diff-check",
|
|
59
|
+
"dependency-scan",
|
|
60
|
+
"secret-scan",
|
|
61
|
+
];
|
|
62
|
+
exports.R7_REQUIRED_DEFERRED_ROW_IDS_V0 = [
|
|
63
|
+
"down-after-budget-exhaustion",
|
|
64
|
+
"postgres-parity",
|
|
65
|
+
"live-provider-model-matrix",
|
|
66
|
+
];
|
|
67
|
+
const CONTENT_HASH_PATTERN = /^sha256:[a-f0-9]{64}$/;
|
|
68
|
+
const HEX_SHA256_PATTERN = /^[a-f0-9]{64}$/;
|
|
69
|
+
const GIT_COMMIT_PATTERN = /^[a-f0-9]{40}$/;
|
|
70
|
+
const ISO_INSTANT_PATTERN = /^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(?:\.\d{3})?Z$/;
|
|
71
|
+
const SECRET_SHAPED_PATTERNS = [
|
|
72
|
+
/\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,}\b/i,
|
|
73
|
+
/\bBearer\s+[A-Za-z0-9._-]{8,}\b/i,
|
|
74
|
+
new RegExp(`\\b${["sk", "or"].join("-")}-[A-Za-z0-9._-]{8,}\\b`),
|
|
75
|
+
/\bapi[_-]?key[_:/= -]+[A-Za-z0-9._-]{8,}\b/i,
|
|
76
|
+
/\b(?:secret|token|password|credential|authorization)[_:/= -]+[A-Za-z0-9._-]{8,}\b/i,
|
|
77
|
+
];
|
|
78
|
+
const PATH_SHAPED_PATTERN = new RegExp(String.raw `(?:^|\s)(?:\/[^\s]+|[A-Za-z]:\\[^\s]+|\.{1,2}\/[^\s]+)|\.${[
|
|
79
|
+
"tg",
|
|
80
|
+
"z",
|
|
81
|
+
].join("")}\b|${["tarball", "Path"].join("")}`, "i");
|
|
82
|
+
const FORBIDDEN_RUNTIME_TEXT_PATTERN = /\b(?:stdout|stderr|raw replay bytes|expected_bytes|actual_bytes|memo_key|run_id|provider_norm)\b/i;
|
|
83
|
+
function buildR7ReleaseCandidateEvidenceBundleV0(input) {
|
|
84
|
+
const payload = {
|
|
85
|
+
schema: exports.R7_RELEASE_CANDIDATE_EVIDENCE_BUNDLE_SCHEMA_V0,
|
|
86
|
+
v: exports.R7_RELEASE_CANDIDATE_EVIDENCE_BUNDLE_VERSION_V0,
|
|
87
|
+
release_candidate_id: cleanText(input.release_candidate_id, "release_candidate_id"),
|
|
88
|
+
generated_at: assertIsoInstant(input.generated_at, "generated_at"),
|
|
89
|
+
as_of: assertIsoInstant(input.as_of, "as_of"),
|
|
90
|
+
build: normalizeBuild(input.build),
|
|
91
|
+
package_pin: normalizePackagePin(input.package_pin),
|
|
92
|
+
tarball_smoke: normalizeTarballSmoke(input.tarball_smoke),
|
|
93
|
+
cradle_tarball_smoke: normalizeCradleTarballSmoke(input.cradle_tarball_smoke),
|
|
94
|
+
commands: normalizeCommands(input.commands),
|
|
95
|
+
release_parity: normalizeReleaseParity(input.release_parity),
|
|
96
|
+
deferred_rows: normalizeDeferredRows(input.deferred_rows),
|
|
97
|
+
};
|
|
98
|
+
const bundle = Object.freeze({
|
|
99
|
+
...payload,
|
|
100
|
+
content_hash: hashCanonicalValue(payload),
|
|
101
|
+
});
|
|
102
|
+
assertR7ReleaseCandidateEvidenceBundleV0(bundle);
|
|
103
|
+
return bundle;
|
|
104
|
+
}
|
|
105
|
+
exports.createR7ReleaseCandidateEvidenceBundleV0 = buildR7ReleaseCandidateEvidenceBundleV0;
|
|
106
|
+
function assertR7ReleaseCandidateEvidenceBundleV0(bundle) {
|
|
107
|
+
if (!isRecord(bundle)) {
|
|
108
|
+
throw new Error("release candidate evidence bundle must be an object");
|
|
109
|
+
}
|
|
110
|
+
if (bundle.schema !== exports.R7_RELEASE_CANDIDATE_EVIDENCE_BUNDLE_SCHEMA_V0) {
|
|
111
|
+
throw new Error("release candidate evidence bundle schema is malformed");
|
|
112
|
+
}
|
|
113
|
+
if (bundle.v !== exports.R7_RELEASE_CANDIDATE_EVIDENCE_BUNDLE_VERSION_V0) {
|
|
114
|
+
throw new Error("release candidate evidence bundle version must be 0");
|
|
115
|
+
}
|
|
116
|
+
assertContentHash(bundle.content_hash, "content_hash");
|
|
117
|
+
const { content_hash: _contentHash, ...payload } = bundle;
|
|
118
|
+
const actualHash = hashCanonicalValue(payload);
|
|
119
|
+
if (actualHash !== bundle.content_hash) {
|
|
120
|
+
throw new Error("release candidate evidence bundle content_hash is stale");
|
|
121
|
+
}
|
|
122
|
+
normalizeBuild(bundle.build);
|
|
123
|
+
normalizePackagePin({
|
|
124
|
+
...bundle.package_pin,
|
|
125
|
+
checked_files: ["checked-files-hash-only"],
|
|
126
|
+
});
|
|
127
|
+
normalizeTarballSmoke({
|
|
128
|
+
package_name: bundle.tarball_smoke.package_name,
|
|
129
|
+
version: bundle.tarball_smoke.version,
|
|
130
|
+
imported_entrypoints: bundle.tarball_smoke.imported_entrypoints,
|
|
131
|
+
});
|
|
132
|
+
normalizeCradleTarballSmoke({
|
|
133
|
+
package_name: bundle.cradle_tarball_smoke.package_name,
|
|
134
|
+
version: bundle.cradle_tarball_smoke.version,
|
|
135
|
+
imported_entrypoints: bundle.cradle_tarball_smoke.imported_entrypoints,
|
|
136
|
+
});
|
|
137
|
+
normalizeCommands(bundle.commands);
|
|
138
|
+
normalizeDeferredRows(bundle.deferred_rows);
|
|
139
|
+
if (bundle.package_pin.checked_file_count <= 0) {
|
|
140
|
+
throw new Error("package_pin.checked_file_count must be positive");
|
|
141
|
+
}
|
|
142
|
+
assertContentHash(bundle.package_pin.checked_files_hash, "checked_files_hash");
|
|
143
|
+
assertContentHash(bundle.release_parity.proof_hash, "release_parity.proof_hash");
|
|
144
|
+
assertContentHash(bundle.release_parity.replay_snapshot_hash, "release_parity.replay_snapshot_hash");
|
|
145
|
+
assertContentHash(bundle.release_parity.eval_result_hash, "release_parity.eval_result_hash");
|
|
146
|
+
assertContentHash(bundle.release_parity.public_projection_hash, "release_parity.public_projection_hash");
|
|
147
|
+
assertContentHash(bundle.release_parity.eval_report_hash, "release_parity.eval_report_hash");
|
|
148
|
+
assertContentHash(bundle.release_parity.public_projection_report_hash, "release_parity.public_projection_report_hash");
|
|
149
|
+
if (bundle.release_parity.model_matrix_status !== "not-run") {
|
|
150
|
+
throw new Error("release parity model matrix must stay not-run");
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
function renderR7ReleaseCandidateEvidenceBundleMarkdownV0(bundle) {
|
|
154
|
+
assertR7ReleaseCandidateEvidenceBundleV0(bundle);
|
|
155
|
+
const commandRows = bundle.commands.map((item) => [
|
|
156
|
+
markdownTableCell(item.command_id),
|
|
157
|
+
item.status,
|
|
158
|
+
markdownTableCell(item.summary),
|
|
159
|
+
item.tests_passed === undefined || item.tests_total === undefined
|
|
160
|
+
? "n/a"
|
|
161
|
+
: `${item.tests_passed}/${item.tests_total}`,
|
|
162
|
+
].join(" | "));
|
|
163
|
+
const deferredRows = bundle.deferred_rows.map((item) => [
|
|
164
|
+
markdownTableCell(item.row_id),
|
|
165
|
+
item.status,
|
|
166
|
+
item.represented ? "true" : "false",
|
|
167
|
+
markdownTableCell(item.reason),
|
|
168
|
+
].join(" | "));
|
|
169
|
+
return [
|
|
170
|
+
"# Reactor Release Candidate Evidence Bundle",
|
|
171
|
+
"",
|
|
172
|
+
`Bundle hash: \`${bundle.content_hash}\``,
|
|
173
|
+
`Release candidate: \`${markdownInline(bundle.release_candidate_id)}\``,
|
|
174
|
+
`Generated at: \`${bundle.generated_at}\``,
|
|
175
|
+
`As of: \`${bundle.as_of}\``,
|
|
176
|
+
`Build: \`${markdownInline(bundle.build.branch)}@${bundle.build.commit}\``,
|
|
177
|
+
"",
|
|
178
|
+
"## Package Evidence",
|
|
179
|
+
`- Reactor package: ${bundle.package_pin.package_name}@${bundle.package_pin.version}`,
|
|
180
|
+
`- Reactor tree hash: \`${bundle.package_pin.package_tree_sha256}\``,
|
|
181
|
+
`- Reactor checked files: ${bundle.package_pin.checked_file_count}`,
|
|
182
|
+
`- Reactor imported entrypoints: ${bundle.tarball_smoke.imported_entrypoint_count}`,
|
|
183
|
+
`- Cradle package: ${bundle.cradle_tarball_smoke.package_name}@${bundle.cradle_tarball_smoke.version}`,
|
|
184
|
+
`- Cradle imported entrypoints: ${bundle.cradle_tarball_smoke.imported_entrypoint_count}`,
|
|
185
|
+
"",
|
|
186
|
+
"## Release Parity",
|
|
187
|
+
`- Eval result hash: \`${bundle.release_parity.eval_result_hash}\``,
|
|
188
|
+
`- Public projection hash: \`${bundle.release_parity.public_projection_hash}\``,
|
|
189
|
+
`- Represented cases: ${bundle.release_parity.represented_case_count}`,
|
|
190
|
+
`- Parity rows: ${bundle.release_parity.parity_ready_rows_run} ready, ${bundle.release_parity.parity_future_rows} future`,
|
|
191
|
+
`- Live model matrix: ${bundle.release_parity.model_matrix_status}`,
|
|
192
|
+
"",
|
|
193
|
+
"## Commands",
|
|
194
|
+
"| Command | Status | Summary | Tests |",
|
|
195
|
+
"| --- | --- | --- | --- |",
|
|
196
|
+
...commandRows.map((row) => `| ${row} |`),
|
|
197
|
+
"",
|
|
198
|
+
"## Deferred Rows",
|
|
199
|
+
"| Row | Status | Represented | Reason |",
|
|
200
|
+
"| --- | --- | --- | --- |",
|
|
201
|
+
...deferredRows.map((row) => `| ${row} |`),
|
|
202
|
+
"",
|
|
203
|
+
].join("\n");
|
|
204
|
+
}
|
|
205
|
+
exports.renderReleaseCandidateEvidenceBundleMarkdownV0 = renderR7ReleaseCandidateEvidenceBundleMarkdownV0;
|
|
206
|
+
function normalizeBuild(input) {
|
|
207
|
+
return Object.freeze({
|
|
208
|
+
branch: cleanText(input.branch, "build.branch"),
|
|
209
|
+
commit: assertGitCommit(input.commit, "build.commit"),
|
|
210
|
+
worktree_status: assertLiteral(input.worktree_status, "clean", "build.worktree_status"),
|
|
211
|
+
});
|
|
212
|
+
}
|
|
213
|
+
function normalizePackagePin(input) {
|
|
214
|
+
if (input.package_name !== "@openprose/reactor") {
|
|
215
|
+
throw new Error("package_pin.package_name must be @openprose/reactor");
|
|
216
|
+
}
|
|
217
|
+
if (input.version !== "0.1.0-rc.1") {
|
|
218
|
+
throw new Error("package_pin.version must be 0.1.0-rc.1");
|
|
219
|
+
}
|
|
220
|
+
if (input.consumer_name !== "@openprose/reactor-cradle") {
|
|
221
|
+
throw new Error("package_pin.consumer_name must be @openprose/reactor-cradle");
|
|
222
|
+
}
|
|
223
|
+
if (input.consumer_dependency !== "workspace:0.1.0-rc.1") {
|
|
224
|
+
throw new Error("package_pin.consumer_dependency must be workspace:0.1.0-rc.1");
|
|
225
|
+
}
|
|
226
|
+
const checkedFiles = normalizeCheckedFiles(input.checked_files);
|
|
227
|
+
return Object.freeze({
|
|
228
|
+
package_name: "@openprose/reactor",
|
|
229
|
+
version: "0.1.0-rc.1",
|
|
230
|
+
consumer_name: "@openprose/reactor-cradle",
|
|
231
|
+
consumer_dependency: "workspace:0.1.0-rc.1",
|
|
232
|
+
package_tree_sha256: assertHexSha256(input.package_tree_sha256, "package_pin.package_tree_sha256"),
|
|
233
|
+
checked_file_count: checkedFiles.length,
|
|
234
|
+
checked_files_hash: hashCanonicalValue(checkedFiles),
|
|
235
|
+
});
|
|
236
|
+
}
|
|
237
|
+
function normalizeTarballSmoke(input) {
|
|
238
|
+
if (input.package_name !== "@openprose/reactor") {
|
|
239
|
+
throw new Error("tarball_smoke.package_name must be @openprose/reactor");
|
|
240
|
+
}
|
|
241
|
+
if (input.version !== "0.1.0-rc.1") {
|
|
242
|
+
throw new Error("tarball_smoke.version must be 0.1.0-rc.1");
|
|
243
|
+
}
|
|
244
|
+
const imports = [...input.imported_entrypoints].sort((left, right) => left.localeCompare(right));
|
|
245
|
+
const expected = [...exports.R7_REACTOR_PUBLIC_IMPORT_SPECIFIERS_V0].sort((left, right) => left.localeCompare(right));
|
|
246
|
+
if (imports.length !== expected.length) {
|
|
247
|
+
throw new Error("tarball_smoke.imported_entrypoints must cover every public Reactor entrypoint");
|
|
248
|
+
}
|
|
249
|
+
for (let index = 0; index < expected.length; index += 1) {
|
|
250
|
+
if (imports[index] !== expected[index]) {
|
|
251
|
+
throw new Error(`tarball_smoke.imported_entrypoints mismatch at ${index}: expected ${expected[index]}, received ${imports[index] ?? "missing"}`);
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
return Object.freeze({
|
|
255
|
+
package_name: "@openprose/reactor",
|
|
256
|
+
version: "0.1.0-rc.1",
|
|
257
|
+
imported_entrypoint_count: imports.length,
|
|
258
|
+
imported_entrypoints: Object.freeze(imports),
|
|
259
|
+
});
|
|
260
|
+
}
|
|
261
|
+
function normalizeCradleTarballSmoke(input) {
|
|
262
|
+
if (input.package_name !== "@openprose/reactor-cradle") {
|
|
263
|
+
throw new Error("cradle_tarball_smoke.package_name must be @openprose/reactor-cradle");
|
|
264
|
+
}
|
|
265
|
+
if (input.version !== "0.1.0-rc.1") {
|
|
266
|
+
throw new Error("cradle_tarball_smoke.version must be 0.1.0-rc.1");
|
|
267
|
+
}
|
|
268
|
+
const imports = [...input.imported_entrypoints].sort((left, right) => left.localeCompare(right));
|
|
269
|
+
const expected = [...exports.R7_CRADLE_PUBLIC_IMPORT_SPECIFIERS_V0].sort((left, right) => left.localeCompare(right));
|
|
270
|
+
if (imports.length !== expected.length) {
|
|
271
|
+
throw new Error("cradle_tarball_smoke.imported_entrypoints must cover every public Cradle entrypoint");
|
|
272
|
+
}
|
|
273
|
+
for (let index = 0; index < expected.length; index += 1) {
|
|
274
|
+
if (imports[index] !== expected[index]) {
|
|
275
|
+
throw new Error(`cradle_tarball_smoke.imported_entrypoints mismatch at ${index}: expected ${expected[index]}, received ${imports[index] ?? "missing"}`);
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
return Object.freeze({
|
|
279
|
+
package_name: "@openprose/reactor-cradle",
|
|
280
|
+
version: "0.1.0-rc.1",
|
|
281
|
+
imported_entrypoint_count: imports.length,
|
|
282
|
+
imported_entrypoints: Object.freeze(imports),
|
|
283
|
+
});
|
|
284
|
+
}
|
|
285
|
+
function normalizeCommands(input) {
|
|
286
|
+
if (input.length === 0) {
|
|
287
|
+
throw new Error("commands must include release candidate evidence");
|
|
288
|
+
}
|
|
289
|
+
const byId = new Map();
|
|
290
|
+
for (const command of input) {
|
|
291
|
+
if (!exports.R7_REQUIRED_COMMAND_IDS_V0.includes(command.command_id)) {
|
|
292
|
+
throw new Error(`unknown release candidate command ${command.command_id}`);
|
|
293
|
+
}
|
|
294
|
+
if (byId.has(command.command_id)) {
|
|
295
|
+
throw new Error(`duplicate release candidate command ${command.command_id}`);
|
|
296
|
+
}
|
|
297
|
+
if (command.status !== "pass") {
|
|
298
|
+
throw new Error(`release candidate command ${command.command_id} must pass`);
|
|
299
|
+
}
|
|
300
|
+
const summary = cleanEvidenceText(command.summary, `commands.${command.command_id}.summary`);
|
|
301
|
+
const tests = command.tests_passed === undefined && command.tests_total === undefined
|
|
302
|
+
? {}
|
|
303
|
+
: normalizeTestCounts(command);
|
|
304
|
+
byId.set(command.command_id, Object.freeze({
|
|
305
|
+
command_id: command.command_id,
|
|
306
|
+
status: "pass",
|
|
307
|
+
summary,
|
|
308
|
+
...tests,
|
|
309
|
+
}));
|
|
310
|
+
}
|
|
311
|
+
const missing = exports.R7_REQUIRED_COMMAND_IDS_V0.filter((commandId) => !byId.has(commandId));
|
|
312
|
+
if (missing.length > 0) {
|
|
313
|
+
throw new Error(`commands missing required evidence: ${missing.join(", ")}`);
|
|
314
|
+
}
|
|
315
|
+
return Object.freeze(exports.R7_REQUIRED_COMMAND_IDS_V0.map((commandId) => {
|
|
316
|
+
const item = byId.get(commandId);
|
|
317
|
+
if (item === undefined) {
|
|
318
|
+
throw new Error(`commands missing required evidence: ${commandId}`);
|
|
319
|
+
}
|
|
320
|
+
return item;
|
|
321
|
+
}));
|
|
322
|
+
}
|
|
323
|
+
function normalizeReleaseParity(input) {
|
|
324
|
+
const expectedProof = (0, release_parity_1.runRecordedR6ReleaseParityProofV0)();
|
|
325
|
+
assertCanonicalEqual(input.proof, expectedProof, "release_parity.proof must match the deterministic R6 proof");
|
|
326
|
+
const expectedEval = (0, release_parity_1.buildR6ReleaseParityEvalResultV0)(expectedProof);
|
|
327
|
+
assertCanonicalEqual(input.eval_result, expectedEval, "release_parity.eval_result must match the deterministic R6 eval result");
|
|
328
|
+
const expectedProjection = (0, eval_1.projectCradleEvalResultV0)(expectedEval, "public");
|
|
329
|
+
if (input.public_projection.source_content_hash !== input.eval_result.content_hash) {
|
|
330
|
+
throw new Error("release_parity.public_projection.source_content_hash must match eval_result.content_hash");
|
|
331
|
+
}
|
|
332
|
+
assertCanonicalEqual(input.public_projection, expectedProjection, "release_parity.public_projection must match the deterministic public projection");
|
|
333
|
+
const expectedEvalReport = (0, eval_1.renderCradleEvalReportMarkdownV0)(expectedEval);
|
|
334
|
+
const expectedProjectionReport = (0, eval_1.renderCradleEvalProjectionReportMarkdownV0)(expectedProjection);
|
|
335
|
+
if (input.eval_report_markdown !== expectedEvalReport) {
|
|
336
|
+
throw new Error("release_parity.eval_report_markdown does not match the eval renderer output");
|
|
337
|
+
}
|
|
338
|
+
if (input.public_projection_report_markdown !== expectedProjectionReport) {
|
|
339
|
+
throw new Error("release_parity.public_projection_report_markdown does not match the projection renderer output");
|
|
340
|
+
}
|
|
341
|
+
if (input.eval_result.model_matrix.status !== "not-run") {
|
|
342
|
+
throw new Error("release parity eval model matrix must be not-run");
|
|
343
|
+
}
|
|
344
|
+
if (!input.proof.suite.deferred_cases.some((item) => item.case_id === "down-after-budget-exhaustion")) {
|
|
345
|
+
throw new Error("release parity proof must defer down-after-budget-exhaustion");
|
|
346
|
+
}
|
|
347
|
+
return Object.freeze({
|
|
348
|
+
proof_hash: hashCanonicalValue(input.proof),
|
|
349
|
+
replay_snapshot_hash: input.proof.replay_snapshot.content_hash,
|
|
350
|
+
eval_result_hash: input.eval_result.content_hash,
|
|
351
|
+
public_projection_hash: input.public_projection.content_hash,
|
|
352
|
+
eval_report_hash: hashText(input.eval_report_markdown),
|
|
353
|
+
public_projection_report_hash: hashText(input.public_projection_report_markdown),
|
|
354
|
+
represented_case_count: input.proof.suite.cases.length,
|
|
355
|
+
deferred_case_ids: Object.freeze(input.proof.suite.deferred_cases
|
|
356
|
+
.map((item) => item.case_id)
|
|
357
|
+
.sort((left, right) => left.localeCompare(right))),
|
|
358
|
+
model_matrix_status: "not-run",
|
|
359
|
+
parity_ready_rows_run: input.proof.parity.ready_rows_run,
|
|
360
|
+
parity_future_rows: input.proof.parity.future_rows,
|
|
361
|
+
});
|
|
362
|
+
}
|
|
363
|
+
function normalizeDeferredRows(input) {
|
|
364
|
+
if (input.length === 0) {
|
|
365
|
+
throw new Error("deferred_rows must include explicit release candidate gaps");
|
|
366
|
+
}
|
|
367
|
+
const byId = new Map();
|
|
368
|
+
for (const row of input) {
|
|
369
|
+
if (!exports.R7_REQUIRED_DEFERRED_ROW_IDS_V0.includes(row.row_id)) {
|
|
370
|
+
throw new Error(`unknown release candidate deferred row ${row.row_id}`);
|
|
371
|
+
}
|
|
372
|
+
if (byId.has(row.row_id)) {
|
|
373
|
+
throw new Error(`duplicate release candidate deferred row ${row.row_id}`);
|
|
374
|
+
}
|
|
375
|
+
if (row.represented !== false) {
|
|
376
|
+
throw new Error(`deferred row ${row.row_id} must not be marked represented`);
|
|
377
|
+
}
|
|
378
|
+
assertExpectedDeferredStatus(row);
|
|
379
|
+
byId.set(row.row_id, Object.freeze({
|
|
380
|
+
row_id: row.row_id,
|
|
381
|
+
status: row.status,
|
|
382
|
+
represented: false,
|
|
383
|
+
reason: cleanEvidenceText(row.reason, `deferred_rows.${row.row_id}.reason`),
|
|
384
|
+
}));
|
|
385
|
+
}
|
|
386
|
+
const missing = exports.R7_REQUIRED_DEFERRED_ROW_IDS_V0.filter((rowId) => !byId.has(rowId));
|
|
387
|
+
if (missing.length > 0) {
|
|
388
|
+
throw new Error(`deferred_rows missing required row(s): ${missing.join(", ")}`);
|
|
389
|
+
}
|
|
390
|
+
return Object.freeze(exports.R7_REQUIRED_DEFERRED_ROW_IDS_V0.map((rowId) => {
|
|
391
|
+
const item = byId.get(rowId);
|
|
392
|
+
if (item === undefined) {
|
|
393
|
+
throw new Error(`deferred_rows missing required row: ${rowId}`);
|
|
394
|
+
}
|
|
395
|
+
return item;
|
|
396
|
+
}));
|
|
397
|
+
}
|
|
398
|
+
function assertExpectedDeferredStatus(row) {
|
|
399
|
+
const expected = row.row_id === "postgres-parity"
|
|
400
|
+
? "future"
|
|
401
|
+
: row.row_id === "live-provider-model-matrix"
|
|
402
|
+
? "not-run"
|
|
403
|
+
: "deferred";
|
|
404
|
+
if (row.status !== expected) {
|
|
405
|
+
throw new Error(`deferred row ${row.row_id} must have status ${expected}`);
|
|
406
|
+
}
|
|
407
|
+
}
|
|
408
|
+
function normalizeCheckedFiles(files) {
|
|
409
|
+
if (files.length === 0) {
|
|
410
|
+
throw new Error("package_pin.checked_files must not be empty");
|
|
411
|
+
}
|
|
412
|
+
const seen = new Set();
|
|
413
|
+
const normalized = files.map((file, index) => {
|
|
414
|
+
const value = cleanText(file, `package_pin.checked_files[${index}]`);
|
|
415
|
+
if (value.startsWith("/") || value.startsWith("../") || value.includes("/../")) {
|
|
416
|
+
throw new Error(`package_pin.checked_files[${index}] must be package-relative`);
|
|
417
|
+
}
|
|
418
|
+
if (seen.has(value)) {
|
|
419
|
+
throw new Error(`package_pin.checked_files contains duplicate file ${value}`);
|
|
420
|
+
}
|
|
421
|
+
seen.add(value);
|
|
422
|
+
return value;
|
|
423
|
+
});
|
|
424
|
+
return Object.freeze(normalized.sort((left, right) => left.localeCompare(right)));
|
|
425
|
+
}
|
|
426
|
+
function normalizeTestCounts(command) {
|
|
427
|
+
if (command.tests_passed === undefined || command.tests_total === undefined) {
|
|
428
|
+
throw new Error(`command ${command.command_id} test counts require both passed and total`);
|
|
429
|
+
}
|
|
430
|
+
if (!Number.isSafeInteger(command.tests_passed) ||
|
|
431
|
+
!Number.isSafeInteger(command.tests_total) ||
|
|
432
|
+
command.tests_passed < 0 ||
|
|
433
|
+
command.tests_total <= 0 ||
|
|
434
|
+
command.tests_passed !== command.tests_total) {
|
|
435
|
+
throw new Error(`command ${command.command_id} test counts must be equal passing safe integers`);
|
|
436
|
+
}
|
|
437
|
+
return {
|
|
438
|
+
tests_passed: command.tests_passed,
|
|
439
|
+
tests_total: command.tests_total,
|
|
440
|
+
};
|
|
441
|
+
}
|
|
442
|
+
function assertCanonicalEqual(left, right, message) {
|
|
443
|
+
if (renderCanonical(left) !== renderCanonical(right)) {
|
|
444
|
+
throw new Error(message);
|
|
445
|
+
}
|
|
446
|
+
}
|
|
447
|
+
function cleanText(value, label) {
|
|
448
|
+
if (typeof value !== "string" || value.length === 0) {
|
|
449
|
+
throw new Error(`${label} must be a non-empty string`);
|
|
450
|
+
}
|
|
451
|
+
if (SECRET_SHAPED_PATTERNS.some((pattern) => pattern.test(value))) {
|
|
452
|
+
throw new Error(`${label} must not contain secret-shaped text`);
|
|
453
|
+
}
|
|
454
|
+
return value;
|
|
455
|
+
}
|
|
456
|
+
function cleanEvidenceText(value, label) {
|
|
457
|
+
const text = cleanText(value, label);
|
|
458
|
+
if (text.includes("\n") || text.includes("\r")) {
|
|
459
|
+
throw new Error(`${label} must be a summary, not raw command output`);
|
|
460
|
+
}
|
|
461
|
+
if (PATH_SHAPED_PATTERN.test(text)) {
|
|
462
|
+
throw new Error(`${label} must not include local paths or tarball paths`);
|
|
463
|
+
}
|
|
464
|
+
if (FORBIDDEN_RUNTIME_TEXT_PATTERN.test(text)) {
|
|
465
|
+
throw new Error(`${label} must not include raw runtime/private evidence`);
|
|
466
|
+
}
|
|
467
|
+
return text;
|
|
468
|
+
}
|
|
469
|
+
function assertLiteral(value, expected, label) {
|
|
470
|
+
if (value !== expected) {
|
|
471
|
+
throw new Error(`${label} must be ${expected}`);
|
|
472
|
+
}
|
|
473
|
+
return expected;
|
|
474
|
+
}
|
|
475
|
+
function assertIsoInstant(value, label) {
|
|
476
|
+
if (!ISO_INSTANT_PATTERN.test(value)) {
|
|
477
|
+
throw new Error(`${label} must be an ISO instant string`);
|
|
478
|
+
}
|
|
479
|
+
return value;
|
|
480
|
+
}
|
|
481
|
+
function assertGitCommit(value, label) {
|
|
482
|
+
if (!GIT_COMMIT_PATTERN.test(value)) {
|
|
483
|
+
throw new Error(`${label} must be a 40-character lowercase git commit SHA`);
|
|
484
|
+
}
|
|
485
|
+
return value;
|
|
486
|
+
}
|
|
487
|
+
function assertHexSha256(value, label) {
|
|
488
|
+
if (!HEX_SHA256_PATTERN.test(value)) {
|
|
489
|
+
throw new Error(`${label} must be a lowercase 64-character SHA-256 hex string`);
|
|
490
|
+
}
|
|
491
|
+
return value;
|
|
492
|
+
}
|
|
493
|
+
function assertContentHash(value, label) {
|
|
494
|
+
if (!CONTENT_HASH_PATTERN.test(value)) {
|
|
495
|
+
throw new Error(`${label} must be a sha256 content hash`);
|
|
496
|
+
}
|
|
497
|
+
}
|
|
498
|
+
function hashText(value) {
|
|
499
|
+
return `sha256:${(0, node_crypto_1.createHash)("sha256").update(value).digest("hex")}`;
|
|
500
|
+
}
|
|
501
|
+
function hashCanonicalValue(value) {
|
|
502
|
+
return hashText(renderCanonical(value));
|
|
503
|
+
}
|
|
504
|
+
function markdownTableCell(value) {
|
|
505
|
+
return markdownInline(value).replace(/\|/g, "\\|").replace(/\n/g, "<br>");
|
|
506
|
+
}
|
|
507
|
+
function markdownInline(value) {
|
|
508
|
+
return value.replace(/`/g, "\\`");
|
|
509
|
+
}
|
|
510
|
+
function renderCanonical(value) {
|
|
511
|
+
if (value === null) {
|
|
512
|
+
return "null";
|
|
513
|
+
}
|
|
514
|
+
switch (typeof value) {
|
|
515
|
+
case "boolean":
|
|
516
|
+
return value ? "true" : "false";
|
|
517
|
+
case "number":
|
|
518
|
+
if (!Number.isFinite(value)) {
|
|
519
|
+
throw new TypeError("Cannot canonicalize non-finite numbers");
|
|
520
|
+
}
|
|
521
|
+
return JSON.stringify(value);
|
|
522
|
+
case "string":
|
|
523
|
+
return JSON.stringify(value);
|
|
524
|
+
case "object":
|
|
525
|
+
if (Array.isArray(value)) {
|
|
526
|
+
return `[${value.map((item) => renderCanonical(item)).join(",")}]`;
|
|
527
|
+
}
|
|
528
|
+
if (!isRecord(value)) {
|
|
529
|
+
throw new TypeError("Cannot canonicalize non-plain objects");
|
|
530
|
+
}
|
|
531
|
+
return renderCanonicalObject(value);
|
|
532
|
+
case "undefined":
|
|
533
|
+
case "bigint":
|
|
534
|
+
case "function":
|
|
535
|
+
case "symbol":
|
|
536
|
+
throw new TypeError(`Cannot canonicalize ${typeof value}`);
|
|
537
|
+
}
|
|
538
|
+
throw new TypeError("Cannot canonicalize unknown value");
|
|
539
|
+
}
|
|
540
|
+
function renderCanonicalObject(value) {
|
|
541
|
+
const fields = [];
|
|
542
|
+
for (const key of Object.keys(value).sort()) {
|
|
543
|
+
const item = value[key];
|
|
544
|
+
if (item === undefined) {
|
|
545
|
+
throw new TypeError(`Cannot canonicalize undefined field ${key}`);
|
|
546
|
+
}
|
|
547
|
+
fields.push(`${JSON.stringify(key)}:${renderCanonical(item)}`);
|
|
548
|
+
}
|
|
549
|
+
return `{${fields.join(",")}}`;
|
|
550
|
+
}
|
|
551
|
+
function isRecord(value) {
|
|
552
|
+
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
553
|
+
}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import type { ContentHashV0, ReceiptV0 } from "@openprose/reactor/receipt";
|
|
2
|
+
import type { ReactorRegistrySnapshotV0 } from "@openprose/reactor/sdk";
|
|
3
|
+
import type { CradleAssertionResultV0 } from "../assert";
|
|
4
|
+
import { type CradleEvalResultV0 } from "../eval";
|
|
5
|
+
import { type ReplayComparableScenarioOutputInputV0, type ReplayComparableSnapshotV0, type ReplayParityMatrixResultV0 } from "../replay/parity";
|
|
6
|
+
export declare const R6_RELEASE_PARITY_SUITE_SCHEMA_V0: "openprose.reactor-cradle.r6-release-parity-suite";
|
|
7
|
+
export declare const R6_RELEASE_PARITY_SUITE_VERSION_V0: 0;
|
|
8
|
+
export declare const R6_RELEASE_PARITY_PROOF_SCHEMA_V0: "openprose.reactor-cradle.r6-release-parity-proof";
|
|
9
|
+
export declare const R6_RELEASE_PARITY_PROOF_VERSION_V0: 0;
|
|
10
|
+
export declare const R6_RELEASE_PARITY_CASE_IDS_V0: readonly ["healthy-quiet", "drifting-schedules-fulfillment", "blocked-human-review", "forecast-pulls-judge-earlier", "hysteresis-prevents-flip-flop", "duplicate-event-idempotency", "stale-status-fencing", "contract-revision-fencing", "policy-recompile-byte-identical-registry", "memoized-verdict-zero-fresh-tokens"];
|
|
11
|
+
export declare const R6_RELEASE_PARITY_DEFERRED_CASE_IDS_V0: readonly ["down-after-budget-exhaustion"];
|
|
12
|
+
export type R6ReleaseParityCaseIdV0 = (typeof R6_RELEASE_PARITY_CASE_IDS_V0)[number];
|
|
13
|
+
export type R6ReleaseParityDeferredCaseIdV0 = (typeof R6_RELEASE_PARITY_DEFERRED_CASE_IDS_V0)[number];
|
|
14
|
+
export interface RecordedR6ReleaseParitySuiteV0 {
|
|
15
|
+
readonly schema: typeof R6_RELEASE_PARITY_SUITE_SCHEMA_V0;
|
|
16
|
+
readonly v: typeof R6_RELEASE_PARITY_SUITE_VERSION_V0;
|
|
17
|
+
readonly suite_id: string;
|
|
18
|
+
readonly generated_at: string;
|
|
19
|
+
readonly as_of: string;
|
|
20
|
+
readonly initial_instant: string;
|
|
21
|
+
readonly final_instant: string;
|
|
22
|
+
readonly world_profile: "recorded-release-parity";
|
|
23
|
+
readonly cassette_path: "recorded://openprose/reactor-cradle/r6-release-parity-v0";
|
|
24
|
+
readonly registry: ReactorRegistrySnapshotV0;
|
|
25
|
+
readonly registry_content_hash: ContentHashV0;
|
|
26
|
+
readonly cases: readonly RecordedR6ReleaseParityCaseV0[];
|
|
27
|
+
readonly deferred_cases: readonly DeferredR6ReleaseParityCaseV0[];
|
|
28
|
+
}
|
|
29
|
+
export interface RecordedR6ReleaseParityCaseV0 {
|
|
30
|
+
readonly case_id: R6ReleaseParityCaseIdV0;
|
|
31
|
+
readonly title: string;
|
|
32
|
+
readonly represented_by: string;
|
|
33
|
+
readonly receipts: readonly ReceiptV0[];
|
|
34
|
+
readonly decisions: readonly RecordedR6ReleaseParityDecisionV0[];
|
|
35
|
+
readonly trace: readonly RecordedR6ReleaseParityTraceEntryV0[];
|
|
36
|
+
readonly expected_relationships: readonly string[];
|
|
37
|
+
readonly evidence_hashes: readonly ContentHashV0[];
|
|
38
|
+
readonly notes: readonly string[];
|
|
39
|
+
}
|
|
40
|
+
export interface RecordedR6ReleaseParityDecisionV0 {
|
|
41
|
+
readonly decision_id: string;
|
|
42
|
+
readonly case_id: R6ReleaseParityCaseIdV0;
|
|
43
|
+
readonly as_of: string;
|
|
44
|
+
readonly outcome: string;
|
|
45
|
+
readonly reason: string;
|
|
46
|
+
readonly receipt_hashes: readonly ContentHashV0[];
|
|
47
|
+
readonly evidence_hashes: readonly ContentHashV0[];
|
|
48
|
+
readonly token_summary: {
|
|
49
|
+
readonly fresh: number;
|
|
50
|
+
readonly reused: number;
|
|
51
|
+
};
|
|
52
|
+
readonly guardrails: readonly string[];
|
|
53
|
+
}
|
|
54
|
+
export interface RecordedR6ReleaseParityTraceEntryV0 {
|
|
55
|
+
readonly as_of: string;
|
|
56
|
+
readonly event: string;
|
|
57
|
+
readonly observed: Readonly<Record<string, unknown>>;
|
|
58
|
+
}
|
|
59
|
+
export interface DeferredR6ReleaseParityCaseV0 {
|
|
60
|
+
readonly case_id: R6ReleaseParityDeferredCaseIdV0;
|
|
61
|
+
readonly reason: string;
|
|
62
|
+
readonly missing_primitives: readonly string[];
|
|
63
|
+
readonly boundary: "not-represented-in-r6";
|
|
64
|
+
}
|
|
65
|
+
export interface RecordedR6ReleaseParityProofV0 {
|
|
66
|
+
readonly schema: typeof R6_RELEASE_PARITY_PROOF_SCHEMA_V0;
|
|
67
|
+
readonly v: typeof R6_RELEASE_PARITY_PROOF_VERSION_V0;
|
|
68
|
+
readonly suite: RecordedR6ReleaseParitySuiteV0;
|
|
69
|
+
readonly replay_snapshot: ReplayComparableSnapshotV0;
|
|
70
|
+
readonly parity: ReplayParityMatrixResultV0;
|
|
71
|
+
readonly assertions: readonly CradleAssertionResultV0[];
|
|
72
|
+
}
|
|
73
|
+
export declare function makeRecordedR6ReleaseParitySuiteV0(): RecordedR6ReleaseParitySuiteV0;
|
|
74
|
+
export declare function makeR6ReleaseParityReplayInputV0(suite?: RecordedR6ReleaseParitySuiteV0): ReplayComparableScenarioOutputInputV0;
|
|
75
|
+
export declare function runRecordedR6ReleaseParityProofV0(suite?: RecordedR6ReleaseParitySuiteV0): RecordedR6ReleaseParityProofV0;
|
|
76
|
+
export declare function buildR6ReleaseParityEvalResultV0(proof?: RecordedR6ReleaseParityProofV0): CradleEvalResultV0;
|
|
77
|
+
export declare const buildRecordedR6ReleaseParityEvalResultV0: typeof buildR6ReleaseParityEvalResultV0;
|
|
78
|
+
export declare function assertRecordedR6ReleaseParitySuiteV0(suite: RecordedR6ReleaseParitySuiteV0): void;
|
|
79
|
+
export declare function assertR6ReleaseParityCaseV0(item: RecordedR6ReleaseParityCaseV0): CradleAssertionResultV0;
|
|
80
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/release-parity/index.ts"],"names":[],"mappings":"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"}
|