@shapeshift-labs/frontier-lang-compiler 0.2.150 → 0.2.152
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +316 -9
- package/bench/real-repo-corpus-checkout-identity.mjs +134 -0
- package/bench/real-repo-corpus-checkout-proof.mjs +263 -0
- package/bench/real-repo-corpus-command-execution.mjs +314 -0
- package/bench/real-repo-corpus-evidence.mjs +165 -0
- package/bench/real-repo-corpus-suite.mjs +273 -0
- package/bench/smoke.mjs +109 -7
- package/dist/declarations/import-adapter-core.d.ts +4 -3
- package/dist/declarations/import-adapter-options-native.d.ts +21 -0
- package/dist/declarations/js-ts-project-merge-admission-routes.d.ts +35 -0
- package/dist/declarations/js-ts-project-merge-commonjs-interop.d.ts +29 -0
- package/dist/declarations/js-ts-project-merge-confidence.d.ts +64 -0
- package/dist/declarations/js-ts-project-merge-declaration-emit-parity.d.ts +37 -0
- package/dist/declarations/js-ts-project-merge-declarations.d.ts +65 -0
- package/dist/declarations/js-ts-project-merge-diagnostics.d.ts +97 -0
- package/dist/declarations/js-ts-project-merge-global-augmentation.d.ts +30 -0
- package/dist/declarations/js-ts-project-merge-jsx-render-branch.d.ts +48 -0
- package/dist/declarations/js-ts-project-merge-proof-levels.d.ts +109 -0
- package/dist/declarations/js-ts-project-merge-quality-gates.d.ts +38 -0
- package/dist/declarations/js-ts-project-merge-semantic-equivalence-proof.d.ts +45 -0
- package/dist/declarations/js-ts-project-merge-tsconfig.d.ts +43 -0
- package/dist/declarations/js-ts-safe-merge.d.ts +47 -0
- package/dist/declarations/js-ts-safe-project-merge.d.ts +120 -38
- package/dist/declarations/native-project-compiler-assignability-oracle.d.ts +41 -0
- package/dist/declarations/native-project-compiler-callable-signatures.d.ts +31 -0
- package/dist/declarations/native-project-compiler-class-member-runtime-proof.d.ts +87 -0
- package/dist/declarations/native-project-compiler-composite-types.d.ts +23 -0
- package/dist/declarations/native-project-compiler-enum-proof.d.ts +58 -0
- package/dist/declarations/native-project-compiler-index-signature.d.ts +7 -0
- package/dist/declarations/native-project-compiler-public-api-source-binding.d.ts +8 -0
- package/dist/declarations/native-project-compiler-scope.d.ts +37 -0
- package/dist/declarations/native-project-compiler-type-reference-targets.d.ts +38 -0
- package/dist/declarations/native-project-css-modules.d.ts +94 -0
- package/dist/declarations/native-project-decorator-metadata.d.ts +126 -0
- package/dist/declarations/native-project-jsx-graph.d.ts +313 -0
- package/dist/declarations/native-project-module-declarations.d.ts +52 -0
- package/dist/declarations/native-project-module-resolution.d.ts +76 -1
- package/dist/declarations/native-project-runtime-effect-target.d.ts +29 -0
- package/dist/declarations/native-project-runtime-executable-effect-evidence.d.ts +107 -0
- package/dist/declarations/native-project-runtime-mutation-target.d.ts +33 -0
- package/dist/declarations/native-project-runtime-promise-chain.d.ts +30 -0
- package/dist/declarations/native-project-runtime-promise-combinator.d.ts +22 -0
- package/dist/declarations/native-project-runtime-reachability.d.ts +30 -0
- package/dist/declarations/native-project-runtime-resource-management.d.ts +27 -0
- package/dist/declarations/native-project-runtime-yield-delegation.d.ts +10 -0
- package/dist/declarations/native-project-scope-template-reference.d.ts +13 -0
- package/dist/declarations/native-project-source-evidence.d.ts +8 -0
- package/dist/declarations/native-project.d.ts +40 -39
- package/dist/declarations/semantic-edit-script.d.ts +10 -8
- package/dist/declarations/semantic-graph-layers.d.ts +79 -0
- package/dist/declarations/semantic-sidecar.d.ts +3 -2
- package/dist/declarations/semantic-structural-diff.d.ts +94 -0
- package/dist/declarations/source-preservation.d.ts +32 -1
- package/dist/declarations/target-adapters.d.ts +22 -2
- package/dist/index.d.ts +31 -0
- package/dist/index.js +5 -0
- package/dist/internal/index-impl/compileNativeSource.js +53 -5
- package/dist/internal/index-impl/createLightweightNativeImport.js +58 -4
- package/dist/internal/index-impl/createNativeImportFromSyntaxAst.js +17 -1
- package/dist/internal/index-impl/createNativeImportFromTypeScriptAst.js +28 -4
- package/dist/internal/index-impl/createNativeProjectImportResult.js +31 -27
- package/dist/internal/index-impl/createNativeProjectModuleResolutionFromPackageManifests.js +145 -0
- package/dist/internal/index-impl/createNativeSourcePreservation.js +34 -7
- package/dist/internal/index-impl/createSemanticImportSidecar.js +27 -1
- package/dist/internal/index-impl/createTypeScriptCompilerNativeImporterAdapter.js +16 -5
- package/dist/internal/index-impl/dynamicImportExpressionMetadata.js +80 -0
- package/dist/internal/index-impl/importMetaUrlDependencyMetadata.js +176 -0
- package/dist/internal/index-impl/importNativeSource.js +2 -3
- package/dist/internal/index-impl/moduleImportAttributeMetadata.js +232 -0
- package/dist/internal/index-impl/projectSemanticEditScriptToSource.js +8 -1
- package/dist/internal/index-impl/projectSymbolGraphClassStaticBlocks.js +148 -0
- package/dist/internal/index-impl/projectSymbolGraphCompilerAdvancedTypeMetadata.js +45 -0
- package/dist/internal/index-impl/projectSymbolGraphCompilerCallableSignatureEquivalence.js +107 -0
- package/dist/internal/index-impl/projectSymbolGraphCompilerClassPrivateAccessorRuntimeProof.js +280 -0
- package/dist/internal/index-impl/projectSymbolGraphCompilerClassShapeEquivalence.js +103 -0
- package/dist/internal/index-impl/projectSymbolGraphCompilerConditionalTypeEquivalence.js +242 -0
- package/dist/internal/index-impl/projectSymbolGraphCompilerDecoratorRuntimeProof.js +197 -0
- package/dist/internal/index-impl/projectSymbolGraphCompilerEnumEquivalence.js +188 -0
- package/dist/internal/index-impl/projectSymbolGraphCompilerFacts.js +244 -0
- package/dist/internal/index-impl/projectSymbolGraphCompilerIndexSignatureEquivalence.js +58 -0
- package/dist/internal/index-impl/projectSymbolGraphCompilerMetadata.js +168 -0
- package/dist/internal/index-impl/projectSymbolGraphCompilerTypeEquivalence.js +199 -0
- package/dist/internal/index-impl/projectSymbolGraphCompilerTypeEquivalenceProof.js +204 -0
- package/dist/internal/index-impl/projectSymbolGraphCompilerTypeReferenceTargetEquivalence.js +99 -0
- package/dist/internal/index-impl/projectSymbolGraphCssModuleRecords.js +272 -0
- package/dist/internal/index-impl/projectSymbolGraphCssModuleScanners.js +242 -0
- package/dist/internal/index-impl/projectSymbolGraphCssModuleUtils.js +179 -0
- package/dist/internal/index-impl/projectSymbolGraphCssModules.js +82 -0
- package/dist/internal/index-impl/projectSymbolGraphJsxComponentImports.js +170 -0
- package/dist/internal/index-impl/projectSymbolGraphJsxComponentProviderLookup.js +167 -0
- package/dist/internal/index-impl/projectSymbolGraphJsxComponentWrappers.js +150 -0
- package/dist/internal/index-impl/projectSymbolGraphJsxContextTargets.js +71 -0
- package/dist/internal/index-impl/projectSymbolGraphJsxContextValues.js +212 -0
- package/dist/internal/index-impl/projectSymbolGraphJsxEventHandlers.js +172 -0
- package/dist/internal/index-impl/projectSymbolGraphJsxHookEffects.js +124 -0
- package/dist/internal/index-impl/projectSymbolGraphJsxHooks.js +281 -0
- package/dist/internal/index-impl/projectSymbolGraphJsxMemberComponents.js +139 -0
- package/dist/internal/index-impl/projectSymbolGraphJsxPropFlows.js +320 -0
- package/dist/internal/index-impl/projectSymbolGraphJsxPropValues.js +145 -0
- package/dist/internal/index-impl/projectSymbolGraphJsxProviderFlows.js +133 -0
- package/dist/internal/index-impl/projectSymbolGraphJsxRecords.js +315 -0
- package/dist/internal/index-impl/projectSymbolGraphJsxRenderCollections.js +155 -0
- package/dist/internal/index-impl/projectSymbolGraphJsxRenderReturns.js +291 -0
- package/dist/internal/index-impl/projectSymbolGraphJsxRenderRisk.js +279 -0
- package/dist/internal/index-impl/projectSymbolGraphModuleDeclarationShapes.js +138 -0
- package/dist/internal/index-impl/projectSymbolGraphModuleResolution.js +89 -87
- package/dist/internal/index-impl/projectSymbolGraphPackageConditions.js +314 -0
- package/dist/internal/index-impl/projectSymbolGraphReExportImportTargets.js +43 -0
- package/dist/internal/index-impl/projectSymbolGraphReExports.js +55 -1
- package/dist/internal/index-impl/projectSymbolGraphRuntimeRegions.js +108 -0
- package/dist/internal/index-impl/projectSymbolGraphScopeUseDefAliases.js +307 -0
- package/dist/internal/index-impl/projectSymbolGraphScopeUseDefLexical.js +320 -0
- package/dist/internal/index-impl/projectSymbolGraphScopeUseDefOwners.js +50 -0
- package/dist/internal/index-impl/projectSymbolGraphScopeUseDefRecordBuilders.js +112 -0
- package/dist/internal/index-impl/projectSymbolGraphScopeUseDefRecords.js +238 -0
- package/dist/internal/index-impl/projectSymbolGraphScopeUseDefStructural.js +104 -0
- package/dist/internal/index-impl/projectSymbolGraphScopeUseDefStructuralNormalize.js +242 -0
- package/dist/internal/index-impl/projectSymbolGraphScopeUseDefUseHashes.js +107 -0
- package/dist/internal/index-impl/projectSymbolGraphSourceMapGeneratedBoundary.js +111 -0
- package/dist/internal/index-impl/projectSymbolGraphSourceRecords.js +268 -0
- package/dist/internal/index-impl/projectSymbolGraphSourceRecordsOwnership.js +309 -0
- package/dist/internal/index-impl/replaySemanticEditProjection.js +53 -39
- package/dist/internal/index-impl/runtimeOrderEvidenceBinding.js +151 -0
- package/dist/internal/index-impl/runtimeOrderProofSurfaces.js +253 -0
- package/dist/internal/index-impl/semanticEditCallsiteArgumentMerge.js +319 -0
- package/dist/internal/index-impl/semanticEditExplicitSourceReplacement.js +7 -2
- package/dist/internal/index-impl/semanticEditProjectionRecord.js +8 -0
- package/dist/internal/index-impl/semanticEditReplayDiagnostics.js +7 -2
- package/dist/internal/index-impl/semanticEditReplayOutputBinding.js +61 -0
- package/dist/internal/index-impl/semanticEditReplayRerunRoute.js +27 -0
- package/dist/internal/index-impl/semanticEditReplaySourceReplacement.js +6 -1
- package/dist/internal/index-impl/semanticEditRuntimeOrderReasons.js +320 -0
- package/dist/internal/index-impl/semanticEditScriptClassification.js +90 -5
- package/dist/internal/index-impl/semanticEditScripts.js +42 -5
- package/dist/internal/index-impl/semanticEditTypeSyntaxReasons.js +134 -0
- package/dist/internal/index-impl/semanticIndexFromNativeDeclarations.js +11 -5
- package/dist/internal/index-impl/semanticStructuralDiffRecords.js +150 -0
- package/dist/internal/index-impl/sourceMapGeneratedBoundaryGate.js +185 -0
- package/dist/internal/index-impl/staticMemberLiteral.js +31 -0
- package/dist/internal/index-impl/staticOptionalMemberReference.js +22 -0
- package/dist/internal/index-impl/syntaxAstSourcePreservation.js +273 -0
- package/dist/internal/index-impl/syntaxCommonJsModuleDeclarationEntries.js +297 -0
- package/dist/internal/index-impl/syntaxModuleDeclarationEntries.js +56 -132
- package/dist/internal/index-impl/syntaxModuleEntryRecords.js +160 -0
- package/dist/internal/index-impl/typeScriptCompilerAdvancedTypeShapes.js +160 -0
- package/dist/internal/index-impl/typeScriptCompilerAssignabilityOracle.js +97 -0
- package/dist/internal/index-impl/typeScriptCompilerClassApi.js +238 -0
- package/dist/internal/index-impl/typeScriptCompilerDecoratorMetadata.js +290 -0
- package/dist/internal/index-impl/typeScriptCompilerEnumShape.js +279 -0
- package/dist/internal/index-impl/typeScriptCompilerFacts.js +294 -0
- package/dist/internal/index-impl/typeScriptCompilerInferenceSyntax.js +170 -0
- package/dist/internal/index-impl/typeScriptCompilerReferenceGraph.js +186 -0
- package/dist/internal/index-impl/typeScriptCompilerSymbolIdentity.js +294 -0
- package/dist/internal/index-impl/typeScriptCompilerTypeReferenceTargets.js +142 -0
- package/dist/internal/index-impl/typeScriptDeclaration.js +10 -38
- package/dist/internal/index-impl/typeScriptModuleDeclarationEntries.js +52 -15
- package/dist/internal/index-impl/typeScriptSourceFilePreservation.js +296 -0
- package/dist/js-ts-safe-member-class-invariants.js +247 -0
- package/dist/js-ts-safe-member-merge-result.js +23 -3
- package/dist/js-ts-safe-member-merge.js +28 -4
- package/dist/js-ts-safe-merge-binding-patterns.js +170 -0
- package/dist/js-ts-safe-merge-jsx-attribute-fallback.js +151 -157
- package/dist/js-ts-safe-merge-jsx-attribute-parser.js +277 -0
- package/dist/js-ts-safe-merge-jsx-child-expression-fallback.js +161 -0
- package/dist/js-ts-safe-merge-jsx-child-expression-merge.js +319 -0
- package/dist/js-ts-safe-merge-jsx-child-expression-parser.js +300 -0
- package/dist/js-ts-safe-merge-parse-declarations.js +46 -2
- package/dist/js-ts-safe-merge-parse-statements.js +8 -0
- package/dist/js-ts-safe-merge-semantic-edit-fallback.js +13 -5
- package/dist/js-ts-safe-merge-source-shape-fallbacks.js +3 -1
- package/dist/js-ts-safe-merge-top-level-rename-fallback.js +31 -5
- package/dist/js-ts-safe-merge-top-level-rename-result.js +7 -2
- package/dist/js-ts-safe-merge-variable-declarator-fallback.js +124 -6
- package/dist/js-ts-safe-merge-variable-declarator-parser.js +34 -4
- package/dist/js-ts-safe-merge.js +136 -0
- package/dist/js-ts-safe-project-merge-admission-routes.js +216 -0
- package/dist/js-ts-safe-project-merge-admission.js +161 -0
- package/dist/js-ts-safe-project-merge-ambient.js +110 -0
- package/dist/js-ts-safe-project-merge-core.js +85 -0
- package/dist/js-ts-safe-project-merge-css-module-conflicts.js +60 -0
- package/dist/js-ts-safe-project-merge-declaration-emit-parity.js +186 -0
- package/dist/js-ts-safe-project-merge-declarations.js +227 -0
- package/dist/js-ts-safe-project-merge-diagnostics-metadata.js +42 -0
- package/dist/js-ts-safe-project-merge-diagnostics-ts.js +73 -0
- package/dist/js-ts-safe-project-merge-diagnostics.js +283 -0
- package/dist/js-ts-safe-project-merge-evidence-routing.js +38 -0
- package/dist/js-ts-safe-project-merge-files.js +70 -0
- package/dist/js-ts-safe-project-merge-global-augmentation-compatibility.js +99 -0
- package/dist/js-ts-safe-project-merge-graph-conflicts.js +90 -2
- package/dist/js-ts-safe-project-merge-graph-delta-commonjs-interop.js +108 -0
- package/dist/js-ts-safe-project-merge-graph-delta-compiler-conflicts.js +179 -0
- package/dist/js-ts-safe-project-merge-graph-delta-compiler-details.js +189 -0
- package/dist/js-ts-safe-project-merge-graph-delta-conflicts.js +51 -184
- package/dist/js-ts-safe-project-merge-graph-delta-identity-conflicts.js +202 -0
- package/dist/js-ts-safe-project-merge-graph-delta-inference-syntax.js +80 -0
- package/dist/js-ts-safe-project-merge-graph-delta-module-declarations.js +155 -0
- package/dist/js-ts-safe-project-merge-graph-limits.js +16 -1
- package/dist/js-ts-safe-project-merge-graph.js +37 -5
- package/dist/js-ts-safe-project-merge-import-removal.js +292 -0
- package/dist/js-ts-safe-project-merge-jsx-graph-conflict-details.js +235 -0
- package/dist/js-ts-safe-project-merge-jsx-graph-conflicts.js +173 -0
- package/dist/js-ts-safe-project-merge-jsx-prop-contracts.js +86 -0
- package/dist/js-ts-safe-project-merge-jsx-render-branch-proof.js +189 -0
- package/dist/js-ts-safe-project-merge-missing-evidence.js +310 -0
- package/dist/js-ts-safe-project-merge-move-rename.js +209 -0
- package/dist/js-ts-safe-project-merge-proof-conflicts.js +44 -0
- package/dist/js-ts-safe-project-merge-proof-levels.js +320 -0
- package/dist/js-ts-safe-project-merge-quality-gates.js +140 -0
- package/dist/js-ts-safe-project-merge-routing-calibration.js +125 -0
- package/dist/js-ts-safe-project-merge-runtime-region-conflicts.js +156 -0
- package/dist/js-ts-safe-project-merge-scope-use-def-conflicts.js +292 -0
- package/dist/js-ts-safe-project-merge-semantic-equivalence-proof.js +175 -0
- package/dist/js-ts-safe-project-merge-semantic-replay-proof.js +311 -0
- package/dist/js-ts-safe-project-merge-semantic-replay-routes.js +179 -0
- package/dist/js-ts-safe-project-merge-source-span-conflicts.js +310 -0
- package/dist/js-ts-safe-project-merge-source-span-roundtrip-proof.js +172 -0
- package/dist/js-ts-safe-project-merge-split-merge-admission.js +96 -0
- package/dist/js-ts-safe-project-merge-split-merge-records.js +320 -0
- package/dist/js-ts-safe-project-merge-split-merge-shapes.js +234 -0
- package/dist/js-ts-safe-project-merge-split-merge.js +218 -0
- package/dist/js-ts-safe-project-merge-summary.js +320 -0
- package/dist/js-ts-safe-project-merge-symbol-move-admission.js +63 -0
- package/dist/js-ts-safe-project-merge-symbol-move-default-admission.js +143 -0
- package/dist/js-ts-safe-project-merge-symbol-move-risks.js +213 -0
- package/dist/js-ts-safe-project-merge-symbol-move.js +316 -0
- package/dist/js-ts-safe-project-merge-symbol-rename-admission.js +59 -0
- package/dist/js-ts-safe-project-merge-symbol-rename-default-admission.js +111 -0
- package/dist/js-ts-safe-project-merge-symbol-rename.js +319 -0
- package/dist/js-ts-safe-project-merge-ts-options.js +205 -0
- package/dist/js-ts-safe-project-merge-ts-program.js +268 -0
- package/dist/js-ts-safe-project-merge-typed-property-rename-rebase-utils.js +69 -0
- package/dist/js-ts-safe-project-merge-typed-property-rename-rebase.js +317 -0
- package/dist/js-ts-safe-project-merge-unsupported-surfaces.js +319 -0
- package/dist/js-ts-safe-project-merge.js +170 -171
- package/dist/js-ts-semantic-scope-use-def-bindings.js +287 -0
- package/dist/js-ts-semantic-scope-use-def-scan.js +241 -0
- package/dist/js-ts-semantic-scope-use-def-utils.js +132 -0
- package/dist/js-ts-semantic-scope-use-def.js +217 -0
- package/dist/lightweight-dependency-effects.js +28 -4
- package/dist/lightweight-dependency-relations.js +13 -7
- package/dist/lightweight-dependency-top-level.js +63 -0
- package/dist/native-import-language-profiles.js +27 -1
- package/dist/native-js-ts-importers.js +9 -5
- package/dist/native-parser-ast-format-profiles.js +12 -0
- package/dist/native-parser-html-css-format-profiles.js +85 -0
- package/dist/native-region-scanner-core.js +5 -3
- package/dist/native-region-scanner-js-commonjs.js +155 -0
- package/dist/native-region-scanner-js-imports.js +51 -13
- package/dist/native-region-scanner-js-reexports.js +79 -0
- package/dist/native-region-scanner-js-ts-helpers.js +23 -0
- package/dist/native-source-ledger-helpers.js +1 -1
- package/dist/native-source-ledger.js +24 -10
- package/dist/native-source-maps-ecma426.js +316 -0
- package/dist/native-source-maps.js +36 -6
- package/dist/native-source-preservation-ownership.js +292 -0
- package/dist/native-source-preservation-scanner.js +63 -25
- package/dist/native-source-preservation-types.d.ts +3 -0
- package/dist/semantic-import-effect-occurrences.js +242 -0
- package/dist/semantic-import-effect-regions.js +95 -58
- package/dist/semantic-import-graph-layers.js +224 -0
- package/dist/semantic-import-runtime-conditional-evidence.js +135 -0
- package/dist/semantic-import-runtime-effect-target-evidence.js +145 -0
- package/dist/semantic-import-runtime-exit-evidence.js +32 -0
- package/dist/semantic-import-runtime-import-meta-evidence.js +33 -0
- package/dist/semantic-import-runtime-mutation-evidence.js +155 -0
- package/dist/semantic-import-runtime-order-evidence.js +318 -0
- package/dist/semantic-import-runtime-promise-chain-evidence.js +103 -0
- package/dist/semantic-import-runtime-promise-combinator-evidence.js +166 -0
- package/dist/semantic-import-runtime-reachability-evidence.js +269 -0
- package/dist/semantic-import-runtime-resource-management-evidence.js +293 -0
- package/dist/semantic-import-runtime-switch-evidence.js +304 -0
- package/dist/semantic-import-runtime-throw-evidence.js +44 -0
- package/dist/semantic-import-runtime-try-finally-evidence.js +172 -0
- package/dist/semantic-import-sidecar-entry.js +4 -0
- package/dist/semantic-import-source-preservation.js +6 -2
- package/package.json +2 -1
package/README.md
CHANGED
|
@@ -169,12 +169,52 @@ The JS/TS semantic merge smoke corpus lives at
|
|
|
169
169
|
small and dependency-free. They cover accepted projection/replay cases, exact
|
|
170
170
|
source preservation, generated/source-map boundaries, safe import/declaration
|
|
171
171
|
merges, safe unordered member merges, composed top-level/member safe merges,
|
|
172
|
-
existing import binding-shape additions,
|
|
173
|
-
ledger spans, import specifier removals,
|
|
174
|
-
names, duplicate object members, decorators
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
172
|
+
existing import binding-shape additions, React-style TSX child insertions, and
|
|
173
|
+
rejected unsafe cases such as stale ledger spans, import specifier removals,
|
|
174
|
+
computed keys, duplicate exported names, duplicate object members, decorators with static metadata evidence,
|
|
175
|
+
overload anchors, and same-anchor edit conflicts.
|
|
176
|
+
|
|
177
|
+
### Real-Repo Corpus Proof Phases
|
|
178
|
+
|
|
179
|
+
Manifest-only real-repo entries link those fixtures to TypeScript, Vite,
|
|
180
|
+
Prettier, Next, and React patterns without committing third-party source. The
|
|
181
|
+
manifest phase records repository identity, shallow fetch commands, source
|
|
182
|
+
shape, path globs, byte budgets, oracle fixture links, and
|
|
183
|
+
`committedSourceBytes: 0`; it is metadata, not vendored code.
|
|
184
|
+
|
|
185
|
+
`bench/real-repo-corpus-suite.mjs` emits a network-free local checkout proof. By
|
|
186
|
+
default it reports skipped entries under `tmp/js-ts-semantic-merge-real-repos`;
|
|
187
|
+
callers can point `FRONTIER_REAL_REPO_CORPUS_ROOT` at already-existing local
|
|
188
|
+
checkouts. The checkout phase stats only the declared path globs and reads
|
|
189
|
+
`.git` metadata for identity booleans such as checkout identity status, manifest
|
|
190
|
+
remote match, manifest ref match, metadata kind, gitdir pointer presence, git
|
|
191
|
+
config presence, and origin URL presence. It does not clone, install
|
|
192
|
+
dependencies, or read third-party source text. Each row also records
|
|
193
|
+
`checkoutRootPresent`, `checkoutDirPresent`, `checkoutPresenceStatus`, and
|
|
194
|
+
`checkoutProofReason`, so a skipped row distinguishes a missing root from a
|
|
195
|
+
missing checkout directory and an executed row distinguishes matched declared
|
|
196
|
+
globs from a present checkout with no proof match.
|
|
197
|
+
|
|
198
|
+
The dependency install phase is default-off. Evidence rows report lockfile
|
|
199
|
+
presence, package managers present, and the npm/pnpm/yarn command matrix as
|
|
200
|
+
`metadata-only`; `dependencyInstallExecution` remains
|
|
201
|
+
`not-run-default-network-free` until a caller supplies an explicit opt-in
|
|
202
|
+
runner.
|
|
203
|
+
|
|
204
|
+
The repository command phase is also default-off. Build/test command proof is
|
|
205
|
+
kept separate from checkout and dependency metadata through
|
|
206
|
+
`repositoryCommandProofStatus`, `repositoryCommandExecution`,
|
|
207
|
+
`repositoryCommandDefaultOffReason`, and `repositoryCommandOptInRequired`.
|
|
208
|
+
Repository commands remain `not-run-default-network-free` unless a caller passes
|
|
209
|
+
`realRepoCommandExecution.enabled`. The opt-in runner reuses the checkout proof,
|
|
210
|
+
verifies checkout realpath containment, declared proof-glob matches, git
|
|
211
|
+
identity, a single lockfile-backed package manager, and an allowlisted
|
|
212
|
+
npm/pnpm/yarn argv with `shell: false` and an allowlisted environment. It records
|
|
213
|
+
per-phase exit code, signal, duration, timeout, stdout/stderr byte counts,
|
|
214
|
+
SHA-256 hashes, capped previews, and truncation flags. Dependency installation
|
|
215
|
+
still requires a separate `allowDependencyInstall` opt-in. Fixture failures
|
|
216
|
+
include the fixture id and the actual reason-code or gate values so distributed
|
|
217
|
+
swarm evidence can point at a stable case instead of an agent transcript.
|
|
178
218
|
|
|
179
219
|
Successful `safeMergeJsTsImportsAndDeclarations` and `safeMergeJsTsSource`
|
|
180
220
|
results also include `semanticArtifacts`. These artifacts convert the
|
|
@@ -265,7 +305,8 @@ the available project document. Graph edges record `resolutionPathVariant` as
|
|
|
265
305
|
from source-extension substitutions during stale checks and merge admission.
|
|
266
306
|
|
|
267
307
|
Package `imports` maps are also modeled for `#internal` specifiers. Top-level
|
|
268
|
-
`moduleResolution.imports` applies from `packageRoot`/`root`, while
|
|
308
|
+
`moduleResolution.imports` applies from `packageRoot`/`root`, while importers
|
|
309
|
+
outside that root fail closed as `package-import-scope-missing`.
|
|
269
310
|
`packages[name].imports` applies to the nearest configured package root. Graph
|
|
270
311
|
edges record `packageImportKey`, `packageImportCondition`, and
|
|
271
312
|
`packageImportTarget` so merge admission can distinguish private aliases from
|
|
@@ -287,6 +328,76 @@ console.log(project.outputProjectSymbolGraph.importEdges[0].resolutionKind); //
|
|
|
287
328
|
console.log(project.outputProjectSymbolGraph.importEdges[0].packageImportKey); // "#internal/*"
|
|
288
329
|
```
|
|
289
330
|
|
|
331
|
+
Matched package `imports` entries also fail closed when none of the configured
|
|
332
|
+
conditions selects a target. Those graph edges record `resolutionKind` as
|
|
333
|
+
`"package-import-condition-missing"` with `packageImportKey` and no resolved
|
|
334
|
+
module path, even when a matching source file exists in the supplied project.
|
|
335
|
+
When `import` and `require` branches resolve to different targets but the
|
|
336
|
+
importer path is runtime-ambiguous, graph edges fail closed as
|
|
337
|
+
`"package-import-runtime-ambiguous-missing"` or
|
|
338
|
+
`"package-export-runtime-ambiguous-missing"` with condition evidence
|
|
339
|
+
`"import|require"` instead of choosing whichever condition appears first.
|
|
340
|
+
Static edge evidence can also disambiguate runtime condition selection without
|
|
341
|
+
crawling the host filesystem: ESM import/re-export edges select `import`,
|
|
342
|
+
CommonJS `require` / TypeScript `import = require` edges select `require`,
|
|
343
|
+
literal dynamic `import()` selects `import`, and static `import.meta.resolve`
|
|
344
|
+
or `require.resolve` host edges select the matching package branch while still
|
|
345
|
+
recording no host-runtime resolution claim. Edges record
|
|
346
|
+
`packageRuntimeConditionEvidenceSource`, `packageRuntimeConditionEdgeKind`, and
|
|
347
|
+
`packageRuntimeConditionReasonCode`; contradictory hard evidence fails closed as
|
|
348
|
+
`"package-runtime-condition-conflict-missing"` with
|
|
349
|
+
`packageRuntimeConditionCandidates`. Caller-supplied package type metadata also
|
|
350
|
+
disambiguates runtime condition selection for `.js`/`.ts` importers. Use
|
|
351
|
+
`moduleResolution.packageType`, `moduleResolution.packageTypeByRoot`,
|
|
352
|
+
`moduleResolution.packageTypes`, or `packages[name].type` / `packageType` for
|
|
353
|
+
package-local `imports`; resolved graph edges record `packageRuntimeCondition`
|
|
354
|
+
as `"import"` or `"require"` and include the matched `packageType`.
|
|
355
|
+
Non-resolver host dependency edges such as `Worker`, `SharedWorker`,
|
|
356
|
+
`serviceWorker.register`, worklet `addModule`, `importScripts`, and
|
|
357
|
+
`new URL(specifier, import.meta.url)` do not inherit package type metadata to
|
|
358
|
+
choose divergent package `import` / `require` targets. When those host package
|
|
359
|
+
specifier targets differ, graph edges fail closed with
|
|
360
|
+
`packageRuntimeConditionEvidenceSource: "host-runtime-ambiguous"` and reason code
|
|
361
|
+
`"package-runtime-condition-host-ambiguous-missing"` while keeping
|
|
362
|
+
`hostDependencyRuntimeResolutionClaim: false`.
|
|
363
|
+
When a coordinator already has package manifest data, use
|
|
364
|
+
`createNativeProjectModuleResolutionFromPackageManifests` to convert in-memory
|
|
365
|
+
`package.json` objects or text into the same runtime-neutral module-resolution
|
|
366
|
+
shape:
|
|
367
|
+
|
|
368
|
+
```js
|
|
369
|
+
const manifestResolution = createNativeProjectModuleResolutionFromPackageManifests({
|
|
370
|
+
packageExportConditions: ['import', 'require', 'default'],
|
|
371
|
+
manifests: [{
|
|
372
|
+
sourcePath: 'packages/app/package.json',
|
|
373
|
+
packageJson: {
|
|
374
|
+
name: '@pkg/app',
|
|
375
|
+
type: 'module',
|
|
376
|
+
exports: { './feature': { import: './esm/feature.mjs', require: './cjs/feature.cjs' } },
|
|
377
|
+
imports: { '#feature': { import: './esm/feature.mjs', require: './cjs/feature.cjs' } }
|
|
378
|
+
}
|
|
379
|
+
}]
|
|
380
|
+
});
|
|
381
|
+
|
|
382
|
+
const project = safeMergeJsTsProject({
|
|
383
|
+
includeOutputProjectSymbolGraph: true,
|
|
384
|
+
moduleResolution: manifestResolution.moduleResolution,
|
|
385
|
+
baseFiles,
|
|
386
|
+
workerFiles,
|
|
387
|
+
headFiles
|
|
388
|
+
});
|
|
389
|
+
```
|
|
390
|
+
|
|
391
|
+
Configured package `exports` maps fail closed for blocked subpaths. If a package
|
|
392
|
+
declares `exports` but the requested package subpath is not present, graph edges
|
|
393
|
+
record `resolutionKind` as `"package-subpath-not-exported-missing"` with
|
|
394
|
+
`packageName` and `packageSubpath` instead of falling through to source-root
|
|
395
|
+
probing. This keeps package visibility distinct from local file presence,
|
|
396
|
+
including type-only imports. Matched package export edges also retain
|
|
397
|
+
`packageExportKey` and `packageExportTarget`, including wildcard keys such as
|
|
398
|
+
`"./features/*"` resolved to concrete targets such as
|
|
399
|
+
`"./esm/features/button.mjs"`.
|
|
400
|
+
|
|
290
401
|
Named re-export identities also include symbol links when the project graph has
|
|
291
402
|
enough evidence. For `export { thing as renamedThing } from './thing.js'`,
|
|
292
403
|
`reExportIdentities[]` records the source module, imported/exported names,
|
|
@@ -308,6 +419,56 @@ re-export, export-star, local export, `export default`, and TypeScript
|
|
|
308
419
|
`export =` declarations carry `importKind`, `exportKind`, `localName`,
|
|
309
420
|
`importedName`, `exportedName`, `isTypeOnly`, and public-contract metadata into
|
|
310
421
|
the semantic index and project symbol graph.
|
|
422
|
+
Binding-level import and re-export identities preserve import-attribute /
|
|
423
|
+
import-assertion key/value records, counts, and hashes so attribute-only deltas
|
|
424
|
+
remain visible to merge admission without relying on hashes alone.
|
|
425
|
+
Dynamic `import()` calls with non-literal targets are recorded with the stable
|
|
426
|
+
`<dynamic-import>` pseudo-specifier and project graph `resolutionKind`
|
|
427
|
+
`"dynamic-import-non-literal-missing"` so merge gates fail closed without host
|
|
428
|
+
filesystem or package crawling.
|
|
429
|
+
CommonJS `require()` bindings are runtime-neutral graph edges: destructured
|
|
430
|
+
requires resolve to matching named `exports.foo` records, a default `require()`
|
|
431
|
+
binding resolves to the target document's `module.exports` record when that
|
|
432
|
+
export assignment is present, and `exports.__esModule = true` is ignored as
|
|
433
|
+
interop metadata instead of treated as a public export.
|
|
434
|
+
Static TypeScript-style CommonJS import helpers, including bare
|
|
435
|
+
`__importDefault(require("./dep"))` / `__importStar(require("./dep"))` calls and
|
|
436
|
+
`tslib_1.__importDefault(require("./dep"))` /
|
|
437
|
+
`tslib_1.__importStar(require("./dep"))` member-form calls, are recorded as
|
|
438
|
+
default and namespace import edges in lightweight and parser-backed project
|
|
439
|
+
graphs, while non-literal helper targets remain fail-closed. For conditional
|
|
440
|
+
package `exports` / `imports`, those helper edges keep their binding-level
|
|
441
|
+
default/namespace shape but select the `require` branch from the inner static
|
|
442
|
+
`require()` evidence; contradictory source-extension or package-type evidence
|
|
443
|
+
still fails closed instead of claiming runtime interop equivalence.
|
|
444
|
+
Static TypeScript-style CommonJS re-export helpers, including bare
|
|
445
|
+
`__exportStar(require("./dep"), exports)` /
|
|
446
|
+
`__createBinding(exports, require("./dep"), "name", "alias")` calls and
|
|
447
|
+
`tslib_1.__exportStar(require("./dep"), exports)` /
|
|
448
|
+
`tslib_1.__createBinding(exports, require("./dep"), "name", "alias")`
|
|
449
|
+
member-form calls, are also recorded as export-star or named re-export module
|
|
450
|
+
edges and fan out through the same project re-export identity graph as ESM
|
|
451
|
+
`export * from "./dep"` and `export { name as alias } from "./dep"`.
|
|
452
|
+
TypeScript-style CommonJS named getter re-exports that pair a static
|
|
453
|
+
`const dep = require("./dep")` alias with
|
|
454
|
+
`Object.defineProperty(exports, "name", { get: function () { return dep.name; } })`,
|
|
455
|
+
named function descriptors such as `Object.defineProperty(exports, "name", { get: function getName() { return dep.name; } })`,
|
|
456
|
+
shorthand `Object.defineProperty(exports, "name", { get() { return dep.name; } })`,
|
|
457
|
+
or block-bodied arrow getter `Object.defineProperty(exports, "name", { get: () => { return dep.name; } })`
|
|
458
|
+
are stitched into re-export identities when the alias and getter member are
|
|
459
|
+
static in the same source document.
|
|
460
|
+
Parser-backed ESTree/Babel imports also normalize no-expression
|
|
461
|
+
`TemplateLiteral` nodes as static CommonJS `require`, computed export keys, and
|
|
462
|
+
`Object.defineProperty` / `Object.defineProperties` export specifiers, while
|
|
463
|
+
template literals with expressions stay unresolved instead of being guessed.
|
|
464
|
+
The same static-literal rule applies to parser-backed dynamic `import()` and
|
|
465
|
+
TypeScript-style CommonJS helper re-export specifiers such as
|
|
466
|
+
``__exportStar(require(`./dep`), exports)``.
|
|
467
|
+
Host dependency APIs such as `new URL(specifier, import.meta.url)`, `Worker`,
|
|
468
|
+
`import.meta.resolve`, `require.resolve`, and `importScripts` also accept
|
|
469
|
+
no-substitution/static template specifiers as evidence while expression templates
|
|
470
|
+
emit `<host-dependency>` edges with expression hashes and proof-required
|
|
471
|
+
unresolved evidence.
|
|
311
472
|
|
|
312
473
|
`safeMergeJsTsProject` stays synchronous. When a caller already has parser-backed
|
|
313
474
|
native import results for merged output files, pass them as `outputProjectImports`
|
|
@@ -326,13 +487,159 @@ incompatible ways. Parser-backed stage imports can be supplied with
|
|
|
326
487
|
lightweight scanner. This is a conservative admission gate only: results still
|
|
327
488
|
keep `autoMergeClaim: false` and `semanticEquivalenceClaim: false`.
|
|
328
489
|
|
|
490
|
+
When a coordinator has a caller-owned TypeScript compiler API available, project
|
|
491
|
+
merge can also require output diagnostics before admitting the candidate:
|
|
492
|
+
|
|
493
|
+
```js
|
|
494
|
+
import ts from 'typescript';
|
|
495
|
+
import { safeMergeJsTsProject } from '@shapeshift-labs/frontier-lang-compiler';
|
|
496
|
+
|
|
497
|
+
const project = safeMergeJsTsProject({
|
|
498
|
+
requireOutputDiagnostics: true,
|
|
499
|
+
typescript: ts,
|
|
500
|
+
baseFiles,
|
|
501
|
+
workerFiles,
|
|
502
|
+
headFiles
|
|
503
|
+
});
|
|
504
|
+
|
|
505
|
+
console.log(project.outputDiagnosticsGate.status); // "passed" or "blocked"
|
|
506
|
+
console.log(project.summary.outputDiagnosticErrors);
|
|
507
|
+
```
|
|
508
|
+
|
|
509
|
+
The diagnostics gate checks merged output files with TypeScript syntactic and
|
|
510
|
+
semantic diagnostics, blocks on error diagnostics, and stores the normalized
|
|
511
|
+
diagnostics/conflicts under `outputDiagnosticsGate`. The package does not import
|
|
512
|
+
TypeScript from its runtime root; callers inject the compiler module or supply
|
|
513
|
+
precomputed `outputDiagnostics`.
|
|
514
|
+
|
|
515
|
+
The same caller-owned TypeScript module can emit declaration-output evidence for
|
|
516
|
+
the merged project boundary:
|
|
517
|
+
|
|
518
|
+
```js
|
|
519
|
+
const project = safeMergeJsTsProject({
|
|
520
|
+
includeDeclarationOutput: true,
|
|
521
|
+
typescript: ts,
|
|
522
|
+
baseFiles,
|
|
523
|
+
workerFiles,
|
|
524
|
+
headFiles
|
|
525
|
+
});
|
|
526
|
+
|
|
527
|
+
console.log(project.outputDeclarationGate.status); // "passed" or "blocked"
|
|
528
|
+
console.log(project.outputDeclarationGate.declarationFiles[0].sourceHash);
|
|
529
|
+
```
|
|
530
|
+
|
|
531
|
+
Use `requireDeclarationOutput: true` to fail closed when no compiler or supplied
|
|
532
|
+
`outputDeclarations` are available. The gate records normalized declaration
|
|
533
|
+
files, hashes, diagnostics, and conflicts under `outputDeclarationGate`; it is
|
|
534
|
+
public-boundary evidence, not a semantic-equivalence claim.
|
|
535
|
+
|
|
536
|
+
When project graph delta evidence is included, declaration output can also act
|
|
537
|
+
as a public API admission proof. `safeMergeJsTsProject` records
|
|
538
|
+
`declarationEmitParityProof` with worker/head/output declaration boundary
|
|
539
|
+
hashes. If a public compiler type changes to the same fingerprint on worker and
|
|
540
|
+
head, the graph delta admission can use that proof to verify the merged output
|
|
541
|
+
emits the same declaration boundary; a missing or mismatched supplied proof
|
|
542
|
+
fails closed with `typescript-public-api-declaration-emit-*` reason codes. The
|
|
543
|
+
proof is still only public-boundary evidence and does not claim runtime or full
|
|
544
|
+
semantic equivalence.
|
|
545
|
+
|
|
546
|
+
Current JS/TS semantic-merge status matrix:
|
|
547
|
+
|
|
548
|
+
| Surface | Status | Current evidence |
|
|
549
|
+
| --- | --- | --- |
|
|
550
|
+
| Parser/source-span/trivia evidence | Partial | Source preservation, source hashes, runtime directive-prologue entries, directives, comments/trivia summaries, project `sourceFileRecords` / `sourceSpanRecords`, protected-span hashes, shebang file-entrypoint directive ownership anchors, `sourceMappingURL` and `sourceURL` generated-boundary source-map spans, deterministic source-map generated-boundary ownership keys from supplied exact source/generated spans and hashes, generated-boundary position conflict evidence, deterministic ownership anchors, source-span/trivia ownership blockers, exact parser-trivia ownership records for directive prologues plus leading/trailing comments and JSDoc/block-comment spans when parser evidence matches the source hash, TypeScript `SourceFile` compiler-scanner exact token/trivia source-preservation evidence for JS/TS/JSX/TSX imports, ESTree/Babel parser token/comment range evidence when the supplied AST covers every non-whitespace byte of the current source, fail-closed scanner/ledger spoof blockers, source-span delta conflicts, parser roundtrip proof records, failed source-span roundtrip proof admission blockers, project-merge stage parser-trivia evidence from supplied parser-backed imports for base/worker/head/output, metadata-only exactness blockers for scanner fallbacks, and fixture corpus checks. Parser-backed exactness also requires contiguous current-source token/comment/trivia coverage with no gaps, overlaps, truncation, or text mismatches; truncated coverage blocks exact token/comment ownership. Adapters without token/comment ranges remain approximate/caller evidence, not exact parser trivia. |
|
|
551
|
+
| Scope/use-def graph | Partial | Lightweight lexical scope/use-def scans, destructuring alias binding records, object/array/nested/rest/default-initializer parameter binding evidence for function and arrow parameters, default import alias reads through re-export chains when a stable default-export local binding is observed, fail-closed `lexical-scope-import-alias-target-unresolved` records when an alias target cannot be tied to a lexical binding, namespace import dot and literal/static-template computed member-read evidence, blocked evidence for ambiguous computed namespace reads and namespace member writes, `this`/`super` receiver member read/write evidence including computed string and static-template members, optional chaining markers, and TypeScript checker-backed receiver-member reference proof for full `this`/`super` access spans including private identifiers, template-literal interpolation live-reference records with expression hashes plus tagged-template site/tag root/member metadata, caller-supplied ESTree/scope-manager structural evidence normalization, closure-capture depth/owner/reference hashes, binding-level closure capture hashes, project `scopeBindingRecords` / `scopeReferenceRecords`, public owner use hashes, public scope-use and reference-site delta conflicts with alias target route/use-hash evidence, TypeScript compiler reference relations when a checker is supplied, exact compiler reference-site proof hashes on scope reference records, fail-closed `typescript-compiler-reference-site-ambiguous`, `typescript-compiler-reference-lexical-binding-mismatch`, and `typescript-compiler-reference-import-alias-target-mismatch` records when compiler alias evidence cannot be reconciled with the lexical route or re-export/import target, and dependency-sensitive fixture coverage. Full whole-program binding/control-flow resolution is still caller/compiler-evidence bounded. |
|
|
552
|
+
| Module/export/import graph | Partial | Project graph stages, module resolution, runtime-neutral package manifest conversion from in-memory `package.json` objects/text, duplicate workspace-root package-name ambiguity diagnostics and fail-closed `package-workspace-root-ambiguous-missing` edges with `packageWorkspaceRoots` evidence, package exports/imports including wildcard package export key/target evidence, fail-closed package `imports` condition misses, runtime-ambiguous `import`/`require` condition blockers, caller-supplied package type runtime-condition evidence for `.js`/`.ts` package exports/imports, caller-supplied package environment-condition evidence such as `browser`, fail-closed `package-export-environment-ambiguous-missing` / `package-import-environment-ambiguous-missing` blockers with condition candidates when environment targets such as `browser` and `node` diverge without explicit evidence, and fail-closed host-runtime ambiguity blockers for non-resolver host package specifiers with divergent `import`/`require` targets, re-export identities including static TypeScript-style CommonJS bare and `tslib_1.__...` member-form `__exportStar(require("./dep"), exports)` fanout and `__createBinding(exports, require("./dep"), "name", "alias")` named re-export fanout, same-document CommonJS require-alias getter re-export identities for descriptor `get: function () { return dep.name; }`, named descriptor `get: function getName() { return dep.name; }`, shorthand `get() { return dep.name; }`, and block-bodied arrow `get: () => { return dep.name; }`, TypeScript-style CommonJS bare and `tslib_1.__...` member-form `__importDefault(require("./dep"))` and `__importStar(require("./dep"))` helper import edges, CommonJS `module.exports` default-import interop when no direct `default` export exists, literal computed CommonJS export properties such as `exports["default"]`, static `module.exports = { named }`, `Object.assign(exports, { named })`, `Object.defineProperty(exports, "named", { value/get })`, and `Object.defineProperties(exports, { named: { value/get } })` export maps in lightweight and AST-backed imports, ESTree/Babel no-expression `TemplateLiteral` normalization for CommonJS `require`, computed export keys, descriptor export specifiers, dynamic `import()`, CommonJS helper re-export specifiers, and host dependency specifiers while expression-bearing templates stay unresolved, TypeScript compiler no-substitution dynamic import and host dependency template evidence, `exports.__esModule` marker filtering, import-target deltas for head-introduced CommonJS export assignments, namespace/ambient module/global augmentation/export-assignment static shape records with proof hashes and no runtime-equivalence claim, fail-closed namespace/export-assignment shape delta conflicts, non-literal dynamic `import()` pseudo-specifiers with expression kind/text/hash evidence and fail-closed resolution evidence, static `new URL(specifier, import.meta.url)`, `Worker`, `SharedWorker`, `serviceWorker.register`, worklet `addModule`, `importScripts`, `import.meta.resolve`, and `require.resolve` host dependency edges with expression hashes and no runtime-resolution claim, dynamic host dependency targets emitted as `<host-dependency>` with expression hashes, `hostDependencyStaticSpecifierEvidence: false`, and proof-required unresolved evidence, import-attribute/import-assertion normalized key/value/count/hash evidence on static imports, dynamic imports, and re-exports, import-attribute delta conflicts, output graph unresolved-module conflicts that preserve edge-level fail-closed package, host, dynamic import, and import-attribute value evidence, and output graph resolved-module missing-export conflicts that preserve edge-level package and import-attribute evidence. Host filesystem/package graph crawling, namespace runtime evaluation, ambient/global compatibility, and CommonJS runtime interop equivalence remain out of the root API. |
|
|
553
|
+
| Type/public API graph | Partial | Public-contract regions, signature/contract hashes, TypeScript compiler symbol/type records, source-bound checker proof source path/hash requirements, compiler-backed type-reference target proof that binds public API type references to resolved target symbols, declaration spans, and declaration source text hashes, inferred exported factory call-signature evidence, compiler-backed public call/construct signature shape evidence and proof hashes, exported overload declaration/signature counts, compiler-backed overload signature-set proof, compiler-backed generic type-parameter/default proof, compiler-backed public member property/method property-set proof, compiler-backed public index-signature key/value/readonly evidence and proof hashes, stable public-surface hashes that ignore transient TypeScript symbol flags, compiler-backed class heritage and constructor-signature evidence/proof hashes, compiler-backed private class member and accessor-field static shape records/proof hashes plus source- and required-signal-bound private/accessor runtime proof binding with command/trace/evidence hashes, private brand, private method, private accessor, static private, subclass brand-boundary, and accessor descriptor trace slots, and false claim flags, compiler-backed class/member/parameter decorator target and expression static metadata records/proof hashes plus source-bound decorator runtime execution proof binding with trace hashes and false claim flags, compiler-backed enum runtime-shape/member-value evidence and proof hashes, TypeScript compiler importer support for source-bound computed enum evaluated-value traces with emitted-shape hashes, trace/evidence hashes, and false claim flags, compiler-backed conditional, indexed-access, mapped, `keyof`, template-literal, `infer`, union, intersection, tuple, and mixed known advanced/composite type-shape proof hashes, static compiler-backed inference syntax evidence/proof hashes for `satisfies`, `as const`, and const type parameters, bounded TypeChecker `isTypeAssignableTo` oracle proof for simple public type aliases with source path/hash binding and fail-closed `typescript-public-api-type-equivalence-proof-missing` for missing or ambiguous oracle evidence, class private/accessor/decorator/class/enum/advanced-shape/composite-shape/inference-syntax/index-signature/callable-signature/type-reference-target hashes in public compiler-type delta fingerprints, fail-closed missing-proof blockers for missing public API source hashes, type-reference target proof hashes, call/construct signature return/parameter evidence, constructor/class-heritage/private-class-member/accessor-field/index-signature value-type/enum runtime-shape/conditional-branch/indexed-access object-index-result/mapped constraint-value/`keyof` target/template-literal span/`infer` type-parameter/union member/intersection member/tuple element evidence, fail-closed computed enum runtime-value blockers when source-bound evaluated-value proof is missing, stale, trace-incomplete, value-incomplete, or claim-bearing, fail-closed private/accessor and decorator runtime execution blockers when source-bound trace proof is missing, stale, trace-incomplete, schema/kind-mismatched, required-signal-incomplete, commandless, or claim-bearing, fail-closed unknown advanced type-shape evidence, unsupported type-equivalence reason codes, public compiler-type delta conflicts, declaration-output gate, TypeScript declaration emit parity proof for worker/head/output public boundaries, and project graph delta conflicts. Full type-equivalence, broad decorator execution equivalence beyond source-bound trace proofs, broad enum runtime evaluation beyond source-bound computed-value traces, broad runtime equivalence for private/accessor execution beyond source-bound trace proofs, or broad inference-semantics proof beyond these focused compiler-backed cases is not claimed. |
|
|
554
|
+
| JSX/TSX element and prop graph | Partial | JSX attribute/child-expression safe-merge fallbacks, conditional child-expression blockers, keyed-child insertion evidence, keyed named Fragment insertion evidence, planned-output duplicate-key checks, top-level `key` attribute scanning that does not treat `data-key` as stable identity, deterministic shorthand-fragment/spread/reorder/same-gap blockers, spread-attribute records/expression hashes, spread/explicit prop precedence blockers, component prop diagnostic gates, project `jsxElementRecords` / `jsxPropRecords`, public owner prop and keyed child-order hashes, typed public key/fragment evidence, literal/shorthand/reference/static optional-chain JSX prop-value callsite records/hashes with `jsx-render-prop-value-literal-evidence`, `jsx-render-prop-value-static-reference-evidence`, and `jsx-render-prop-value-static-optional-reference-evidence`, dynamic prop-value blockers such as `jsx-render-prop-value-computed-reference-unsupported`, `jsx-render-prop-value-call-expression-unsupported`, and `jsx-render-prop-value-optional-reference-unsupported`, same-file plain/member and project-local named/default/barrel-import plain/member static component prop passthrough evidence with `jsx-render-component-prop-flow-static-passthrough-evidence`, dynamic component prop passthrough blockers with `jsx-render-component-prop-flow-dynamic-value-unsupported`, component prop render-flow blockers with `jsx-render-component-prop-flow-unsupported`, provider ancestor path/count/hash evidence for context-provider nesting, context provider value prop records/hashes with literal provider value evidence, static identifier/member reference-binding evidence, static optional-chain reference-binding evidence, static call-free object/array value evidence, or `jsx-render-context-provider-value-unsupported` plus provider-value dynamic blocker metadata (`dynamicBlockerReasonCode` values such as `jsx-render-context-provider-value-call-expression-unsupported` and `jsx-render-context-provider-value-computed-reference-unsupported`) for call/computed/optional/spread values, context consumer target records/hashes with static identifier/member target evidence, static optional target evidence, or `jsx-render-context-consumer-target-unsupported` plus dynamic-target blockers for computed/call targets, static lexical provider-ancestor lookup records/hashes for matching context consumers with `jsx-render-context-consumer-provider-lookup-static-evidence`, same-file direct component provider lookup evidence for plain identifier callsites and same-file member component provider lookup evidence for static object-literal callsites such as `UI.Child` with `jsx-render-context-consumer-provider-component-lookup-static-evidence`, same-file `{children}` / `props.children` / `this.props.children` provider-flow evidence for components that render children directly inside a static provider with `jsx-render-context-consumer-provider-component-flow-static-evidence`, project-local named/aliased named/default component-import and member-object provider lookup evidence plus explicit named/default, member-object, and unique star barrel re-export component evidence with `jsx-render-context-consumer-provider-project-component-lookup-static-evidence`, project-import children-flow evidence with `jsx-render-context-consumer-provider-project-component-flow-static-evidence`, while dynamic/ambiguous member, unresolved, external-runtime, and ambiguous-star component targets emit `jsx-render-context-consumer-provider-component-target-unsupported`, hook call-order/count/hash render-risk evidence, hook dependency-array records/counts/hashes with per-item literal/reference/static optional-reference evidence, dynamic computed/call blocker reason codes, static dependency-set evidence, or `jsx-render-hook-dependency-array-unsupported` for dynamic dependency expressions, effect-hook callback/cleanup records/counts/hashes with static callback/cleanup source evidence, callback reference-path metadata, static optional callback/cleanup evidence, dynamic callback/cleanup blocker reason codes, runtime-equivalence-unproved evidence, or `jsx-render-hook-effect-unsupported` for dynamic effect factories and cleanup returns, public component render-return records/counts/hashes with static return-expression evidence, static array/fragment return collection child records/hashes, plus `jsx-render-return-branch-unsupported` for branchy/conditional returns, static `memo` / `forwardRef` / `observer` / `React.lazy` component-wrapper render-risk records including lazy import-factory evidence and lazy-load/runtime proof gaps, event-handler prop records/counts/hashes with static handler-reference evidence, static optional handler-reference evidence, static inline handler expression evidence, same-owner local handler declaration hashes via `jsx-render-event-handler-local-declaration-evidence`, or `jsx-render-event-handler-prop-unsupported` with computed/call blocker metadata for handler factory/call expressions, and public JSX prop/spread/child-order/render-risk delta conflicts produce review/blocking evidence with reason codes such as `jsx-render-context-provider-nesting-unsupported`, `jsx-render-prop-value-literal-evidence`, `jsx-render-prop-value-static-reference-evidence`, `jsx-render-prop-value-static-optional-reference-evidence`, `jsx-render-prop-value-unsupported`, `jsx-render-component-prop-flow-static-passthrough-evidence`, `jsx-render-component-prop-flow-dynamic-value-unsupported`, `jsx-render-component-prop-flow-unsupported`, `jsx-render-context-provider-value-literal-evidence`, `jsx-render-context-provider-value-static-reference-evidence`, `jsx-render-context-provider-value-static-optional-reference-evidence`, `jsx-render-context-provider-value-static-data-evidence`, `jsx-render-context-provider-value-unsupported`, `jsx-render-context-consumer-target-static-evidence`, `jsx-render-context-consumer-target-static-optional-reference-evidence`, `jsx-render-context-consumer-provider-lookup-static-evidence`, `jsx-render-context-consumer-provider-component-lookup-static-evidence`, `jsx-render-context-consumer-provider-component-flow-static-evidence`, `jsx-render-context-consumer-provider-project-component-lookup-static-evidence`, `jsx-render-context-consumer-provider-project-component-flow-static-evidence`, `jsx-render-context-consumer-provider-component-target-unsupported`, `jsx-render-context-consumer-target-unsupported`, `jsx-render-hook-call-order-unsupported`, `jsx-render-hook-dependency-array-static-evidence`, `jsx-render-hook-dependency-array-unsupported`, `jsx-render-hook-effect-static-callback-evidence`, `jsx-render-hook-effect-static-optional-callback-evidence`, `jsx-render-hook-effect-static-cleanup-evidence`, `jsx-render-hook-effect-static-optional-cleanup-evidence`, `jsx-render-hook-effect-runtime-equivalence-unproved`, `jsx-render-hook-effect-unsupported`, `jsx-render-return-static-evidence`, `jsx-render-return-array-static-evidence`, `jsx-render-return-fragment-static-evidence`, `jsx-render-return-branch-unsupported`, `jsx-render-component-wrapper-lazy-boundary-evidence`, `jsx-render-component-wrapper-lazy-runtime-equivalence-unproved`, `jsx-render-event-handler-prop-static-evidence`, `jsx-render-event-handler-prop-static-optional-reference-evidence`, `jsx-render-event-handler-prop-static-inline-evidence`, `jsx-render-event-handler-local-declaration-evidence`, and `jsx-render-event-handler-prop-unsupported`. Full component render equivalence, lazy-load/runtime equivalence, dynamic context value semantics beyond value-expression identity, provider lookup across external/runtime/ambiguous imported component boundaries, arbitrary prop/render flow beyond bounded static passthrough evidence, optional-chain render equivalence beyond callsite identity evidence, executable hook effect equivalence, and framework template semantics are not proved. |
|
|
555
|
+
| Control-flow/effect graph | Partial | Lightweight dependency/effect regions, same-line short-circuit guard evidence including logical assignment operators, static mutation target/operator/mutator evidence for assignment/update/delete/mutating-call regions including literal-computed mutation key evidence such as `state["visible"]` while dynamic computed targets remain marked dynamic, bounded same-line repeated assignment/update/delete/mutating-call mutation occurrence regions with per-occurrence target evidence, direct/receiver/literal-computed/same-scope const-bound computed/dynamic-computed/optional-receiver/optional-call/constructor/dotted-tagged-template/computed-tagged-template effect target evidence for recognized network/scheduler/storage/host/browser/tagged-template effect regions with false runtime-equivalence claims, global bracket-call ranges for `window`/`globalThis`/`self` calls such as `window["fetch"]`, `globalThis["setTimeout"]`, and `self["queueMicrotask"]`, optional global effect-call ranges for nullish-boundary calls such as `window?.fetch?.(api)`, `globalThis?.["setTimeout"]?.(api)`, and `self?.queueMicrotask?.(api)`, full scheduler API target ranges for timer/cancel/idle/immediate calls such as `clearTimeout`, `cancelAnimationFrame`, `requestIdleCallback`, `setImmediate`, and `clearImmediate`, exact constructor expression ranges for browser/network constructors such as `new Worker`, `new SharedWorker`, and `new WebSocket`, bounded same-line repeated named network/scheduler call occurrence regions, bounded same-line repeated constructor occurrence regions, bounded same-line repeated tagged-template occurrence regions, bounded same-line repeated await occurrence regions with per-await target and prefix-order evidence, bounded same-line repeated yield occurrence regions with per-yield target evidence, bounded storage/host/browser/import.meta token effect occurrence regions, same-line await-prefix order evidence, Promise combinator concurrency/settlement evidence for `Promise.all`/`allSettled`/`race`/`any` with direct array element position and false runtime-equivalence claims, module-scope top-level await runtime-scope evidence, source-bound top-level await proof binding for project runtime-region conflicts that validates source hashes, region identity, suspension-order hash, module/suspension trace evidence, signature hash, and false claim flags before suppressing the conflict, class static block initialization-order evidence, source-bound class static block proof binding for project runtime-region conflicts that validates source hashes, region identity, static-initialization order hash, execution trace evidence, signature hash, and false claim flags before suppressing the conflict, explicit resource-management `using`/`await using` acquisition and reverse lexical disposal-order evidence with no disposal-effect equivalence claim, source-bound resource-management disposal proof binding for project runtime-region conflicts that validates source hashes, region identity, disposal-order hash, async-disposal trace evidence, signature hash, and false claim flags before suppressing the conflict, static `import.meta` host-context member evidence, host-context member-path evidence in semantic sidecars, source-bound import.meta host-context proof binding for project runtime-region conflicts that validates source hashes, region identity, host-context member hash, host-resolution trace evidence, signature hash, and false claim flags before suppressing the conflict, host-dependent `import.meta` divergence fixture coverage, optional-chain/nullish-boundary order evidence for optional mutating calls, same-line conditional-expression guard/branch evidence for runtime-sensitive regions, structured same-line throw expression/order evidence for exception regions, structured loop-iteration evidence for `for`/`for-of`/`for-await-of`/`for-in`/`while`/`do` effects and mutations, `break`/`continue` transfer evidence for loop/switch exit and next-iteration order including lexical labeled-transfer target records, return/yield completion-value evidence for exit regions, `yield*` iterator-delegation evidence with delegated iterable text plus false iterator-protocol and completion-propagation equivalence claims, source-bound generator protocol proof binding for project runtime-region conflicts that validates source hashes, yield-star region identity, generator protocol order hash, iterator/completion trace evidence, signature hash, and false claim flags before suppressing the conflict, source-bound async-generator protocol proof binding that additionally requires async iterator, cancellation, and backpressure traces plus false async-protocol claim flags, bounded same-block unreachable-after-return/throw/break/continue evidence, simple exhaustive `if`/`else` plus `if`/`else if`/`else` completion evidence, bounded tail-position nested block/control completion evidence, and `try`/`catch`/`finally` finalizer return-or-throw completion evidence for later runtime-sensitive regions without a full path-reachability claim, switch/case/default dispatch evidence plus switch fallthrough/prior-case completion evidence for effects and mutations inside case arms, try/catch throw-path evidence, try/finally completion-order evidence for runtime-order-sensitive effects and mutations, bounded nested path reachability records with `reachabilityOrder`, typed public runtime-order evidence records, source-bound runtime-order proof evidence that rejects boolean/status-only and stale source proofs, project runtime-region records, public runtime-region delta conflicts with runtime-order admission reason codes, unsafe control-flow fixtures, rest-callee pure call-argument append admission with explicit same-language replacement evidence, and adversarial blockers for nested calls, method/optional callees, comments, duplicate object literals, spread arguments, stale spans, and spoofed callee-signature evidence. Executable effect equivalence, iterator-protocol equivalence, disposal side-effect equivalence, dynamic computed effect target equivalence, dynamic nested-path reachability, and full path reachability are not proved. |
|
|
556
|
+
| Generic semantic edit admission | Partial | Semantic edit scripts, projection/replay, offset and line/column source-span roundtrip proof, output source/hash-bound replay-clean project proof records, replay IDs/statuses/diagnostic categories, replay overlap diagnostics, patch bundles, lineage records, JS/TS safe-merge fallbacks, and shared exact-branch project admission helpers carry admission evidence with `autoMergeClaim: false`. Clean current-head replay proof can route through bounded `admit-independent-semantic-edit-current-head-commutation` when current-source and output hashes are exact-bound. Missing or partial clean replay proof routes to `produce-semantic-edit-replay-proof`, stale current-head proof routes to `rerun-semantic-edit-replay-current-head`, and output-mismatched replay proof routes to `reject-semantic-edit-replay-output-mismatch` instead of becoming a broad equivalence claim. Project admission also emits normalized structural route records for missing-evidence review, semantic replay reject/rerun, symbol rename/move/split-merge apply paths, and stale split/merge rebase paths. |
|
|
557
|
+
| Unsupported JS/TS surface coverage | Partial | `proofEvidence` records `unsupported-js-ts-surface-review`, masked-code observed-surface metadata with source spans, line/column, excerpts, `observedSurfaceKind`, focused `boundedEvidence`, and explicit `remainingProofGap` / `proofGapCode` fields so known bounded surfaces no longer collapse into stale generic partial reason codes. Current focused evidence metadata covers explicit resource-management acquisition/disposal order with disposal effects still unproved, decorator static target/expression metadata with source-bound runtime proof binding when supplied while missing/stale/trace-incomplete decorator runtime proof stays fail-closed, accessor/private class static shape with source- and required-signal-bound runtime proof binding when supplied while missing, stale, trace-incomplete, schema/kind-mismatched, required-signal-incomplete, commandless, or claim-bearing proof stays fail-closed, class static block initialization-order evidence with source-bound static-initialization proof binding when supplied while missing/stale/trace-incomplete proof stays fail-closed, enum runtime-shape/member-value evidence plus source-bound computed-value traces while broad enum runtime evaluation remains unproved, namespace/ambient/global/`export =` static module-shape evidence with runtime or compatibility equivalence still unproved, `import.meta` host-context member evidence with source-bound host-resolution proof binding when supplied while missing, stale, trace-incomplete, or claim-bearing proof stays fail-closed, inference-syntax evidence for `satisfies`, `as const`, and const type parameters with broad inference semantics still unproved, generator and async-generator yield/await ordering evidence with source-bound generator/async-generator protocol proof binding when supplied while missing, stale, trace-incomplete, or claim-bearing proof stays fail-closed, and top-level `await` runtime-scope evidence with source-bound suspension/module-evaluation proof binding when supplied while missing/stale/trace-incomplete proof stays fail-closed. The review routes remaining proof gaps to `prove-unsupported-js-ts-surface`, focused resource-management disposal proof, focused private/accessor runtime proof, focused generator protocol routes, and focused decorator runtime proof routes, keeps `autoMergeClaim: false` and `semanticEquivalenceClaim: false`, and does not claim executable semantic equivalence. |
|
|
558
|
+
| Semantic equivalence proof | Bounded evidence | `proofEvidence` records syntax identity, parser roundtrip, diagnostics, declaration output, focused tests, explicit `semantic-equivalence-unknown` by default, and opt-in source/output/gate-bound external `semantic-equivalence-external` proof records. A valid external proof can set aggregate `semanticEquivalenceClaim: true` for the exact project binding while `autoMergeClaim` remains false; stale, schema/kind-mismatched, output-hash-mismatched, gate-mismatched, or auto-merge-claiming proofs fail closed and retain unknown equivalence. |
|
|
559
|
+
| Cross-file symbol rename | Partial | Default admission now covers the narrow exact worker/head branch case when a single exported symbol rename has every project import rewritten, no stale or duplicate import/export evidence, project graph delta evidence is requested, and diagnostics/declaration gates pass. Opt-in `allowProjectSymbolRenames` remains available for broader caller-reviewed exact branch admissions. |
|
|
560
|
+
| Symbol move between files | Partial | Default admission now covers the narrow exact worker/head branch case when a single exported symbol move has every project import rewritten, no ambiguous/multiple/stale move evidence, project graph delta evidence is requested, and diagnostics/declaration gates pass. Opt-in `allowProjectSymbolMoves` remains available for broader caller-reviewed exact branch admissions. |
|
|
561
|
+
| Split/merge modules/classes | Partial | Default path still blocks, but opt-in `allowProjectSplitMerges` admits exact branch output/deletions for module/class split and merge classifications only when moved declarations or class members form a one-to-one source/target partition, the other branch is unchanged, output project graph evidence is requested, diagnostics/declaration evidence passes, and generated-output boundaries are absent. Duplicate, missing, or extra structural keys route to `exact-structural-partition-proof` instead of becoming an admission. |
|
|
562
|
+
| Real-repo benchmark suite | Partial | Manifest-only TypeScript/Vite/Prettier/Next/React corpus is validated and emitted by `bench/smoke.mjs`; compact synthetic Vite import-shape, Vite `import.meta` host-context divergence, and React TSX child-addition fixtures are asserted, comments/source-map boundary fixtures cover the parser/source-span row, and no third-party source is vendored. The real-repo bench emits 14 oracle cases across five matrix rows, per-entry local checkout proof rows plus explicit evidence rows that separate manifest metadata, checkout root/dir presence, checkout proof status/reason, proof execution, dependency-install proof/execution, repository-command proof/execution, `.git` metadata kind, gitdir pointer/config/origin presence, and lockfile/package-manager metadata under `tmp/js-ts-semantic-merge-real-repos` or `FRONTIER_REAL_REPO_CORPUS_ROOT`, offline npm/pnpm/yarn command-matrix metadata, per-entry `commandDryRunPhases` for dependency-install/build/test with skipped, ready-local-checkout, and opt-in-required assertions, and guarded opt-in `commandRunPhases` that verify realpath containment, proof-glob match, git identity, single package manager, allowlisted argv/env, timeout, exit, hash, capped-output, skipped-checkout, failed-command, and truncation evidence. Dependency installation and checked-out repository build/test execution remain default-off unless explicitly enabled, but the local runner and proof artifacts now exist. |
|
|
563
|
+
| Telemetry/confidence routing | Partial | Project merge results now include compact `evidence`, `confidence`, confidence score/level, confidence dimensions, missing signals, next missing evidence route IDs, summary/matrix counters, missing-evidence `byLane` counters, `confidence.routingCalibration` route/lane/action/proof-level counters with next-route metadata, deterministic `routeWorklist` / `nextRouteWork` coordinator work items that merge missing evidence with focused proof gaps, and proof-summary unsupported-surface counts/kinds/reason codes for coordinator routing; failed quality gates remain blocked but promote `rerun` confidence with `rerun-project-quality-gate` evidence. |
|
|
564
|
+
|
|
565
|
+
Recent residual closures represented in the matrix shards:
|
|
566
|
+
|
|
567
|
+
- Parser/source-span/trivia now exposes source-map generated-boundary gate fields on project source file/span records and blocks position-only or missing exact generated-boundary ownership evidence as `project-generated-source-boundary-ownership-blocked`.
|
|
568
|
+
- Parser/source-span/trivia now promotes failed `source-span-roundtrip` proof records into `project-source-span-roundtrip-proof-failed` project admission blockers so trivia-loss output cannot remain `merged`.
|
|
569
|
+
- Module/export/import graph now treats top-level `moduleResolution.imports` as scoped to `packageRoot`/`root`; importers outside that root fail closed with `package-import-scope-missing`.
|
|
570
|
+
- Module/export/import graph now keeps non-resolver host package specifiers fail-closed when package `import` / `require` targets diverge, using `host-runtime-ambiguous` evidence instead of inheriting caller package type.
|
|
571
|
+
- Scope/use-def graph now records exact compiler reference-site proof hashes and blocks ambiguous or compiler/lexical-mismatched reference evidence.
|
|
572
|
+
- Scope/use-def graph now attaches TypeScript checker proof hashes to full `this`/`super` receiver-member access spans, including private identifiers.
|
|
573
|
+
- Scope/use-def graph now collects object, nested object, array, alias, default-initializer, and rest bindings from function and arrow parameter lists without treating property keys as parameter bindings.
|
|
574
|
+
- Type/public API proof records now bind source path/hash for public compiler evidence and fail closed when source-bound proof is missing.
|
|
575
|
+
- Type/public API proof records now bind public type references to TypeScript checker target symbols, declaration spans, and declaration source text hashes, and fail closed when target proof hashes are missing.
|
|
576
|
+
- Type/public API and unsupported-surface evidence now separate static decorator metadata proof from decorator runtime execution equivalence with the `prove-decorator-runtime-execution-equivalence` route and a source-bound decorator runtime proof bridge for trace-backed evidence.
|
|
577
|
+
- Type/public API and unsupported-surface evidence now harden private/accessor runtime proof binding with derived required signals, exact schema/kind checks, command/trace/evidence hashes, and trace slots for private brand checks, private method calls, private accessors, static private access, subclass brand boundaries, and accessor descriptors.
|
|
578
|
+
- JSX/TSX graph evidence now includes imported provider-wrapper children-flow lookup hashes and keeps wrappers that do not render children unsupported.
|
|
579
|
+
- JSX/TSX graph evidence now records literal, boolean shorthand, static-reference, and static optional-chain prop-value callsites plus static optional-chain context provider value bindings while blocking optional computed/call expressions and component prop render flow.
|
|
580
|
+
- JSX/TSX graph evidence now records per-item hook dependency records for literals, references, static optional references, and dynamic computed/call blockers.
|
|
581
|
+
- JSX/TSX graph evidence now records `useContext` target reference paths, static optional target paths, and dynamic computed/call blocker reason codes.
|
|
582
|
+
- JSX/TSX graph evidence now records hook-effect callback reference paths, static optional callback/cleanup references, and dynamic callback/cleanup blocker reason codes.
|
|
583
|
+
- JSX/TSX graph evidence now records static optional event-handler references while keeping computed handlers and handler factory calls on dynamic blocker routes.
|
|
584
|
+
- Control-flow/effect evidence includes bounded exhaustive `switch`/`case`/`default` return-or-throw reachability, bounded tail-position nested completion reachability, and `try`/`catch`/`finally` finalizer return-or-throw reachability for later runtime-sensitive regions, without a full path-reachability claim.
|
|
585
|
+
- Generic semantic edit admission binds replay proof to the current project head hash, routes stale replay artifacts to `rerun-semantic-edit-replay-current-head`, and routes output-mismatched replay proof to `reject-semantic-edit-replay-output-mismatch`.
|
|
586
|
+
- Generic semantic edit admission now counts semantic operation line/column spans as source-span roundtrip evidence, so clean current-head replay fixtures no longer route to `produce-source-span-roundtrip-evidence` solely because they lack raw offset spans.
|
|
587
|
+
- Split/merge module and class admissions now require exact structural partition evidence; duplicate moved declarations or members stay blocked with `exact-structural-partition-proof`, while stale other-branch output records an `other-branch-unchanged-proof` blocker.
|
|
588
|
+
- Project admission now exposes `admission.routes` / `routeSummary` records for structural apply/review/reject/rerun/rebase decisions across cross-file symbol rename, symbol move, split/merge, replay-proof, and missing-evidence paths, while keeping `autoMergeClaim: false` and `semanticEquivalenceClaim: false`.
|
|
589
|
+
- Semantic equivalence proof now accepts source/output/gate-bound external proof records for exact JS/TS project bindings, removes the external-proof missing route only when the proof validates, and keeps stale, malformed, or overclaiming proofs fail-closed with `semantic-equivalence-unknown`.
|
|
590
|
+
- Parser/source-span/trivia now requires contiguous parser-backed current-source token/comment/trivia coverage with no gaps, overlaps, truncation, or text mismatches before claiming exact token/comment ownership, including distinct JSDoc and block-comment ownership relations.
|
|
591
|
+
- Scope/use-def graph now blocks compiler/lexical import-alias re-export target disagreement with `typescript-compiler-reference-import-alias-target-mismatch`.
|
|
592
|
+
- Scope/use-def graph now treats no-expression template literals in namespace-import and `this`/`super` computed member reads as static member evidence while expression templates remain blocked.
|
|
593
|
+
- Module/export/import graph now treats duplicate package names across different workspace roots as `ambiguous-package-workspace-root` and emits fail-closed `package-workspace-root-ambiguous-missing` edges.
|
|
594
|
+
- Module/export/import graph now preserves edge-specific fail-closed module evidence through `project-output-module-unresolved` conflicts instead of collapsing package, host, dynamic import, and import-attribute blockers into a generic module miss.
|
|
595
|
+
- Module/export/import graph now preserves edge-specific package/import-attribute evidence through `project-output-symbol-unresolved` conflicts when a module resolves but the requested export is missing.
|
|
596
|
+
- Module/export/import graph now preserves normalized import-attribute key/value records through static imports, dynamic imports, re-export identities, graph delta conflicts, and unresolved-edge evidence instead of relying on hashes alone.
|
|
597
|
+
- Module/export/import graph now stitches CommonJS `Object.defineProperty` getter re-exports through block-bodied arrow getter descriptors when they statically return a require-alias member.
|
|
598
|
+
- Module/export/import graph now stitches CommonJS `Object.defineProperty` getter re-exports through named function getter descriptors when they statically return a require-alias member.
|
|
599
|
+
- Module/export/import graph now normalizes ESTree/Babel no-expression `TemplateLiteral` nodes as static CommonJS `require` and export specifiers while leaving dynamic template expressions unresolved.
|
|
600
|
+
- Module/export/import graph now records no-substitution template dynamic imports and parser-backed CommonJS helper `require` templates as static module edges while keeping expression templates proof-required.
|
|
601
|
+
- Module/export/import graph now records no-substitution/static template host dependencies for `new URL`, workers, resolver calls, and `importScripts` while leaving expression templates unsupported.
|
|
602
|
+
- Module/export/import graph now emits dynamic host dependency targets as `<host-dependency>` edges with expression hashes and proof-required unresolved evidence instead of omitting them.
|
|
603
|
+
- CSS Modules graph records now infer local class export evidence from `.module.css` source via `@shapeshift-labs/frontier-lang-css`, while generated class-name maps, bundler transform identity, source-map proof, dynamic member access, writes, and helper-call equivalence remain fail-closed.
|
|
604
|
+
- Type/public API graph now includes bounded TypeChecker assignability oracle proof for simple public type aliases while keeping semantic/runtime equivalence claims false.
|
|
605
|
+
- JSX/TSX graph now records same-file and project-local named/default/barrel-import static component prop passthrough as `jsx-render-component-prop-flow-static-passthrough-evidence` and blocks dynamic callsite values with `jsx-render-component-prop-flow-dynamic-value-unsupported`.
|
|
606
|
+
- JSX/TSX graph now records static `memo` / `forwardRef` / `observer` / `React.lazy` component wrapper chains as component-wrapper render-risk evidence while keeping render, lazy-load, and runtime equivalence explicitly unproved.
|
|
607
|
+
- JSX/TSX graph now records public const-arrow components with implicit JSX expression returns as static render-return evidence without treating them as branch control flow.
|
|
608
|
+
- JSX/TSX graph now records top-level conditional JSX return condition/consequent/alternate branch arms as static evidence while still routing branchy render equivalence to review.
|
|
609
|
+
- JSX/TSX graph now records top-level logical JSX return operators and left/right guard arms as static evidence while still routing branchy render equivalence to review.
|
|
610
|
+
- JSX/TSX graph now accepts source-bound branch-arm preservation proof for single top-level conditional/logical render returns, suppressing only the matching render-risk conflict while stale hashes, arm mismatches, non-render risks, and broad render/runtime equivalence claims remain blocked.
|
|
611
|
+
- JSX/TSX graph now records static JSX array-return and fragment-return collection evidence, including child/item counts, texts, hashes, and collection hashes while keeping render equivalence review-only.
|
|
612
|
+
- Control-flow/effect evidence now records same-line `then` / `catch` / `finally` promise-chain handler order, nested handler-step attribution, rejection/finalizer markers, and false handler/runtime equivalence claims for order-sensitive effect admission.
|
|
613
|
+
- Control-flow/effect evidence now adds a source-bound promise runtime proof bridge for `Promise.all`/`allSettled`/`race`/`any` combinator order and `then`/`catch`/`finally` chain order, requiring concurrency, settlement, element-order, handler, rejection-flow, and finalizer traces plus false promise equivalence claims before suppressing project runtime-region conflicts.
|
|
614
|
+
- Control-flow/effect evidence now records effect target order for direct, receiver, literal-computed, same-scope const-bound computed, dynamic-computed, constructor, dotted tagged-template, and computed tagged-template effect targets while keeping runtime equivalence false.
|
|
615
|
+
- Control-flow/effect evidence now includes bounded nested path reachability records with `reachabilityOrder`; unsupported or dynamic nested paths omit reachability proof instead of broadening the claim.
|
|
616
|
+
- Control-flow/effect evidence now records static literal-computed mutation keys separately from dynamic computed mutation targets while keeping runtime equivalence false.
|
|
617
|
+
- Control-flow/effect evidence now records literal-computed mutator method calls such as `queue["push"](value)`, optional-call boundaries, computed method names, and false runtime-equivalence claims.
|
|
618
|
+
- Unsupported-surface review records generator and async-generator functions as focused yield/await-order evidence and keeps broad iterator/async-iterator protocol equivalence unclaimed unless a source-bound protocol proof is supplied.
|
|
619
|
+
- Control-flow/effect evidence now records `yield*` as iterator delegation with delegated iterable text and explicit iterator-protocol/completion-propagation proof gaps, plus source-bound generator and async-generator protocol proof bridges for project runtime-region conflict admission.
|
|
620
|
+
- Control-flow/effect evidence now adds a source-bound class static block proof bridge for static-initialization order and execution-trace evidence before suppressing project runtime-region conflicts.
|
|
621
|
+
- Control-flow/effect evidence now adds a source-bound top-level await proof bridge for suspension order and module-evaluation trace evidence before suppressing project runtime-region conflicts.
|
|
622
|
+
- Generic semantic edit admission now has a bounded `admit-independent-semantic-edit-current-head-commutation` route for clean current-head replay proofs while stale and output-mismatched proof routes remain rerun/reject.
|
|
623
|
+
- Symbol move admission now has a narrow default path for exact exported moves with complete import rewrites, graph evidence, and diagnostics/declaration gates; ambiguous and multiple moves stay blocked.
|
|
624
|
+
- Real-repo corpus evidence now exposes per-entry `commandDryRunPhases` plus guarded opt-in `commandRunPhases` for dependency-install/build/test with default-off, skipped-checkout, executed, failed, and truncated-output proof coverage.
|
|
625
|
+
- Telemetry/confidence routing now includes lane-level missing-evidence counters, compact `confidence.routingCalibration` route/lane/action/proof-level counters, and a deterministic route worklist for the next coordinator action.
|
|
626
|
+
|
|
627
|
+
`confidence.admissionMatrixAudit` turns the partial JS/TS matrix rows into a
|
|
628
|
+
compact serializable audit. Each row is keyed by a stable surface id, lists the
|
|
629
|
+
current proof levels and statuses for that surface, and records both applicable
|
|
630
|
+
route IDs and currently missing route IDs such as `include-project-graph-delta`,
|
|
631
|
+
`emit-output-declarations`, `produce-semantic-edit-replay-proof`, and
|
|
632
|
+
`external-semantic-equivalence-proof`. The audit
|
|
633
|
+
keeps `autoMergeClaim: false` and `semanticEquivalenceClaim: false`; unknown
|
|
634
|
+
semantic equivalence remains explicit until an external proof exists.
|
|
635
|
+
|
|
329
636
|
Artifact-size and runtime note: these graph options are deliberately opt-in.
|
|
330
637
|
On a local Node v26.1.0 smoke fixture with 10 small JS/TS files and 36 scanned
|
|
331
638
|
stage files for the delta case, baseline project merge JSON was 115 KB at a
|
|
332
639
|
21.6 ms median. `includeOutputProjectSymbolGraph` raised the returned JSON to
|
|
333
640
|
17.8 MB at a 303.1 ms median, and `includeProjectGraphDelta` raised it to
|
|
334
641
|
83.0 MB at a 1,466.8 ms median. Pass `projectGraphLimits` for admission queues:
|
|
335
|
-
`maxFiles`, `maxSourceBytes`, `maxImportEdges`, `maxExportEdges`, and
|
|
642
|
+
`maxFiles`, `maxSourceBytes`, `maxSourceSpans`, `maxImportEdges`, `maxExportEdges`, and
|
|
336
643
|
`maxSerializedBytes` produce `project-graph-limit-exceeded` conflicts with the
|
|
337
644
|
stage, limit kind, actual value, and configured limit. Limit failures block
|
|
338
645
|
admission and omit oversized project graph artifacts from the returned result.
|
|
@@ -459,7 +766,7 @@ console.log(preservation.summary.comments); // comments and whitespace are track
|
|
|
459
766
|
console.log(imported.metadata.sourcePreservation.sourceHash);
|
|
460
767
|
```
|
|
461
768
|
|
|
462
|
-
When `sourceText` is present, hashes are computed from the actual text. Caller-provided hashes are recorded as declared metadata and cannot make stale text project as exact source. Use `includeTokens`, `includeTrivia`, `includeDirectives`, and `max*` options to keep preservation records compact for large files.
|
|
769
|
+
When `sourceText` is present, hashes are computed from the actual text. Caller-provided hashes are recorded as declared metadata and cannot make stale text project as exact source. Scanner/ledger trivia is recorded as `parserTriviaExactnessStatus: "approximate"` with stable review reason codes; exact parser-trivia evidence must include a matching source hash and parser-backed token/comment/trivia evidence on the preservation record. An adapter id or non-lightweight `parserEvidence` string alone cannot upgrade scanner/ledger tokens to exact parser proof. Lightweight scanner/ledger evidence is blocked with `exact-parser-trivia-scanner-evidence-not-parser` instead of satisfying exact parser proof, and metadata-only exactness is blocked with `exact-parser-trivia-token-comment-evidence-missing`. Verified exact parser-trivia evidence is threaded into native import metadata, project source file/span records, and source ownership anchors; metadata-only exactness cannot override the computed scanner/ledger exactness record. Use `includeTokens`, `includeTrivia`, `includeDirectives`, and `max*` options to keep preservation records compact for large files.
|
|
463
770
|
|
|
464
771
|
Create a compact semantic sidecar for swarm merge admission. This is the artifact a coordinator can index instead of reading a worker directory by hand:
|
|
465
772
|
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
import { readFileSync, statSync } from 'node:fs';
|
|
2
|
+
import { isAbsolute, relative, resolve } from 'node:path';
|
|
3
|
+
|
|
4
|
+
function collectCheckoutIdentityMetadata(checkoutPath, entry) {
|
|
5
|
+
const gitPath = resolveInside(checkoutPath, '.git');
|
|
6
|
+
const base = {
|
|
7
|
+
checkoutIdentityStatus: 'git-metadata-missing',
|
|
8
|
+
checkoutIdentityExecution: 'executed',
|
|
9
|
+
gitMetadataPresent: false,
|
|
10
|
+
gitMetadataKind: 'missing',
|
|
11
|
+
gitDirPointerPresent: false,
|
|
12
|
+
gitHeadPresent: false,
|
|
13
|
+
gitConfigPresent: false,
|
|
14
|
+
gitRemoteOriginUrlPresent: false,
|
|
15
|
+
gitRemoteOriginMatchesManifest: null,
|
|
16
|
+
gitRefMatchesManifest: null
|
|
17
|
+
};
|
|
18
|
+
if (!gitPath) return base;
|
|
19
|
+
|
|
20
|
+
let gitStat;
|
|
21
|
+
try {
|
|
22
|
+
gitStat = statSync(gitPath);
|
|
23
|
+
} catch {
|
|
24
|
+
return base;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
if (gitStat.isFile()) {
|
|
28
|
+
const gitFileText = readSmallText(gitPath);
|
|
29
|
+
const gitDirPointerPresent = /^gitdir:\s*\S+/im.test(gitFileText ?? '');
|
|
30
|
+
return {
|
|
31
|
+
...base,
|
|
32
|
+
checkoutIdentityStatus: gitDirPointerPresent ? 'gitdir-pointer-present' : 'git-metadata-present',
|
|
33
|
+
gitMetadataPresent: true,
|
|
34
|
+
gitMetadataKind: gitDirPointerPresent ? 'gitdir-pointer' : 'git-file',
|
|
35
|
+
gitDirPointerPresent
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
if (!gitStat.isDirectory()) return base;
|
|
39
|
+
|
|
40
|
+
const headText = readSmallText(resolveInside(checkoutPath, '.git/HEAD'));
|
|
41
|
+
const configText = readSmallText(resolveInside(checkoutPath, '.git/config'));
|
|
42
|
+
const gitRemoteOriginUrlPresent = gitConfigHasOriginUrl(configText);
|
|
43
|
+
const gitRemoteOriginMatchesManifest = gitConfigMatchesManifestRemote(configText, entry.source?.url);
|
|
44
|
+
const gitRefMatchesManifest = gitHeadMatchesManifestRef(headText, entry.source?.ref);
|
|
45
|
+
const checkoutIdentityStatus = gitRemoteOriginMatchesManifest === true && gitRefMatchesManifest === true
|
|
46
|
+
? 'git-identity-matched'
|
|
47
|
+
: 'git-metadata-present';
|
|
48
|
+
|
|
49
|
+
return {
|
|
50
|
+
...base,
|
|
51
|
+
checkoutIdentityStatus,
|
|
52
|
+
gitMetadataPresent: true,
|
|
53
|
+
gitMetadataKind: 'git-directory',
|
|
54
|
+
gitHeadPresent: Boolean(headText),
|
|
55
|
+
gitConfigPresent: Boolean(configText),
|
|
56
|
+
gitRemoteOriginUrlPresent,
|
|
57
|
+
gitRemoteOriginMatchesManifest,
|
|
58
|
+
gitRefMatchesManifest
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
function readSmallText(filePath, maxBytes = 16_384) {
|
|
63
|
+
if (!filePath) return null;
|
|
64
|
+
try {
|
|
65
|
+
const stat = statSync(filePath);
|
|
66
|
+
if (!stat.isFile() || stat.size > maxBytes) return null;
|
|
67
|
+
return readFileSync(filePath, 'utf8');
|
|
68
|
+
} catch {
|
|
69
|
+
return null;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
function gitConfigMatchesManifestRemote(configText, expectedUrl) {
|
|
74
|
+
const expected = normalizeGitRemoteUrl(expectedUrl);
|
|
75
|
+
if (!configText || !expected) return null;
|
|
76
|
+
const observed = gitConfigOriginUrls(configText).map((value) => normalizeGitRemoteUrl(value));
|
|
77
|
+
const comparable = observed.filter(Boolean);
|
|
78
|
+
return comparable.length ? comparable.includes(expected) : null;
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
function gitConfigHasOriginUrl(configText) {
|
|
82
|
+
return gitConfigOriginUrls(configText).length > 0;
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
function gitConfigOriginUrls(configText) {
|
|
86
|
+
if (!configText) return [];
|
|
87
|
+
let inOrigin = false;
|
|
88
|
+
const observed = [];
|
|
89
|
+
for (const line of configText.split(/\r?\n/)) {
|
|
90
|
+
const trimmed = line.trim();
|
|
91
|
+
if (trimmed === '[remote "origin"]') { inOrigin = true; continue; }
|
|
92
|
+
if (trimmed.startsWith('[')) { inOrigin = false; continue; }
|
|
93
|
+
if (!inOrigin) continue;
|
|
94
|
+
const match = trimmed.match(/^url\s*=\s*(.+)$/);
|
|
95
|
+
if (match) observed.push(match[1]);
|
|
96
|
+
}
|
|
97
|
+
return observed;
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
function gitHeadMatchesManifestRef(headText, expectedRef) {
|
|
101
|
+
if (!headText || typeof expectedRef !== 'string' || expectedRef.length === 0) return null;
|
|
102
|
+
const head = headText.trim();
|
|
103
|
+
const expected = expectedRef.replace(/^refs\/heads\//, '');
|
|
104
|
+
const branchMatch = head.match(/^ref:\s+refs\/heads\/(.+)$/);
|
|
105
|
+
if (branchMatch) return branchMatch[1] === expected;
|
|
106
|
+
if (/^[a-f0-9]{7,40}$/i.test(expectedRef) && head.startsWith(expectedRef)) return true;
|
|
107
|
+
return null;
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
function normalizeGitRemoteUrl(value) {
|
|
111
|
+
if (typeof value !== 'string' || value.length === 0) return null;
|
|
112
|
+
const raw = value.trim().replace(/^git\+/, '');
|
|
113
|
+
const sshMatch = raw.match(/^git@([^:]+):(.+)$/);
|
|
114
|
+
if (sshMatch) return stripGitSuffix(`https://${sshMatch[1]}/${sshMatch[2]}`);
|
|
115
|
+
try {
|
|
116
|
+
const parsed = new URL(raw);
|
|
117
|
+
parsed.username = '';
|
|
118
|
+
parsed.password = '';
|
|
119
|
+
return stripGitSuffix(parsed.href.replace(/\/$/, ''));
|
|
120
|
+
} catch {
|
|
121
|
+
return stripGitSuffix(raw);
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
function stripGitSuffix(value) { return value.replace(/\.git$/, ''); }
|
|
126
|
+
|
|
127
|
+
function resolveInside(rootPath, requestedPath) {
|
|
128
|
+
const targetPath = resolve(rootPath, requestedPath);
|
|
129
|
+
const relativePath = relative(rootPath, targetPath);
|
|
130
|
+
if (relativePath === '' || (!relativePath.startsWith('..') && !isAbsolute(relativePath))) return targetPath;
|
|
131
|
+
return null;
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
export { collectCheckoutIdentityMetadata };
|