{"record":{"id":"d4c26b36ba6ef681","repo":"santifer/career-ops","slug":"could-not-release-report-reservation-err-m-d4c26b","errorCode":null,"errorMessage":"⚠️   Could not release report reservation: ${err.message}","messagePattern":"⚠️   Could not release report reservation: (.+?)","errorType":"console","errorClass":null,"httpStatus":null,"severity":"warning","filePath":"ollama-eval.mjs","lineNumber":585,"sourceCode":"    // needs its own label -- values are read BY label, so a tenth field the\n    // header does not name is not mis-mapped, it is dropped.\n    const additionHeader = postingUrl ? `${TSV_ADDITION_HEADER}\\turl` : TSV_ADDITION_HEADER;\n    mkdirSync(PATHS.trackerAdditions, { recursive: true });\n    writeFileSync(\n      join(PATHS.trackerAdditions, additionName),\n      `${additionHeader}\\n${trackerFields.join('\\t')}\\n`,\n      'utf-8',\n    );\n    console.log(`\\n📊  Tracker addition saved: batch/tracker-additions/${additionName}`);\n    console.log('    Run `node merge-tracker.mjs` to merge it into the tracker.');\n  } catch (err) {\n    console.warn(`⚠️   Could not save report: ${err.message}`);\n  } finally {\n    if (reservedNumbers.length > 0) {\n      try {\n        await releaseReportNumbers(reservedNumbers, { reportsDir: PATHS.reports });\n      } catch (err) {\n        console.warn(`⚠️   Could not release report reservation: ${err.message}`);\n      }\n    }\n  }\n}\n\nconsole.log('\\n' + '─'.repeat(66));\nconsole.log(`  Score: ${score}/5  |  Archetype: ${archetype}  |  Legitimacy: ${legitimacy}`);\nconsole.log('─'.repeat(66) + '\\n');\n\nconsole.log(formatBreakdown(tracker, modelName, 'ollama'));\n","sourceCodeStart":567,"sourceCodeEnd":596,"githubUrl":"https://github.com/santifer/career-ops/blob/aac998c7ed7248ea853b720ceeb1fdbeb322fc5d/ollama-eval.mjs#L567-L596","documentation":"After saving (or failing to save) a report, ollama-eval.mjs releases report numbers it reserved via reserve-report-num.mjs so parallel workers can use them. If releaseReportNumbers() throws — the reservation store is missing/corrupt, reports/ is unreadable, or the numbers were already released — this warning is logged. A stale reservation blocks that report number until its sentinel is garbage-collected after 4h.","triggerScenarios":"releaseReportNumbers(reservedNumbers, {reportsDir: PATHS.reports}) throws in the finally block — reservation sentinel file already removed (double release), reports directory path wrong or unreadable, or the reservation store corrupted by a concurrent run.","commonSituations":"Two batch workers sharing a reports dir; running the evaluator from a different cwd so PATHS.reports points nowhere; manually deleting sentinel files while a run was in flight; crash-resume scenarios where release ran twice.","solutions":["Mostly benign: unclaimed sentinels are GC'd after 4h — wait or delete the stale sentinel manually","Only release once per reservation; check for duplicated finally paths in forks","Run from the repo root so PATHS.reports resolves correctly","If it blocks parallel workers now, run node reserve-report-num.mjs --release <range> explicitly"],"exampleFix":null,"handlingStrategy":"try-catch","validationCode":null,"typeGuard":"function reservationExists(numbers, store) {\n  return numbers.every((n) => store.sentinelPath(n) !== null);\n}","tryCatchPattern":"try {\n  await releaseReportNumbers(reservedNumbers, { reportsDir: PATHS.reports });\n} catch (err) {\n  // double-release or missing store; stale sentinels GC after 4h — usually safe to ignore\n  console.warn(`Could not release report reservation: ${err.message}`);\n}","preventionTips":["Release each reservation exactly once; guard against duplicate finally execution","Reserve immediately before spawning workers and release only on completion/failure","Run all workers against the same repo root so reports/ paths agree","Rely on the 4h sentinel GC rather than hand-deleting sentinels mid-run"],"tags":["report-numbering","reservation","cleanup","concurrency"],"backgroundTag":"resource-release-failed","analyzedSha":"aac998c7ed7248ea853b720ceeb1fdbeb322fc5d","analyzedAt":"2026-09-16T06:35:29.214Z","contentChangedAt":"2026-09-16T06:35:29.214Z","schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}