@shapeshift-labs/frontier-lang-compiler 0.2.66 → 0.2.68

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 (48) hide show
  1. package/README.md +6 -2
  2. package/bench/smoke.mjs +15 -1
  3. package/bench/universal-fixture-suite.mjs +183 -0
  4. package/dist/declarations/native-project-admission.d.ts +115 -0
  5. package/dist/declarations/roundtrip-audit.d.ts +186 -0
  6. package/dist/declarations/roundtrip.d.ts +2 -53
  7. package/dist/declarations/runtime.d.ts +0 -11
  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-slice-admission.d.ts +111 -0
  11. package/dist/declarations/semantic-slice.d.ts +36 -1
  12. package/dist/declarations/universal-conversion-plan.d.ts +59 -0
  13. package/dist/declarations/universal-runtime-capabilities.d.ts +171 -0
  14. package/dist/index.d.ts +1 -0
  15. package/dist/index.js +1 -0
  16. package/dist/internal/index-impl/createNativeRoundtripEvidence.js +54 -49
  17. package/dist/internal/index-impl/createSemanticSlice.js +1 -1
  18. package/dist/internal/index-impl/createSemanticSliceAdmissionRecord.js +10 -1
  19. package/dist/internal/index-impl/expandSemanticSliceSelection.js +0 -1
  20. package/dist/internal/index-impl/nativeRoundtripAudit.js +217 -0
  21. package/dist/internal/index-impl/projectImportAdmissionImportEvidence.js +160 -0
  22. package/dist/internal/index-impl/projectImportAdmissionLanguageSummaries.js +247 -0
  23. package/dist/internal/index-impl/projectImportAdmissionRanks.js +52 -0
  24. package/dist/internal/index-impl/projectImportAdmissionSummaries.js +46 -111
  25. package/dist/internal/index-impl/projectImportAdmissionTasks.js +239 -0
  26. package/dist/internal/index-impl/semanticHistoryRecordNormalizers.js +151 -0
  27. package/dist/internal/index-impl/semanticHistoryRecordOverlaps.js +113 -0
  28. package/dist/internal/index-impl/semanticHistoryRecords.js +210 -149
  29. package/dist/internal/index-impl/semanticSliceAdmissionSurface.js +142 -0
  30. package/dist/internal/index-impl/semanticSliceExpectationAssertions.js +100 -0
  31. package/dist/internal/index-impl/semanticSliceExpectationRecords.js +75 -0
  32. package/dist/internal/index-impl/semanticSliceExpectedAssertions.js +5 -2
  33. package/dist/internal/index-impl/testSemanticSlice.js +4 -1
  34. package/dist/language-adapter-package-contracts.js +12 -57
  35. package/dist/language-adapter-package-rows.js +116 -0
  36. package/dist/universal-conversion-plan-summary.js +42 -0
  37. package/dist/universal-conversion-plan.js +46 -40
  38. package/dist/universal-runtime-capabilities.js +92 -0
  39. package/dist/universal-runtime-host-selectors.js +192 -0
  40. package/dist/universal-runtime-profiles.js +109 -0
  41. package/dist/universal-runtime-route-records.js +162 -0
  42. package/examples/js-frontier-rust-workbench-client.mjs +58 -1
  43. package/examples/js-frontier-rust-workbench-convert.mjs +161 -0
  44. package/examples/js-frontier-rust-workbench-route-styles.mjs +126 -0
  45. package/examples/js-frontier-rust-workbench-route.mjs +190 -0
  46. package/examples/js-frontier-rust-workbench-styles.mjs +3 -38
  47. package/examples/js-frontier-rust-workbench.mjs +22 -128
  48. package/package.json +1 -1
package/README.md CHANGED
@@ -439,6 +439,8 @@ const imported = importNativeSource({
439
439
  const slice = createSemanticSlice(imported, {
440
440
  entryRefs: ['symbol:parseExpression'],
441
441
  includeDependencies: true,
442
+ expectedSymbols: ['parseExpression'],
443
+ expectedSourceHashes: { 'src/parser.ts': imported.nativeSource.sourceHash },
442
444
  focusedCommands: ['npm test -- parser-expression'],
443
445
  fixtureHints: ['operator precedence corpus']
444
446
  });
@@ -448,17 +450,19 @@ console.log(slice.mergeAdmission.conflictKeys); // semantic ownership keys
448
450
  console.log(slice.sourceFiles[0].sourceHash); // stale-check input for admission
449
451
 
450
452
  const gate = testSemanticSlice(slice, {
451
- currentSources: { 'src/parser.ts': sourceText }
453
+ currentSources: { 'src/parser.ts': sourceText },
454
+ expectedRegions: [slice.ownershipRegions[0].key]
452
455
  });
453
456
 
454
457
  console.log(gate.status); // "passed", "needs-review", or "failed"
455
458
  const admission = createSemanticSliceAdmissionRecord(slice, { testResult: gate });
456
459
  console.log(admission.mergeScore.value); // sortable 0-100 semantic merge score
460
+ console.log(admission.selectedSurface.sourceHashes); // compact selected-surface evidence
457
461
  console.log(admission.autoMergeClaim); // always false
458
462
  console.log(writeSemanticSliceJson(slice)); // stable JSON for worker inputs
459
463
  ```
460
464
 
461
- A semantic slice is the small unit a swarm can hand to a worker instead of copying a full repository. It carries the selected symbols, ownership regions, native nodes, relations, occurrences, source-map links, source spans, source excerpts, source hashes, focused verification commands, fixture hints, and merge-admission metadata. It does not claim the patch is correct; it makes the context and conflicts machine-readable so admission scoring can combine changed ownership, focused test status, stale/source-hash checks, evidence, and semantic risk in one sortable record.
465
+ A semantic slice is the small unit a swarm can hand to a worker instead of copying a full repository. It carries the selected symbols, ownership regions, native nodes, relations, occurrences, source-map links, source spans, source excerpts, source hashes, focused verification commands, fixture hints, and merge-admission metadata. Slice tests can assert exact selected symbols, regions, source-file hashes, and expected counts; admission records also include a compact `selectedSurface` plus `semantic-slice-selected-surface` evidence with hashes and spans but no whole-repository source copy. It does not claim the patch is correct; it makes the context and conflicts machine-readable so admission scoring can combine changed ownership, focused test status, stale/source-hash checks, evidence, and semantic risk in one sortable record.
462
466
 
463
467
  Slice admission records add a compact `frontier.lang.semanticMergeScore.v1` score with semantic-selection, source-freshness, ownership-isolation, verification-evidence, and review-risk components. They are built for coordinator queues and dashboards: sort likely useful slices first, reject stale or empty slices early, and keep correctness proof separate from merge metadata.
464
468
 
package/bench/smoke.mjs CHANGED
@@ -3,12 +3,14 @@ import { collectNativeImports } from './native-import-suite.mjs';
3
3
  import { measureNativeMatrices } from './native-matrix-suite.mjs';
4
4
  import { measureNativeTransformations } from './native-transform-suite.mjs';
5
5
  import { measureSourceChangeSuites } from './source-change-suite.mjs';
6
+ import { measureUniversalFixtureSuite } from './universal-fixture-suite.mjs';
6
7
 
7
8
  const compileMetrics = measureFrontierCompile();
8
9
  const importMetrics = await collectNativeImports();
9
10
  const matrixMetrics = measureNativeMatrices(importMetrics.nativeImportResults, importMetrics.adapters);
10
11
  const transformMetrics = measureNativeTransformations(importMetrics.nativeImportResults);
11
12
  const sourceChangeMetrics = measureSourceChangeSuites();
13
+ const universalFixtureMetrics = measureUniversalFixtureSuite(importMetrics.adapters);
12
14
 
13
15
  console.log(JSON.stringify({
14
16
  compiles: 250,
@@ -107,5 +109,17 @@ console.log(JSON.stringify({
107
109
  externalSemanticImports: sourceChangeMetrics.externalSemanticImports,
108
110
  externalSemanticSymbols: sourceChangeMetrics.externalSemanticSymbols,
109
111
  externalSemanticMappings: sourceChangeMetrics.externalSemanticMappings,
110
- externalSemanticDurationMs: Number(sourceChangeMetrics.externalSemanticDurationMs.toFixed(2))
112
+ externalSemanticDurationMs: Number(sourceChangeMetrics.externalSemanticDurationMs.toFixed(2)),
113
+ universalFixtureImports: universalFixtureMetrics.imports,
114
+ universalFixtureLanguages: universalFixtureMetrics.languages,
115
+ universalFixtureRoutes: universalFixtureMetrics.routes,
116
+ universalFixtureTargetAdapterRoutes: universalFixtureMetrics.targetAdapterRoutes,
117
+ universalFixtureSemanticIndexOnlyRoutes: universalFixtureMetrics.semanticIndexOnlyRoutes,
118
+ universalFixtureRouteScoreMin: universalFixtureMetrics.routeScoreMin,
119
+ universalFixtureRouteScoreMax: universalFixtureMetrics.routeScoreMax,
120
+ universalFixtureLossSummaries: universalFixtureMetrics.lossSummaries,
121
+ universalFixtureLossCategories: universalFixtureMetrics.lossCategories,
122
+ universalFixtureCandidateRecords: universalFixtureMetrics.candidateRecords,
123
+ universalFixtureBestCandidateSortKey: universalFixtureMetrics.bestCandidateSortKey,
124
+ universalFixtureDurationMs: Number(universalFixtureMetrics.durationMs.toFixed(2))
111
125
  }));
@@ -0,0 +1,183 @@
1
+ import { performance } from 'node:perf_hooks';
2
+ import {
3
+ createSemanticMergeCandidateAdmissionRecord,
4
+ createUniversalCapabilityMatrix,
5
+ createUniversalConversionArtifacts,
6
+ createUniversalConversionPlan,
7
+ diffNativeSources,
8
+ importNativeSource,
9
+ sortSemanticMergeCandidateAdmissionRecords,
10
+ summarizeNativeImportLosses
11
+ } from '../dist/index.js';
12
+ import { createBenchMatrixAdapters } from './native-adapters.mjs';
13
+
14
+ const requiredFeatures = ['syntax', 'semantic', 'sourcePreservation'];
15
+ const targets = ['javascript', 'python', 'rust', 'c'];
16
+ const handledHighRiskLossKinds = [
17
+ 'conditionalCompilation',
18
+ 'dynamicDispatch',
19
+ 'dynamicRuntime',
20
+ 'generatedCode',
21
+ 'macroExpansion',
22
+ 'macroHygiene',
23
+ 'metaprogramming',
24
+ 'overloadResolution',
25
+ 'preprocessor',
26
+ 'reflection',
27
+ 'typeInference',
28
+ 'unsupportedSemantic',
29
+ 'unsupportedSyntax'
30
+ ];
31
+
32
+ export function measureUniversalFixtureSuite(adapters) {
33
+ const start = performance.now();
34
+ const imports = createImports();
35
+ const targetAdapters = createTargetAdapters();
36
+ const matrix = createUniversalCapabilityMatrix({
37
+ generatedAt: 1201,
38
+ imports,
39
+ adapters: createBenchMatrixAdapters(adapters),
40
+ targetAdapters,
41
+ targets,
42
+ requiredFeatures
43
+ });
44
+ const plan = createUniversalConversionPlan({
45
+ generatedAt: 1202,
46
+ imports,
47
+ adapters: createBenchMatrixAdapters(adapters),
48
+ targetAdapters,
49
+ targets,
50
+ requiredFeatures,
51
+ evidence: [{
52
+ id: 'bench_universal_fixture_replay',
53
+ kind: 'conversion-replay-proof',
54
+ status: 'passed'
55
+ }]
56
+ });
57
+ const artifacts = createUniversalConversionArtifacts(plan, { generatedAt: 1203 });
58
+ const lossSummaries = imports.map((imported) => summarizeNativeImportLosses(imported.losses, {
59
+ evidence: imported.evidence,
60
+ exactAst: imported.metadata?.nativeImportLossSummary?.exactAst
61
+ }));
62
+ const candidateRecords = sortSemanticMergeCandidateAdmissionRecords(createCandidateRecords());
63
+ const routeScores = plan.routes.map((route) => route.mergeScore.value);
64
+ return {
65
+ imports: imports.length,
66
+ languages: matrix.summary.languages,
67
+ routes: plan.routes.length,
68
+ targetAdapterRoutes: plan.summary.targetAdapterRoutes,
69
+ semanticIndexOnlyRoutes: plan.summary.semanticIndexOnlyRoutes,
70
+ routeScoreMin: Math.min(...routeScores),
71
+ routeScoreMax: Math.max(...routeScores),
72
+ lossSummaries: lossSummaries.length,
73
+ lossCategories: lossSummaries.reduce((sum, summary) => sum + summary.categories.length, 0),
74
+ candidateRecords: candidateRecords.length,
75
+ bestCandidateSortKey: candidateRecords[0]?.readinessSortKey ?? 0,
76
+ artifactAdmissionRecords: artifacts.summary.admissionRecords,
77
+ durationMs: performance.now() - start
78
+ };
79
+ }
80
+
81
+ function createImports() {
82
+ return [{
83
+ language: 'javascript',
84
+ sourcePath: 'src/bench-universal.js',
85
+ sourceText: 'export function benchUniversal(value) { return value + 1; }\n'
86
+ }, {
87
+ language: 'python',
88
+ sourcePath: 'bench_universal.py',
89
+ sourceText: 'def bench_universal(value):\n return value + 1\n'
90
+ }, {
91
+ language: 'rust',
92
+ sourcePath: 'src/bench_universal.rs',
93
+ sourceText: 'pub fn bench_universal(value: i32) -> i32 { value + 1 }\nmacro_rules! bench_universal_macro { () => {} }\n'
94
+ }, {
95
+ language: 'c',
96
+ sourcePath: 'bench_universal.h',
97
+ sourceText: '#define BENCH_UNIVERSAL 1\ntypedef struct BenchUniversal { int value; } BenchUniversal;\nint bench_universal(void);\n'
98
+ }, {
99
+ language: 'go',
100
+ sourcePath: 'bench_universal.go',
101
+ sourceText: 'package bench\nfunc BenchUniversal(value int) int { return value + 1 }\n'
102
+ }, {
103
+ language: 'swift',
104
+ sourcePath: 'BenchUniversal.swift',
105
+ sourceText: 'struct BenchUniversal { var value: Int }\nfunc benchUniversal(_ value: Int) -> Int { value + 1 }\n'
106
+ }, {
107
+ language: 'r',
108
+ sourcePath: 'bench_universal.R',
109
+ sourceText: 'bench_universal <- function(value) { value + 1 }\neval(parse(text = "generated <- TRUE"))\n'
110
+ }].map((fixture) => importNativeSource(fixture));
111
+ }
112
+
113
+ function createTargetAdapters() {
114
+ return [{
115
+ id: 'bench-js-to-rust-universal-fixture',
116
+ sourceLanguage: 'javascript',
117
+ target: 'rust',
118
+ coverage: { readiness: 'ready', handledLossKinds: handledHighRiskLossKinds },
119
+ project() {
120
+ return { output: 'pub fn bench_js_to_rust() {}\n', readiness: 'ready' };
121
+ }
122
+ }, {
123
+ id: 'bench-python-to-rust-universal-fixture',
124
+ sourceLanguage: 'python',
125
+ target: 'rust',
126
+ coverage: { readiness: 'ready', handledLossKinds: handledHighRiskLossKinds },
127
+ project() {
128
+ return { output: 'pub fn bench_python_to_rust() {}\n', readiness: 'ready' };
129
+ }
130
+ }, {
131
+ id: 'bench-c-to-rust-universal-fixture',
132
+ sourceLanguage: 'c',
133
+ target: 'rust',
134
+ coverage: { readiness: 'ready', handledLossKinds: handledHighRiskLossKinds },
135
+ project() {
136
+ return { output: 'pub fn bench_c_to_rust() {}\n', readiness: 'ready' };
137
+ }
138
+ }];
139
+ }
140
+
141
+ function createCandidateRecords() {
142
+ return [{
143
+ language: 'javascript',
144
+ sourcePath: 'src/bench-candidate.js',
145
+ beforeSourceText: 'export function benchCandidate(value) { return value + 1; }\n',
146
+ afterSourceText: 'export function benchCandidate(value) { return value + 2; }\n',
147
+ readiness: 'ready'
148
+ }, {
149
+ language: 'python',
150
+ sourcePath: 'bench_candidate.py',
151
+ beforeSourceText: 'def bench_candidate(value):\n return value + 1\n',
152
+ afterSourceText: 'def bench_candidate(value):\n return value + 2\n',
153
+ readiness: 'ready-with-losses'
154
+ }, {
155
+ language: 'rust',
156
+ sourcePath: 'src/bench_candidate.rs',
157
+ beforeSourceText: 'pub fn bench_candidate(value: i32) -> i32 { value + 1 }\n',
158
+ afterSourceText: 'pub fn bench_candidate(value: i32) -> i32 { value + 2 }\n',
159
+ readiness: 'needs-review'
160
+ }, {
161
+ language: 'c',
162
+ sourcePath: 'bench_candidate.c',
163
+ beforeSourceText: 'int bench_candidate(int value) { return value + 1; }\n',
164
+ afterSourceText: 'int bench_candidate(int value) { return value + 2; }\n',
165
+ readiness: 'blocked'
166
+ }].map((spec, index) => createSemanticMergeCandidateAdmissionRecord(diffNativeSources({
167
+ id: `bench_candidate_change_${index}`,
168
+ language: spec.language,
169
+ sourcePath: spec.sourcePath,
170
+ beforeSourceText: spec.beforeSourceText,
171
+ afterSourceText: spec.afterSourceText,
172
+ evidenceId: `bench_candidate_evidence_${index}`,
173
+ patchId: `bench_candidate_patch_${index}`,
174
+ mergeCandidateId: `bench_candidate_${index}`
175
+ }), {
176
+ readiness: spec.readiness,
177
+ evidence: [{
178
+ id: `bench_candidate_verification_${index}`,
179
+ kind: 'candidate-verification-proof',
180
+ status: 'passed'
181
+ }]
182
+ }));
183
+ }
@@ -9,6 +9,107 @@ export type NativeProjectImportAdmissionPriority = 'low' | 'normal' | 'high' | '
9
9
  export type NativeProjectImportAdmissionRisk = 'low' | 'medium' | 'high' | 'unknown';
10
10
  export type NativeProjectSourcePreservationQuality = 'exact' | 'lossy' | 'missing' | 'stale' | 'empty';
11
11
 
12
+ export interface NativeProjectAdmissionParserEvidence {
13
+ readonly parser?: string;
14
+ readonly astFormat?: string;
15
+ readonly exactness?: string;
16
+ readonly semanticCoverageLevel?: string;
17
+ readonly exactAst: boolean;
18
+ readonly tokens: boolean;
19
+ readonly trivia: boolean;
20
+ readonly diagnostics: boolean;
21
+ readonly diagnosticCount: number;
22
+ readonly sourceRanges: boolean;
23
+ readonly generatedRanges: boolean;
24
+ readonly evidenceRecords: number;
25
+ readonly missing: boolean;
26
+ }
27
+
28
+ export interface NativeProjectAdmissionParserEvidenceSummary {
29
+ readonly parsers: readonly string[];
30
+ readonly byParser: Readonly<Record<string, number>>;
31
+ readonly byExactness: Readonly<Record<string, number>>;
32
+ readonly semanticCoverageLevels: readonly string[];
33
+ readonly exactAstSources: number;
34
+ readonly tokenSources: number;
35
+ readonly triviaSources: number;
36
+ readonly sourceRangeSources: number;
37
+ readonly generatedRangeSources: number;
38
+ readonly diagnosticsSources: number;
39
+ readonly missingParserSources: number;
40
+ readonly evidenceRecords: number;
41
+ }
42
+
43
+ export interface NativeProjectAdmissionSemanticMergeScoreSummary {
44
+ readonly sourceCount: number;
45
+ readonly min: number;
46
+ readonly max: number;
47
+ readonly average: number;
48
+ readonly sortKey: number;
49
+ readonly lowestSourcePaths: readonly string[];
50
+ }
51
+
52
+ export interface NativeProjectAdmissionMissingEvidenceHint {
53
+ readonly evidenceKey?: string;
54
+ readonly task: string;
55
+ readonly count: number;
56
+ readonly sourcePaths: readonly string[];
57
+ readonly languages: readonly string[];
58
+ readonly lossIds: readonly string[];
59
+ readonly lossKinds: readonly string[];
60
+ readonly lossClasses: readonly string[];
61
+ readonly readiness: SemanticMergeReadiness;
62
+ }
63
+
64
+ export interface NativeProjectAdmissionTaskHint {
65
+ readonly id?: string;
66
+ readonly task: string;
67
+ readonly reason?: string;
68
+ readonly priority: NativeProjectImportAdmissionPriority;
69
+ readonly readiness: SemanticMergeReadiness;
70
+ readonly count: number;
71
+ readonly sourcePaths: readonly string[];
72
+ readonly languages: readonly string[];
73
+ readonly lossClasses: readonly string[];
74
+ readonly evidenceKeys: readonly string[];
75
+ }
76
+
77
+ export interface NativeProjectAdmissionSourceSummary {
78
+ readonly id?: string;
79
+ readonly language: FrontierSourceLanguage | string;
80
+ readonly sourcePath?: string;
81
+ readonly sourceHash?: string;
82
+ readonly readiness: SemanticMergeReadiness;
83
+ readonly parser?: string;
84
+ readonly parserEvidence: NativeProjectAdmissionParserEvidence;
85
+ readonly semanticCounts: {
86
+ readonly symbols: number;
87
+ readonly occurrences: number;
88
+ readonly relations: number;
89
+ readonly facts: number;
90
+ };
91
+ readonly semanticSymbols: number;
92
+ readonly emptySemanticEvidence: boolean;
93
+ readonly sourcePreservationQuality: NativeProjectSourcePreservationQuality;
94
+ readonly lossClasses: readonly string[];
95
+ readonly semanticMergeScore: number;
96
+ readonly missingEvidence: readonly NativeProjectAdmissionMissingEvidenceHint[];
97
+ readonly nextMissingTask?: NativeProjectAdmissionTaskHint;
98
+ readonly nextMissingTasks: readonly NativeProjectAdmissionTaskHint[];
99
+ }
100
+
101
+ export interface NativeProjectAdmissionLanguageReadinessSummary {
102
+ readonly language: FrontierSourceLanguage | string;
103
+ readonly readiness: SemanticMergeReadiness;
104
+ readonly sourceCount: number;
105
+ readonly sourcePaths: readonly string[];
106
+ readonly byLossClass: Readonly<Record<string, number>>;
107
+ readonly parserEvidence: NativeProjectAdmissionParserEvidenceSummary;
108
+ readonly semanticMergeScore: NativeProjectAdmissionSemanticMergeScoreSummary;
109
+ readonly topMissingEvidence: readonly NativeProjectAdmissionMissingEvidenceHint[];
110
+ readonly nextMissingTasks: readonly NativeProjectAdmissionTaskHint[];
111
+ }
112
+
12
113
  export interface NativeProjectAdmissionLanguageSummary {
13
114
  readonly language: FrontierSourceLanguage | string;
14
115
  readonly sourceCount: number;
@@ -20,12 +121,26 @@ export interface NativeProjectAdmissionLanguageSummary {
20
121
  readonly staleSourcePaths: readonly string[];
21
122
  readonly mergeCandidates: number;
22
123
  readonly highestRisk: NativeProjectImportAdmissionRisk;
124
+ readonly byReadiness: Readonly<Record<string, number>>;
125
+ readonly byLossClass: Readonly<Record<string, number>>;
126
+ readonly parserEvidence: NativeProjectAdmissionParserEvidenceSummary;
127
+ readonly semanticMergeScore: NativeProjectAdmissionSemanticMergeScoreSummary;
128
+ readonly topMissingEvidence: readonly NativeProjectAdmissionMissingEvidenceHint[];
129
+ readonly nextMissingTasks: readonly NativeProjectAdmissionTaskHint[];
23
130
  }
24
131
 
25
132
  export interface NativeProjectAdmissionLanguages {
26
133
  readonly total: number;
27
134
  readonly byReadiness: Readonly<Record<string, number>>;
135
+ readonly bySourceReadiness: Readonly<Record<string, number>>;
136
+ readonly byLossClass: Readonly<Record<string, number>>;
28
137
  readonly bySourcePreservationQuality: Readonly<Record<string, number>>;
138
+ readonly parserEvidence: NativeProjectAdmissionParserEvidenceSummary;
139
+ readonly semanticMergeScore: NativeProjectAdmissionSemanticMergeScoreSummary;
140
+ readonly topMissingEvidence: readonly NativeProjectAdmissionMissingEvidenceHint[];
141
+ readonly nextMissingTasks: readonly NativeProjectAdmissionTaskHint[];
142
+ readonly sourceRows: readonly NativeProjectAdmissionSourceSummary[];
143
+ readonly readinessRows: readonly NativeProjectAdmissionLanguageReadinessSummary[];
29
144
  readonly rows: readonly NativeProjectAdmissionLanguageSummary[];
30
145
  }
31
146
 
@@ -0,0 +1,186 @@
1
+ import type {
2
+ CompileTarget,
3
+ FrontierSourceLanguage,
4
+ SemanticMergeReadiness,
5
+ SourceMapMappingRecord
6
+ } from '@shapeshift-labs/frontier-lang-kernel';
7
+ import type { ProjectionTargetLossClass } from './projection-coverage.js';
8
+ import type { NativeSourceCompileOutputMode, NativeSourceProjectionMode } from './native-project.js';
9
+
10
+ export type NativeRoundtripSourceMapPrecision = SourceMapMappingRecord['precision'] | 'line' | 'declaration' | 'estimated' | 'unknown' | 'none' | string;
11
+
12
+ export type NativeRoundtripAuditDisposition =
13
+ | 'reversible'
14
+ | 'preserved-source'
15
+ | 'stub-only'
16
+ | 'adapter-projected'
17
+ | 'review-required';
18
+
19
+ export type NativeRoundtripAuditClaim =
20
+ | 'source-text-reversible'
21
+ | 'source-preserved'
22
+ | 'declaration-stubs-only'
23
+ | 'host-adapter-projected'
24
+ | 'review-required';
25
+
26
+ export interface NativeRoundtripSourceMapEvidence {
27
+ readonly total: number;
28
+ readonly ids: readonly string[];
29
+ readonly mappings: number;
30
+ readonly precision: NativeRoundtripSourceMapPrecision;
31
+ readonly byPrecision: Readonly<Record<string, number>>;
32
+ readonly byOrigin: Readonly<Record<string, number>>;
33
+ readonly withSourceSpan: number;
34
+ readonly withGeneratedSpan: number;
35
+ readonly withSemanticSymbol: number;
36
+ readonly targetPaths: readonly string[];
37
+ }
38
+
39
+ export interface NativeRoundtripRoutePathSignal {
40
+ readonly selected: boolean;
41
+ readonly available: boolean;
42
+ readonly reasonCodes: readonly string[];
43
+ }
44
+
45
+ export interface NativeRoundtripRoutePathsAudit {
46
+ readonly reversible: NativeRoundtripRoutePathSignal;
47
+ readonly preservedSource: NativeRoundtripRoutePathSignal;
48
+ readonly stubOnly: NativeRoundtripRoutePathSignal;
49
+ readonly adapterProjected: NativeRoundtripRoutePathSignal;
50
+ }
51
+
52
+ export interface NativeRoundtripSourcePreservationAudit {
53
+ readonly id?: string;
54
+ readonly exactSourceAvailable: boolean;
55
+ readonly sourceTextAvailable: boolean;
56
+ readonly recordCount: number;
57
+ readonly byLevel: Readonly<Record<string, number>>;
58
+ readonly exactRecords: number;
59
+ readonly declarationRecords: number;
60
+ readonly estimatedRecords: number;
61
+ readonly blockedRecords: number;
62
+ readonly sourcePaths: readonly string[];
63
+ readonly sourceMapIds: readonly string[];
64
+ readonly mappingPreservation: Readonly<Record<string, number>>;
65
+ readonly comments: number;
66
+ readonly trivia: number;
67
+ readonly directives: number;
68
+ readonly tokens: number;
69
+ readonly whitespace: number;
70
+ readonly truncated: boolean;
71
+ }
72
+
73
+ export interface NativeRoundtripGeneratedStubsAudit {
74
+ readonly available: boolean;
75
+ readonly selected: boolean;
76
+ readonly projectionMode?: NativeSourceProjectionMode;
77
+ readonly outputMode?: NativeSourceCompileOutputMode;
78
+ readonly declarationCount: number;
79
+ readonly emittedDeclarationCount: number;
80
+ readonly declarationKinds: Readonly<Record<string, number>>;
81
+ readonly declarationsWithSourceSpan: number;
82
+ readonly symbolIds: readonly string[];
83
+ readonly nativeAstNodeIds: readonly string[];
84
+ readonly lossCount: number;
85
+ }
86
+
87
+ export interface NativeRoundtripAdapterProjectionAudit {
88
+ readonly available: boolean;
89
+ readonly selected: boolean;
90
+ readonly id?: string;
91
+ readonly adapterId?: string;
92
+ readonly adapterVersion?: string;
93
+ readonly outputMode?: 'target-adapter';
94
+ readonly readiness?: SemanticMergeReadiness;
95
+ readonly lossCount: number;
96
+ readonly evidenceIds: readonly string[];
97
+ readonly sourceMaps: NativeRoundtripSourceMapEvidence;
98
+ }
99
+
100
+ export interface NativeRoundtripRouteSourceMapsAudit {
101
+ readonly hasOutputSourceMaps: boolean;
102
+ readonly output: NativeRoundtripSourceMapEvidence;
103
+ readonly universal: NativeRoundtripSourceMapEvidence;
104
+ readonly outputExact: boolean;
105
+ readonly outputEstimated: boolean;
106
+ readonly universalEstimated: boolean;
107
+ }
108
+
109
+ export interface NativeRoundtripHashChecksAudit {
110
+ readonly sourceHashPresent: boolean;
111
+ readonly declaredSourceHashPresent: boolean;
112
+ readonly declaredSourceHashVerified?: boolean;
113
+ readonly expectedSourceHashPresent: boolean;
114
+ readonly outputHashPresent: boolean;
115
+ readonly projectionOutputHashPresent: boolean;
116
+ readonly targetOutputHashPresent: boolean;
117
+ readonly sourceHashVerified: boolean;
118
+ readonly projectionOutputMatchesSourceHash: boolean;
119
+ readonly targetOutputMatchesSourceHash: boolean;
120
+ readonly outputMatchesSourceHash: boolean;
121
+ }
122
+
123
+ export interface NativeRoundtripCommentsTriviaAudit {
124
+ readonly comments: number;
125
+ readonly trivia: number;
126
+ readonly directives: number;
127
+ readonly tokens: number;
128
+ readonly whitespace: number;
129
+ readonly truncated: boolean;
130
+ readonly exactSourceAvailable: boolean;
131
+ readonly sourceTextAvailable: boolean;
132
+ }
133
+
134
+ export interface NativeRoundtripTargetCoverageAudit {
135
+ readonly target?: CompileTarget | string;
136
+ readonly supported?: boolean;
137
+ readonly readiness?: SemanticMergeReadiness;
138
+ readonly lossClass?: ProjectionTargetLossClass | string;
139
+ readonly adapterId?: string;
140
+ readonly adapterKind?: string;
141
+ readonly adapterVersion?: string;
142
+ readonly lossKinds: readonly string[];
143
+ readonly categories: readonly string[];
144
+ readonly reason?: string;
145
+ readonly notes: readonly string[];
146
+ }
147
+
148
+ export interface NativeRoundtripSemanticEquivalenceAudit {
149
+ readonly claimed: false;
150
+ readonly proofAdapterId?: string;
151
+ readonly evidenceIds: readonly string[];
152
+ readonly reasonCode: string;
153
+ }
154
+
155
+ export interface NativeRoundtripAuditSignal {
156
+ readonly schema: 'frontier.lang.nativeRoundtripAuditSignal';
157
+ readonly version: 1;
158
+ readonly disposition: NativeRoundtripAuditDisposition;
159
+ readonly claim: NativeRoundtripAuditClaim;
160
+ readonly sourceLanguage?: FrontierSourceLanguage | string;
161
+ readonly target?: CompileTarget | string;
162
+ readonly sameLanguage: boolean;
163
+ readonly outputMode?: NativeSourceCompileOutputMode;
164
+ readonly projectionMode?: NativeSourceProjectionMode;
165
+ readonly sourceHashVerified: boolean;
166
+ readonly outputSourceMapPrecision: NativeRoundtripSourceMapPrecision;
167
+ readonly universalSourceMapPrecision: NativeRoundtripSourceMapPrecision;
168
+ readonly targetProjectionAdapterId?: string;
169
+ readonly targetCoverageLossClass?: ProjectionTargetLossClass | string;
170
+ readonly reviewRequired: boolean;
171
+ readonly semanticMergeReadiness: SemanticMergeReadiness;
172
+ readonly semanticEquivalenceClaim: false;
173
+ readonly autoMergeClaim: false;
174
+ readonly paths: NativeRoundtripRoutePathsAudit;
175
+ readonly sourcePreservation: NativeRoundtripSourcePreservationAudit;
176
+ readonly generatedStubs: NativeRoundtripGeneratedStubsAudit;
177
+ readonly adapterProjection: NativeRoundtripAdapterProjectionAudit;
178
+ readonly sourceMaps: NativeRoundtripRouteSourceMapsAudit;
179
+ readonly hashChecks: NativeRoundtripHashChecksAudit;
180
+ readonly commentsTrivia: NativeRoundtripCommentsTriviaAudit;
181
+ readonly targetCoverage: NativeRoundtripTargetCoverageAudit;
182
+ readonly semanticEquivalence: NativeRoundtripSemanticEquivalenceAudit;
183
+ readonly blockingLossCount: number;
184
+ readonly reviewLossCount: number;
185
+ readonly reasonCodes: readonly string[];
186
+ }
@@ -105,59 +105,8 @@ export interface NativeImportRoundtripReadinessClassification {
105
105
 
106
106
  export type NativeRoundtripEvidenceStatus = NativeImportRoundtripReadinessStatus | 'target-adapter';
107
107
 
108
- export type NativeRoundtripSourceMapPrecision = SourceMapMappingRecord['precision'] | 'line' | 'declaration' | 'estimated' | 'unknown' | 'none' | string;
109
-
110
- export type NativeRoundtripAuditDisposition =
111
- | 'reversible'
112
- | 'preserved-source'
113
- | 'stub-only'
114
- | 'adapter-projected'
115
- | 'review-required';
116
-
117
- export type NativeRoundtripAuditClaim =
118
- | 'source-text-reversible'
119
- | 'source-preserved'
120
- | 'declaration-stubs-only'
121
- | 'host-adapter-projected'
122
- | 'review-required';
123
-
124
- export interface NativeRoundtripSourceMapEvidence {
125
- readonly total: number;
126
- readonly ids: readonly string[];
127
- readonly mappings: number;
128
- readonly precision: NativeRoundtripSourceMapPrecision;
129
- readonly byPrecision: Readonly<Record<string, number>>;
130
- readonly byOrigin: Readonly<Record<string, number>>;
131
- readonly withSourceSpan: number;
132
- readonly withGeneratedSpan: number;
133
- readonly withSemanticSymbol: number;
134
- readonly targetPaths: readonly string[];
135
- }
136
-
137
- export interface NativeRoundtripAuditSignal {
138
- readonly schema: 'frontier.lang.nativeRoundtripAuditSignal';
139
- readonly version: 1;
140
- readonly disposition: NativeRoundtripAuditDisposition;
141
- readonly claim: NativeRoundtripAuditClaim;
142
- readonly sourceLanguage?: FrontierSourceLanguage | string;
143
- readonly target?: CompileTarget | string;
144
- readonly sameLanguage: boolean;
145
- readonly outputMode?: NativeSourceCompileOutputMode;
146
- readonly projectionMode?: NativeSourceProjectionMode;
147
- readonly sourceHashVerified: boolean;
148
- readonly outputSourceMapPrecision: NativeRoundtripSourceMapPrecision;
149
- readonly universalSourceMapPrecision: NativeRoundtripSourceMapPrecision;
150
- readonly targetProjectionAdapterId?: string;
151
- readonly targetCoverageLossClass?: ProjectionTargetLossClass | string;
152
- readonly reviewRequired: boolean;
153
- readonly semanticMergeReadiness: SemanticMergeReadiness;
154
- readonly semanticEquivalenceClaim: false;
155
- readonly autoMergeClaim: false;
156
- readonly blockingLossCount: number;
157
- readonly reviewLossCount: number;
158
- readonly reasonCodes: readonly string[];
159
- }
160
-
108
+ import type { NativeRoundtripSourceMapPrecision, NativeRoundtripAuditDisposition, NativeRoundtripAuditClaim, NativeRoundtripSourceMapEvidence, NativeRoundtripRoutePathSignal, NativeRoundtripRoutePathsAudit, NativeRoundtripSourcePreservationAudit, NativeRoundtripGeneratedStubsAudit, NativeRoundtripAdapterProjectionAudit, NativeRoundtripRouteSourceMapsAudit, NativeRoundtripHashChecksAudit, NativeRoundtripCommentsTriviaAudit, NativeRoundtripTargetCoverageAudit, NativeRoundtripSemanticEquivalenceAudit, NativeRoundtripAuditSignal } from './roundtrip-audit.js';
109
+ export type { NativeRoundtripSourceMapPrecision, NativeRoundtripAuditDisposition, NativeRoundtripAuditClaim, NativeRoundtripSourceMapEvidence, NativeRoundtripRoutePathSignal, NativeRoundtripRoutePathsAudit, NativeRoundtripSourcePreservationAudit, NativeRoundtripGeneratedStubsAudit, NativeRoundtripAdapterProjectionAudit, NativeRoundtripRouteSourceMapsAudit, NativeRoundtripHashChecksAudit, NativeRoundtripCommentsTriviaAudit, NativeRoundtripTargetCoverageAudit, NativeRoundtripSemanticEquivalenceAudit, NativeRoundtripAuditSignal } from './roundtrip-audit.js';
161
110
  export interface NativeRoundtripEvidenceMetadata {
162
111
  readonly status: NativeRoundtripEvidenceStatus;
163
112
  readonly semanticMergeReadiness: SemanticMergeReadiness;
@@ -89,16 +89,6 @@ export declare function createNativeParserFeatureMatrix(options?: NativeParserFe
89
89
  export declare function queryNativeParserFeatureMatrix(matrixOrOptions?: NativeParserFeatureMatrix | NativeParserFeatureMatrixOptions, query?: NativeParserFeatureMatrixQuery): NativeParserFeatureMatrixQueryResult;
90
90
  export declare function createProjectionTargetLossMatrix(options?: ProjectionTargetLossMatrixOptions): ProjectionTargetLossMatrix;
91
91
  export declare function createUniversalCapabilityMatrix(options?: UniversalCapabilityMatrixOptions): UniversalCapabilityMatrix;
92
- export declare function createUniversalConversionArtifacts(input?: CreateUniversalConversionArtifactsInput, options?: CreateUniversalConversionArtifactsOptions): UniversalConversionArtifacts;
93
- export declare function createUniversalConversionPlan(options?: UniversalConversionPlanOptions): UniversalConversionPlan;
94
- export declare function queryUniversalConversionArtifacts(
95
- records: UniversalConversionArtifacts | UniversalConversionRouteArtifact | readonly (UniversalConversionArtifacts | UniversalConversionRouteArtifact)[],
96
- query?: UniversalConversionArtifactQuery
97
- ): readonly UniversalConversionRouteArtifact[];
98
- export declare function queryUniversalConversionPlan(
99
- planOrOptions?: UniversalConversionPlan | UniversalConversionPlanOptions,
100
- query?: UniversalConversionPlanQuery
101
- ): UniversalConversionPlanQueryResult;
102
92
  export declare function createNativeSourcePreservation(options: CreateNativeSourcePreservationOptions): NativeSourcePreservation;
103
93
  export declare function createSemanticImportSidecar(importResult: NativeSourceImportResult | NativeProjectImportResult, options?: SemanticImportSidecarOptions): SemanticImportSidecar;
104
94
  export declare function createNativeImportResultContract(importResult: NativeSourceImportResult | NativeProjectImportResult, options?: NativeImportResultContractOptions): NativeImportResultContract;
@@ -122,7 +112,6 @@ export declare function importNativeSource(input: ImportNativeSourceOptions): Na
122
112
  export declare function diffNativeSources(input: DiffNativeSourcesOptions): NativeSourceChangeSet;
123
113
  export declare function diffNativeSourceImports(input: DiffNativeSourceImportsOptions): NativeSourceChangeSet;
124
114
  export declare function createSemanticSlice(input: SemanticSliceInput, options?: CreateSemanticSliceOptions): SemanticSlice;
125
- export declare function createSemanticSliceAdmissionRecord(slice: SemanticSlice, options?: CreateSemanticSliceAdmissionRecordOptions): SemanticSliceAdmissionRecord;
126
115
  export declare function testSemanticSlice(slice: SemanticSlice, options?: TestSemanticSliceOptions): SemanticSliceTestResult;
127
116
  export declare function readSemanticSliceJson(source: string): SemanticSlice;
128
117
  export declare function writeSemanticSliceJson(slice: SemanticSlice): string;