Build artifacts land beside the sources, and a prose step has to remember to delete them

Author: jakob1379Created Sep 16, 2026Updated Sep 16, 2026

Line references against master @ 968fb1b.

/apply Step 5e (apply.md:332-334) ends the compile loop with a remembered instruction: delete the intermediate files the compile left beside the source. /add-template Step 4 (add-template.md:141) repeats it for its test compile and lists six LaTeX extensions by hand.

The files are there by construction. Every compile in the repo is a bare cd <dir> && <engine> <file>.tex: no -output-directory, no latexmk, no Makefile. They are already gitignored (.gitignore:12-19), so this is working-tree clutter and one more step to remember, not a leak.

/add-template spreads it. The compile command a custom template declares (add-template.md:77-80), the manifest example (:116) and the ACTIVE-TEMPLATE block /apply reads it from (:164) never mention a build directory, so every newly registered template inherits the clutter.

Proposal

Change add-template.md only, plus one .gitignore line:

  • The elicited LaTeX command redirects intermediates and moves the PDF back to the output path /apply reads (:167):
    mkdir -p build && lualatex -interaction=nonstopmode -output-directory=build <file>.tex && mv build/<file>.pdf .
    TeX Live does not create the output directory, so the mkdir -p is needed. typst compile has nothing to redirect and keeps its command.
  • Step 4 cleanup deletes build/ instead of listing extensions.
  • build/ is added to .gitignore.

Stock templates are untouched, so Step 5e stays. A draft PR is attached.

Alternative: also sweep the stock compile sites

Using the same flag for the stock templates would let Step 5e be deleted. That is 16 lines across 7 files: SETUP.md:80,124,294,295,300,301, apply.md:236-237, 05-cv-templates.md:20,246, 06-cover-letter-templates.md:18,27, ci.yml:151,161, add-template.md:116 and cv/main_example.tex:6. One CI catch: ci.yml:153 and :163 grep the .log inside an if, so once the log moves to build/ those checks stop firing silently unless they are repointed. Happy to do this instead if you prefer it.

Acceptance criteria

  • add-template.md elicits and documents a compile command that keeps intermediates out of cv/ and cover_letters/ and still leaves the PDF at the declared output path
  • Toolchains with nothing to redirect keep their command, and registration never blocks on the rule
  • Step 4 leaves no _compile_test.* intermediates without listing extensions by hand
  • build/ is in .gitignore
  • python3 tools/lint_skills.py and the test suite pass

Source: MadsLorentzen/ai-job-search