Inspiration
A scientific chart can be polished, readable, and still be wrong. Rule-based chart recommenders are useful, but they can assign meaning the data does not contain. I wanted a workflow that does more than generate another figure: it should compare alternatives, challenge the highest-ranked choice, and leave evidence for every decision.
What it does
PlotProof reads CSV, Excel, or MAT data and uses a MATLAB plotting engine to render two to five ranked candidates. GPT-5.6 Sol in Codex reviews the actual candidate images against the research goal and scores claim support, legibility, accessibility, honesty, and reproducibility.
The review passes through a strict schema before MATLAB starts. Only five controlled figure repairs are allowed. The model never supplies executable MATLAB. The final package contains PNG and SVG figures, a before-and-after comparison, Markdown/JSON evidence, and a self-contained HTML decision report. A companion manifest records the byte count and SHA-256 digest of every source artifact, so a copied bundle can be checked for tampering.
Demonstrated result
The bundled synthetic dataset has baseline and candidate columns representing two methods. A rule-based ranker puts a confidence band first because the goal mentions uncertainty. GPT-5.6 rejects that option because the columns are not lower and upper bounds, selects the labeled multi-line comparison, and requests safe contrast, typography, legend, and grid repairs.
How I built it
Codex was the primary Build Week development environment. It inspected the pre-existing Agent Skill and release gates, added contract tests, implemented candidate manifests and finalization, ran MATLAB R2025a, inspected real rendered pixels, found and fixed a MATLAB JSON-decoding edge case, and repeatedly ran the full release gate. GPT-5.6 Sol performed the checked semantic review shown in the demo.
After the initial submission, I used Codex and test-driven development to add an adversarial benchmark for the model-to-MATLAB boundary. The valid control is accepted; 14 mutations covering executable-action injection, candidate/model spoofing, field smuggling, invalid scores, contradictory verdicts, oversized findings, and malformed JSON are rejected.
For the final submission pass, I used Codex to add the offline evidence surface with test-driven development. The tests cover HTML injection, path traversal, outside-root symlinks, and same-size file tampering. I then ran the real three-candidate workflow in MATLAB R2025a, checked the report at desktop and mobile widths, and ran the complete release gate with MATLAB.
The Build Week implementation uses MATLAB, Python, Bash, JSON, HTML, and GitHub Actions. The repository documents the pre-event baseline and every post-July-13 addition.
Challenges
The hardest part was keeping visual reasoning powerful without letting model output become executable code. The solution is a fail-closed contract: unknown candidates, models, fields, scores, or actions are rejected in Python, and MATLAB enforces the repair allowlist again.
Accomplishments
- One-command real-MATLAB candidate, review, repair, and evidence demo
- Strict validation across five scientific-figure quality dimensions
- 15/15 reproducible contract checks; all 14 adversarial outputs fail closed
- Safe repairs with defense in depth in Python and MATLAB
- Path-safe manifests with no private research material
- One offline HTML report that embeds candidates, scores, findings, repairs, and provenance
- SHA-256 integrity verification across 12 real MATLAB evidence artifacts
- Shell, unit, visual, privacy, provenance, contract, and GitHub Actions gates
What I learned
The best rule score is not necessarily the most honest scientific encoding. Visual review becomes more useful when it must produce structured evidence that can be validated, reproduced, and challenged. A narrow allowlist is also easier to test honestly than a broad promise of safe model-generated code.
What's next
I plan to evaluate the review contract on more research domains and add human acceptance feedback while keeping the model-to-MATLAB boundary strict and inspectable.
Judge test path
Fast path without MATLAB: download build-week-2026.2, extract plotproof-review-evidence-build-week-2026.2.zip, and open review_report.html. The report is self-contained: it needs no API key, JavaScript, network connection, or MATLAB installation.
Reproduce from source:
git clone https://github.com/Kkkakania/matlab-plotting-skill.git
cd matlab-plotting-skill
MATLAB_BIN=/Applications/MATLAB_R2025a.app/bin/matlab ./scripts/run_review_demo.sh --out /tmp/matlab-plot-review-demo
python3 scripts/verify_review_bundle.py --manifest /tmp/matlab-plot-review-demo/review_bundle_manifest.json --root /tmp/matlab-plot-review-demo
./scripts/run_review_contract_benchmark.py --validator scripts/validate_plot_review.py --manifest examples/review/multi_series_manifest.json --review examples/review/multi_series_review.json --out /tmp/plot-review-contract-benchmark
The core review is in PR #42, contract hardening is in PR #43, and the offline evidence bundle is in PR #45. The latest main Quality run is green.
Log in or sign up for Devpost to join the conversation.