@virune/compiler 1.1.0-rc.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/LICENSE +201 -0
- package/NOTICE +2 -0
- package/dist/src/analysis/control-flow.d.ts +9 -0
- package/dist/src/analysis/control-flow.d.ts.map +1 -0
- package/dist/src/analysis/control-flow.js +47 -0
- package/dist/src/analysis/control-flow.js.map +1 -0
- package/dist/src/ast/nodes.d.ts +495 -0
- package/dist/src/ast/nodes.d.ts.map +1 -0
- package/dist/src/ast/nodes.js +2 -0
- package/dist/src/ast/nodes.js.map +1 -0
- package/dist/src/binder/symbols.d.ts +36 -0
- package/dist/src/binder/symbols.d.ts.map +1 -0
- package/dist/src/binder/symbols.js +30 -0
- package/dist/src/binder/symbols.js.map +1 -0
- package/dist/src/checker/builtin-members.d.ts +4 -0
- package/dist/src/checker/builtin-members.d.ts.map +1 -0
- package/dist/src/checker/builtin-members.js +175 -0
- package/dist/src/checker/builtin-members.js.map +1 -0
- package/dist/src/checker/checker.d.ts +148 -0
- package/dist/src/checker/checker.d.ts.map +1 -0
- package/dist/src/checker/checker.js +2985 -0
- package/dist/src/checker/checker.js.map +1 -0
- package/dist/src/checker/effect-registry.d.ts +14 -0
- package/dist/src/checker/effect-registry.d.ts.map +1 -0
- package/dist/src/checker/effect-registry.js +11 -0
- package/dist/src/checker/effect-registry.js.map +1 -0
- package/dist/src/checker/type-operations.d.ts +27 -0
- package/dist/src/checker/type-operations.d.ts.map +1 -0
- package/dist/src/checker/type-operations.js +268 -0
- package/dist/src/checker/type-operations.js.map +1 -0
- package/dist/src/codegen/emitter.d.ts +83 -0
- package/dist/src/codegen/emitter.d.ts.map +1 -0
- package/dist/src/codegen/emitter.js +1029 -0
- package/dist/src/codegen/emitter.js.map +1 -0
- package/dist/src/codegen/helpers.d.ts +7 -0
- package/dist/src/codegen/helpers.d.ts.map +1 -0
- package/dist/src/codegen/helpers.js +48 -0
- package/dist/src/codegen/helpers.js.map +1 -0
- package/dist/src/codegen/runtime-imports.d.ts +6 -0
- package/dist/src/codegen/runtime-imports.d.ts.map +1 -0
- package/dist/src/codegen/runtime-imports.js +45 -0
- package/dist/src/codegen/runtime-imports.js.map +1 -0
- package/dist/src/codegen/writer.d.ts +14 -0
- package/dist/src/codegen/writer.d.ts.map +1 -0
- package/dist/src/codegen/writer.js +56 -0
- package/dist/src/codegen/writer.js.map +1 -0
- package/dist/src/compiler.d.ts +24 -0
- package/dist/src/compiler.d.ts.map +1 -0
- package/dist/src/compiler.js +97 -0
- package/dist/src/compiler.js.map +1 -0
- package/dist/src/diagnostics/codes.d.ts +18 -0
- package/dist/src/diagnostics/codes.d.ts.map +1 -0
- package/dist/src/diagnostics/codes.js +43 -0
- package/dist/src/diagnostics/codes.js.map +1 -0
- package/dist/src/diagnostics/diagnostic.d.ts +41 -0
- package/dist/src/diagnostics/diagnostic.d.ts.map +1 -0
- package/dist/src/diagnostics/diagnostic.js +50 -0
- package/dist/src/diagnostics/diagnostic.js.map +1 -0
- package/dist/src/diagnostics/render.d.ts +44 -0
- package/dist/src/diagnostics/render.d.ts.map +1 -0
- package/dist/src/diagnostics/render.js +44 -0
- package/dist/src/diagnostics/render.js.map +1 -0
- package/dist/src/experimental-api.d.ts +19 -0
- package/dist/src/experimental-api.d.ts.map +1 -0
- package/dist/src/experimental-api.js +17 -0
- package/dist/src/experimental-api.js.map +1 -0
- package/dist/src/hir/lower.d.ts +6 -0
- package/dist/src/hir/lower.d.ts.map +1 -0
- package/dist/src/hir/lower.js +124 -0
- package/dist/src/hir/lower.js.map +1 -0
- package/dist/src/hir/nodes.d.ts +12 -0
- package/dist/src/hir/nodes.d.ts.map +1 -0
- package/dist/src/hir/nodes.js +2 -0
- package/dist/src/hir/nodes.js.map +1 -0
- package/dist/src/index.d.ts +2 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +2 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/interop/checked-api.d.ts +21 -0
- package/dist/src/interop/checked-api.d.ts.map +1 -0
- package/dist/src/interop/checked-api.js +46 -0
- package/dist/src/interop/checked-api.js.map +1 -0
- package/dist/src/interop/decision.d.ts +24 -0
- package/dist/src/interop/decision.d.ts.map +1 -0
- package/dist/src/interop/decision.js +96 -0
- package/dist/src/interop/decision.js.map +1 -0
- package/dist/src/interop/frontend-component-emission.d.ts +17 -0
- package/dist/src/interop/frontend-component-emission.d.ts.map +1 -0
- package/dist/src/interop/frontend-component-emission.js +271 -0
- package/dist/src/interop/frontend-component-emission.js.map +1 -0
- package/dist/src/interop/jsx-view-validation.d.ts +20 -0
- package/dist/src/interop/jsx-view-validation.d.ts.map +1 -0
- package/dist/src/interop/jsx-view-validation.js +847 -0
- package/dist/src/interop/jsx-view-validation.js.map +1 -0
- package/dist/src/interop/operation-api.d.ts +32 -0
- package/dist/src/interop/operation-api.d.ts.map +1 -0
- package/dist/src/interop/operation-api.js +61 -0
- package/dist/src/interop/operation-api.js.map +1 -0
- package/dist/src/interop/operation.d.ts +136 -0
- package/dist/src/interop/operation.d.ts.map +1 -0
- package/dist/src/interop/operation.js +575 -0
- package/dist/src/interop/operation.js.map +1 -0
- package/dist/src/interop/repetition-host-locator.d.ts +25 -0
- package/dist/src/interop/repetition-host-locator.d.ts.map +1 -0
- package/dist/src/interop/repetition-host-locator.js +61 -0
- package/dist/src/interop/repetition-host-locator.js.map +1 -0
- package/dist/src/interop/repetition-host-usage-validation.d.ts +11 -0
- package/dist/src/interop/repetition-host-usage-validation.d.ts.map +1 -0
- package/dist/src/interop/repetition-host-usage-validation.js +89 -0
- package/dist/src/interop/repetition-host-usage-validation.js.map +1 -0
- package/dist/src/interop/types.d.ts +365 -0
- package/dist/src/interop/types.d.ts.map +1 -0
- package/dist/src/interop/types.js +2 -0
- package/dist/src/interop/types.js.map +1 -0
- package/dist/src/mir/lower.d.ts +4 -0
- package/dist/src/mir/lower.d.ts.map +1 -0
- package/dist/src/mir/lower.js +131 -0
- package/dist/src/mir/lower.js.map +1 -0
- package/dist/src/mir/nodes.d.ts +36 -0
- package/dist/src/mir/nodes.d.ts.map +1 -0
- package/dist/src/mir/nodes.js +2 -0
- package/dist/src/mir/nodes.js.map +1 -0
- package/dist/src/project/incremental.d.ts +9 -0
- package/dist/src/project/incremental.d.ts.map +1 -0
- package/dist/src/project/incremental.js +15 -0
- package/dist/src/project/incremental.js.map +1 -0
- package/dist/src/project/project.d.ts +98 -0
- package/dist/src/project/project.d.ts.map +1 -0
- package/dist/src/project/project.js +884 -0
- package/dist/src/project/project.js.map +1 -0
- package/dist/src/public-api.d.ts +45 -0
- package/dist/src/public-api.d.ts.map +1 -0
- package/dist/src/public-api.js +37 -0
- package/dist/src/public-api.js.map +1 -0
- package/dist/src/reference/evaluator.d.ts +13 -0
- package/dist/src/reference/evaluator.d.ts.map +1 -0
- package/dist/src/reference/evaluator.js +304 -0
- package/dist/src/reference/evaluator.js.map +1 -0
- package/dist/src/selfhost/bootstrap-artifact-normalizer.d.ts +65 -0
- package/dist/src/selfhost/bootstrap-artifact-normalizer.d.ts.map +1 -0
- package/dist/src/selfhost/bootstrap-artifact-normalizer.js +226 -0
- package/dist/src/selfhost/bootstrap-artifact-normalizer.js.map +1 -0
- package/dist/src/selfhost/bootstrap-artifact-snapshot.d.ts +23 -0
- package/dist/src/selfhost/bootstrap-artifact-snapshot.d.ts.map +1 -0
- package/dist/src/selfhost/bootstrap-artifact-snapshot.js +122 -0
- package/dist/src/selfhost/bootstrap-artifact-snapshot.js.map +1 -0
- package/dist/src/selfhost/bootstrap-compiler-selection.d.ts +36 -0
- package/dist/src/selfhost/bootstrap-compiler-selection.d.ts.map +1 -0
- package/dist/src/selfhost/bootstrap-compiler-selection.js +52 -0
- package/dist/src/selfhost/bootstrap-compiler-selection.js.map +1 -0
- package/dist/src/selfhost/bootstrap-execution-probe.d.ts +42 -0
- package/dist/src/selfhost/bootstrap-execution-probe.d.ts.map +1 -0
- package/dist/src/selfhost/bootstrap-execution-probe.js +115 -0
- package/dist/src/selfhost/bootstrap-execution-probe.js.map +1 -0
- package/dist/src/selfhost/bootstrap-rollback-decision.d.ts +40 -0
- package/dist/src/selfhost/bootstrap-rollback-decision.d.ts.map +1 -0
- package/dist/src/selfhost/bootstrap-rollback-decision.js +144 -0
- package/dist/src/selfhost/bootstrap-rollback-decision.js.map +1 -0
- package/dist/src/selfhost/bootstrap-shadow-history.d.ts +49 -0
- package/dist/src/selfhost/bootstrap-shadow-history.d.ts.map +1 -0
- package/dist/src/selfhost/bootstrap-shadow-history.js +348 -0
- package/dist/src/selfhost/bootstrap-shadow-history.js.map +1 -0
- package/dist/src/selfhost/bootstrap-shadow-report.d.ts +43 -0
- package/dist/src/selfhost/bootstrap-shadow-report.d.ts.map +1 -0
- package/dist/src/selfhost/bootstrap-shadow-report.js +94 -0
- package/dist/src/selfhost/bootstrap-shadow-report.js.map +1 -0
- package/dist/src/selfhost/bootstrap-stage-executor.d.ts +53 -0
- package/dist/src/selfhost/bootstrap-stage-executor.d.ts.map +1 -0
- package/dist/src/selfhost/bootstrap-stage-executor.js +159 -0
- package/dist/src/selfhost/bootstrap-stage-executor.js.map +1 -0
- package/dist/src/selfhost/bootstrap-stage-loader.d.ts +14 -0
- package/dist/src/selfhost/bootstrap-stage-loader.d.ts.map +1 -0
- package/dist/src/selfhost/bootstrap-stage-loader.js +112 -0
- package/dist/src/selfhost/bootstrap-stage-loader.js.map +1 -0
- package/dist/src/selfhost/bootstrap-stage-pipeline.d.ts +8 -0
- package/dist/src/selfhost/bootstrap-stage-pipeline.d.ts.map +1 -0
- package/dist/src/selfhost/bootstrap-stage-pipeline.js +85 -0
- package/dist/src/selfhost/bootstrap-stage-pipeline.js.map +1 -0
- package/dist/src/selfhost/bootstrap-stage-runner.d.ts +47 -0
- package/dist/src/selfhost/bootstrap-stage-runner.d.ts.map +1 -0
- package/dist/src/selfhost/bootstrap-stage-runner.js +106 -0
- package/dist/src/selfhost/bootstrap-stage-runner.js.map +1 -0
- package/dist/src/selfhost/clean-bootstrap-evidence.d.ts +83 -0
- package/dist/src/selfhost/clean-bootstrap-evidence.d.ts.map +1 -0
- package/dist/src/selfhost/clean-bootstrap-evidence.js +233 -0
- package/dist/src/selfhost/clean-bootstrap-evidence.js.map +1 -0
- package/dist/src/selfhost/compiler-facade.d.ts +33 -0
- package/dist/src/selfhost/compiler-facade.d.ts.map +1 -0
- package/dist/src/selfhost/compiler-facade.js +65 -0
- package/dist/src/selfhost/compiler-facade.js.map +1 -0
- package/dist/src/selfhost/contract.d.ts +151 -0
- package/dist/src/selfhost/contract.d.ts.map +1 -0
- package/dist/src/selfhost/contract.js +335 -0
- package/dist/src/selfhost/contract.js.map +1 -0
- package/dist/src/selfhost/differential-artifacts.d.ts +8 -0
- package/dist/src/selfhost/differential-artifacts.d.ts.map +1 -0
- package/dist/src/selfhost/differential-artifacts.js +50 -0
- package/dist/src/selfhost/differential-artifacts.js.map +1 -0
- package/dist/src/selfhost/differential-harness.d.ts +91 -0
- package/dist/src/selfhost/differential-harness.d.ts.map +1 -0
- package/dist/src/selfhost/differential-harness.js +246 -0
- package/dist/src/selfhost/differential-harness.js.map +1 -0
- package/dist/src/selfhost/full-language-inventory-runner.d.ts +49 -0
- package/dist/src/selfhost/full-language-inventory-runner.d.ts.map +1 -0
- package/dist/src/selfhost/full-language-inventory-runner.js +225 -0
- package/dist/src/selfhost/full-language-inventory-runner.js.map +1 -0
- package/dist/src/selfhost/full-language-inventory.d.ts +42 -0
- package/dist/src/selfhost/full-language-inventory.d.ts.map +1 -0
- package/dist/src/selfhost/full-language-inventory.js +163 -0
- package/dist/src/selfhost/full-language-inventory.js.map +1 -0
- package/dist/src/selfhost/interop-resolution-witness.d.ts +35 -0
- package/dist/src/selfhost/interop-resolution-witness.d.ts.map +1 -0
- package/dist/src/selfhost/interop-resolution-witness.js +186 -0
- package/dist/src/selfhost/interop-resolution-witness.js.map +1 -0
- package/dist/src/selfhost/kernel-model-host-adapter.d.ts +28 -0
- package/dist/src/selfhost/kernel-model-host-adapter.d.ts.map +1 -0
- package/dist/src/selfhost/kernel-model-host-adapter.js +36 -0
- package/dist/src/selfhost/kernel-model-host-adapter.js.map +1 -0
- package/dist/src/selfhost/legacy-adapter.d.ts +8 -0
- package/dist/src/selfhost/legacy-adapter.d.ts.map +1 -0
- package/dist/src/selfhost/legacy-adapter.js +186 -0
- package/dist/src/selfhost/legacy-adapter.js.map +1 -0
- package/dist/src/selfhost/module-graph.d.ts +57 -0
- package/dist/src/selfhost/module-graph.d.ts.map +1 -0
- package/dist/src/selfhost/module-graph.js +267 -0
- package/dist/src/selfhost/module-graph.js.map +1 -0
- package/dist/src/selfhost/mvp-adapter.d.ts +19 -0
- package/dist/src/selfhost/mvp-adapter.d.ts.map +1 -0
- package/dist/src/selfhost/mvp-adapter.js +186 -0
- package/dist/src/selfhost/mvp-adapter.js.map +1 -0
- package/dist/src/selfhost/node-executor.d.ts +6 -0
- package/dist/src/selfhost/node-executor.d.ts.map +1 -0
- package/dist/src/selfhost/node-executor.js +138 -0
- package/dist/src/selfhost/node-executor.js.map +1 -0
- package/dist/src/selfhost/project-compiler-adapter.d.ts +77 -0
- package/dist/src/selfhost/project-compiler-adapter.d.ts.map +1 -0
- package/dist/src/selfhost/project-compiler-adapter.js +358 -0
- package/dist/src/selfhost/project-compiler-adapter.js.map +1 -0
- package/dist/src/selfhost/project-differential-adapter.d.ts +15 -0
- package/dist/src/selfhost/project-differential-adapter.d.ts.map +1 -0
- package/dist/src/selfhost/project-differential-adapter.js +65 -0
- package/dist/src/selfhost/project-differential-adapter.js.map +1 -0
- package/dist/src/selfhost/promotion-evidence.d.ts +62 -0
- package/dist/src/selfhost/promotion-evidence.d.ts.map +1 -0
- package/dist/src/selfhost/promotion-evidence.js +332 -0
- package/dist/src/selfhost/promotion-evidence.js.map +1 -0
- package/dist/src/selfhost/promotion-policy-replay-v2.d.ts +54 -0
- package/dist/src/selfhost/promotion-policy-replay-v2.d.ts.map +1 -0
- package/dist/src/selfhost/promotion-policy-replay-v2.js +343 -0
- package/dist/src/selfhost/promotion-policy-replay-v2.js.map +1 -0
- package/dist/src/selfhost/promotion-shadow-history-v2.d.ts +55 -0
- package/dist/src/selfhost/promotion-shadow-history-v2.d.ts.map +1 -0
- package/dist/src/selfhost/promotion-shadow-history-v2.js +227 -0
- package/dist/src/selfhost/promotion-shadow-history-v2.js.map +1 -0
- package/dist/src/selfhost/promotion-subject.d.ts +34 -0
- package/dist/src/selfhost/promotion-subject.d.ts.map +1 -0
- package/dist/src/selfhost/promotion-subject.js +141 -0
- package/dist/src/selfhost/promotion-subject.js.map +1 -0
- package/dist/src/selfhost/source-manifest.d.ts +31 -0
- package/dist/src/selfhost/source-manifest.d.ts.map +1 -0
- package/dist/src/selfhost/source-manifest.js +194 -0
- package/dist/src/selfhost/source-manifest.js.map +1 -0
- package/dist/src/selfhost/stage-compiler-facade.d.ts +25 -0
- package/dist/src/selfhost/stage-compiler-facade.d.ts.map +1 -0
- package/dist/src/selfhost/stage-compiler-facade.js +100 -0
- package/dist/src/selfhost/stage-compiler-facade.js.map +1 -0
- package/dist/src/semantic-evidence/snapshot.d.ts +114 -0
- package/dist/src/semantic-evidence/snapshot.d.ts.map +1 -0
- package/dist/src/semantic-evidence/snapshot.js +336 -0
- package/dist/src/semantic-evidence/snapshot.js.map +1 -0
- package/dist/src/source.d.ts +25 -0
- package/dist/src/source.d.ts.map +1 -0
- package/dist/src/source.js +10 -0
- package/dist/src/source.js.map +1 -0
- package/dist/src/syntax/cst-to-ast.d.ts +108 -0
- package/dist/src/syntax/cst-to-ast.d.ts.map +1 -0
- package/dist/src/syntax/cst-to-ast.js +383 -0
- package/dist/src/syntax/cst-to-ast.js.map +1 -0
- package/dist/src/syntax/documentation.d.ts +11 -0
- package/dist/src/syntax/documentation.d.ts.map +1 -0
- package/dist/src/syntax/documentation.js +261 -0
- package/dist/src/syntax/documentation.js.map +1 -0
- package/dist/src/syntax/parser.d.ts +114 -0
- package/dist/src/syntax/parser.d.ts.map +1 -0
- package/dist/src/syntax/parser.js +970 -0
- package/dist/src/syntax/parser.js.map +1 -0
- package/dist/src/syntax/syntax-metadata.d.ts +8 -0
- package/dist/src/syntax/syntax-metadata.d.ts.map +1 -0
- package/dist/src/syntax/syntax-metadata.js +14 -0
- package/dist/src/syntax/syntax-metadata.js.map +1 -0
- package/dist/src/syntax/tokens.d.ts +96 -0
- package/dist/src/syntax/tokens.d.ts.map +1 -0
- package/dist/src/syntax/tokens.js +260 -0
- package/dist/src/syntax/tokens.js.map +1 -0
- package/dist/src/types/types.d.ts +97 -0
- package/dist/src/types/types.d.ts.map +1 -0
- package/dist/src/types/types.js +105 -0
- package/dist/src/types/types.js.map +1 -0
- package/package.json +47 -0
- package/schema/diagnostics-v1.schema.json +75 -0
|
@@ -0,0 +1,348 @@
|
|
|
1
|
+
import { createHash } from 'node:crypto';
|
|
2
|
+
export const BOOTSTRAP_SHADOW_HISTORY_VERSION = 1;
|
|
3
|
+
export class BootstrapShadowHistoryError extends Error {
|
|
4
|
+
path;
|
|
5
|
+
name = 'BootstrapShadowHistoryError';
|
|
6
|
+
constructor(path, message) {
|
|
7
|
+
super(`${path}: ${message}`);
|
|
8
|
+
this.path = path;
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
const sha256Pattern = /^[0-9a-f]{64}$/u;
|
|
12
|
+
const candidateShaPattern = /^(?:[0-9a-f]{40}|[0-9a-f]{64})$/u;
|
|
13
|
+
const reportKeys = [
|
|
14
|
+
'version',
|
|
15
|
+
'mode',
|
|
16
|
+
'blocking',
|
|
17
|
+
'expectedDifferencePaths',
|
|
18
|
+
'baseline',
|
|
19
|
+
'candidate',
|
|
20
|
+
'status',
|
|
21
|
+
'rawArtifactEqual',
|
|
22
|
+
'expectedChanges',
|
|
23
|
+
'unexpectedChanges',
|
|
24
|
+
'unexpectedSections',
|
|
25
|
+
];
|
|
26
|
+
export function createBootstrapShadowHistory(value) {
|
|
27
|
+
const input = record(value, '$');
|
|
28
|
+
exactKeys(input, ['version', 'candidateSha', 'entries'], '$');
|
|
29
|
+
literal(input.version, BOOTSTRAP_SHADOW_HISTORY_VERSION, '$.version');
|
|
30
|
+
const candidateSha = normalizedCandidateSha(input.candidateSha, '$.candidateSha');
|
|
31
|
+
const entryValues = array(input.entries, '$.entries');
|
|
32
|
+
if (entryValues.length === 0)
|
|
33
|
+
throw new BootstrapShadowHistoryError('$.entries', 'at least one shadow report is required');
|
|
34
|
+
const seenRunIds = new Set();
|
|
35
|
+
const entries = entryValues.map((entry, index) => parseEntry(entry, index, candidateSha, seenRunIds));
|
|
36
|
+
for (let index = 1; index < entries.length; index += 1) {
|
|
37
|
+
const previous = entries[index - 1];
|
|
38
|
+
const current = entries[index];
|
|
39
|
+
if (compareEntryOrder(previous, current) >= 0) {
|
|
40
|
+
throw new BootstrapShadowHistoryError(`$.entries[${index}]`, 'entries must be strictly ordered by completedAt and runId');
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
const trailing = trailingSuccessfulEntries(entries);
|
|
44
|
+
const unexplainedDifferentials = entries.reduce((total, entry) => total + entry.unexpectedDifferentials, 0);
|
|
45
|
+
const latest = entries.at(-1);
|
|
46
|
+
const evidenceStatus = latest.status === 'equivalent' && unexplainedDifferentials === 0
|
|
47
|
+
? 'passed'
|
|
48
|
+
: 'failed';
|
|
49
|
+
const history = {
|
|
50
|
+
version: BOOTSTRAP_SHADOW_HISTORY_VERSION,
|
|
51
|
+
candidateSha,
|
|
52
|
+
successfulRuns: trailing.length,
|
|
53
|
+
observationDays: distinctUtcDays(trailing),
|
|
54
|
+
unexplainedDifferentials,
|
|
55
|
+
firstSuccessfulAt: trailing[0]?.completedAt ?? null,
|
|
56
|
+
latestCompletedAt: latest.completedAt,
|
|
57
|
+
latestReportSha256: latest.reportSha256,
|
|
58
|
+
entries: entries.map(toPublicEntry),
|
|
59
|
+
};
|
|
60
|
+
const observation = {
|
|
61
|
+
schemaVersion: 1,
|
|
62
|
+
candidateSha,
|
|
63
|
+
successfulRuns: history.successfulRuns,
|
|
64
|
+
observationDays: history.observationDays,
|
|
65
|
+
unexplainedDifferentials,
|
|
66
|
+
manualApproval: false,
|
|
67
|
+
rollbackEvidence: false,
|
|
68
|
+
stableReleaseCycles: 0,
|
|
69
|
+
evidence: [{
|
|
70
|
+
id: 'stage1-stage2',
|
|
71
|
+
status: evidenceStatus,
|
|
72
|
+
candidateSha,
|
|
73
|
+
source: `bootstrap-shadow-report:${latest.reportSha256}`,
|
|
74
|
+
completedAt: latest.completedAt,
|
|
75
|
+
}],
|
|
76
|
+
};
|
|
77
|
+
const payload = { history, observation };
|
|
78
|
+
const serialized = JSON.stringify(payload);
|
|
79
|
+
return {
|
|
80
|
+
...payload,
|
|
81
|
+
serialized,
|
|
82
|
+
sha256: sha256(serialized),
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
function parseEntry(value, index, expectedCandidateSha, seenRunIds) {
|
|
86
|
+
const path = `$.entries[${index}]`;
|
|
87
|
+
const entry = record(value, path);
|
|
88
|
+
exactKeys(entry, ['version', 'runId', 'candidateSha', 'completedAt', 'report', 'reportSha256'], path);
|
|
89
|
+
literal(entry.version, BOOTSTRAP_SHADOW_HISTORY_VERSION, `${path}.version`);
|
|
90
|
+
const runId = nonEmptyString(entry.runId, `${path}.runId`);
|
|
91
|
+
if (seenRunIds.has(runId))
|
|
92
|
+
throw new BootstrapShadowHistoryError(`${path}.runId`, `duplicate runId ${runId}`);
|
|
93
|
+
seenRunIds.add(runId);
|
|
94
|
+
const candidateSha = normalizedCandidateSha(entry.candidateSha, `${path}.candidateSha`);
|
|
95
|
+
if (candidateSha !== expectedCandidateSha) {
|
|
96
|
+
throw new BootstrapShadowHistoryError(`${path}.candidateSha`, `expected ${expectedCandidateSha}, received ${candidateSha}`);
|
|
97
|
+
}
|
|
98
|
+
const completedAt = canonicalTimestamp(entry.completedAt, `${path}.completedAt`);
|
|
99
|
+
const reportSha256 = normalizedSha256(entry.reportSha256, `${path}.reportSha256`);
|
|
100
|
+
const parsedReport = parseReport(entry.report, `${path}.report`);
|
|
101
|
+
const canonicalSerialized = JSON.stringify(parsedReport.report);
|
|
102
|
+
const calculatedSha256 = sha256(canonicalSerialized);
|
|
103
|
+
if (calculatedSha256 !== reportSha256) {
|
|
104
|
+
throw new BootstrapShadowHistoryError(`${path}.reportSha256`, `expected ${calculatedSha256}, received ${reportSha256}`);
|
|
105
|
+
}
|
|
106
|
+
if (JSON.stringify(entry.report) !== canonicalSerialized) {
|
|
107
|
+
throw new BootstrapShadowHistoryError(`${path}.report`, 'report is not in canonical version 1 property order');
|
|
108
|
+
}
|
|
109
|
+
return {
|
|
110
|
+
runId,
|
|
111
|
+
completedAt,
|
|
112
|
+
reportSha256,
|
|
113
|
+
status: parsedReport.report.status,
|
|
114
|
+
unexpectedDifferentials: parsedReport.report.unexpectedChanges.length,
|
|
115
|
+
candidateCompilerVersion: parsedReport.report.candidate.compilerVersion,
|
|
116
|
+
candidateArtifactSha256: parsedReport.report.candidate.artifactSha256,
|
|
117
|
+
};
|
|
118
|
+
}
|
|
119
|
+
function parseReport(value, path) {
|
|
120
|
+
const report = record(value, path);
|
|
121
|
+
exactKeys(report, reportKeys, path);
|
|
122
|
+
literal(report.version, 1, `${path}.version`);
|
|
123
|
+
literal(report.mode, 'shadow', `${path}.mode`);
|
|
124
|
+
literal(report.blocking, false, `${path}.blocking`);
|
|
125
|
+
const expectedDifferencePaths = array(report.expectedDifferencePaths, `${path}.expectedDifferencePaths`);
|
|
126
|
+
if (expectedDifferencePaths.length !== 1 || expectedDifferencePaths[0] !== 'metadata.stage') {
|
|
127
|
+
throw new BootstrapShadowHistoryError(`${path}.expectedDifferencePaths`, 'expected exactly metadata.stage');
|
|
128
|
+
}
|
|
129
|
+
const baseline = parseSubject(report.baseline, `${path}.baseline`, 'stage1');
|
|
130
|
+
const candidate = parseSubject(report.candidate, `${path}.candidate`, 'stage2');
|
|
131
|
+
if (baseline.label === candidate.label) {
|
|
132
|
+
throw new BootstrapShadowHistoryError(`${path}.candidate.label`, 'subject labels must be distinct');
|
|
133
|
+
}
|
|
134
|
+
const status = oneOf(report.status, ['equivalent', 'mismatch'], `${path}.status`);
|
|
135
|
+
const rawArtifactEqual = boolean(report.rawArtifactEqual, `${path}.rawArtifactEqual`);
|
|
136
|
+
const expectedChanges = parseChanges(report.expectedChanges, `${path}.expectedChanges`);
|
|
137
|
+
const unexpectedChanges = parseChanges(report.unexpectedChanges, `${path}.unexpectedChanges`);
|
|
138
|
+
if (expectedChanges.length !== 1
|
|
139
|
+
|| expectedChanges[0].section !== 'metadata'
|
|
140
|
+
|| expectedChanges[0].path !== 'metadata.stage'
|
|
141
|
+
|| expectedChanges[0].before !== JSON.stringify('stage1')
|
|
142
|
+
|| expectedChanges[0].after !== JSON.stringify('stage2')) {
|
|
143
|
+
throw new BootstrapShadowHistoryError(`${path}.expectedChanges`, 'expected exactly the canonical stage1 to stage2 metadata.stage change');
|
|
144
|
+
}
|
|
145
|
+
if (status !== (unexpectedChanges.length === 0 ? 'equivalent' : 'mismatch')) {
|
|
146
|
+
throw new BootstrapShadowHistoryError(`${path}.status`, 'status does not match unexpectedChanges');
|
|
147
|
+
}
|
|
148
|
+
if (rawArtifactEqual) {
|
|
149
|
+
throw new BootstrapShadowHistoryError(`${path}.rawArtifactEqual`, 'equal artifacts cannot contain the canonical stage change');
|
|
150
|
+
}
|
|
151
|
+
const unexpectedSections = parseSections(report.unexpectedSections, `${path}.unexpectedSections`);
|
|
152
|
+
const expectedSections = summarizeSections(unexpectedChanges);
|
|
153
|
+
if (JSON.stringify(unexpectedSections) !== JSON.stringify(expectedSections)) {
|
|
154
|
+
throw new BootstrapShadowHistoryError(`${path}.unexpectedSections`, 'unexpectedSections does not match unexpectedChanges');
|
|
155
|
+
}
|
|
156
|
+
const canonicalReport = {
|
|
157
|
+
version: 1,
|
|
158
|
+
mode: 'shadow',
|
|
159
|
+
blocking: false,
|
|
160
|
+
expectedDifferencePaths: ['metadata.stage'],
|
|
161
|
+
baseline,
|
|
162
|
+
candidate,
|
|
163
|
+
status,
|
|
164
|
+
rawArtifactEqual,
|
|
165
|
+
expectedChanges,
|
|
166
|
+
unexpectedChanges,
|
|
167
|
+
unexpectedSections,
|
|
168
|
+
};
|
|
169
|
+
return { report: canonicalReport };
|
|
170
|
+
}
|
|
171
|
+
function parseSubject(value, path, expectedStage) {
|
|
172
|
+
const subject = record(value, path);
|
|
173
|
+
exactKeys(subject, ['label', 'stage', 'compilerVersion', 'artifactSha256'], path);
|
|
174
|
+
const label = nonEmptyString(subject.label, `${path}.label`);
|
|
175
|
+
literal(subject.stage, expectedStage, `${path}.stage`);
|
|
176
|
+
const compilerVersion = nonEmptyString(subject.compilerVersion, `${path}.compilerVersion`);
|
|
177
|
+
const artifactSha256 = normalizedSha256(subject.artifactSha256, `${path}.artifactSha256`);
|
|
178
|
+
return { label, stage: expectedStage, compilerVersion, artifactSha256 };
|
|
179
|
+
}
|
|
180
|
+
function parseChanges(value, path) {
|
|
181
|
+
const values = array(value, path);
|
|
182
|
+
const changes = values.map((item, index) => {
|
|
183
|
+
const itemPath = `${path}[${index}]`;
|
|
184
|
+
const change = record(item, itemPath);
|
|
185
|
+
exactKeys(change, ['section', 'path', 'before', 'after'], itemPath);
|
|
186
|
+
return {
|
|
187
|
+
section: nonEmptyString(change.section, `${itemPath}.section`),
|
|
188
|
+
path: nonEmptyString(change.path, `${itemPath}.path`),
|
|
189
|
+
before: string(change.before, `${itemPath}.before`),
|
|
190
|
+
after: string(change.after, `${itemPath}.after`),
|
|
191
|
+
};
|
|
192
|
+
});
|
|
193
|
+
for (let index = 1; index < changes.length; index += 1) {
|
|
194
|
+
if (compareChange(changes[index - 1], changes[index]) >= 0) {
|
|
195
|
+
throw new BootstrapShadowHistoryError(`${path}[${index}]`, 'changes must be strictly ordered');
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
return changes;
|
|
199
|
+
}
|
|
200
|
+
function parseSections(value, path) {
|
|
201
|
+
const values = array(value, path);
|
|
202
|
+
const sections = values.map((item, index) => {
|
|
203
|
+
const itemPath = `${path}[${index}]`;
|
|
204
|
+
const section = record(item, itemPath);
|
|
205
|
+
exactKeys(section, ['section', 'count'], itemPath);
|
|
206
|
+
return {
|
|
207
|
+
section: nonEmptyString(section.section, `${itemPath}.section`),
|
|
208
|
+
count: positiveSafeInteger(section.count, `${itemPath}.count`),
|
|
209
|
+
};
|
|
210
|
+
});
|
|
211
|
+
for (let index = 1; index < sections.length; index += 1) {
|
|
212
|
+
if (sections[index - 1].section >= sections[index].section) {
|
|
213
|
+
throw new BootstrapShadowHistoryError(`${path}[${index}].section`, 'sections must be strictly ordered');
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
return sections;
|
|
217
|
+
}
|
|
218
|
+
function summarizeSections(changes) {
|
|
219
|
+
const counts = new Map();
|
|
220
|
+
for (const change of changes)
|
|
221
|
+
counts.set(change.section, (counts.get(change.section) ?? 0) + 1);
|
|
222
|
+
return [...counts.entries()]
|
|
223
|
+
.sort(([left], [right]) => compareText(left, right))
|
|
224
|
+
.map(([section, count]) => ({ section, count }));
|
|
225
|
+
}
|
|
226
|
+
function trailingSuccessfulEntries(entries) {
|
|
227
|
+
const latest = entries.at(-1);
|
|
228
|
+
if (latest === undefined || latest.status !== 'equivalent')
|
|
229
|
+
return [];
|
|
230
|
+
let first = entries.length - 1;
|
|
231
|
+
for (let index = entries.length - 2; index >= 0; index -= 1) {
|
|
232
|
+
const current = entries[index];
|
|
233
|
+
if (current.status !== 'equivalent'
|
|
234
|
+
|| current.candidateCompilerVersion !== latest.candidateCompilerVersion
|
|
235
|
+
|| current.candidateArtifactSha256 !== latest.candidateArtifactSha256)
|
|
236
|
+
break;
|
|
237
|
+
first = index;
|
|
238
|
+
}
|
|
239
|
+
return entries.slice(first);
|
|
240
|
+
}
|
|
241
|
+
function toPublicEntry(entry) {
|
|
242
|
+
return {
|
|
243
|
+
runId: entry.runId,
|
|
244
|
+
completedAt: entry.completedAt,
|
|
245
|
+
reportSha256: entry.reportSha256,
|
|
246
|
+
status: entry.status,
|
|
247
|
+
unexpectedDifferentials: entry.unexpectedDifferentials,
|
|
248
|
+
};
|
|
249
|
+
}
|
|
250
|
+
function distinctUtcDays(entries) {
|
|
251
|
+
return new Set(entries.map(entry => entry.completedAt.slice(0, 10))).size;
|
|
252
|
+
}
|
|
253
|
+
function compareEntryOrder(left, right) {
|
|
254
|
+
return compareText(left.completedAt, right.completedAt) || compareText(left.runId, right.runId);
|
|
255
|
+
}
|
|
256
|
+
function compareChange(left, right) {
|
|
257
|
+
return compareText(left.section, right.section)
|
|
258
|
+
|| compareText(left.path, right.path)
|
|
259
|
+
|| compareText(left.before, right.before)
|
|
260
|
+
|| compareText(left.after, right.after);
|
|
261
|
+
}
|
|
262
|
+
function record(value, path) {
|
|
263
|
+
if (value === null || typeof value !== 'object' || Array.isArray(value)) {
|
|
264
|
+
throw new BootstrapShadowHistoryError(path, 'expected an object');
|
|
265
|
+
}
|
|
266
|
+
const prototype = Object.getPrototypeOf(value);
|
|
267
|
+
if (prototype !== Object.prototype && prototype !== null) {
|
|
268
|
+
throw new BootstrapShadowHistoryError(path, 'expected a plain data object');
|
|
269
|
+
}
|
|
270
|
+
return value;
|
|
271
|
+
}
|
|
272
|
+
function array(value, path) {
|
|
273
|
+
if (!Array.isArray(value))
|
|
274
|
+
throw new BootstrapShadowHistoryError(path, 'expected an array');
|
|
275
|
+
return value;
|
|
276
|
+
}
|
|
277
|
+
function string(value, path) {
|
|
278
|
+
if (typeof value !== 'string')
|
|
279
|
+
throw new BootstrapShadowHistoryError(path, 'expected a string');
|
|
280
|
+
return value;
|
|
281
|
+
}
|
|
282
|
+
function nonEmptyString(value, path) {
|
|
283
|
+
const result = string(value, path);
|
|
284
|
+
if (result.length === 0)
|
|
285
|
+
throw new BootstrapShadowHistoryError(path, 'expected a non-empty string');
|
|
286
|
+
return result;
|
|
287
|
+
}
|
|
288
|
+
function boolean(value, path) {
|
|
289
|
+
if (typeof value !== 'boolean')
|
|
290
|
+
throw new BootstrapShadowHistoryError(path, 'expected a boolean');
|
|
291
|
+
return value;
|
|
292
|
+
}
|
|
293
|
+
function positiveSafeInteger(value, path) {
|
|
294
|
+
if (typeof value !== 'number' || !Number.isSafeInteger(value) || value <= 0) {
|
|
295
|
+
throw new BootstrapShadowHistoryError(path, 'expected a positive safe integer');
|
|
296
|
+
}
|
|
297
|
+
return value;
|
|
298
|
+
}
|
|
299
|
+
function normalizedSha256(value, path) {
|
|
300
|
+
const result = string(value, path);
|
|
301
|
+
if (!sha256Pattern.test(result))
|
|
302
|
+
throw new BootstrapShadowHistoryError(path, 'expected a lowercase SHA-256 value');
|
|
303
|
+
return result;
|
|
304
|
+
}
|
|
305
|
+
function normalizedCandidateSha(value, path) {
|
|
306
|
+
const result = string(value, path);
|
|
307
|
+
if (!candidateShaPattern.test(result)) {
|
|
308
|
+
throw new BootstrapShadowHistoryError(path, 'expected a lowercase 40- or 64-character hexadecimal SHA');
|
|
309
|
+
}
|
|
310
|
+
return result;
|
|
311
|
+
}
|
|
312
|
+
function canonicalTimestamp(value, path) {
|
|
313
|
+
const result = string(value, path);
|
|
314
|
+
const date = new Date(result);
|
|
315
|
+
if (Number.isNaN(date.getTime()) || date.toISOString() !== result) {
|
|
316
|
+
throw new BootstrapShadowHistoryError(path, 'expected a canonical ISO timestamp');
|
|
317
|
+
}
|
|
318
|
+
return result;
|
|
319
|
+
}
|
|
320
|
+
function literal(value, expected, path) {
|
|
321
|
+
if (value !== expected)
|
|
322
|
+
throw new BootstrapShadowHistoryError(path, `expected ${JSON.stringify(expected)}`);
|
|
323
|
+
return expected;
|
|
324
|
+
}
|
|
325
|
+
function oneOf(value, allowed, path) {
|
|
326
|
+
if (typeof value !== 'string' || !allowed.includes(value)) {
|
|
327
|
+
throw new BootstrapShadowHistoryError(path, `expected one of ${allowed.join(', ')}`);
|
|
328
|
+
}
|
|
329
|
+
return value;
|
|
330
|
+
}
|
|
331
|
+
function exactKeys(value, allowed, path) {
|
|
332
|
+
const allowedSet = new Set(allowed);
|
|
333
|
+
for (const key of Object.keys(value)) {
|
|
334
|
+
if (!allowedSet.has(key))
|
|
335
|
+
throw new BootstrapShadowHistoryError(`${path}.${key}`, 'unknown property');
|
|
336
|
+
}
|
|
337
|
+
for (const key of allowed) {
|
|
338
|
+
if (!Object.hasOwn(value, key))
|
|
339
|
+
throw new BootstrapShadowHistoryError(`${path}.${key}`, 'missing property');
|
|
340
|
+
}
|
|
341
|
+
}
|
|
342
|
+
function sha256(value) {
|
|
343
|
+
return createHash('sha256').update(value, 'utf8').digest('hex');
|
|
344
|
+
}
|
|
345
|
+
function compareText(left, right) {
|
|
346
|
+
return left < right ? -1 : left > right ? 1 : 0;
|
|
347
|
+
}
|
|
348
|
+
//# sourceMappingURL=bootstrap-shadow-history.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bootstrap-shadow-history.js","sourceRoot":"","sources":["../../../src/selfhost/bootstrap-shadow-history.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { type BootstrapArtifactDiffEntry, type NormalizedBootstrapArtifactResult } from './bootstrap-artifact-normalizer.js';
|
|
2
|
+
export declare const BOOTSTRAP_SHADOW_REPORT_VERSION: 1;
|
|
3
|
+
export type BootstrapShadowStage = 'stage0' | 'stage1' | 'stage2';
|
|
4
|
+
export interface BootstrapShadowSubject {
|
|
5
|
+
readonly label: string;
|
|
6
|
+
readonly stage: BootstrapShadowStage;
|
|
7
|
+
readonly compilerVersion: string;
|
|
8
|
+
readonly artifact: NormalizedBootstrapArtifactResult;
|
|
9
|
+
}
|
|
10
|
+
export interface BootstrapShadowReportInput {
|
|
11
|
+
readonly baseline: BootstrapShadowSubject;
|
|
12
|
+
readonly candidate: BootstrapShadowSubject;
|
|
13
|
+
}
|
|
14
|
+
export interface BootstrapShadowReportSubject {
|
|
15
|
+
readonly label: string;
|
|
16
|
+
readonly stage: BootstrapShadowStage;
|
|
17
|
+
readonly compilerVersion: string;
|
|
18
|
+
readonly artifactSha256: string;
|
|
19
|
+
}
|
|
20
|
+
export interface BootstrapShadowSectionSummary {
|
|
21
|
+
readonly section: string;
|
|
22
|
+
readonly count: number;
|
|
23
|
+
}
|
|
24
|
+
export interface BootstrapShadowReport {
|
|
25
|
+
readonly version: typeof BOOTSTRAP_SHADOW_REPORT_VERSION;
|
|
26
|
+
readonly mode: 'shadow';
|
|
27
|
+
readonly blocking: false;
|
|
28
|
+
readonly expectedDifferencePaths: readonly ['metadata.stage'];
|
|
29
|
+
readonly baseline: BootstrapShadowReportSubject;
|
|
30
|
+
readonly candidate: BootstrapShadowReportSubject;
|
|
31
|
+
readonly status: 'equivalent' | 'mismatch';
|
|
32
|
+
readonly rawArtifactEqual: boolean;
|
|
33
|
+
readonly expectedChanges: readonly BootstrapArtifactDiffEntry[];
|
|
34
|
+
readonly unexpectedChanges: readonly BootstrapArtifactDiffEntry[];
|
|
35
|
+
readonly unexpectedSections: readonly BootstrapShadowSectionSummary[];
|
|
36
|
+
}
|
|
37
|
+
export interface BootstrapShadowReportResult {
|
|
38
|
+
readonly report: BootstrapShadowReport;
|
|
39
|
+
readonly serialized: string;
|
|
40
|
+
readonly sha256: string;
|
|
41
|
+
}
|
|
42
|
+
export declare function createBootstrapShadowReport(input: BootstrapShadowReportInput): BootstrapShadowReportResult;
|
|
43
|
+
//# sourceMappingURL=bootstrap-shadow-report.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bootstrap-shadow-report.d.ts","sourceRoot":"","sources":["../../../src/selfhost/bootstrap-shadow-report.ts"],"names":[],"mappings":"AACA,OAAO,EAEN,KAAK,0BAA0B,EAC/B,KAAK,iCAAiC,EACtC,MAAM,oCAAoC,CAAC;AAE5C,eAAO,MAAM,+BAA+B,EAAG,CAAU,CAAC;AAE1D,MAAM,MAAM,oBAAoB,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAElE,MAAM,WAAW,sBAAsB;IACtC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,KAAK,EAAE,oBAAoB,CAAC;IACrC,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,QAAQ,EAAE,iCAAiC,CAAC;CACrD;AAED,MAAM,WAAW,0BAA0B;IAC1C,QAAQ,CAAC,QAAQ,EAAE,sBAAsB,CAAC;IAC1C,QAAQ,CAAC,SAAS,EAAE,sBAAsB,CAAC;CAC3C;AAED,MAAM,WAAW,4BAA4B;IAC5C,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,KAAK,EAAE,oBAAoB,CAAC;IACrC,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;CAChC;AAED,MAAM,WAAW,6BAA6B;IAC7C,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,qBAAqB;IACrC,QAAQ,CAAC,OAAO,EAAE,OAAO,+BAA+B,CAAC;IACzD,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IACxB,QAAQ,CAAC,QAAQ,EAAE,KAAK,CAAC;IACzB,QAAQ,CAAC,uBAAuB,EAAE,SAAS,CAAC,gBAAgB,CAAC,CAAC;IAC9D,QAAQ,CAAC,QAAQ,EAAE,4BAA4B,CAAC;IAChD,QAAQ,CAAC,SAAS,EAAE,4BAA4B,CAAC;IACjD,QAAQ,CAAC,MAAM,EAAE,YAAY,GAAG,UAAU,CAAC;IAC3C,QAAQ,CAAC,gBAAgB,EAAE,OAAO,CAAC;IACnC,QAAQ,CAAC,eAAe,EAAE,SAAS,0BAA0B,EAAE,CAAC;IAChE,QAAQ,CAAC,iBAAiB,EAAE,SAAS,0BAA0B,EAAE,CAAC;IAClE,QAAQ,CAAC,kBAAkB,EAAE,SAAS,6BAA6B,EAAE,CAAC;CACtE;AAED,MAAM,WAAW,2BAA2B;IAC3C,QAAQ,CAAC,MAAM,EAAE,qBAAqB,CAAC;IACvC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACxB;AAID,wBAAgB,2BAA2B,CAAC,KAAK,EAAE,0BAA0B,GAAG,2BAA2B,CAkC1G"}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
import { createHash } from 'node:crypto';
|
|
2
|
+
import { diffBootstrapArtifacts, } from './bootstrap-artifact-normalizer.js';
|
|
3
|
+
export const BOOTSTRAP_SHADOW_REPORT_VERSION = 1;
|
|
4
|
+
const sha256Pattern = /^[0-9a-f]{64}$/u;
|
|
5
|
+
export function createBootstrapShadowReport(input) {
|
|
6
|
+
const baseline = normalizeSubject(input.baseline, 'baseline');
|
|
7
|
+
const candidate = normalizeSubject(input.candidate, 'candidate');
|
|
8
|
+
if (baseline.label === candidate.label)
|
|
9
|
+
throw new Error('Shadow subject labels must be distinct');
|
|
10
|
+
verifyArtifact(input.baseline.artifact, 'baseline.artifact');
|
|
11
|
+
verifyArtifact(input.candidate.artifact, 'candidate.artifact');
|
|
12
|
+
const diff = diffBootstrapArtifacts(input.baseline.artifact, input.candidate.artifact);
|
|
13
|
+
const sortedChanges = [...diff.changes].sort(compareChange);
|
|
14
|
+
const expectedChanges = [];
|
|
15
|
+
const unexpectedChanges = [];
|
|
16
|
+
for (const change of sortedChanges) {
|
|
17
|
+
if (isExpectedStageChange(change, baseline.stage, candidate.stage))
|
|
18
|
+
expectedChanges.push(change);
|
|
19
|
+
else
|
|
20
|
+
unexpectedChanges.push(change);
|
|
21
|
+
}
|
|
22
|
+
const report = {
|
|
23
|
+
version: BOOTSTRAP_SHADOW_REPORT_VERSION,
|
|
24
|
+
mode: 'shadow',
|
|
25
|
+
blocking: false,
|
|
26
|
+
expectedDifferencePaths: ['metadata.stage'],
|
|
27
|
+
baseline,
|
|
28
|
+
candidate,
|
|
29
|
+
status: unexpectedChanges.length === 0 ? 'equivalent' : 'mismatch',
|
|
30
|
+
rawArtifactEqual: diff.equal,
|
|
31
|
+
expectedChanges,
|
|
32
|
+
unexpectedChanges,
|
|
33
|
+
unexpectedSections: summarizeSections(unexpectedChanges),
|
|
34
|
+
};
|
|
35
|
+
const serialized = JSON.stringify(report);
|
|
36
|
+
return {
|
|
37
|
+
report,
|
|
38
|
+
serialized,
|
|
39
|
+
sha256: sha256(serialized),
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
function normalizeSubject(subject, path) {
|
|
43
|
+
assertNonEmpty(subject.label, `${path}.label`);
|
|
44
|
+
assertNonEmpty(subject.compilerVersion, `${path}.compilerVersion`);
|
|
45
|
+
if (subject.stage !== 'stage0' && subject.stage !== 'stage1' && subject.stage !== 'stage2') {
|
|
46
|
+
throw new Error(`${path}.stage is invalid`);
|
|
47
|
+
}
|
|
48
|
+
return {
|
|
49
|
+
label: subject.label,
|
|
50
|
+
stage: subject.stage,
|
|
51
|
+
compilerVersion: subject.compilerVersion,
|
|
52
|
+
artifactSha256: subject.artifact.sha256,
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
function verifyArtifact(artifact, path) {
|
|
56
|
+
if (!sha256Pattern.test(artifact.sha256))
|
|
57
|
+
throw new Error(`${path}.sha256 is invalid`);
|
|
58
|
+
const calculated = sha256(artifact.serialized);
|
|
59
|
+
if (calculated !== artifact.sha256)
|
|
60
|
+
throw new Error(`${path}.sha256 does not match serialized content`);
|
|
61
|
+
if (JSON.stringify(artifact.artifact) !== artifact.serialized) {
|
|
62
|
+
throw new Error(`${path}.artifact does not match serialized content`);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
function isExpectedStageChange(change, baselineStage, candidateStage) {
|
|
66
|
+
return change.path === 'metadata.stage'
|
|
67
|
+
&& change.before === JSON.stringify(baselineStage)
|
|
68
|
+
&& change.after === JSON.stringify(candidateStage);
|
|
69
|
+
}
|
|
70
|
+
function summarizeSections(changes) {
|
|
71
|
+
const counts = new Map();
|
|
72
|
+
for (const change of changes)
|
|
73
|
+
counts.set(change.section, (counts.get(change.section) ?? 0) + 1);
|
|
74
|
+
return [...counts.entries()]
|
|
75
|
+
.sort(([left], [right]) => compareText(left, right))
|
|
76
|
+
.map(([section, count]) => ({ section, count }));
|
|
77
|
+
}
|
|
78
|
+
function compareChange(left, right) {
|
|
79
|
+
return compareText(left.section, right.section)
|
|
80
|
+
|| compareText(left.path, right.path)
|
|
81
|
+
|| compareText(left.before, right.before)
|
|
82
|
+
|| compareText(left.after, right.after);
|
|
83
|
+
}
|
|
84
|
+
function assertNonEmpty(value, path) {
|
|
85
|
+
if (value.length === 0)
|
|
86
|
+
throw new Error(`${path} must not be empty`);
|
|
87
|
+
}
|
|
88
|
+
function sha256(value) {
|
|
89
|
+
return createHash('sha256').update(value).digest('hex');
|
|
90
|
+
}
|
|
91
|
+
function compareText(left, right) {
|
|
92
|
+
return left < right ? -1 : left > right ? 1 : 0;
|
|
93
|
+
}
|
|
94
|
+
//# sourceMappingURL=bootstrap-shadow-report.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bootstrap-shadow-report.js","sourceRoot":"","sources":["../../../src/selfhost/bootstrap-shadow-report.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import type { KernelInputV1 } from './contract.js';
|
|
2
|
+
import type { SelfhostMvpModule } from './mvp-adapter.js';
|
|
3
|
+
import { PROJECT_COMPILER_RESULT_SCHEMA, type ProjectCompilerDependencyV1, type ProjectCompilerExportedSymbolV1, type ProjectCompilerResultV1 } from './project-compiler-adapter.js';
|
|
4
|
+
export declare const BOOTSTRAP_STAGE_EXECUTOR_VERSION: 3;
|
|
5
|
+
export declare const BOOTSTRAP_STAGE_DIAGNOSTIC_SCHEMA: "virune.selfhost.project-compiler.result.v2#diagnostics";
|
|
6
|
+
export interface BootstrapStageCompiler {
|
|
7
|
+
readonly compile: (input: KernelInputV1) => ProjectCompilerResultV1;
|
|
8
|
+
}
|
|
9
|
+
export interface BootstrapStageMetadata {
|
|
10
|
+
readonly contractVersion: ProjectCompilerResultV1['contractVersion'];
|
|
11
|
+
readonly languageVersion: ProjectCompilerResultV1['languageVersion'];
|
|
12
|
+
readonly platform: ProjectCompilerResultV1['platform'];
|
|
13
|
+
readonly accepted: true;
|
|
14
|
+
readonly resultSchema: typeof PROJECT_COMPILER_RESULT_SCHEMA;
|
|
15
|
+
readonly diagnosticSchema: typeof BOOTSTRAP_STAGE_DIAGNOSTIC_SCHEMA;
|
|
16
|
+
}
|
|
17
|
+
export interface BootstrapStageModule {
|
|
18
|
+
readonly sourcePath: string;
|
|
19
|
+
readonly outputPath: string;
|
|
20
|
+
readonly code: string;
|
|
21
|
+
readonly sourceMap: string;
|
|
22
|
+
}
|
|
23
|
+
export interface BootstrapStageArtifact {
|
|
24
|
+
readonly executorVersion: typeof BOOTSTRAP_STAGE_EXECUTOR_VERSION;
|
|
25
|
+
readonly stage: 'stage1' | 'stage2';
|
|
26
|
+
readonly metadata: BootstrapStageMetadata;
|
|
27
|
+
readonly entryPath: string;
|
|
28
|
+
readonly modules: readonly BootstrapStageModule[];
|
|
29
|
+
readonly dependencies: readonly ProjectCompilerDependencyV1[];
|
|
30
|
+
readonly exportedSymbols: readonly ProjectCompilerExportedSymbolV1[];
|
|
31
|
+
readonly serializedPayload: string;
|
|
32
|
+
readonly sha256: string;
|
|
33
|
+
}
|
|
34
|
+
export interface BootstrapStageDifference {
|
|
35
|
+
readonly section: 'metadata' | 'module' | 'dependency' | 'exported-symbol';
|
|
36
|
+
readonly path: string;
|
|
37
|
+
readonly stage1Sha256: string | null;
|
|
38
|
+
readonly stage2Sha256: string | null;
|
|
39
|
+
}
|
|
40
|
+
export interface BootstrapStageExecutionResult {
|
|
41
|
+
readonly stage1: BootstrapStageArtifact;
|
|
42
|
+
readonly stage2: BootstrapStageArtifact;
|
|
43
|
+
readonly equivalent: boolean;
|
|
44
|
+
readonly differences: readonly BootstrapStageDifference[];
|
|
45
|
+
}
|
|
46
|
+
export type BootstrapStageLoader = (artifact: BootstrapStageArtifact) => Promise<BootstrapStageCompiler>;
|
|
47
|
+
export declare function compilerFromSelfhostModule(module: SelfhostMvpModule): BootstrapStageCompiler;
|
|
48
|
+
export declare function executeBootstrapStages(stage0: BootstrapStageCompiler, input: KernelInputV1, loadStage1: BootstrapStageLoader): Promise<BootstrapStageExecutionResult>;
|
|
49
|
+
export declare function stageArtifact(stage: BootstrapStageArtifact['stage'], result: ProjectCompilerResultV1): BootstrapStageArtifact;
|
|
50
|
+
export declare function compareStageArtifacts(stage1: BootstrapStageArtifact, stage2: BootstrapStageArtifact): readonly BootstrapStageDifference[];
|
|
51
|
+
export declare function compareStageMetadata(stage1: BootstrapStageMetadata, stage2: BootstrapStageMetadata): readonly BootstrapStageDifference[];
|
|
52
|
+
export declare function compareStageModules(stage1: readonly BootstrapStageModule[], stage2: readonly BootstrapStageModule[]): readonly BootstrapStageDifference[];
|
|
53
|
+
//# sourceMappingURL=bootstrap-stage-executor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bootstrap-stage-executor.d.ts","sourceRoot":"","sources":["../../../src/selfhost/bootstrap-stage-executor.ts"],"names":[],"mappings":"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"}
|