santifer/career-ops · warning
Skipped #${r.num}: row no longer exists in the tracker
Error message
Skipped #${r.num}: row no longer exists in the tracker What it means
Same apply pass in reply-watch.mjs handles rows that vanished entirely: a recommendation references #num, but by apply time no such row exists in applications.md (result.missing). The update is skipped -- never recreated -- because reply-watch only updates existing applications; it does not author rows. Typical cause is dedup-tracker.mjs renumbering or manual row deletion between classification and apply.
Source
Thrown at reply-watch.mjs:321
updates.forEach(r => {
const count = r.count > 1 ? ` (${r.count} replies)` : '';
console.log(` #${r.num} ${r.company} (${r.role}): ${r.oldStatus} → ${r.newStatus}${count}`);
});
console.log('');
const answer = await askQuestion(`Apply recommended status updates to ${APPS_FILE}? (y/N): `);
if (answer.toLowerCase() === 'y' || answer.toLowerCase() === 'yes') {
const result = await updateTrackerStatuses(updates);
for (const r of updates) {
const count = r.count > 1 ? ` (${r.count} replies)` : '';
if (result.applied.has(r.num)) {
console.log(`Updated #${r.num} to ${r.newStatus}${count}`);
} else if (result.alreadyCurrent.has(r.num)) {
console.log(`No change for #${r.num}: already ${r.newStatus}${count}`);
} else if (result.conflicts.has(r.num)) {
console.warn(`Skipped #${r.num}: status changed from ${r.oldStatus} to ${result.conflicts.get(r.num)} during review`);
} else if (result.missing.has(r.num)) {
console.warn(`Skipped #${r.num}: row no longer exists in the tracker`);
}
}
console.log('\n✅ Tracker review complete');
// Sync tracker DB if tracker.mjs exists
try {
const { execSync } = await import('child_process');
execSync('node tracker.mjs sync', { stdio: 'ignore' });
console.log('Synced database index (applications.db).');
} catch (e) {
// ignore
}
} else {
console.log('Updates skipped.');
}
}
}
View on GitHub (pinned to 60398d6549)
Solutions
- If the application should still be tracked, re-add it through the normal path: a TSV in batch/tracker-additions/ + node merge-tracker.mjs.
- If the row was deleted intentionally, ignore the warning -- replies and their record remain in reply history.
- Re-run reply-watch afterwards so recommendations map onto the surviving row numbers.
Example fix
# before Skipped #42: row no longer exists in the tracker # after: re-add the application via the merge path, then re-run $ printf '051\t2026-08-20\tAcme\tSenior ML Engineer\tResponded\t4.2/5\t❌\t[051](reports/051-acme-2026-08-20.md)\tnote\n' > batch/tracker-additions/051-acme.tsv $ node merge-tracker.mjs && node reply-watch.mjs
Defensive patterns
Strategy: validation
Validate before calling
// Before applying updates, confirm every recommended row still exists
const liveNums = new Set(
[...readFileSync('data/applications.md', 'utf-8').matchAll(/^\|\s*(\d+)\s*\|/gm)].map(m => Number(m[1]))
);
const applicable = updates.filter(u => liveNums.has(u.num)); Prevention
- Run dedup-tracker.mjs and merge-tracker.mjs before starting a reply-watch session, not during it.
- Re-run reply-watch after any renumbering event so recommendations target live row numbers.
- Re-add genuinely missing applications through the TSV + merge path rather than hand-inserting rows.
When it happens
Trigger: Running node dedup-tracker.mjs (which renumbers/removes rows) while a reply-watch review is pending; hand-deleting rows during review; merge-tracker renumbering a colliding entry (#220's path) after classification.
Common situations: Post-batch dedup housekeeping overlapping interactive review; two people/tools sharing one tracker file.
Understand the failure class
Background: Record Not Found Errors: "not found", RecordNotFound, and "was not found" — what they mean and how to fix them — this error's family across 28 libraries.
Related errors
- ⚠️ Keep #${a.num} and #${b.num}: exact-title match but adva
- ⚠️ Additions carry a URL but this tracker has no URL column
- Conflicting status recommendations require manual review:
- Skipped #${r.num}: status changed from ${r.oldStatus} to ${r
- payload must include at least one of: cv, articleDigest
AI-assisted analysis of santifer/career-ops@60398d6549 (2026-08-20).
Data as JSON: /api/errors/e910f0fabd41f362.
Report an issue: GitHub.