Orchestration Log: When this skill is activated, append a log entry to outputs/orchestration_log.md:
### Skill Activation: Audit Engine
**Timestamp:** [current date/time]
**Actor:** AI Agent (audit-engine)
**Input:** [paper + repo being audited]
**Output:** [brief summary — e.g., "Audited 18 claims: 12 CONFIRMED, 3 PARTIAL, 2 MISSING, 1 MISMATCH"]
Audit Engine
Core Principle
Papers make claims. Code embodies what was actually done. This engine systematically
checks whether the two agree. For every empirical or technical claim in the paper —
datasets used, models trained, metrics reported, hyperparameters set, ablations run —
the engine locates supporting evidence in the linked repository and classifies the
match.
This is the complement to verification-engine, which checks citations against
external sources. Audit-engine checks the paper's own claims against the paper's
own code. Together they cover both failure modes of LLM-assisted writing: mis-cited
prior work and unsupported own-work claims.
Inspired by the /audit command in the Feynman research agent (Companion AI, 2026),
adapted to the IS/CS methodological style of this plugin.
When to Activate
- User says "audit the paper", "check paper vs. code", "verify my experiments",
"reproducibility audit", "does the code match what I wrote"
- Before submitting a paper with an accompanying code release
- Before open-sourcing the repo of a published paper
- When reviewing someone else's paper + artifact
- As optional Phase 7.5 of the paper machine pipeline (after verify-citations,
before prepare-submission)
When NOT to Activate
- The paper has no code artifact (pure theory, position paper, qualitative study
without computational analysis) → say so and exit
- The user wants to verify citations → activate
verification-engine instead
- The user wants to check writing quality → activate the writing-engine
/analyze-writing command
Inputs
Required:
- Paper source —
paper.tex, draft.md, or explicit $ARGUMENTS path
- Code repository — one of:
- Local path (
./experiments/, ~/repos/myproject)
- GitHub URL (clone or use
gh repo view / WebFetch on raw files)
- Archive link (Zenodo, OSF) — ask user to download locally first
If the repo location is not supplied, scan the paper for common signals:
- "Code available at [URL]" / "Our implementation is at [URL]"
- GitHub URLs in footnotes or acknowledgements
- A
code_availability section
- A
REPRODUCIBILITY.md, ARTIFACT.md, or similar file sibling to the paper
If still not found: ask the user once, then exit.
Step 1: Extract Auditable Claims
Scan the paper for claims that can be checked against code. Ignore claims that are
purely conceptual, historical, or theoretical.
Claim Categories (check in order)
| Category |
What to look for |
Priority |
| Dataset |
Named datasets, split sizes, sample counts, data sources |
HIGH |
| Model |
Model names, architectures, parameter counts, checkpoints |
HIGH |
| Training |
Epochs, batch size, learning rate, optimizer, hardware |
HIGH |
| Metrics |
Reported numbers (accuracy, F1, BLEU, loss values, percentages) |
HIGH |
| Experiments |
Named experimental conditions, ablations, baselines |
HIGH |
| Hyperparameters |
Specific values in tables or "Training Details" |
MEDIUM |
| Preprocessing |
Tokenization, normalization, filtering steps |
MEDIUM |
| Evaluation |
Test protocol, prompt templates, judge models, seeds |
MEDIUM |
| Infrastructure |
GPUs, training time, framework versions |
LOW |
| Figures |
Plots claimed to come from "our experiments" |
MEDIUM |
Extraction Pattern
For each claim, record:
{
id: "C01",
category: "Model",
section: "4.2 Model Training",
claim_text: "We fine-tune LLaMA-3-8B for 3 epochs with a learning rate of 2e-5.",
testable_facts: [
"model == LLaMA-3-8B",
"epochs == 3",
"learning_rate == 2e-5"
],
priority: "HIGH"
}
Claims with concrete numbers, names, or identifiers are testable. Vague claims
("we use a standard transformer") are not auditable — mark them as NOT_AUDITABLE
and skip.
Output: outputs/audit_claims.md — numbered list of all testable claims.
Step 2: Map the Repository
Before searching, build a lightweight mental map of the repo. Do not read every file.
- Top-level listing —
Glob on **/*.{py,ipynb,yaml,yml,json,toml,sh,md}
at depth 2-3
- Identify key files by name convention:
train.py, main.py, run_experiments.py, eval.py → entry points
config.yaml, hparams.json, sweep.yaml, *.toml → configuration
requirements.txt, pyproject.toml, environment.yml → dependencies
README.md, REPRODUCE.md, docs/ → documentation
results/, outputs/, logs/, wandb/ → experiment artifacts
datasets/, data/, load_data.py → data loaders
- Detect framework — PyTorch, JAX, TensorFlow, HuggingFace, scikit-learn —
this guides search patterns
- Detect experiment tracking — wandb, mlflow, tensorboard, plain CSV logs
Record this as an internal map; do not output it unless the user asks.
Step 3: Search for Evidence (per claim)
For each testable claim, systematically search for supporting code evidence.
Search Strategy
Use Grep and Read — NOT an agent — for transparency. Each lookup should produce
a file path and line number that can be cited in the report.
Example — Model claim "LLaMA-3-8B, 3 epochs, lr=2e-5":
- Search for the model name:
Grep "llama-?3-?8b|Llama-3-8B" --type py
- Search for learning rate:
Grep "2e-?5|0.00002|learning_rate.*2e-5"
- Search for epochs:
Grep "epochs\s*[:=]\s*3|num_epochs.*3"
- Check config files:
Read config/*.yaml for matching values
- If wandb/mlflow logs exist, grep those too
Example — Metric claim "we report an F1 of 0.87":
- Search results files:
Grep "0\.87" --type json --type csv --type md
- Search eval scripts:
Grep -l "f1_score|F1" eval*.py
- Check if the number appears in a logged output
Example — Dataset claim "trained on 12,000 examples from OpenReview":
- Search for dataset loader:
Grep "openreview" -i
- Check size assertions:
Grep "12000|12_000|len\(.*\).*12"
- Read the data loading function to confirm source
Record Evidence
For each claim, record:
{
id: "C01",
searches: ["llama-3-8b", "lr=2e-5", "epochs=3"],
hits: [
{file: "train.py", line: 42, snippet: "model_name = 'meta-llama/Llama-3-8B'"},
{file: "config/train.yaml", line: 7, snippet: "learning_rate: 2e-5"},
{file: "config/train.yaml", line: 8, snippet: "epochs: 5"} // NOTE mismatch
]
}
Do not hallucinate hits. If Grep returns nothing, record an empty hits list.
Step 4: Classify Each Claim
Classification Rubric
| Status |
Criteria |
Evidence |
| CONFIRMED |
Every testable fact in the claim has matching code evidence |
File + line for each fact |
| PARTIAL |
Some facts confirmed, others missing or unchecked |
Confirmed facts listed; gaps called out |
| MISSING |
No code evidence found for any fact in the claim |
Which searches returned empty |
| MISMATCH |
Code evidence exists but contradicts the claim |
Side-by-side: paper says X, code says Y |
| NOT_AUDITABLE |
Claim is too vague to check, or code is not available |
Brief reason |
Rules of Engagement
- Be conservative. If you're not sure a search hit actually supports the claim,
mark PARTIAL and explain what's missing.
- Never mark CONFIRMED without a file:line reference. "I think it's probably
in the training script" is not evidence.
- Treat MISMATCH as load-bearing. Even a single MISMATCH is worth flagging
prominently — these are the findings the user most needs to know.
- Distinguish MISSING from NOT_AUDITABLE. MISSING means the claim is
checkable but no evidence exists (red flag). NOT_AUDITABLE means the claim
itself is too vague (usually fine, but worth rewriting).
- Do not run code. This engine is a static audit. Running experiments is the
job of a separate replication step (future extension point).
Step 5: Generate Audit Report
Save to outputs/audit_report.md.
Report Template
# Paper-vs-Code Audit Report
**Paper:** [paper title]
**Paper source:** [paper.tex | draft.md | path]
**Code repository:** [local path or URL]
**Commit / version audited:** [git SHA if available, else "working tree"]
**Date:** [YYYY-MM-DD]
**Auditor:** audit-engine (Open Academic Paper Machine v6.4)
## Summary
| Status | Count | % |
|--------|-------|---|
| CONFIRMED | [n] | [%] |
| PARTIAL | [n] | [%] |
| MISSING | [n] | [%] |
| MISMATCH | [n] | [%] |
| NOT_AUDITABLE | [n] | [%] |
**Overall signal:** [one sentence — e.g., "Core experiments check out; 2 mismatches
in reported hyperparameters need attention before submission."]
## Critical Findings
### MISMATCH — Paper and Code Disagree
#### [C03] [Section 4.2] "We train for 3 epochs with learning rate 2e-5"
- **Paper says:** epochs = 3, lr = 2e-5
- **Code says:**
- `config/train.yaml:8` → `epochs: 5`
- `config/train.yaml:7` → `learning_rate: 2e-5` ✓
- **Recommendation:** Update the paper to say 5 epochs, or re-run with 3 and
re-check the reported numbers.
[repeat for each mismatch]
### MISSING — Claim Not Supported by Code
#### [C07] [Section 5.1] "We evaluate on the held-out 10% split (1,200 examples)"
- **Paper says:** held-out split of 1,200 examples
- **Searched:** `held.out`, `test_split`, `1200`, `0\.1`
- **Result:** No split logic found in `data/loader.py`. `eval.py` loads the entire
dataset without stratification.
- **Recommendation:** Either add split logic to the repo or remove the claim from
the paper.
[repeat for each missing]
## Detailed Findings by Section
### Section 4 — Method
| # | Claim | Category | Status | Evidence |
|---|-------|----------|--------|----------|
| C01 | LLaMA-3-8B model | Model | CONFIRMED | `train.py:42` |
| C02 | 2e-5 learning rate | Training | CONFIRMED | `config/train.yaml:7` |
| C03 | 3 epochs | Training | MISMATCH | see Critical Findings |
| C04 | AdamW optimizer | Training | CONFIRMED | `train.py:88` |
### Section 5 — Experiments
| # | Claim | Category | Status | Evidence |
|---|-------|----------|--------|----------|
| C05 | F1 = 0.87 on test set | Metric | CONFIRMED | `results/test_metrics.json:12` |
| C06 | 3 random seeds | Training | PARTIAL | seeds {42,43} found in `run.sh`, third seed unclear |
| C07 | Held-out 10% split | Dataset | MISSING | see Critical Findings |
[repeat for each section]
## Not Auditable
Claims that are too vague to check or depend on external state:
| # | Claim | Reason |
|---|-------|--------|
| C12 | "A standard transformer architecture" | Vague — no specific config to check |
| C15 | "Comparable to human performance" | Depends on external human benchmark |
## Repository Map (for context)
- **Entry points:** `train.py`, `eval.py`, `run_sweep.sh`
- **Configs:** `config/train.yaml`, `config/eval.yaml`
- **Data loading:** `data/loader.py`
- **Dependencies:** `requirements.txt` (53 packages)
- **Experiment tracking:** wandb (runs in `wandb/`)
- **Results:** `results/` (JSON + CSV logs)
## Methodology Note
This audit was a **static audit**: code was read and grepped, but no experiments
were re-run. Matches indicate that the paper's claims are consistent with the code
*as written*, not that the code was verified to produce the reported numbers.
A full reproducibility check would additionally:
1. Install dependencies in a clean environment
2. Re-run training with the exact config
3. Re-run evaluation and compare numbers to the paper
See Extension Points below.
## Extension Points
- **Dynamic replication:** re-run the training/eval pipeline in a Docker container
and compare metrics to the paper (Feynman-style `/replicate`, not yet implemented
in this plugin)
- **Diff-based re-audit:** after fixing mismatches, re-run on changed claims only
- **Multi-repo audits:** audit a paper that uses code from multiple repos (e.g.,
baseline models from external sources)
Prioritization Strategy
If the paper has many claims, process in this order and save intermediate results
after each tier so the user can act early:
Tier 1 — High-stakes claims (verify first)
- Reported numbers in tables and abstract
- Model identifier and size
- Dataset identifier and size
- Any claim the paper's contribution depends on
Tier 2 — Method details
- Hyperparameters, optimizers, schedulers
- Preprocessing, tokenization
- Evaluation protocol
Tier 3 — Context
- Infrastructure (GPUs, training time)
- Framework versions
- Figure provenance
After Tier 1, present a progress snapshot:
AUDIT PROGRESS
Tier 1 (High-stakes): [12/12] Complete
CONFIRMED: 9 | PARTIAL: 1 | MISSING: 1 | MISMATCH: 1
>> 1 mismatch found — see audit_report.md
Tier 2 (Method): [0/8] Queued
Tier 3 (Context): [0/4] Queued
Continue to Tier 2? [proceeding unless you redirect]
Limitations
What This Engine Can Do
- Check named entities (datasets, models) against code references
- Verify hyperparameter values in configs match the paper
- Confirm metrics appear in logged results
- Catch contradictions between paper and code (MISMATCH)
- Catch unsupported claims (MISSING)
- Flag vague claims that should be rewritten (NOT_AUDITABLE)
What This Engine Cannot Do
- Run the code and reproduce the numbers (static audit only)
- Detect whether the code would actually produce the claimed behaviour if run
- Audit closed-source or paywalled dependencies
- Audit manual/qualitative steps ("we prompted GPT-4 iteratively until...")
- Replace a human artifact reviewer
Failure Modes to Watch For
- Config vs. code divergence — the YAML says one thing,
train.py hard-codes
another. Always check both.
- Scripts that override configs —
run.sh may pass --epochs 10 that overrides
the YAML. Grep shell scripts too.
- Multiple configs — papers often report one experiment; the repo has ten.
Match the config to the paper, not the other way around.
- Notebooks —
.ipynb files are JSON; Grep works but read carefully.
Relationship to Other Skills
verification-engine — checks external citations against sources.
audit-engine checks own-work claims against own code. Run both before
submission for full coverage.
review-engine — simulated peer review. An audit report is a natural
input to a simulated reviewer.
prepare-submission — a clean audit report is a strong artifact to include
with submissions to venues that accept reproducibility statements (e.g. NeurIPS
Reproducibility Checklist, ML Reproducibility Challenge).
1---2name: audit-engine3description: Activate when the user wants to audit a paper's empirical or technical claims against a linked code repository — checking whether experiments, datasets, models, metrics, and hyperparameters described in the paper actually exist and match the code. Produces a structured audit report classifying each claim as CONFIRMED, PARTIAL, MISSING, or MISMATCH, with file/line evidence. Useful for reproducibility checks, reviewer due diligence, and pre-submission self-audits of ML/CS/empirical papers that ship code.4---56> **Orchestration Log**: When this skill is activated, append a log entry to `outputs/orchestration_log.md`:7> ```8> ### Skill Activation: Audit Engine9> **Timestamp:** [current date/time]10> **Actor:** AI Agent (audit-engine)11> **Input:** [paper + repo being audited]12> **Output:** [brief summary — e.g., "Audited 18 claims: 12 CONFIRMED, 3 PARTIAL, 2 MISSING, 1 MISMATCH"]13> ```1415# Audit Engine1617## Core Principle1819Papers make claims. Code embodies what was actually done. This engine systematically20checks whether the two agree. For every empirical or technical claim in the paper —21datasets used, models trained, metrics reported, hyperparameters set, ablations run —22the engine locates supporting evidence in the linked repository and classifies the23match.2425This is the complement to `verification-engine`, which checks citations against26external sources. Audit-engine checks *the paper's own claims* against *the paper's27own code*. Together they cover both failure modes of LLM-assisted writing: mis-cited28prior work and unsupported own-work claims.2930Inspired by the `/audit` command in the Feynman research agent (Companion AI, 2026),31adapted to the IS/CS methodological style of this plugin.3233## When to Activate3435- User says "audit the paper", "check paper vs. code", "verify my experiments",36 "reproducibility audit", "does the code match what I wrote"37- Before submitting a paper with an accompanying code release38- Before open-sourcing the repo of a published paper39- When reviewing someone else's paper + artifact40- As optional Phase 7.5 of the paper machine pipeline (after verify-citations,41 before prepare-submission)4243## When NOT to Activate4445- The paper has no code artifact (pure theory, position paper, qualitative study46 without computational analysis) → say so and exit47- The user wants to verify *citations* → activate `verification-engine` instead48- The user wants to check *writing quality* → activate the writing-engine49 `/analyze-writing` command5051---5253## Inputs5455Required:561. **Paper source** — `paper.tex`, `draft.md`, or explicit `$ARGUMENTS` path572. **Code repository** — one of:58 - Local path (`./experiments/`, `~/repos/myproject`)59 - GitHub URL (clone or use `gh repo view` / `WebFetch` on raw files)60 - Archive link (Zenodo, OSF) — ask user to download locally first6162If the repo location is not supplied, scan the paper for common signals:63- "Code available at [URL]" / "Our implementation is at [URL]"64- GitHub URLs in footnotes or acknowledgements65- A `code_availability` section66- A `REPRODUCIBILITY.md`, `ARTIFACT.md`, or similar file sibling to the paper6768If still not found: ask the user once, then exit.6970---7172## Step 1: Extract Auditable Claims7374Scan the paper for claims that can be checked against code. Ignore claims that are75purely conceptual, historical, or theoretical.7677### Claim Categories (check in order)7879| Category | What to look for | Priority |80|----------|------------------|----------|81| **Dataset** | Named datasets, split sizes, sample counts, data sources | HIGH |82| **Model** | Model names, architectures, parameter counts, checkpoints | HIGH |83| **Training** | Epochs, batch size, learning rate, optimizer, hardware | HIGH |84| **Metrics** | Reported numbers (accuracy, F1, BLEU, loss values, percentages) | HIGH |85| **Experiments** | Named experimental conditions, ablations, baselines | HIGH |86| **Hyperparameters** | Specific values in tables or "Training Details" | MEDIUM |87| **Preprocessing** | Tokenization, normalization, filtering steps | MEDIUM |88| **Evaluation** | Test protocol, prompt templates, judge models, seeds | MEDIUM |89| **Infrastructure** | GPUs, training time, framework versions | LOW |90| **Figures** | Plots claimed to come from "our experiments" | MEDIUM |9192### Extraction Pattern9394For each claim, record:95```96{97 id: "C01",98 category: "Model",99 section: "4.2 Model Training",100 claim_text: "We fine-tune LLaMA-3-8B for 3 epochs with a learning rate of 2e-5.",101 testable_facts: [102 "model == LLaMA-3-8B",103 "epochs == 3",104 "learning_rate == 2e-5"105 ],106 priority: "HIGH"107}108```109110Claims with concrete numbers, names, or identifiers are testable. Vague claims111("we use a standard transformer") are not auditable — mark them as `NOT_AUDITABLE`112and skip.113114**Output:** `outputs/audit_claims.md` — numbered list of all testable claims.115116---117118## Step 2: Map the Repository119120Before searching, build a lightweight mental map of the repo. Do not read every file.1211221. **Top-level listing** — `Glob` on `**/*.{py,ipynb,yaml,yml,json,toml,sh,md}`123 at depth 2-31242. **Identify key files** by name convention:125 - `train.py`, `main.py`, `run_experiments.py`, `eval.py` → entry points126 - `config.yaml`, `hparams.json`, `sweep.yaml`, `*.toml` → configuration127 - `requirements.txt`, `pyproject.toml`, `environment.yml` → dependencies128 - `README.md`, `REPRODUCE.md`, `docs/` → documentation129 - `results/`, `outputs/`, `logs/`, `wandb/` → experiment artifacts130 - `datasets/`, `data/`, `load_data.py` → data loaders1313. **Detect framework** — PyTorch, JAX, TensorFlow, HuggingFace, scikit-learn —132 this guides search patterns1334. **Detect experiment tracking** — wandb, mlflow, tensorboard, plain CSV logs134135Record this as an internal map; do not output it unless the user asks.136137---138139## Step 3: Search for Evidence (per claim)140141For each testable claim, systematically search for supporting code evidence.142143### Search Strategy144145Use `Grep` and `Read` — NOT an agent — for transparency. Each lookup should produce146a file path and line number that can be cited in the report.147148**Example — Model claim "`LLaMA-3-8B, 3 epochs, lr=2e-5`":**1491501. Search for the model name: `Grep "llama-?3-?8b|Llama-3-8B" --type py`1512. Search for learning rate: `Grep "2e-?5|0.00002|learning_rate.*2e-5"`1523. Search for epochs: `Grep "epochs\s*[:=]\s*3|num_epochs.*3"`1534. Check config files: `Read config/*.yaml` for matching values1545. If wandb/mlflow logs exist, grep those too155156**Example — Metric claim "`we report an F1 of 0.87`":**1571581. Search results files: `Grep "0\.87" --type json --type csv --type md`1592. Search eval scripts: `Grep -l "f1_score|F1" eval*.py`1603. Check if the number appears in a logged output161162**Example — Dataset claim "`trained on 12,000 examples from OpenReview`":**1631641. Search for dataset loader: `Grep "openreview" -i`1652. Check size assertions: `Grep "12000|12_000|len\(.*\).*12"`1663. Read the data loading function to confirm source167168### Record Evidence169170For each claim, record:171```172{173 id: "C01",174 searches: ["llama-3-8b", "lr=2e-5", "epochs=3"],175 hits: [176 {file: "train.py", line: 42, snippet: "model_name = 'meta-llama/Llama-3-8B'"},177 {file: "config/train.yaml", line: 7, snippet: "learning_rate: 2e-5"},178 {file: "config/train.yaml", line: 8, snippet: "epochs: 5"} // NOTE mismatch179 ]180}181```182183Do not hallucinate hits. If Grep returns nothing, record an empty hits list.184185---186187## Step 4: Classify Each Claim188189### Classification Rubric190191| Status | Criteria | Evidence |192|--------|----------|----------|193| **CONFIRMED** | Every testable fact in the claim has matching code evidence | File + line for each fact |194| **PARTIAL** | Some facts confirmed, others missing or unchecked | Confirmed facts listed; gaps called out |195| **MISSING** | No code evidence found for any fact in the claim | Which searches returned empty |196| **MISMATCH** | Code evidence exists but contradicts the claim | Side-by-side: paper says X, code says Y |197| **NOT_AUDITABLE** | Claim is too vague to check, or code is not available | Brief reason |198199### Rules of Engagement200201- **Be conservative.** If you're not sure a search hit actually supports the claim,202 mark PARTIAL and explain what's missing.203- **Never mark CONFIRMED without a file:line reference.** "I think it's probably204 in the training script" is not evidence.205- **Treat MISMATCH as load-bearing.** Even a single MISMATCH is worth flagging206 prominently — these are the findings the user most needs to know.207- **Distinguish MISSING from NOT_AUDITABLE.** MISSING means the claim is208 checkable but no evidence exists (red flag). NOT_AUDITABLE means the claim209 itself is too vague (usually fine, but worth rewriting).210- **Do not run code.** This engine is a static audit. Running experiments is the211 job of a separate replication step (future extension point).212213---214215## Step 5: Generate Audit Report216217Save to `outputs/audit_report.md`.218219### Report Template220221```markdown222# Paper-vs-Code Audit Report223224**Paper:** [paper title]225**Paper source:** [paper.tex | draft.md | path]226**Code repository:** [local path or URL]227**Commit / version audited:** [git SHA if available, else "working tree"]228**Date:** [YYYY-MM-DD]229**Auditor:** audit-engine (Open Academic Paper Machine v6.4)230231## Summary232233| Status | Count | % |234|--------|-------|---|235| CONFIRMED | [n] | [%] |236| PARTIAL | [n] | [%] |237| MISSING | [n] | [%] |238| MISMATCH | [n] | [%] |239| NOT_AUDITABLE | [n] | [%] |240241**Overall signal:** [one sentence — e.g., "Core experiments check out; 2 mismatches242in reported hyperparameters need attention before submission."]243244## Critical Findings245246### MISMATCH — Paper and Code Disagree247248#### [C03] [Section 4.2] "We train for 3 epochs with learning rate 2e-5"249- **Paper says:** epochs = 3, lr = 2e-5250- **Code says:**251 - `config/train.yaml:8` → `epochs: 5`252 - `config/train.yaml:7` → `learning_rate: 2e-5` ✓253- **Recommendation:** Update the paper to say 5 epochs, or re-run with 3 and254 re-check the reported numbers.255256[repeat for each mismatch]257258### MISSING — Claim Not Supported by Code259260#### [C07] [Section 5.1] "We evaluate on the held-out 10% split (1,200 examples)"261- **Paper says:** held-out split of 1,200 examples262- **Searched:** `held.out`, `test_split`, `1200`, `0\.1`263- **Result:** No split logic found in `data/loader.py`. `eval.py` loads the entire264 dataset without stratification.265- **Recommendation:** Either add split logic to the repo or remove the claim from266 the paper.267268[repeat for each missing]269270## Detailed Findings by Section271272### Section 4 — Method273274| # | Claim | Category | Status | Evidence |275|---|-------|----------|--------|----------|276| C01 | LLaMA-3-8B model | Model | CONFIRMED | `train.py:42` |277| C02 | 2e-5 learning rate | Training | CONFIRMED | `config/train.yaml:7` |278| C03 | 3 epochs | Training | MISMATCH | see Critical Findings |279| C04 | AdamW optimizer | Training | CONFIRMED | `train.py:88` |280281### Section 5 — Experiments282283| # | Claim | Category | Status | Evidence |284|---|-------|----------|--------|----------|285| C05 | F1 = 0.87 on test set | Metric | CONFIRMED | `results/test_metrics.json:12` |286| C06 | 3 random seeds | Training | PARTIAL | seeds {42,43} found in `run.sh`, third seed unclear |287| C07 | Held-out 10% split | Dataset | MISSING | see Critical Findings |288289[repeat for each section]290291## Not Auditable292293Claims that are too vague to check or depend on external state:294295| # | Claim | Reason |296|---|-------|--------|297| C12 | "A standard transformer architecture" | Vague — no specific config to check |298| C15 | "Comparable to human performance" | Depends on external human benchmark |299300## Repository Map (for context)301302- **Entry points:** `train.py`, `eval.py`, `run_sweep.sh`303- **Configs:** `config/train.yaml`, `config/eval.yaml`304- **Data loading:** `data/loader.py`305- **Dependencies:** `requirements.txt` (53 packages)306- **Experiment tracking:** wandb (runs in `wandb/`)307- **Results:** `results/` (JSON + CSV logs)308309## Methodology Note310311This audit was a **static audit**: code was read and grepped, but no experiments312were re-run. Matches indicate that the paper's claims are consistent with the code313*as written*, not that the code was verified to produce the reported numbers.314315A full reproducibility check would additionally:3161. Install dependencies in a clean environment3172. Re-run training with the exact config3183. Re-run evaluation and compare numbers to the paper319320See Extension Points below.321322## Extension Points323324- **Dynamic replication:** re-run the training/eval pipeline in a Docker container325 and compare metrics to the paper (Feynman-style `/replicate`, not yet implemented326 in this plugin)327- **Diff-based re-audit:** after fixing mismatches, re-run on changed claims only328- **Multi-repo audits:** audit a paper that uses code from multiple repos (e.g.,329 baseline models from external sources)330```331332---333334## Prioritization Strategy335336If the paper has many claims, process in this order and save intermediate results337after each tier so the user can act early:338339**Tier 1 — High-stakes claims (verify first)**340- Reported numbers in tables and abstract341- Model identifier and size342- Dataset identifier and size343- Any claim the paper's contribution depends on344345**Tier 2 — Method details**346- Hyperparameters, optimizers, schedulers347- Preprocessing, tokenization348- Evaluation protocol349350**Tier 3 — Context**351- Infrastructure (GPUs, training time)352- Framework versions353- Figure provenance354355After Tier 1, present a progress snapshot:356357```358AUDIT PROGRESS359Tier 1 (High-stakes): [12/12] Complete360 CONFIRMED: 9 | PARTIAL: 1 | MISSING: 1 | MISMATCH: 1361 >> 1 mismatch found — see audit_report.md362363Tier 2 (Method): [0/8] Queued364Tier 3 (Context): [0/4] Queued365366Continue to Tier 2? [proceeding unless you redirect]367```368369---370371## Limitations372373### What This Engine Can Do374- Check named entities (datasets, models) against code references375- Verify hyperparameter values in configs match the paper376- Confirm metrics appear in logged results377- Catch contradictions between paper and code (MISMATCH)378- Catch unsupported claims (MISSING)379- Flag vague claims that should be rewritten (NOT_AUDITABLE)380381### What This Engine Cannot Do382- Run the code and reproduce the numbers (static audit only)383- Detect whether the code would actually produce the claimed behaviour if run384- Audit closed-source or paywalled dependencies385- Audit manual/qualitative steps ("we prompted GPT-4 iteratively until...")386- Replace a human artifact reviewer387388### Failure Modes to Watch For389- **Config vs. code divergence** — the YAML says one thing, `train.py` hard-codes390 another. Always check both.391- **Scripts that override configs** — `run.sh` may pass `--epochs 10` that overrides392 the YAML. Grep shell scripts too.393- **Multiple configs** — papers often report one experiment; the repo has ten.394 Match the config to the paper, not the other way around.395- **Notebooks** — `.ipynb` files are JSON; `Grep` works but read carefully.396397---398399## Relationship to Other Skills400401- **`verification-engine`** — checks external citations against sources.402 `audit-engine` checks own-work claims against own code. Run both before403 submission for full coverage.404- **`review-engine`** — simulated peer review. An audit report is a natural405 input to a simulated reviewer.406- **`prepare-submission`** — a clean audit report is a strong artifact to include407 with submissions to venues that accept reproducibility statements (e.g. NeurIPS408 Reproducibility Checklist, ML Reproducibility Challenge).