{"record":{"id":"cadd89bb6ab89f78","repo":"abhigyanpatwari/GitNexus","slug":"conceptual-job-job-startindex-died-deaths-ti-cadd89","errorCode":null,"errorMessage":"Conceptual job ${job.startIndex} died ${deaths} times unattributably with no identifiable file; dropping job to break the death loop.","messagePattern":"Conceptual job (.+?) died (.+?) times unattributably with no identifiable file; dropping job to break the death loop\\.","errorType":"console","errorClass":null,"httpStatus":null,"severity":"warning","filePath":"gitnexus/src/core/ingestion/workers/worker-pool.ts","lineNumber":1729,"sourceCode":"          if (deaths < 2) {\n            jobs.unshift(job);\n            return;\n          }\n          const firstPath = itemPath(job.items[0]);\n          if (firstPath !== undefined) {\n            quarantine.add(firstPath);\n            logger.warn(\n              { startIndex: job.startIndex, firstPath, deaths },\n              `Conceptual job ${job.startIndex} died ${deaths} times unattributably; ` +\n                `quarantining items[0] (${firstPath}) as best-guess culprit.`,\n            );\n            effectiveExcluded = [firstPath];\n          } else {\n            // No identifiable file on items[0] either — drop the job to\n            // break the loop. The breaker counter still increments via\n            // handleWorkerDeath, so consecutive unattributable deaths\n            // eventually trip it even without quarantine signal.\n            logger.warn(\n              { startIndex: job.startIndex, deaths },\n              `Conceptual job ${job.startIndex} died ${deaths} times unattributably with ` +\n                `no identifiable file; dropping job to break the death loop.`,\n            );\n            return;\n          }\n        }\n        const excludeSet = new Set(effectiveExcluded);\n        const filtered = job.items.filter((item) => {\n          const p = itemPath(item);\n          return p === undefined || !excludeSet.has(p);\n        });\n        if (filtered.length === 0) return;\n        jobs.unshift({\n          startIndex: job.startIndex,\n          items: filtered,\n          estimatedBytes: filtered.reduce((sum, item) => sum + estimateItemBytes(item), 0),\n          attempt: job.attempt,","sourceCodeStart":1711,"sourceCodeEnd":1747,"githubUrl":"https://github.com/abhigyanpatwari/GitNexus/blob/0d1aed942f0e8b5d3bac27519fff441aceea722d/gitnexus/src/core/ingestion/workers/worker-pool.ts#L1711-L1747","documentation":"The sibling of the items[0] quarantine path: when a conceptual job dies 2+ unattributable times AND items[0] has no identifiable file path (itemPath returns undefined), the pool cannot form a best-guess culprit. It drops the job entirely to break the death loop; the failure counter still increments so consecutive unattributable deaths eventually trip the circuit breaker.","triggerScenarios":"requeueRemainder with an empty exclusion, deaths >= 2, and itemPath(job.items[0]) === undefined — jobs whose first item carries no path (synthetic inputs or pathless items) hit this branch and the job is discarded with the warn.","commonSituations":"Programmatic pool usage with non-file inputs (custom item types lacking a recognizable path), edge-case batch construction after multiple splits leave pathless leading items, or API misuse where itemPath was not taught the custom item shape.","solutions":["If you drive the pool programmatically, ensure your items expose a path itemPath can resolve — an identifiable file enables quarantine instead of whole-job loss","Check whether the dropped job's inputs were pathless by construction and fix the producer so items carry paths","Watch the circuit breaker: repeated unattributable deaths still trip WorkerPoolDispatchError, which carries the quarantine snapshot for diagnosis","Report upstream with the item shape if standard inputs produced pathless items"],"exampleFix":"# before (programmatic pool use)\nconst items = [{ blob: '...' }];              // no path → job dropped on 2nd death\n// after\nconst items = [{ path: '/abs/file.ts', blob: '...' }];  // itemPath resolves → quarantine can converge","handlingStrategy":"fallback","validationCode":"// Programmatic pool users: guarantee every item is path-attributable.\nconst items = rawItems.filter((it) => typeof itemPath(it) === 'string');\nif (items.length !== rawItems.length) {\n  throw new Error('pathless items disable quarantine convergence (whole jobs get dropped)');\n}","typeGuard":"function hasAttributablePath<T>(item: T): item is T & { path: string } {\n  return typeof (item as { path?: unknown }).path === 'string' && (item as { path: string }).path.length > 0;\n}","tryCatchPattern":null,"preventionTips":["When driving the pool with custom item types, always expose a resolvable path","Watch for repeated whole-job drops — they still count toward the circuit breaker, so silence means eventual hard failure","Report pathless standard items upstream; they should not occur with file-backed inputs"],"tags":["worker-pool","crash-recovery","job-drop","circuit-breaker","parse-jobs"],"backgroundTag":"poison-pill-quarantine","analyzedSha":"0d1aed942f0e8b5d3bac27519fff441aceea722d","analyzedAt":"2026-08-20T23:29:22.980Z","contentChangedAt":"2026-08-20T23:29:22.980Z","schemaVersion":2},"datasetVersion":"2026-09-14T00:17:10.932Z"}