santifer/career-ops · error
Sync drift (needs human review): ${m.company} — ${m.role}: a
Error message
Sync drift (needs human review): ${m.company} — ${m.role}: applications.md="${m.applicationsStatus}" (${m.applicationsLastModified || 'no blame info'}) vs active-interviews.md="${m.activeInterviewsStatus}" (${m.activeInterviewsLastModified || 'no blame info'}) What it means
Error "Sync drift (needs human review): ${m.company} — ${m.role}: applications.md="${m.applicationsStatus}" (${m.applicationsLastModified || 'no blame info'}) vs active-interviews.md="${m.activeInterviewsStatus}" (${m.activeInterviewsLastModified || 'no blame info'})" thrown in santifer/career-ops.
Source
Thrown at verify-pipeline.mjs:458
// a fix (tracker-sync-check.mjs is intentionally reporting-only for now — see
// its module header).
let syncResult;
try {
syncResult = checkTrackerSync({ appsFile: APPS_FILE });
} catch (err) {
warn(`Sync check could not run: ${err.message}`);
}
if (syncResult) {
const tier1Mismatches = syncResult.mismatches.filter(m => m.resolution === 'auto-tier1');
const tier2Mismatches = syncResult.mismatches.filter(m => m.resolution === 'needs-review-tier2');
const unmatchedRows = syncResult.mismatches.filter(m => m.resolution === 'unmatched');
for (const m of tier1Mismatches) {
warn(`Sync drift (auto-resolvable): ${m.company} — ${m.role}: applications.md="${m.applicationsStatus}" vs active-interviews.md="${m.activeInterviewsStatus}" -> suggest "${m.suggestedStatus}" in ${m.staleIn} (run node tracker-sync-check.mjs for details)`);
}
for (const m of tier2Mismatches) {
warn(`Sync drift (needs human review): ${m.company} — ${m.role}: applications.md="${m.applicationsStatus}" (${m.applicationsLastModified || 'no blame info'}) vs active-interviews.md="${m.activeInterviewsStatus}" (${m.activeInterviewsLastModified || 'no blame info'})`);
}
for (const m of unmatchedRows) {
warn(`Sync check: active-interviews.md row for "${m.company}" — "${m.role}" could not be matched to a tracker row (${m.note})`);
}
if (tier1Mismatches.length === 0 && tier2Mismatches.length === 0 && unmatchedRows.length === 0) {
ok(syncResult.summary.total > 0
? 'applications.md and active-interviews.md are in sync'
: 'No active-interviews.md rows to sync-check');
}
}
// --- Check 14: data/follow-ups.md table schema (#2971) ---
// stats.mjs (computeFollowupStats) and followup-cadence.mjs both read this table
// positionally, in the shape modes/followup.md documents, and both skip any row
// whose num/appNum cells don't parse as integers. A table written with a
// different column order therefore reports as ZERO follow-ups in both tools,
// silently — indistinguishable from a file where nothing has been logged yet.
// Follow-up compliance is exactly the number a user consults to decide whetherView on GitHub (pinned to 60398d6549)
When it happens
Trigger: Thrown at verify-pipeline.mjs:458 when the library encounters an invalid state.
Common situations: See trigger scenarios.
AI-assisted analysis of santifer/career-ops@60398d6549 (2026-08-20).
Data as JSON: /api/errors/3bd70bee01c72f1d.
Report an issue: GitHub.