pedrohcgs/qa-quarto
Adversarial Quarto-vs-Beamer parity QA. A critic agent compares the Quarto HTML render to the Beamer PDF benchmark for content/visual parity; a fixer agent applies fixes; loops until APPROVED (max 5 rounds). Use when user says "qa the quarto", "check parity", "does the html match the pdf?", "quarto matches beamer?", or after a translate-to-quarto run. Requires both the `.qmd` rendered and a `.pdf` benchmark.
npx skills add https://github.com/pedrohcgs/claude-code-my-workflow --skill qa-quarto
Compare Quarto HTML slides against their Beamer PDF benchmark using an iterative critic/fixer loop.
Philosophy: The Beamer PDF is the gold standard. The Quarto translation must be at least as good in every dimension.
Phase 0: Pre-flight → Phase 1: Critic audit → Phase 2: Fixer → Phase 3: Re-audit → Loop until APPROVED (max 5 rounds)
| Gate | Condition |
|------|-----------|
| Overflow | NO content cut off |
| Plot Quality | Interactive charts >= static plots |
| Content Parity | No missing slides/equations/text |
| Visual Regression | Quarto >= Beamer in all dimensions |
| Slide Centering | Content centered, no jumping |
| Notation Fidelity | All math verbatim from Beamer |
Launch the quarto-critic agent to compare Beamer vs Quarto comprehensively. Report saved to quality_reports/[Lecture]_qa_critic_round1.md.
If not APPROVED, launch quarto-fixer agent to apply fixes (Critical → Major → Minor), re-render, and verify.
Re-launch critic to verify fixes. Loop back to Phase 2 if needed.
This is the loop-until-dry primitive from orchestrator-protocol.md: the critic returns FINDINGs (the hard-gate table is the CRITICAL roll-up, per orchestration-schemas.md); the loop converges when a round adds 0 new CRITICAL/MAJOR findings (deduped on location+finding), not at a fixed round count.
summary-parity.md).Save to quality_reports/[Lecture]_qa_final.md with hard gate status, iteration summary, and remaining issues.
Take pedrohcgs/qa-quarto from the repository into ~/.claude/skills for personal
use, or into .claude/skills inside a project.
The agent identifies a skill by the name field in its header. Two skills with the
same name cannot sit side by side — one of them will be ignored.