{"record":{"id":"c3af025b065811ff","repo":"santifer/career-ops","slug":"row-not-found","errorCode":"ROW_NOT_FOUND","errorMessage":"Tracker not found at ${trackerPath}","messagePattern":"Tracker not found at (.+?)","errorType":"validation","errorClass":"SeedError","httpStatus":null,"severity":"error","filePath":"followup-seed.mjs","lineNumber":425,"sourceCode":" * @param {string} [options.lockDir]\n * @param {number} [options.lockTimeoutMs]\n * @param {number} [options.lockRetryMs]\n * @param {number} [options.lockStaleMs]\n * @returns {Promise<object>}\n */\nexport async function seedFollowup(appNum, options = {}) {\n  if (!Number.isInteger(appNum) || appNum <= 0) {\n    throw new SeedError('USAGE', `Invalid appNum: ${appNum}`);\n  }\n  if (options.date != null && !isValidCalendarDate(options.date)) {\n    throw new SeedError('INVALID_DATE', `--date must be a real calendar date in YYYY-MM-DD form: ${options.date}`);\n  }\n\n  const trackerPath = resolveTrackerPath(options.trackerPath);\n  const followupsPath = resolveFollowupsPath(options.followupsPath);\n\n  if (!existsSync(trackerPath)) {\n    throw new SeedError('ROW_NOT_FOUND', `Tracker not found at ${trackerPath}`);\n  }\n  const rows = readTrackerRows(trackerPath);\n  const row = rows.find(r => r.num === appNum);\n  if (!row) {\n    throw new SeedError('ROW_NOT_FOUND', `Application #${appNum} not found in ${trackerPath}`);\n  }\n\n  const normalized = normalizeStatus(row.status);\n  if (normalized !== 'applied' && !options.force) {\n    throw new SeedError('NOT_APPLIED', `Application #${appNum} is not Applied (status: \"${row.status.trim()}\"); use --force to seed anyway`);\n  }\n\n  const appliedDate = resolveAppliedDate(row, options.date);\n  const cadence = resolveCadenceConfig({ profilePath: options.profilePath });\n  const nextDate = addDays(parseDate(appliedDate), cadence.applied_first);\n  const setDate = todayStr();\n  const pin = formatPinLine(appNum, nextDate, setDate);\n","sourceCodeStart":407,"sourceCodeEnd":443,"githubUrl":"https://github.com/santifer/career-ops/blob/9b17a8ac97b398a496b38e423ae24e433b43254f/followup-seed.mjs#L407-L443","documentation":"seedFollowup resolves the tracker path (options.trackerPath > CAREER_OPS_TRACKER env > data/applications.md > root applications.md) and throws ROW_NOT_FOUND if that file does not exist on disk. The tracker is the source of truth for application rows — without it, no row can be found or seeded.","triggerScenarios":"Fresh repo where onboarding never created data/applications.md; CAREER_OPS_TRACKER env var points to a wrong or deleted path; a custom options.trackerPath argument refers to a non-existent file; running from the wrong working directory so the default relative path misses.","commonSituations":"First run before doctor.mjs onboarding completes; CI cloned the repo without the data/ directory; env var carried over from a different machine or project root.","solutions":["Run node doctor.mjs --json to confirm whether onboarding is needed.","Verify data/applications.md exists; if not, create it with the tracker header (see AGENTS.md Step 4).","Check CAREER_OPS_TRACKER env var: echo $CAREER_OPS_TRACKER and ensure it resolves to a real file.","Ensure the process working directory is the career-ops repo root."],"exampleFix":null,"handlingStrategy":"validation","validationCode":"import { existsSync } from 'fs';\n\nconst trackerPath = options.trackerPath\n  || process.env.CAREER_OPS_TRACKER\n  || 'data/applications.md';\nif (!existsSync(trackerPath)) {\n  throw new Error(`Tracker not found at ${trackerPath}. Run onboarding first.`);\n}\nawait seedFollowup(appNum, options);","typeGuard":null,"tryCatchPattern":"try {\n  await seedFollowup(appNum);\n} catch (err) {\n  if (err.code === 'ROW_NOT_FOUND' && err.message.includes('Tracker not found')) {\n    console.error('Tracker missing — run: node doctor.mjs');\n    process.exit(2);\n  }\n  throw err;\n}","preventionTips":["Run node doctor.mjs --json at session start to confirm the tracker exists.","Set CAREER_OPS_TRACKER explicitly in CI to avoid working-directory ambiguity.","Treat a missing tracker as an onboarding failure, not a runtime error."],"tags":["filesystem","tracker","onboarding","config"],"backgroundTag":null,"analyzedSha":"9b17a8ac97b398a496b38e423ae24e433b43254f","analyzedAt":"2026-08-13T00:48:39.135Z","schemaVersion":2},"datasetVersion":"2026-08-13T04:17:16.726Z"}