Skip to content

CI quality gate for the papers (#28)#30

Merged
tschm merged 3 commits into
mainfrom
ci-paper-quality-gate
Jul 4, 2026
Merged

CI quality gate for the papers (#28)#30
tschm merged 3 commits into
mainfrom
ci-paper-quality-gate

Conversation

@tschm

@tschm tschm commented Jul 3, 2026

Copy link
Copy Markdown
Member

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 via make check), wired into build.yml before the compile/publish steps:

  1. Undefined references/citations — full-builds each paper and greps the final pdflatex log for Reference/Citation … undefined. Skips with a warning when pdflatex is absent locally; CI ships TeX Live so it always runs there.
  2. Spaced -- dash asides in sections/ — matches only the space-flanked pattern, so en-dash ranges (6--18) and hyphenated names (Marchenko--Pastur) are left alone.
  3. XXXX placeholders in every tracked .bib.
  4. Stale solver rows — for each paper, checks a curated solver vocabulary against the tables it actually \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 to main/tags, so nothing about what ships changes.

Making the tree pass

  • Dropped the arXiv:2607.XXXXX placeholder from refs.bib (→ note = {Companion paper}).
  • Rewrote the 86 spaced dash asides across all three papers' sections into commas/colons/semicolons/parentheses.

Verified

make checkQuality gate passed; make compile builds all three PDFs cleanly.

Note: check (4)'s solver list is hand-maintained — a comment in the script flags it for extension when a new solver enters the experiments.

🤖 Generated with Claude Code

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>
Copilot AI review requested due to automatic review settings July 3, 2026 19:32

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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.sh and a make check target to run the four checks described in issue #28.
  • Updates .github/workflows/build.yml to 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 thread scripts/check_papers.sh
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 thread scripts/check_papers.sh
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
tschm and others added 2 commits July 4, 2026 07:04
# 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>
@tschm tschm merged commit b8136a4 into main Jul 4, 2026
2 checks passed
@tschm tschm deleted the ci-paper-quality-gate branch July 4, 2026 03:43
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

CI quality gate for the papers

2 participants