Validation of a devel → update/customization/nusz-2026-06-16 merge (NÚSZ customization update) FAILED at the lint step with one error, so the merge was NOT committed or pushed — left mid-merge with MERGE_HEAD intact. Root cause is a reusable merge gotcha: an extensionless require() added on the branch side survived a .js→.ts rename done on the devel side and broke under the n/no-missing-require eslint rule.
Status when validation stopped: mid-merge, untouched (validate-only, stop-on-fail). Nothing staged, committed, or pushed.
Lint gate: yarn lint = eslint . --max-warnings 0 --ignore-pattern "test/*" (see ci-github-branch-audit-chronically-red for why lint+unit tests are the real per-change gates).
Fix is a one-line merge-resolution correction (below), not yet applied.
Symptoms
yarn lint failed with exactly 1 error, 0 warnings:
/Users/levander/coding/facekom/vuer_oss-nusz-devel-update/cron.js
46:33 error Can't resolve './server/service/FFmpegService' in
'/Users/levander/coding/facekom/vuer_oss-nusz-devel-update' n/no-missing-require
✖ 1 problem (1 error, 0 warnings)
Root Cause — merge-caused, not pre-existing or environmental
Both sides of the merge were individually fine; the combination is what breaks:
origin/devel side (MERGE_HEAD):server/service/FFmpegService.js was renamed to FFmpegService.ts. devel’s cron.js has noFFmpegService require at all.
nusz branch tip side (HEAD): commit 1d837dac83“feat: add FFmpegService to service container in setupServices” added an extensionlessconst FFmpegService = require('./server/service/FFmpegService') to cron.js — written while the file was still .js, so it resolved fine and lint passed on the branch tip.
The merge accepted devel’s rename (so only FFmpegService.ts exists now) but kept the nusz extensionless require line in cron.js verbatim. Extensionless require('./server/service/FFmpegService') can no longer resolve to a .ts file under n/no-missing-require → lint error.
cron.js:46 is the lone straggler. Every other caller of the renamed TS services already uses the explicit .ts extension:
One-line merge-resolution correction. Re-run yarn lint to confirm green before committing the merge.
General gotcha — extensionless require + cross-side .js→.ts rename
When merging a branch where files were renamed .js → .ts on one side, any extensionless require() of those files added on the other side survives the merge unchanged and breaks under eslint n/no-missing-require (Node TS resolution requires the explicit .ts extension here; it will not fall back to .ts for an extensionless specifier).
After such merges, grep for extensionless requires of the renamed modules, e.g.:
Conflict-free text merges hide this: neither side touched the same line, so git produces no conflict marker — the breakage only surfaces at the lint/resolve step.