santifer/career-ops · warning

${pendingTsvs} pending TSVs in tracker-additions/ (not merge

Error message

${pendingTsvs} pending TSVs in tracker-additions/ (not merged)

What it means

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.

Source

Thrown at verify-pipeline.mjs:215

let badRows = 0;
for (const line of lines) {
  if (!line.startsWith('|')) continue;
  if (isSeparatorRow(line) || isHeaderRow(line)) continue;
  const parts = line.split('|');
  if (parts.length <= MAX_IDX) {
    error(`Row with too few columns (need ${MAX_IDX} data cols): ${line.substring(0, 80)}...`);
    badRows++;
  }
}
if (badRows === 0) ok('All rows properly formatted');

// --- Check 6: Pending TSVs ---
let pendingTsvs = 0;
if (existsSync(ADDITIONS_DIR)) {
  const files = readdirSync(ADDITIONS_DIR).filter(f => f.endsWith('.tsv'));
  pendingTsvs = files.length;
  if (pendingTsvs > 0) {
    warn(`${pendingTsvs} pending TSVs in tracker-additions/ (not merged)`);
  }
}
if (pendingTsvs === 0) ok('No pending TSVs');

// --- Check 7: Bold in scores ---
let boldScores = 0;
for (const e of entries) {
  if (e.score.includes('**')) {
    warn(`#${e.num}: Score has markdown bold: "${e.score}"`);
    boldScores++;
  }
}
if (boldScores === 0) ok('No bold in scores');

// --- Check 8: Stale report-number sentinels (GC) ---
// reserve-report-num.mjs drops NNN-RESERVED.md files in reports/ when a
// number is claimed.  If the process crashed before writing the real report
// and deleting the sentinel it will linger.  Sentinels older than 4 h are

View on GitHub (pinned to 60398d6549)

Solutions

  1. Run node merge-tracker.mjs -- it merges what it can and moves consumed TSVs to merged/.
  2. Inspect any TSV named in the 'NOT merged' summary: fix its tab-separated columns and re-run the merge.
  3. Finish with node verify-pipeline.mjs to confirm check 6 reports 'No pending TSVs'.

Example fix

# before
⚠️ 5 pending TSVs in tracker-additions/ (not merged)
# after
$ node merge-tracker.mjs && node verify-pipeline.mjs
# ✅ ... No pending TSVs
Defensive patterns

Strategy: validation

Validate before calling

// Batch scripts should verify the queue is drained before declaring done
import { readdirSync } from 'node:fs';
const pending = readdirSync('batch/tracker-additions').filter(f => f.endsWith('.tsv')).length;
if (pending > 0) {
  console.error(`${pending} TSVs unmerged — run 'node merge-tracker.mjs' before finishing`);
  process.exitCode = 1;
}

Prevention

When it happens

Trigger: 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.

Common situations: Forgetting the merge step after a batch session; CI crashing between evaluate and merge; a worker writing a malformed TSV that the merger refuses.

Related errors


AI-assisted analysis of santifer/career-ops@60398d6549 (2026-08-20). Data as JSON: /api/errors/71012cc3bad2397d. Report an issue: GitHub.