@shapeshift-labs/frontier-lang-compiler 0.2.65 → 0.2.67

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.
Files changed (67) hide show
  1. package/README.md +37 -8
  2. package/bench/smoke.mjs +15 -1
  3. package/bench/universal-fixture-suite.mjs +183 -0
  4. package/dist/declarations/import-adapter-core.d.ts +3 -0
  5. package/dist/declarations/native-project-admission.d.ts +133 -0
  6. package/dist/declarations/roundtrip-audit.d.ts +177 -0
  7. package/dist/declarations/roundtrip.d.ts +2 -53
  8. package/dist/declarations/semantic-history-records.d.ts +277 -0
  9. package/dist/declarations/semantic-history.d.ts +45 -92
  10. package/dist/declarations/semantic-merge-candidates.d.ts +200 -0
  11. package/dist/declarations/semantic-merge-conflicts.d.ts +12 -0
  12. package/dist/declarations/semantic-sidecar.d.ts +8 -3
  13. package/dist/declarations/semantic-slice-admission.d.ts +111 -0
  14. package/dist/declarations/semantic-slice.d.ts +36 -1
  15. package/dist/declarations/universal-conversion-plan.d.ts +59 -0
  16. package/dist/declarations/universal-runtime-capabilities.d.ts +171 -0
  17. package/dist/index.d.ts +2 -0
  18. package/dist/index.js +2 -0
  19. package/dist/internal/index-impl/attachExternalOwnership.js +18 -10
  20. package/dist/internal/index-impl/createNativeRoundtripEvidence.js +54 -49
  21. package/dist/internal/index-impl/createSemanticImportSidecar.js +6 -0
  22. package/dist/internal/index-impl/createSemanticSlice.js +4 -3
  23. package/dist/internal/index-impl/createSemanticSliceAdmissionRecord.js +10 -1
  24. package/dist/internal/index-impl/diffNativeSourceImports.js +3 -2
  25. package/dist/internal/index-impl/expandSemanticSliceSelection.js +0 -1
  26. package/dist/internal/index-impl/externalSemanticBase.js +1 -0
  27. package/dist/internal/index-impl/importExternalSemanticIndex.js +4 -0
  28. package/dist/internal/index-impl/nativeRoundtripAudit.js +217 -0
  29. package/dist/internal/index-impl/projectImportAdmissionImportEvidence.js +160 -0
  30. package/dist/internal/index-impl/projectImportAdmissionLanguageSummaries.js +247 -0
  31. package/dist/internal/index-impl/projectImportAdmissionRanks.js +52 -0
  32. package/dist/internal/index-impl/projectImportAdmissionSummaries.js +77 -117
  33. package/dist/internal/index-impl/projectImportAdmissionTasks.js +239 -0
  34. package/dist/internal/index-impl/semanticHistoryRecordNormalizers.js +151 -0
  35. package/dist/internal/index-impl/semanticHistoryRecordOverlaps.js +113 -0
  36. package/dist/internal/index-impl/semanticHistoryRecords.js +210 -149
  37. package/dist/internal/index-impl/semanticMergeCandidateRecordInternals.js +314 -0
  38. package/dist/internal/index-impl/semanticMergeCandidateRecords.js +241 -0
  39. package/dist/internal/index-impl/semanticSliceAdmissionSurface.js +142 -0
  40. package/dist/internal/index-impl/semanticSliceExpectationAssertions.js +100 -0
  41. package/dist/internal/index-impl/semanticSliceExpectationRecords.js +75 -0
  42. package/dist/internal/index-impl/semanticSliceExpectedAssertions.js +5 -2
  43. package/dist/internal/index-impl/testSemanticSlice.js +4 -1
  44. package/dist/internal/index-impl/withExternalEmptyLoss.js +1 -0
  45. package/dist/language-adapter-package-contracts.js +12 -57
  46. package/dist/language-adapter-package-rows.js +116 -0
  47. package/dist/lightweight-dependency-language.js +8 -0
  48. package/dist/native-region-scanner-core.js +42 -10
  49. package/dist/native-region-scanner-js-helpers.js +2 -0
  50. package/dist/native-region-scanner-js-imports.js +111 -0
  51. package/dist/native-region-scanner-js.js +111 -28
  52. package/dist/universal-conversion-plan-summary.js +42 -0
  53. package/dist/universal-conversion-plan.js +46 -40
  54. package/dist/universal-runtime-capabilities.js +92 -0
  55. package/dist/universal-runtime-host-selectors.js +192 -0
  56. package/dist/universal-runtime-profiles.js +109 -0
  57. package/dist/universal-runtime-route-records.js +162 -0
  58. package/examples/js-frontier-rust-workbench-adapters.mjs +89 -0
  59. package/examples/js-frontier-rust-workbench-bounds.mjs +4 -3
  60. package/examples/js-frontier-rust-workbench-client.mjs +135 -59
  61. package/examples/js-frontier-rust-workbench-convert.mjs +161 -0
  62. package/examples/js-frontier-rust-workbench-html.mjs +20 -13
  63. package/examples/js-frontier-rust-workbench-route-styles.mjs +126 -0
  64. package/examples/js-frontier-rust-workbench-route.mjs +190 -0
  65. package/examples/js-frontier-rust-workbench-styles.mjs +12 -54
  66. package/examples/js-frontier-rust-workbench.mjs +54 -214
  67. package/package.json +1 -1
@@ -0,0 +1,200 @@
1
+ import type {
2
+ EvidenceRecord,
3
+ FrontierSourceLanguage,
4
+ SemanticMergeCandidateRecord,
5
+ SemanticMergeReadiness,
6
+ SourceSpan
7
+ } from '@shapeshift-labs/frontier-lang-kernel';
8
+ import type { NativeSourceChangeKind, NativeSourceChangeSet } from './native-diff.js';
9
+ import type { SemanticMergeConflictSummary } from './semantic-merge-conflicts.js';
10
+
11
+ export type SemanticMergeCandidateProjectionRisk = 'low' | 'medium' | 'high' | 'unknown';
12
+
13
+ export interface SemanticMergeCandidateChangedRegion {
14
+ readonly id?: string;
15
+ readonly key?: string;
16
+ readonly conflictKey?: string;
17
+ readonly changeKind?: NativeSourceChangeKind | string;
18
+ readonly regionKind?: string;
19
+ readonly granularity?: string;
20
+ readonly precision?: string;
21
+ readonly projectionRisk?: SemanticMergeCandidateProjectionRisk;
22
+ readonly language?: FrontierSourceLanguage | string;
23
+ readonly sourcePath?: string;
24
+ readonly sourceHash?: string;
25
+ readonly baseHash?: string;
26
+ readonly targetHash?: string;
27
+ readonly symbolId?: string;
28
+ readonly symbolName?: string;
29
+ readonly symbolKind?: string;
30
+ readonly semanticNodeId?: string;
31
+ readonly nativeAstNodeId?: string;
32
+ readonly sourceSpan?: SourceSpan;
33
+ readonly sourceMapLinkIds?: readonly string[];
34
+ readonly sourceMapIds?: readonly string[];
35
+ readonly sourceMapMappingIds?: readonly string[];
36
+ readonly admission?: {
37
+ readonly readiness?: SemanticMergeReadiness | string;
38
+ readonly action?: string;
39
+ readonly reasonCodes?: readonly string[];
40
+ readonly conflictKeys?: readonly string[];
41
+ };
42
+ }
43
+
44
+ export interface SemanticMergeCandidateOverlapRecord {
45
+ readonly schema: 'frontier.lang.semanticMergeCandidateOverlap.v1';
46
+ readonly id: string;
47
+ readonly overlapKind: 'conflict-key' | 'region-key' | 'source-span' | string;
48
+ readonly risk: 'medium' | 'high' | string;
49
+ readonly readiness: SemanticMergeReadiness | string;
50
+ readonly recordIds: readonly string[];
51
+ readonly candidateIds: readonly string[];
52
+ readonly regionIds: readonly string[];
53
+ readonly regionKeys: readonly string[];
54
+ readonly conflictKeys: readonly string[];
55
+ readonly sourcePath?: string;
56
+ readonly leftRegion: Partial<SemanticMergeCandidateChangedRegion>;
57
+ readonly rightRegion: Partial<SemanticMergeCandidateChangedRegion>;
58
+ }
59
+
60
+ export interface SemanticMergeCandidateAdmissionRecord {
61
+ readonly kind: 'frontier.lang.semanticMergeCandidateAdmissionRecord';
62
+ readonly version: 1;
63
+ readonly schema: 'frontier.lang.semanticMergeCandidateAdmissionRecord.v1';
64
+ readonly id: string;
65
+ readonly candidateId?: string;
66
+ readonly importResultId?: string;
67
+ readonly patchId?: string;
68
+ readonly language?: FrontierSourceLanguage | string;
69
+ readonly sourcePath?: string;
70
+ readonly readiness: SemanticMergeReadiness | string;
71
+ readonly readinessSortKey: number;
72
+ readonly projectionRisk: SemanticMergeCandidateProjectionRisk;
73
+ readonly sourceHashes: {
74
+ readonly baseHash?: string;
75
+ readonly targetHash?: string;
76
+ readonly values: readonly string[];
77
+ };
78
+ readonly baseHash?: string;
79
+ readonly targetHash?: string;
80
+ readonly changedSemanticRegions: readonly SemanticMergeCandidateChangedRegion[];
81
+ readonly conflictKeys: readonly string[];
82
+ readonly evidenceIds: readonly string[];
83
+ readonly proofIds: readonly string[];
84
+ readonly overlapSummary: {
85
+ readonly total: number;
86
+ readonly hasOverlaps: boolean;
87
+ readonly byKind: Readonly<Record<string, number>>;
88
+ readonly conflictKeys: readonly string[];
89
+ readonly pairs: readonly SemanticMergeCandidateOverlapRecord[];
90
+ };
91
+ readonly admission: {
92
+ readonly readiness: SemanticMergeReadiness | string;
93
+ readonly reviewRequired: boolean;
94
+ readonly action: 'admit' | 'prioritize-review' | 'block' | string;
95
+ readonly sortKey: number;
96
+ readonly reasonCodes: readonly string[];
97
+ readonly conflictKeys: readonly string[];
98
+ };
99
+ readonly index: {
100
+ readonly candidateIds: readonly string[];
101
+ readonly importResultIds: readonly string[];
102
+ readonly patchIds: readonly string[];
103
+ readonly sourcePaths: readonly string[];
104
+ readonly sourceHashes: readonly string[];
105
+ readonly baseHashes: readonly string[];
106
+ readonly targetHashes: readonly string[];
107
+ readonly regionIds: readonly string[];
108
+ readonly regionKeys: readonly string[];
109
+ readonly regionKinds: readonly string[];
110
+ readonly conflictKeys: readonly string[];
111
+ readonly evidenceIds: readonly string[];
112
+ readonly proofIds: readonly string[];
113
+ readonly readinesses: readonly string[];
114
+ readonly projectionRisks: readonly string[];
115
+ };
116
+ readonly summary: {
117
+ readonly changedSemanticRegions: number;
118
+ readonly conflictKeys: number;
119
+ readonly evidenceIds: number;
120
+ readonly proofIds: number;
121
+ readonly overlaps: number;
122
+ readonly readiness: SemanticMergeReadiness | string;
123
+ readonly projectionRisk: SemanticMergeCandidateProjectionRisk;
124
+ readonly reviewRequired: boolean;
125
+ };
126
+ readonly metadata?: Record<string, unknown> & {
127
+ readonly conflictSummary?: SemanticMergeConflictSummary;
128
+ };
129
+ }
130
+
131
+ export type SemanticMergeCandidateAdmissionInput =
132
+ | NativeSourceChangeSet
133
+ | SemanticMergeCandidateRecord
134
+ | SemanticMergeCandidateAdmissionRecord
135
+ | Record<string, unknown>;
136
+
137
+ export interface CreateSemanticMergeCandidateAdmissionRecordOptions {
138
+ readonly id?: string;
139
+ readonly changeSet?: NativeSourceChangeSet;
140
+ readonly candidate?: SemanticMergeCandidateRecord | Record<string, unknown>;
141
+ readonly patch?: unknown;
142
+ readonly candidateId?: string;
143
+ readonly importResultId?: string;
144
+ readonly patchId?: string;
145
+ readonly language?: FrontierSourceLanguage | string;
146
+ readonly sourcePath?: string;
147
+ readonly sourceHash?: string;
148
+ readonly sourceHashes?: readonly string[] | string;
149
+ readonly baseHash?: string;
150
+ readonly targetHash?: string;
151
+ readonly readiness?: SemanticMergeReadiness | string;
152
+ readonly projectionRisk?: SemanticMergeCandidateProjectionRisk | string;
153
+ readonly changedRegions?: readonly unknown[] | unknown;
154
+ readonly conflictKeys?: readonly string[] | string;
155
+ readonly evidence?: readonly EvidenceRecord[] | EvidenceRecord;
156
+ readonly evidenceIds?: readonly string[] | string;
157
+ readonly proofIds?: readonly string[] | string;
158
+ readonly reasonCodes?: readonly string[] | string;
159
+ readonly metadata?: Record<string, unknown>;
160
+ }
161
+
162
+ export type SemanticMergeCandidateWithAdmission = SemanticMergeCandidateRecord & {
163
+ readonly changedSemanticRegions?: readonly SemanticMergeCandidateChangedRegion[];
164
+ readonly sourceHashes?: SemanticMergeCandidateAdmissionRecord['sourceHashes'];
165
+ readonly evidenceIds?: readonly string[];
166
+ readonly proofIds?: readonly string[];
167
+ readonly projectionRisk?: SemanticMergeCandidateProjectionRisk;
168
+ readonly readinessSortKey?: number;
169
+ readonly mergeAdmission?: SemanticMergeCandidateAdmissionRecord;
170
+ };
171
+
172
+ export interface SemanticMergeCandidateAdmissionOverlapQuery {
173
+ readonly id?: string | readonly string[];
174
+ readonly ids?: readonly string[];
175
+ readonly candidateId?: string | readonly string[];
176
+ readonly candidateIds?: readonly string[];
177
+ readonly recordId?: string | readonly string[];
178
+ readonly recordIds?: readonly string[];
179
+ readonly regionId?: string | readonly string[];
180
+ readonly regionIds?: readonly string[];
181
+ readonly regionKey?: string | readonly string[];
182
+ readonly regionKeys?: readonly string[];
183
+ readonly conflictKey?: string | readonly string[];
184
+ readonly conflictKeys?: readonly string[];
185
+ readonly sourcePath?: string | readonly string[];
186
+ readonly sourcePaths?: readonly string[];
187
+ readonly overlapKind?: string | readonly string[];
188
+ readonly overlapKinds?: readonly string[];
189
+ readonly readiness?: SemanticMergeReadiness | string | readonly string[];
190
+ readonly readinesses?: readonly string[];
191
+ readonly risk?: string | readonly string[];
192
+ readonly risks?: readonly string[];
193
+ }
194
+
195
+ export declare const SemanticMergeCandidateProjectionRisks: readonly SemanticMergeCandidateProjectionRisk[];
196
+ export declare function createSemanticMergeCandidateAdmissionRecord(input?: SemanticMergeCandidateAdmissionInput, options?: CreateSemanticMergeCandidateAdmissionRecordOptions): SemanticMergeCandidateAdmissionRecord;
197
+ export declare function decorateSemanticMergeCandidateForAdmission<T extends SemanticMergeCandidateRecord | Record<string, unknown>>(input?: T, options?: CreateSemanticMergeCandidateAdmissionRecordOptions): T & SemanticMergeCandidateWithAdmission;
198
+ export declare function querySemanticMergeCandidateAdmissionOverlaps(records: SemanticMergeCandidateAdmissionInput | readonly SemanticMergeCandidateAdmissionInput[], query?: SemanticMergeCandidateAdmissionOverlapQuery): readonly SemanticMergeCandidateOverlapRecord[];
199
+ export declare function semanticMergeCandidateReadinessSortKey(candidateOrRecord: Partial<SemanticMergeCandidateAdmissionRecord> | Partial<SemanticMergeCandidateWithAdmission>): number;
200
+ export declare function sortSemanticMergeCandidateAdmissionRecords<T extends SemanticMergeCandidateAdmissionInput>(records: readonly T[], options?: { readonly desc?: boolean }): readonly SemanticMergeCandidateAdmissionRecord[];
@@ -3,6 +3,11 @@ import type {
3
3
  SemanticMergeCandidateRecord,
4
4
  SemanticMergeReadiness
5
5
  } from '@shapeshift-labs/frontier-lang-kernel';
6
+ import type {
7
+ SemanticMergeCandidateAdmissionRecord,
8
+ SemanticMergeCandidateChangedRegion,
9
+ SemanticMergeCandidateProjectionRisk
10
+ } from './semantic-merge-candidates.js';
6
11
 
7
12
  export type SemanticMergeConflictClass =
8
13
  | 'same-symbol-edit'
@@ -45,6 +50,13 @@ export interface SemanticMergeConflictSummary {
45
50
  }
46
51
 
47
52
  export type SemanticMergeCandidateWithConflicts = SemanticMergeCandidateRecord & {
53
+ readonly changedSemanticRegions?: readonly SemanticMergeCandidateChangedRegion[];
54
+ readonly sourceHashes?: SemanticMergeCandidateAdmissionRecord['sourceHashes'];
55
+ readonly evidenceIds?: readonly string[];
56
+ readonly proofIds?: readonly string[];
57
+ readonly projectionRisk?: SemanticMergeCandidateProjectionRisk;
58
+ readonly readinessSortKey?: number;
59
+ readonly mergeAdmission?: SemanticMergeCandidateAdmissionRecord;
48
60
  readonly conflictClasses?: readonly SemanticMergeConflictClassRecord[];
49
61
  readonly conflictSummary?: SemanticMergeConflictSummary;
50
62
  readonly metadata?: SemanticMergeCandidateRecord['metadata'] & {
@@ -25,6 +25,7 @@ import type {
25
25
  UniversalAstLayerRecord
26
26
  } from '@shapeshift-labs/frontier-lang-kernel';
27
27
  import type { SemanticImportSidecarAdmission, SemanticImportSidecarQuality } from './semantic-sidecar-admission.js';
28
+ import type { SemanticMergeCandidateAdmissionRecord, SemanticMergeCandidateProjectionRisk } from './semantic-merge-candidates.js';
28
29
  import type { SemanticMergeConflictClass, SemanticMergeConflictSummary } from './semantic-merge-conflicts.js';
29
30
  import type { SemanticImportImpactSummary } from './semantic-impact.js';
30
31
  import type { Diagnostic } from '@shapeshift-labs/frontier-lang-checker';
@@ -274,6 +275,12 @@ export interface SemanticImportSidecar {
274
275
  readonly reasons: readonly string[];
275
276
  readonly conflictClasses?: readonly SemanticMergeConflictClass[];
276
277
  readonly conflictSummary?: SemanticMergeConflictSummary;
278
+ readonly changedSemanticRegions?: number;
279
+ readonly sourceHashes?: SemanticMergeCandidateAdmissionRecord['sourceHashes'];
280
+ readonly evidenceIds?: readonly string[];
281
+ readonly projectionRisk?: SemanticMergeCandidateProjectionRisk;
282
+ readonly readinessSortKey?: number;
283
+ readonly overlapSummary?: SemanticMergeCandidateAdmissionRecord['overlapSummary'];
277
284
  readonly risk?: string;
278
285
  readonly operationCount: number;
279
286
  }[];
@@ -309,7 +316,5 @@ export interface SemanticImportSidecar {
309
316
  readonly semanticImportExpected: boolean; readonly semanticImportExpectedSatisfied: boolean; readonly semanticImportExpectedMissingReasonCodes: readonly string[];
310
317
  readonly readiness: SemanticMergeReadiness; readonly emptySemanticIndex: boolean;
311
318
  };
312
- readonly metadata?: Record<string, unknown>;
313
- }
314
-
319
+ readonly metadata?: Record<string, unknown>; }
315
320
  export interface SemanticImportSidecarOptions { readonly id?: string; readonly generatedAt?: number; readonly regionPrefix?: string; readonly targetPath?: string; readonly expected?: boolean; readonly semanticImportExpected?: boolean; readonly metadata?: Record<string, unknown>; }
@@ -36,6 +36,115 @@ export interface SemanticSliceAdmissionMergeScore {
36
36
  readonly penalties: readonly string[];
37
37
  }
38
38
 
39
+ export interface SemanticSliceAdmissionSpan {
40
+ readonly path?: string;
41
+ readonly sourceId?: string;
42
+ readonly sourceHash?: string;
43
+ readonly startLine?: number;
44
+ readonly startColumn?: number;
45
+ readonly endLine?: number;
46
+ readonly endColumn?: number;
47
+ readonly startOffset?: number;
48
+ readonly endOffset?: number;
49
+ }
50
+
51
+ export interface SemanticSliceAdmissionSelectedSymbol {
52
+ readonly id?: string;
53
+ readonly name?: string;
54
+ readonly displayName?: string;
55
+ readonly kind?: string;
56
+ readonly signature?: string;
57
+ readonly nativeAstNodeId?: string;
58
+ readonly sourcePath?: string;
59
+ readonly sourceSpan?: SemanticSliceAdmissionSpan;
60
+ readonly ownershipRegionId?: string;
61
+ readonly ownershipRegionKey?: string;
62
+ readonly ownershipRegionKind?: string;
63
+ }
64
+
65
+ export interface SemanticSliceAdmissionSelectedRegion {
66
+ readonly id?: string;
67
+ readonly key?: string;
68
+ readonly conflictKey?: string;
69
+ readonly kind?: string;
70
+ readonly granularity?: string;
71
+ readonly symbolId?: string;
72
+ readonly symbolName?: string;
73
+ readonly nativeAstNodeId?: string;
74
+ readonly sourcePath?: string;
75
+ readonly sourceSpan?: SemanticSliceAdmissionSpan;
76
+ }
77
+
78
+ export interface SemanticSliceAdmissionSelectedNativeNode {
79
+ readonly id?: string;
80
+ readonly kind?: string;
81
+ readonly languageKind?: string;
82
+ readonly sourcePath?: string;
83
+ readonly sourceSpan?: SemanticSliceAdmissionSpan;
84
+ readonly parentId?: string;
85
+ readonly childCount: number;
86
+ }
87
+
88
+ export interface SemanticSliceAdmissionSelectedRelation {
89
+ readonly id?: string;
90
+ readonly predicate?: string;
91
+ readonly kind?: string;
92
+ readonly sourceId?: string;
93
+ readonly targetId?: string;
94
+ }
95
+
96
+ export interface SemanticSliceAdmissionSelectedOccurrence {
97
+ readonly id?: string;
98
+ readonly symbolId?: string;
99
+ readonly nativeAstNodeId?: string;
100
+ readonly role?: string;
101
+ readonly sourcePath?: string;
102
+ readonly sourceSpan?: SemanticSliceAdmissionSpan;
103
+ }
104
+
105
+ export interface SemanticSliceAdmissionSelectedSourceMapLink {
106
+ readonly id?: string;
107
+ readonly sourceMapId?: string;
108
+ readonly sourcePath?: string;
109
+ readonly sourceHash?: string;
110
+ readonly targetPath?: string;
111
+ readonly targetHash?: string;
112
+ readonly semanticSymbolId?: string;
113
+ readonly semanticOccurrenceId?: string;
114
+ readonly semanticNodeId?: string;
115
+ readonly nativeAstNodeId?: string;
116
+ readonly ownershipRegionId?: string;
117
+ readonly ownershipRegionKey?: string;
118
+ readonly ownershipRegionKind?: string;
119
+ readonly precision?: string;
120
+ readonly sourceSpan?: SemanticSliceAdmissionSpan;
121
+ }
122
+
123
+ export interface SemanticSliceAdmissionSelectedSourceFile {
124
+ readonly path?: string;
125
+ readonly sourceHash?: string;
126
+ readonly spanCount: number;
127
+ readonly excerptCount: number;
128
+ readonly sourceTextAvailable: boolean;
129
+ }
130
+
131
+ export interface SemanticSliceAdmissionSelectedSurface {
132
+ readonly entryRefs: readonly string[];
133
+ readonly matchedEntryRefs: readonly string[];
134
+ readonly unresolvedEntryRefs: readonly string[];
135
+ readonly symbols: readonly SemanticSliceAdmissionSelectedSymbol[];
136
+ readonly ownershipRegions: readonly SemanticSliceAdmissionSelectedRegion[];
137
+ readonly nativeNodes: readonly SemanticSliceAdmissionSelectedNativeNode[];
138
+ readonly relations: readonly SemanticSliceAdmissionSelectedRelation[];
139
+ readonly occurrences: readonly SemanticSliceAdmissionSelectedOccurrence[];
140
+ readonly sourceMapLinks: readonly SemanticSliceAdmissionSelectedSourceMapLink[];
141
+ readonly sourceSpans: readonly SemanticSliceAdmissionSpan[];
142
+ readonly sourceFiles: readonly SemanticSliceAdmissionSelectedSourceFile[];
143
+ readonly sourceHashes: SemanticSlice['mergeAdmission']['sourceHashes'];
144
+ readonly conflictKeys: readonly string[];
145
+ readonly ownershipKeys: readonly string[];
146
+ }
147
+
39
148
  export interface SemanticSliceAdmissionRecord {
40
149
  readonly kind: 'frontier.lang.semanticSliceAdmission';
41
150
  readonly version: 1;
@@ -66,6 +175,8 @@ export interface SemanticSliceAdmissionRecord {
66
175
  readonly conflictKeys: readonly string[];
67
176
  readonly ownershipKeys: readonly string[];
68
177
  readonly sourceHashes: SemanticSlice['mergeAdmission']['sourceHashes'];
178
+ readonly selectedSurface: SemanticSliceAdmissionSelectedSurface;
179
+ readonly evidence: readonly EvidenceRecord[];
69
180
  readonly testResult?: SemanticSliceTestResult;
70
181
  readonly reasons: readonly string[];
71
182
  readonly metadata: Record<string, unknown>;
@@ -63,6 +63,19 @@ export type SemanticSliceInput =
63
63
  readonly source?: ImportNativeSourceOptions;
64
64
  };
65
65
 
66
+ export interface SemanticSliceSourceHashExpectation {
67
+ readonly path?: string;
68
+ readonly sourcePath?: string;
69
+ readonly sourceHash?: string;
70
+ readonly hash?: string;
71
+ readonly expected?: string;
72
+ }
73
+
74
+ export type SemanticSliceSourceHashExpectations =
75
+ | Readonly<Record<string, string>>
76
+ | ReadonlyMap<string, string>
77
+ | readonly (SemanticSliceSourceHashExpectation | readonly [string | undefined, string])[];
78
+
66
79
  export interface CreateSemanticSliceOptions {
67
80
  readonly id?: string;
68
81
  readonly generatedAt?: number;
@@ -73,6 +86,14 @@ export interface CreateSemanticSliceOptions {
73
86
  readonly symbol?: string;
74
87
  readonly region?: string;
75
88
  readonly nativeNodeId?: string;
89
+ readonly expectedSymbols?: readonly string[] | string;
90
+ readonly expectedSymbolRefs?: readonly string[] | string;
91
+ readonly expectedRegions?: readonly string[] | string;
92
+ readonly expectedRegionRefs?: readonly string[] | string;
93
+ readonly expectedSourceHashes?: SemanticSliceSourceHashExpectations;
94
+ readonly expectedSymbolCount?: number;
95
+ readonly expectedRegionCount?: number;
96
+ readonly expectedSourceFileCount?: number;
76
97
  readonly entryRefs?: readonly string[] | string;
77
98
  readonly semanticRefs?: readonly string[] | string;
78
99
  readonly refs?: readonly string[] | string;
@@ -126,7 +147,12 @@ export interface SemanticSliceSourceFile {
126
147
 
127
148
  export interface SemanticSliceExpectedAssertion {
128
149
  readonly id: string;
129
- readonly expected: boolean;
150
+ readonly category?: 'symbol' | 'region' | 'sourceHash' | 'summaryCount' | string;
151
+ readonly ref?: string;
152
+ readonly path?: string;
153
+ readonly key?: string;
154
+ readonly expected: unknown;
155
+ readonly actual?: unknown;
130
156
  }
131
157
 
132
158
  export interface SemanticSlice {
@@ -195,6 +221,14 @@ export interface TestSemanticSliceOptions {
195
221
  readonly generatedAt?: number;
196
222
  readonly requireSourceMapLinks?: boolean;
197
223
  readonly currentSources?: Readonly<Record<string, string>> | ReadonlyMap<string, string>;
224
+ readonly expectedSymbols?: readonly string[] | string;
225
+ readonly expectedSymbolRefs?: readonly string[] | string;
226
+ readonly expectedRegions?: readonly string[] | string;
227
+ readonly expectedRegionRefs?: readonly string[] | string;
228
+ readonly expectedSourceHashes?: SemanticSliceSourceHashExpectations;
229
+ readonly expectedSymbolCount?: number;
230
+ readonly expectedRegionCount?: number;
231
+ readonly expectedSourceFileCount?: number;
198
232
  readonly metadata?: Record<string, unknown>;
199
233
  }
200
234
 
@@ -220,6 +254,7 @@ export interface SemanticSliceTestResult {
220
254
  readonly warnings: number;
221
255
  readonly failed: number;
222
256
  readonly sourceHashChecks: number;
257
+ readonly expectedAssertions: number;
223
258
  readonly symbols: number;
224
259
  readonly ownershipRegions: number;
225
260
  readonly sourceMapLinks: number;
@@ -9,6 +9,13 @@ import type { NativeParserFeatureCategory } from './native-parser-features.js';
9
9
  import type { ProjectionSourceProjectionCoverage, ProjectionTargetCoverageEntry } from './projection-coverage.js';
10
10
  import type { ProjectionReadinessTargetCell } from './projection-readiness.js';
11
11
  import type { UniversalCapabilityMatrix, UniversalCapabilityMatrixOptions } from './universal-capability.js';
12
+ import type {
13
+ UniversalRuntimeAdapterRequirement,
14
+ UniversalRuntimeCapabilityKind,
15
+ UniversalRuntimeCapabilityMatrix,
16
+ UniversalRuntimeCapabilityRoute,
17
+ UniversalRuntimeHostProfile
18
+ } from './universal-runtime-capabilities.js';
12
19
 
13
20
  export type UniversalConversionRouteMode =
14
21
  | 'preserve-source'
@@ -76,6 +83,19 @@ export interface UniversalConversionRouteEvidence {
76
83
  readonly targetLossKinds: readonly NativeImportKnownLossKind[];
77
84
  }
78
85
 
86
+ export interface UniversalConversionRouteRuntime {
87
+ readonly routeId?: string;
88
+ readonly source?: UniversalRuntimeCapabilityRoute['source'];
89
+ readonly target?: UniversalRuntimeCapabilityRoute['target'];
90
+ readonly requiredCapabilities: readonly UniversalRuntimeCapabilityKind[];
91
+ readonly satisfiedCapabilities: readonly UniversalRuntimeCapabilityKind[];
92
+ readonly adapterRequirements: readonly UniversalRuntimeAdapterRequirement[];
93
+ readonly missingCapabilities: readonly UniversalRuntimeCapabilityKind[];
94
+ readonly readiness: SemanticMergeReadiness;
95
+ readonly blockers: readonly string[];
96
+ readonly review: readonly string[];
97
+ }
98
+
79
99
  export interface UniversalConversionRouteMergeRefs {
80
100
  readonly planId: string;
81
101
  readonly routeId: string;
@@ -122,6 +142,8 @@ export interface UniversalConversionRoute {
122
142
  readonly stubs: ProjectionSourceProjectionCoverage;
123
143
  };
124
144
  readonly projectionReadiness?: ProjectionReadinessTargetCell;
145
+ readonly runtime: UniversalConversionRouteRuntime;
146
+ readonly runtimeAdapterRequirements: readonly UniversalRuntimeAdapterRequirement[];
125
147
  readonly evidence: UniversalConversionRouteEvidence;
126
148
  readonly missingEvidence: readonly string[];
127
149
  readonly blockers: readonly string[];
@@ -153,6 +175,8 @@ export interface UniversalConversionPlan {
153
175
  readonly stubOnlyRoutes: number;
154
176
  readonly semanticIndexOnlyRoutes: number;
155
177
  readonly missingEvidence: number;
178
+ readonly runtimeAdapterRequirements: number;
179
+ readonly runtimeRoutesWithAdapters: number;
156
180
  readonly blockers: number;
157
181
  readonly reviewReasons: number;
158
182
  readonly autoMergeClaims: 0;
@@ -160,6 +184,7 @@ export interface UniversalConversionPlan {
160
184
  };
161
185
  readonly matrices: {
162
186
  readonly universalCapability: UniversalCapabilityMatrix;
187
+ readonly runtimeCapabilities: UniversalRuntimeCapabilityMatrix;
163
188
  readonly projectionReadiness?: UniversalCapabilityMatrix['matrices']['projectionReadiness'];
164
189
  readonly projectionTargets?: UniversalCapabilityMatrix['matrices']['projectionTargets'];
165
190
  };
@@ -175,6 +200,40 @@ export interface UniversalConversionPlan {
175
200
  export interface UniversalConversionPlanOptions extends UniversalCapabilityMatrixOptions {
176
201
  readonly id?: string;
177
202
  readonly universalCapabilityMatrix?: UniversalCapabilityMatrix;
203
+ readonly universalRuntimeCapabilityMatrix?: UniversalRuntimeCapabilityMatrix;
204
+ readonly hostProfiles?: readonly UniversalRuntimeHostProfile[];
205
+ readonly runtimeHosts?: readonly UniversalRuntimeHostProfile[];
206
+ readonly sourceHosts?: readonly (string | UniversalRuntimeHostProfile)[] | Readonly<Record<string, string | UniversalRuntimeHostProfile>>;
207
+ readonly sourceRuntimeHosts?: readonly (string | UniversalRuntimeHostProfile)[] | Readonly<Record<string, string | UniversalRuntimeHostProfile>>;
208
+ readonly targetHosts?: readonly (string | UniversalRuntimeHostProfile)[] | Readonly<Record<string, string | UniversalRuntimeHostProfile>>;
209
+ readonly targetRuntimeHosts?: readonly (string | UniversalRuntimeHostProfile)[] | Readonly<Record<string, string | UniversalRuntimeHostProfile>>;
210
+ readonly sourceRuntime?: string;
211
+ readonly targetRuntime?: string;
212
+ readonly sourceRuntimes?: Readonly<Record<string, string>>;
213
+ readonly targetRuntimes?: Readonly<Record<string, string>>;
214
+ readonly runtimeRequirements?: readonly (
215
+ | UniversalRuntimeCapabilityKind
216
+ | {
217
+ readonly capability?: UniversalRuntimeCapabilityKind;
218
+ readonly kind?: UniversalRuntimeCapabilityKind;
219
+ readonly capabilities?: readonly UniversalRuntimeCapabilityKind[];
220
+ readonly requiredCapabilities?: readonly UniversalRuntimeCapabilityKind[];
221
+ readonly sourceLanguage?: FrontierSourceLanguage | string;
222
+ readonly language?: FrontierSourceLanguage | string;
223
+ readonly sourceRuntime?: string;
224
+ readonly runtime?: string;
225
+ readonly sourceHost?: string | UniversalRuntimeHostProfile;
226
+ readonly sourceRuntimeHost?: string | UniversalRuntimeHostProfile;
227
+ readonly target?: FrontierCompileTarget | string;
228
+ readonly targetRuntime?: string;
229
+ readonly targetHost?: string | UniversalRuntimeHostProfile;
230
+ readonly targetRuntimeHost?: string | UniversalRuntimeHostProfile;
231
+ readonly reason?: string;
232
+ readonly evidenceIds?: readonly string[];
233
+ }
234
+ )[];
235
+ readonly requiredRuntimeCapabilities?: UniversalConversionPlanOptions['runtimeRequirements'];
236
+ readonly effects?: UniversalConversionPlanOptions['runtimeRequirements'];
178
237
  readonly evidence?: readonly EvidenceRecord[];
179
238
  }
180
239