{"record":{"id":"3d047809a7941bef","repo":"santifer/career-ops","slug":"file-carries-via-addition-via-but-the-t","errorCode":null,"errorMessage":"⚠️  ${file}: carries via=${addition.via} but the tracker has no Via column — value dropped. Add it with: node merge-tracker.mjs --migrate-via","messagePattern":"⚠️  (.+?): carries via=(.+?) but the tracker has no Via column — value dropped\\. Add it with: node merge-tracker\\.mjs --migrate-via","errorType":"console","errorClass":null,"httpStatus":null,"severity":"warning","filePath":"merge-tracker.mjs","lineNumber":987,"sourceCode":"  if (pendingIdx >= 0) {\n    newLines[pendingIdx] = updatedLine;\n    return true;\n  }\n  return false;\n}\n\nfor (const file of tsvFiles) {\n  const content = readFileSync(join(ADDITIONS_DIR, file), 'utf-8').trim();\n  const addition = parseTsvContent(content, file);\n  if (!addition) { skipped++; continue; }\n\n  // A via= tag can only be stored if the tracker has a Via column — warn\n  // instead of dropping the channel silently (#1596). Clear the value too:\n  // existing rows parse with via='' on this layout, so a set addition.via would\n  // make the cross-channel duplicate guard see a channel mismatch and add a\n  // second ? row instead of updating the same-agency re-blast.\n  if (addition.via && COLMAP.via == null) {\n    console.warn(`⚠️  ${file}: carries via=${addition.via} but the tracker has no Via column — value dropped. Add it with: node merge-tracker.mjs --migrate-via`);\n    addition.via = '';\n  }\n\n  // If additions carry a URL but the tracker has no URL\n  // column, deterministic Pass 0 cannot engage and dedup silently falls back to\n  // the fuzzy tiers. Warn once rather than degrade invisibly.\n  if (addition.url && COLMAP.url == null && !warnedNoUrlCol) {\n    console.warn('⚠️  Additions carry a URL but this tracker has no URL column — URL dedup is INACTIVE (fuzzy fallback). Add a `URL` header column to enable it.');\n    warnedNoUrlCol = true;\n  }\n\n  // Normalize the report link to be relative to the tracker file's directory.\n  // The TSV convention carries a root-relative `reports/...` link; rewrite it\n  // so it resolves correctly when clicked from applications.md (see #760).\n  addition.report = normalizeReportLink(addition.report);\n\n  // Derive the key from the linked report when the TSV did not carry one, so a\n  // row added through the normal nine-column flow is born WITH its key. This","sourceCodeStart":969,"sourceCodeEnd":1005,"githubUrl":"https://github.com/santifer/career-ops/blob/60398d6549a46f5266929538af21cfab94badc75/merge-tracker.mjs#L969-L1005","documentation":"A via=Firm agency tag on an addition can only be stored if the tracker table has a Via column (#1596). When COLMAP.via is null, merge-tracker.mjs warns that the value is dropped, clears addition.via (so the cross-channel duplicate guard does not misread the row), and points at the one-command migration to add the column.","triggerScenarios":"Merging a TSV row carrying a trailing `via=Hays` field into a data/applications.md whose header row has no Via column — addition.via is truthy, COLMAP.via == null, and the warn-and-drop branch runs for each such file.","commonSituations":"Tracker created before the Via feature existed; a fresh tracker from an old template; mixing agency-sourced additions into a manually maintained table.","solutions":["Run `node merge-tracker.mjs --migrate-via` to add the Via column, then re-merge so the value is kept","Re-apply the dropped via value by hand to the affected row if migrating now is not an option","Keep future additions' via tags consistent so the column stays populated"],"exampleFix":"# before\nnode merge-tracker.mjs  # via=Hays dropped with warning\n\n# after\nnode merge-tracker.mjs --migrate-via\nnode merge-tracker.mjs  # via=Hays now stored","handlingStrategy":"validation","validationCode":"import { readFileSync } from 'node:fs';\nfunction trackerHasViaColumn(trackerPath) {\n  const header = readFileSync(trackerPath, 'utf8').split('\\n').find(l => l.startsWith('|'));\n  return !!header && /\\bvia\\b/i.test(header);\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Run `node merge-tracker.mjs --migrate-via` once when adopting agency-sourced applications","When creating a fresh tracker, include the Via column from the start"],"tags":["tracker","via-column","schema-migration","merge","warning"],"backgroundTag":"missing-schema-column","analyzedSha":"60398d6549a46f5266929538af21cfab94badc75","analyzedAt":"2026-08-20T23:00:06.764Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-14T00:17:10.932Z"}