ums: gha consumer R-dependency asymmetry, and Quarto's per-document format override - #2137
Conversation
…ormat override Two entries from migrating d-morrison/macros onto gha's reusable workflows (macros#83, merged as e2e94d4). gha-reusable-workflows.md: the family has three different R-dependency mechanisms with opposite defaults. claude.yml's setup-r defaults true and resolves local::. against a DESCRIPTION; quarto-publish.yml's defaults false and passes r-packages as `packages:`, replacing the default deps::. spec; preview.yml offers neither and so cannot serve a repo shape its sibling serves fine (gha#607). A consumer migrating several at once reads them as one coherent family, which is exactly when the differences are invisible. r-quarto.md: a project's _quarto.yml `format:` block is the default, not the format set. Per-document front matter replaces it, so a project declaring `format: html` alone still renders PDF wherever a document says so. Dropping TinyTeX on the strength of the project file passes every local check and breaks the first publish after merge. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01DzqQ9SB4Uw9ykenZ8xmPZM
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
…he freeze claim Six findings from the claude-review round on 306329a. Split memories/quarto-sites.md out of memories/r-quarto.md, which the new entry had pushed to 1225 lines against the repo's 1200-line gate. The four Quarto *site* sections move (build/layout gotchas, page-scoped crossref labels, the new format-set entry, and the quarto-actions/setup + TinyTeX signatures); R-toolchain material stays. Registered in memories/MEMORY.md and the r-quarto.md row amended, following the r-cloud-sessions.md pattern. The format-sweep snippet had two real bugs, both of which undercut the section's own point about not missing documents: bash's ** does not recurse without `shopt -s globstar`, and the sed range `/^format:/,/^[a-z]/` runs on past the front matter into body text. Replaced with an awk extraction terminated at the closing ---, verified on d-morrison/macros: it finds both demo documents and correctly ignores index.qmd, whose `format:` occurrences are inside body code fences the old grep would have matched. The `freeze: auto` bullet was wrong. Freeze skips chunk execution, not the pandoc/LaTeX render, so a frozen PDF document still exercises TinyTeX locally. Rewritten to say that, which supports the section rather than contradicting it. Reworded the two clause-rule violations to drop their mid-line semicolons. Verified: check-memory-file-size clean, its test suite 13/13, check-links clean across 553 files, gha's check-new-line-breaks clean against origin/main, markdownlint clean on all four files. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01DzqQ9SB4Uw9ykenZ8xmPZM
The split moves 263 lines into a new file, so check-new-line-breaks sees every one of them as added and re-flags 23 lines written before the rule existed. reorganize-prose.md settles what to do: bringing relocated lines into compliance with the line-level checks is part of the move, not scope creep. Done by inserting breaks, never by joining. Running the repo's own semantic-line-breaks.py --write here was tried first and made it worse: it cleared the sentence-packing findings and created twelve mid-line-semicolon ones, taking the gate from 23 findings to 13. That is the reformatter- versus-gate divergence shared/writing/semantic-line-breaks.md already owns. No wording changed; only where the lines break. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01DzqQ9SB4Uw9ykenZ8xmPZM
|
Follow-up push Why a second round was neededSplitting a memory file moves 263 lines into a new file, so
Verified pure reflow — whole-file text is byte-identical after whitespace normalization, so no wording changed, only where lines break. Three ways this gate reports clean without examining your changesI hit two of them in one round, which is why they are worth writing down together.
The repo's own normalizer makes this worse, not betterRunning That is the reformatter-versus-gate divergence Local verification at
|
|
Claude finished review — View run All checks pass. The review is complete — every finding from the prior round has been verified fixed, and no new issues were introduced. VerdictReady for merge. This round fully addresses all six findings from the prior review (commit
Additional checks I ran independently (not just re-verifying prior findings): No new issues found. Reviewed commit: 2fb5f92 |
UMS pass from migrating
d-morrison/macrosonto gha's reusable workflows (macros#83, merged ase2e94d4; the firstQuarto Publishrun under the new workflow deployed clean).memories/gha-reusable-workflows.md— three R-dependency mechanisms, opposite defaultssetup-rdefaultclaude.ymlsetup-r-dependenciesextra-packages:, whose default spec includeslocal::.(needs aDESCRIPTION)quarto-publish.ymlr-packagesreachessetup-r-dependenciesaspackages:, replacing the defaultdeps::.preview.ymlR CMD INSTALL .— nothing elseA consumer migrating several of these in one PR reads them as one coherent family, and each caller stub is short enough to look obviously correct, so the divergence is invisible at exactly the moment it bites.
macrosneededsetup-r: falseon the first andsetup-r: trueplus explicitr-packageson the second, and cannot use the third at all — filed upstream as gha#607.The entry also records where to look: the composite action decides
packages:versusextra-packages:, so the wrapping reusable workflow'sinputs:block cannot answer that question.memories/r-quarto.md— a project'sformat:block is not its format setPer-document front matter overrides the project-level
format:key rather than adding to it.macros's_quarto.ymldeclaresformat: htmlalone while two demo documents declare their ownpdf:andrevealjs:blocks — demonstrating the macros reaching the LaTeX preamble being the entire point of those pages.I dropped
tinytex: truefrom the migratedpublish.ymlon the strength of the project file, which would have broken the first publish after merge on a document nobody opened. Caught in self-review before it landed. This isverify-the-right-artifact's "a neighbour for the target" shape:_quarto.ymlis the file you would name if asked where a project's formats are declared, so reading it feels like checking rather than assuming, while the answer is a property of the document population.Also filed, not fixed here
#2135 —
memories/gha-reusable-workflows.mdstill names the repod-morrison/ghain five places (two of them copy-pasteableuses:lines) and states the calling convention as@v1, which contradicts a longer passage in the same file about the v1/v2 split. Separating the load-bearing@v1history from the stale@v1instructions is real work, so it is out of scope for this pass rather than folded in.Checks
check-links.pyclean (2265 relative links across 552 files).semantic-line-breaks.pyclean after--write. Bothsetup-rdefaults re-read from theMorrison-Lab/ghaworking tree before the claim was written.