{"record":{"id":"71012cc3bad2397d","repo":"santifer/career-ops","slug":"pendingtsvs-pending-tsvs-in-tracker-additions","errorCode":null,"errorMessage":"${pendingTsvs} pending TSVs in tracker-additions/ (not merged)","messagePattern":"(.+?) pending TSVs in tracker-additions/ \\(not merged\\)","errorType":"console","errorClass":null,"httpStatus":null,"severity":"warning","filePath":"verify-pipeline.mjs","lineNumber":215,"sourceCode":"let badRows = 0;\nfor (const line of lines) {\n  if (!line.startsWith('|')) continue;\n  if (isSeparatorRow(line) || isHeaderRow(line)) continue;\n  const parts = line.split('|');\n  if (parts.length <= MAX_IDX) {\n    error(`Row with too few columns (need ${MAX_IDX} data cols): ${line.substring(0, 80)}...`);\n    badRows++;\n  }\n}\nif (badRows === 0) ok('All rows properly formatted');\n\n// --- Check 6: Pending TSVs ---\nlet pendingTsvs = 0;\nif (existsSync(ADDITIONS_DIR)) {\n  const files = readdirSync(ADDITIONS_DIR).filter(f => f.endsWith('.tsv'));\n  pendingTsvs = files.length;\n  if (pendingTsvs > 0) {\n    warn(`${pendingTsvs} pending TSVs in tracker-additions/ (not merged)`);\n  }\n}\nif (pendingTsvs === 0) ok('No pending TSVs');\n\n// --- Check 7: Bold in scores ---\nlet boldScores = 0;\nfor (const e of entries) {\n  if (e.score.includes('**')) {\n    warn(`#${e.num}: Score has markdown bold: \"${e.score}\"`);\n    boldScores++;\n  }\n}\nif (boldScores === 0) ok('No bold in scores');\n\n// --- Check 8: Stale report-number sentinels (GC) ---\n// reserve-report-num.mjs drops NNN-RESERVED.md files in reports/ when a\n// number is claimed.  If the process crashed before writing the real report\n// and deleting the sentinel it will linger.  Sentinels older than 4 h are","sourceCodeStart":197,"sourceCodeEnd":233,"githubUrl":"https://github.com/santifer/career-ops/blob/60398d6549a46f5266929538af21cfab94badc75/verify-pipeline.mjs#L197-L233","documentation":"verify-pipeline.mjs check 6 counts *.tsv files in batch/tracker-additions/. Every evaluation drops one TSV there and merge-tracker.mjs consumes them (moving each to merged/); a non-zero count at verification time means evaluations whose tracker rows have not landed -- either the mandatory post-batch merge was not run, or some TSVs were rejected as malformed and never merged.","triggerScenarios":"Running batch/auto-pipeline evaluations without the follow-up node merge-tracker.mjs; a merge that aborted with 'N NOT merged' (failedAdditions); TSVs with wrong column counts left behind.","commonSituations":"Forgetting the merge step after a batch session; CI crashing between evaluate and merge; a worker writing a malformed TSV that the merger refuses.","solutions":["Run node merge-tracker.mjs -- it merges what it can and moves consumed TSVs to merged/.","Inspect any TSV named in the 'NOT merged' summary: fix its tab-separated columns and re-run the merge.","Finish with node verify-pipeline.mjs to confirm check 6 reports 'No pending TSVs'."],"exampleFix":"# before\n⚠️ 5 pending TSVs in tracker-additions/ (not merged)\n# after\n$ node merge-tracker.mjs && node verify-pipeline.mjs\n# ✅ ... No pending TSVs","handlingStrategy":"validation","validationCode":"// Batch scripts should verify the queue is drained before declaring done\nimport { readdirSync } from 'node:fs';\nconst pending = readdirSync('batch/tracker-additions').filter(f => f.endsWith('.tsv')).length;\nif (pending > 0) {\n  console.error(`${pending} TSVs unmerged — run 'node merge-tracker.mjs' before finishing`);\n  process.exitCode = 1;\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Make 'node merge-tracker.mjs' the mandatory last step of every batch session (it is a repo rule for exactly this reason).","Treat a 'NOT merged' count in the merge summary as a hard failure to fix, not noise.","End sessions with node verify-pipeline.mjs and require 'No pending TSVs'."],"tags":["verify-pipeline","pending-tsvs","merge-tracker","batch","queue-hygiene"],"backgroundTag":"unmerged-changes","analyzedSha":"60398d6549a46f5266929538af21cfab94badc75","analyzedAt":"2026-08-20T23:00:06.764Z","schemaVersion":2},"datasetVersion":"2026-08-21T13:17:26.733Z"}