CI quality gate for the papers (#28)#30
Merged
Merged
Conversation
Add scripts/check_papers.sh (run via `make check`) with four cheap
compile-time and static checks, and run it as a gate on every push and
pull request in build.yml before the compile/publish steps:
1. undefined references/citations in the final pdflatex log;
2. spaced ` -- ` dash asides in sections/ (en-dash ranges are fine);
3. XXXX placeholders in the BibTeX databases;
4. a solver name present in a paper's tables but absent from its prose
(catches stale rows left behind when a generated table is regenerated).
Make the current tree pass: drop the arXiv:2607.XXXXX placeholder from
refs.bib, and rewrite the 86 spaced dash asides across all three papers'
sections into commas/colons/semicolons/parentheses.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
There was a problem hiding this comment.
Pull request overview
Adds a CI “quality gate” to catch common paper defects (undefined refs/citations, spaced -- asides, bib placeholders, and stale solver-table rows) and wires it into the GitHub Actions build before publishing, while also cleaning up punctuation in the LaTeX sources to satisfy the new checks.
Changes:
- Introduces
scripts/check_papers.shand amake checktarget to run the four checks described in issue #28. - Updates
.github/workflows/build.ymlto run the quality gate on every push and pull request, ahead of compilation/publish steps. - Removes spaced
--dash asides across paper sections and replaces a bib placeholder note.
Reviewed changes
Copilot reviewed 28 out of 28 changed files in this pull request and generated 2 comments.
Show a summary per file
| File | Description |
|---|---|
| scripts/check_papers.sh | New quality-gate script implementing the four checks. |
| Makefile | Adds check target to run the quality gate. |
| .github/workflows/build.yml | Runs make check for every push/PR before compiling/publishing. |
| matrix_free/bib/refs.bib | Replaces an arXiv placeholder note with “Companion paper”; adjusts entry type. |
| rmt/sections/s1_introduction.tex | Rewrites spaced dash asides to punctuation/parentheses. |
| rmt/sections/s2_problem.tex | Rewrites spaced dash asides to punctuation/parentheses. |
| rmt/sections/s3_rmt.tex | Rewrites spaced dash asides to punctuation/parentheses. |
| rmt/sections/s4_algorithm.tex | Rewrites spaced dash asides to punctuation/parentheses. |
| rmt/sections/s5_preprocessing.tex | Rewrites spaced dash asides to punctuation/parentheses. |
| rmt/sections/s6_oos.tex | Rewrites spaced dash asides to punctuation/parentheses. |
| rmt/sections/s7_results.tex | Rewrites spaced dash asides to punctuation/parentheses. |
| rmt/sections/s8_conclusions.tex | Rewrites spaced dash asides to punctuation/parentheses. |
| non_negative_cg/sections/s0_abstract.tex | Rewrites spaced dash asides to punctuation/parentheses. |
| non_negative_cg/sections/s1_introduction.tex | Rewrites spaced dash asides to punctuation/parentheses. |
| non_negative_cg/sections/s2_problem.tex | Rewrites spaced dash asides to punctuation/parentheses. |
| non_negative_cg/sections/s3_reduction.tex | Rewrites spaced dash asides to punctuation/parentheses. |
| non_negative_cg/sections/s4_operators.tex | Rewrites spaced dash asides to punctuation/parentheses. |
| non_negative_cg/sections/s5_nonneg.tex | Rewrites spaced dash asides to punctuation/parentheses. |
| non_negative_cg/sections/s6_conditioning.tex | Rewrites spaced dash asides to punctuation/parentheses. |
| non_negative_cg/sections/s7_results.tex | Rewrites spaced dash asides to punctuation/parentheses. |
| non_negative_cg/sections/s8_conclusions.tex | Rewrites spaced dash asides to punctuation/parentheses. |
| matrix_free/sections/s0_abstract.tex | Rewrites spaced dash asides to punctuation/parentheses. |
| matrix_free/sections/s1_introduction.tex | Rewrites spaced dash asides to punctuation/parentheses. |
| matrix_free/sections/s4_nonneg.tex | Rewrites spaced dash asides to punctuation/parentheses. |
| matrix_free/sections/s5_shrinkage.tex | Rewrites spaced dash asides to punctuation/parentheses. |
| matrix_free/sections/s6_methods.tex | Rewrites spaced dash asides to punctuation/parentheses. |
| matrix_free/sections/s7_results.tex | Rewrites spaced dash asides to punctuation/parentheses. |
| matrix_free/sections/s8_conclusions.tex | Rewrites spaced dash asides to punctuation/parentheses. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
Comment on lines
+47
to
+59
| ( | ||
| cd "$d" && | ||
| pdflatex -interaction=nonstopmode "$doc.tex" >/dev/null 2>&1 && | ||
| bibtex "$doc" >/dev/null 2>&1 && | ||
| pdflatex -interaction=nonstopmode "$doc.tex" >/dev/null 2>&1 && | ||
| pdflatex -interaction=nonstopmode "$doc.tex" >/dev/null 2>&1 | ||
| ) | ||
| log="$d/$doc.log" | ||
| if [ -f "$log" ] && grep -qE "(Reference|Citation) \`.*' .*undefined|There were undefined references" "$log"; then | ||
| report "$d: undefined references/citations in $doc.log:" | ||
| grep -oE "(Reference|Citation) \`[^']*' .*undefined" "$log" | sort -u | sed 's/^/ /' | ||
| fi | ||
| make -s -C "$d" clean >/dev/null 2>&1 |
Comment on lines
+96
to
+116
| echo "[4/4] Solver names present in tables but absent from prose" | ||
| solvers=("Clarabel" "OSQP" "Woodbury" "Proximal" "Lawson" "Interior point" "Active set") | ||
| for d in "${papers[@]}"; do | ||
| # Table files the paper actually \input's, resolved through the tables/ | ||
| # symlink (or real directory) to their real paths. | ||
| tbl_files=() | ||
| while IFS= read -r t; do | ||
| [ -n "$t" ] || continue | ||
| f="$d/tables/$t" | ||
| [ -f "$f" ] || f="$f.tex" | ||
| [ -f "$f" ] && tbl_files+=("$f") | ||
| done < <( | ||
| grep -rhoE '\\input\{tables/[^}]+\}' $(prose_files "$d") 2>/dev/null | | ||
| sed -E 's/.*\{tables\/([^}]+)\}/\1/' | ||
| ) | ||
| [ "${#tbl_files[@]}" -eq 0 ] && continue | ||
| for s in "${solvers[@]}"; do | ||
| if grep -qiF -- "$s" "${tbl_files[@]}" && ! grep -qiF -- "$s" $(prose_files "$d"); then | ||
| report "$d: solver '$s' appears in tables but not in the prose" | ||
| fi | ||
| done |
# Conflicts: # matrix_free/sections/s0_abstract.tex # matrix_free/sections/s1_introduction.tex
The merge with main pulled in the general balance-system prose (PR #19), which reintroduced spaced dash asides in the matrix_free sections. Rewrite them to parentheses so the quality gate passes on the merged tree. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Closes #28.
Adds cheap compile-time and static checks that would have caught several defects fixed by hand, and runs them as a gate on every push and pull request.
What
scripts/check_papers.sh(invoked viamake check), wired intobuild.ymlbefore the compile/publish steps:pdflatexlog forReference/Citation … undefined. Skips with a warning whenpdflatexis absent locally; CI ships TeX Live so it always runs there.--dash asides insections/— matches only the space-flanked pattern, so en-dash ranges (6--18) and hyphenated names (Marchenko--Pastur) are left alone.XXXXplaceholders in every tracked.bib.\inputs versus its prose, catching a solver name left in a regenerated table but no longer discussed.Triggers were broadened to every push + PR; the publish/release steps keep their existing
if:guards tomain/tags, so nothing about what ships changes.Making the tree pass
arXiv:2607.XXXXXplaceholder fromrefs.bib(→note = {Companion paper}).Verified
make check→ Quality gate passed;make compilebuilds all three PDFs cleanly.🤖 Generated with Claude Code