{"record":{"id":"5f5dff2103d1cb2a","repo":"abhigyanpatwari/GitNexus","slug":"parsedfile-store-dropped-malformed-over-bound-sit","errorCode":null,"errorMessage":"parsedfile-store: dropped malformed/over-bound sites at load; files retained without those facts","messagePattern":"parsedfile-store: dropped malformed/over-bound sites at load; files retained without those facts","errorType":"console","errorClass":null,"httpStatus":null,"severity":"warning","filePath":"gitnexus/src/storage/parsedfile-store.ts","lineNumber":311,"sourceCode":"        const flow = sanitizeCallableFlowSites(pf.callableFlowSites);\n        if (flow === undefined) {\n          rejectedFiles++;\n          continue;\n        }\n        const chains = sanitizeReceiverChains(pf.referenceSites);\n        if (chains === undefined) {\n          rejectedFiles++;\n          continue;\n        }\n        if (flow.dropped === 0 && chains.dropped === 0) {\n          out.set(pf.filePath, pf);\n        } else {\n          droppedSites += flow.dropped;\n          droppedChains += chains.dropped;\n          filesWithDroppedSites++;\n          out.set(pf.filePath, {\n            ...pf,\n            ...(flow.dropped === 0 ? {} : { callableFlowSites: flow.sites }),\n            ...(chains.dropped === 0 ? {} : { referenceSites: chains.sites }),\n          });\n        }\n      }\n    }\n    await maybeYieldAndGc(crossedBudget);\n  }\n  if (droppedSites > 0 || droppedChains > 0) {\n    logger.warn(\n      { droppedSites, droppedChains, files: filesWithDroppedSites },\n      'parsedfile-store: dropped malformed/over-bound sites at load; files retained without those facts',\n    );\n  }\n  if (rejectedFiles > 0) {\n    logger.warn(\n      { rejectedFiles },\n      'parsedfile-store: rejected shard entries at load (untrusted shape); those files re-extract every run',\n    );","sourceCodeStart":293,"sourceCodeEnd":329,"githubUrl":"https://github.com/abhigyanpatwari/GitNexus/blob/0d1aed942f0e8b5d3bac27519fff441aceea722d/gitnexus/src/storage/parsedfile-store.ts#L293-L329","documentation":"The durable ParsedFile store is treated as an untrusted serialization boundary, and sanitation is per-site rather than per-file: a malformed or over-bound fact drops only itself while the file is retained. This warning reports that sites (and call chains) were dropped at warm-load, so those files lack those facts this run — and because retained files never re-extract, a drop that recurs on every warm load must be observable rather than silent (#2522 review).","triggerScenarios":"Warm-loading an index whose serialized sites fail current sanitation — validation bounds changed between the writer and reader versions, or shard bytes are corrupted on disk. The structured fields droppedSites, droppedChains, and filesWithDroppedSites quantify the impact.","commonSituations":"Upgrading GitNexus across versions whose validation bounds differ; partially corrupted shard files after a crash; pathological source files whose extracted facts now exceed limits. Graph answers for the affected files quietly lose the dropped facts until a rewrite.","solutions":["Run a full re-analyze so the current writer rewrites the shards under current bounds","Check the files field: the same file(s) appearing every warm load points at a bound mismatch worth reporting with your versions","Re-verify graph answers for the affected files after the rewrite if their precision matters"],"exampleFix":null,"handlingStrategy":"validation","validationCode":"// After each warm load, compare dropped-file sets across runs: identical\n// sets on consecutive loads mean permanent fact loss (files are retained, so\n// they never re-extract) — schedule a full re-analyze.\nif (intersection(lastDroppedFiles, currentDroppedFiles).length > 0) {\n  await fullReanalyze(repoPath);\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Watch for this warning repeating with the same files across warm loads","Re-analyze after upgrading versions that touched parsing or bounds","Treat dropped facts as missing data in any downstream reasoning"],"tags":["storage","cache","validation","version-skew","partial-data-loss"],"backgroundTag":"corrupt-cache-entry","analyzedSha":"0d1aed942f0e8b5d3bac27519fff441aceea722d","analyzedAt":"2026-08-20T23:29:22.980Z","contentChangedAt":"2026-08-20T23:29:22.980Z","schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}