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
- Put a real positive integer report number in column 1 (reserve ranges with `node reserve-report-num.mjs --count N` for parallel workers)
- Delete header/comment lines from the TSV before merging
- 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
- Reserve report numbers with `node reserve-report-num.mjs --count N` before parallel workers write TSVs
- Never leave header or placeholder lines in additions files
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
- ⚠️ Skipping ${filename}: ambiguous extra fields [${extras.j
- ⚠️ Skipping malformed TSV ${filename}: ${parts.length} fiel
- ⚠️ Skipping ${filename}: cannot tell score from status in c
- ⚠️ Non-canonical status "${status}" → defaulting to "Evalua
- ⚠️ Skipping malformed pipe-delimited ${filename}: ${parts.l
AI-assisted analysis of santifer/career-ops@60398d6549 (2026-08-20).
Data as JSON: /api/errors/459c972137036069.
Report an issue: GitHub.