chore(ci): verify trailing newlines
What does this MR do and why?
Files without trailing newlines could reach review because the existing fixer was not enforced. This adds automated checks to local commits and merge request pipelines, and repairs the existing source files so the gate starts green.
Related Issues
Closes #1291 (closed)
Testing
Passed mise lint:newlines, mise lint:fmt, mise lint:code, mise lint:deps, mise test:fast, mise test:integration:codegraph, and lefthook validate. The config schema generator test and freshness check also pass.
Performance Analysis
- This merge request does not introduce any performance regression.
Agent context - implementation and validation details
The non-mutating task uses the same extension list as the existing fixer. Both tasks exclude docs-locale/ because project policy treats that directory as generated output; the eight violations outside that tree are fixed. The config schema generator now preserves the trailing newline when regenerating its JSON output.
A negative check removed a trailing newline temporarily, confirmed that mise lint:newlines failed without changing the file, restored it, and confirmed the task passed. Regenerating the metrics catalog, dashboards, query-language docs, and Rust toolchain file produced no drift, confirming the other freshness-checked generators covered by the task preserve newlines. The aggregate docs gate still reports unrelated existing Markdown, Vale, and local-link failures; none are in files changed by this MR.