santifer/career-ops · warning
⚠️ ${file}: carries via=${addition.via} but the tracker has
Error message
⚠️ ${file}: carries via=${addition.via} but the tracker has no Via column — value dropped. Add it with: node merge-tracker.mjs --migrate-via What it means
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.
Source
Thrown at merge-tracker.mjs:987
if (pendingIdx >= 0) {
newLines[pendingIdx] = updatedLine;
return true;
}
return false;
}
for (const file of tsvFiles) {
const content = readFileSync(join(ADDITIONS_DIR, file), 'utf-8').trim();
const addition = parseTsvContent(content, file);
if (!addition) { skipped++; continue; }
// A via= tag can only be stored if the tracker has a Via column — warn
// instead of dropping the channel silently (#1596). Clear the value too:
// existing rows parse with via='' on this layout, so a set addition.via would
// make the cross-channel duplicate guard see a channel mismatch and add a
// second ? row instead of updating the same-agency re-blast.
if (addition.via && COLMAP.via == null) {
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`);
addition.via = '';
}
// If additions carry a URL but the tracker has no URL
// column, deterministic Pass 0 cannot engage and dedup silently falls back to
// the fuzzy tiers. Warn once rather than degrade invisibly.
if (addition.url && COLMAP.url == null && !warnedNoUrlCol) {
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.');
warnedNoUrlCol = true;
}
// Normalize the report link to be relative to the tracker file's directory.
// The TSV convention carries a root-relative `reports/...` link; rewrite it
// so it resolves correctly when clicked from applications.md (see #760).
addition.report = normalizeReportLink(addition.report);
// Derive the key from the linked report when the TSV did not carry one, so a
// row added through the normal nine-column flow is born WITH its key. ThisView on GitHub (pinned to 60398d6549)
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
Example fix
# before node merge-tracker.mjs # via=Hays dropped with warning # after node merge-tracker.mjs --migrate-via node merge-tracker.mjs # via=Hays now stored
Defensive patterns
Strategy: validation
Validate before calling
import { readFileSync } from 'node:fs';
function trackerHasViaColumn(trackerPath) {
const header = readFileSync(trackerPath, 'utf8').split('\n').find(l => l.startsWith('|'));
return !!header && /\bvia\b/i.test(header);
} Prevention
- 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
When it happens
Trigger: 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.
Common situations: Tracker created before the Via feature existed; a fresh tracker from an old template; mixing agency-sourced additions into a manually maintained table.
Related errors
- ⚠️ Non-canonical status "${status}" → defaulting to "Evalua
- ⚠️ Skipping ${filename}: ambiguous extra fields [${extras.j
- ⚠️ Skipping malformed pipe-delimited ${filename}: ${parts.l
- ⚠️ Skipping ${filename}: cannot tell score from status in c
- ⚠️ Skipping malformed TSV ${filename}: ${parts.length} fiel
AI-assisted analysis of santifer/career-ops@60398d6549 (2026-08-20).
Data as JSON: /api/errors/3d047809a7941bef.
Report an issue: GitHub.