santifer/career-ops · warning

⚠️ Skipping ${filename}: invalid entry number

Error message

⚠️  Skipping ${filename}: invalid entry number

What it means

Final structural check in parseTsvContent(): the entry number must parse to a nonzero integer. NaN (non-numeric first cell, e.g. a header line or placeholder) or 0 fails `isNaN(addition.num) || addition.num === 0`, and the whole additions file is skipped with this warning.

Source

Thrown at merge-tracker.mjs:723

      num: parseInt(parts[0]),
      date: parts[1],
      company: parts[2],
      role: parts[3],
      status: validateStatus(resolved.status),
      // Write-canonical: strip any markdown bold so the stored score stays
      // unbolded (verify-pipeline rejects bold scores).
      score: resolved.score.replace(/\*\*/g, '').trim(),
      pdf: parts[6],
      report: parts[7],
      notes: parts[8] || '',
    };
    const extras = parseTsvExtras(parts, filename);
    if (!extras) return null;
    Object.assign(addition, extras);
  }

  if (isNaN(addition.num) || addition.num === 0) {
    console.warn(`⚠️  Skipping ${filename}: invalid entry number`);
    return null;
  }

  return addition;
}

// ---- Main ----

// Read applications.md
if (!existsSync(APPS_FILE)) {
  console.log('No applications.md found. Nothing to merge into.');
  process.exit(0);
}
const appContent = readFileSync(APPS_FILE, 'utf-8');
// Test-only synchronization hook: the concurrent merge test waits for the
// first worker to read the tracker while still holding the lock, then starts a
// second worker to prove the lock prevents the old lost-update race.
if (MERGE_READY_IPC && typeof process.send === 'function') {

View on GitHub (pinned to 60398d6549)

Solutions

  1. Put a real positive integer report number in column 1 (reserve ranges with `node reserve-report-num.mjs --count N` for parallel workers)
  2. Delete header/comment lines from the TSV before merging
  3. Re-run node merge-tracker.mjs and confirm the file merges

Example fix

# before
num	date	company	role	status	score	pdf	report	notes

# after (header line removed)
042	2026-08-20	Acme	SRE	Interview	4.2/5	✅	[042](reports/042-acme-2026-08-20.md)	note
Defensive patterns

Strategy: validation

Validate before calling

function hasValidEntryNumber(line) {
  const n = Number.parseInt(line.split('\t')[0], 10);
  return Number.isInteger(n) && n > 0;
}

Prevention

When it happens

Trigger: A TSV whose first cell is 'num', 'N/A', empty, or '0' — parseInt yields NaN or 0 and the file is rejected after all other parsing succeeded.

Common situations: A header row left at the top of the additions file; report numbers reserved but never filled in; a placeholder like '-' typed where the entry number belongs.

Related errors


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