fix(javascript): preserve analysis applicability after interruption (#4207)

Preserve applicable artifact processing phases and entered/unvisited status after interruption. Centralize JavaScript semantic applicability for full and incremental builders; retain native byte identity, actual JavaScript unknowns and structured-file provenance.

Fixes #3948. Part of #4027.

Validation:78 distinct focused cases across10files, full static/docs, and real Joplin timeout/default public CLI/MCP controls passed. Source pins, every attempt/outlier and compact resource/token projections are retained. No target/native provider execution or speedup claim.

Co-authored-by: Kaoru0822 <208281322+kaoru0822-kitauji@users.noreply.github.com>
This commit is contained in:
YsopwnableandKaoru0822 authored and GitHub committed 2026-10-16 03:46:00 +08:00
1 parent 663d07f02c
commit 85eac7b92b
18 files changed
+3717 -93

No files matched your search

@@ -163,7 +163,7 @@ export interface JavaScriptSemanticGraphProjection {
readonly adoptFileProjection: (
projection: JavaScriptSemanticFileProjection,
) => void;
/** Preserve source-bound unknowns for an execution or result-retention failure. */
/** Preserve JavaScript-source unknowns; other file kinds have no semantic module. */
readonly recordUnavailableFile: (
file: JavaScriptArtifactFile,
reason: string,
@@ -346,6 +346,9 @@ export const createJavaScriptSemanticGraphProjection = (
if (projection.truncated) truncatedFiles += 1;
},
recordUnavailableFile: (file, reason, limits, unknownReason) => {
// Both full and incremental construction enter here. Metadata/native
// processing gaps belong to the application graph, never JavaScript IR.
if (file.kind !== "javascript") return;
const retainedLimits = javaScriptAnalysisCoverageLimits(limits);
for (const limit of retainedLimits) {
executionLimits.set(