mirror of
https://github.com/abhigyanpatwari/GitNexus.git
synced 2026-10-09 03:17:54 +00:00
fix(parsing): sequential gap-fill for worker-quarantined chunk files (U20.U1)
When the worker pool's Layer 3 quarantine filters one or more files out of a chunk's dispatch, the worker results returned to processParsing are silently narrower than the input chunk. Without this reparse, the graph for this run would be missing every quarantined file's symbols/imports/calls/heritage with no failure signal. After the existing per-chunk quarantine log emits in processParsing's worker-path try-block, run processParsingSequential on JUST the quarantined-in-chunk files. The sequential path writes directly to the graph, so symbols for those files land alongside worker output for the surviving files. Mirrors the WorkerPoolDispatchError catch-block's processParsingSequential call shape — same signature, same args, same scopeTreeCache wiring. Emits a structured warn naming `reparsedPaths` so operators can observe the sequential fall-through. This fixes the in-run side of the corruption Codex's adversarial review of PR #1693 flagged. The cross-run side (chunk-cache poisoning) is closed by U20.U2 in a follow-up commit. References plan: docs/plans/2026-05-20-002-fix-chunk-cache-corruption-on-worker-quarantine-plan.md
This commit is contained in:
parent
a2878df5fb
commit
7dd489e997
1 changed files with 36 additions and 0 deletions
|
|
@ -931,6 +931,42 @@ export const processParsing = async (
|
||||||
files.length,
|
files.length,
|
||||||
`${quarantinedInChunk.length} worker-quarantined file(s) skipped`,
|
`${quarantinedInChunk.length} worker-quarantined file(s) skipped`,
|
||||||
);
|
);
|
||||||
|
|
||||||
|
// U20.U1: Sequential gap-fill. The worker pool's Layer 3
|
||||||
|
// quarantine filtered these files out of dispatch, so the
|
||||||
|
// worker results above are missing their symbols/imports/
|
||||||
|
// calls/heritage. Without this reparse, the graph for THIS
|
||||||
|
// run is silently incomplete — exactly the silent-corruption
|
||||||
|
// class the Codex adversarial review of PR #1693 flagged.
|
||||||
|
//
|
||||||
|
// Running `processParsingSequential` on JUST the quarantined
|
||||||
|
// files mirrors the WorkerPoolDispatchError catch-block
|
||||||
|
// shape below (line 961). Worker-extracted data for the
|
||||||
|
// surviving files flows through `data` to the caller's
|
||||||
|
// deferred-extraction merge; sequential output for the
|
||||||
|
// quarantined files writes directly to the graph here.
|
||||||
|
//
|
||||||
|
// The chunk-loop caller's cache write at parse-impl.ts:500-
|
||||||
|
// 507 will NOT cache this chunk because U20.U2's guard
|
||||||
|
// detects the same quarantine intersection — so next run
|
||||||
|
// gets a cache miss and a fresh pool gives the file
|
||||||
|
// another chance.
|
||||||
|
logger.warn(
|
||||||
|
{
|
||||||
|
reparsedPaths: quarantinedInChunk.map((f) => f.path),
|
||||||
|
count: quarantinedInChunk.length,
|
||||||
|
},
|
||||||
|
`Running sequential reparse for ${quarantinedInChunk.length} worker-quarantined ` +
|
||||||
|
`file(s) to keep this run's graph complete.`,
|
||||||
|
);
|
||||||
|
await processParsingSequential(
|
||||||
|
graph,
|
||||||
|
quarantinedInChunk,
|
||||||
|
symbolTable,
|
||||||
|
astCache,
|
||||||
|
scopeTreeCache,
|
||||||
|
reportProgress,
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return data;
|
return data;
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue