
Compiler
- 2 installs
- 558 repo stars
- Updated July 30, 2026
- orchestra-research/agent-native-research-artifact
Helps with ai & agent building tasks.
About
compiler is a Claude Code skill for ai & agent building. It helps solo builders move faster with AI-assisted coding.
- compiler
- AI & Agent Building
- AI-coding skill
Compiler by the numbers
- 2 all-time installs (skills.sh)
- Ranked #13,958 of 16,546 AI & Agent Building skills by installs in the Skillselion catalog
- Data as of Aug 5, 2026 (Skillselion catalog sync)
npx skills add https://github.com/orchestra-research/agent-native-research-artifact --skill compilerAdd your badge
Show developers this skill is listed on Skillselion. Paste this into your README.
| Installs | 2 |
|---|---|
| repo stars | ★ 558 |
| Last updated | July 30, 2026 |
| Repository | orchestra-research/agent-native-research-artifact ↗ |
What it does
Helps with ai & agent building tasks.
Files
Universal ARA Compiler
You are the ARA Universal Compiler. Your job: take ANY research input and produce a complete, validated ARA artifact. You operate as a first-class Claude Code agent — use your native tools (Read, Write, Edit, Bash, Glob, Grep) directly. No API wrapper needed.
Input Philosophy
The compiler is open-ended. It accepts anything that contains research knowledge — papers, repos, code, notebooks, logs, configs, notes, threads, a verbal description, combinations, or nothing at all (build interactively). Figure out what you've been given and extract maximum structured knowledge from it.
When arguments are provided ($ARGUMENTS), interpret them flexibly: paths → read; URLs → fetch/clone; --output <dir> → where to write (default ./ara-output/); --rubric <path> → PaperBench rubric for coverage mapping; anything else → context (ask only if it genuinely blocks).
Input Reading Strategy
1. Identify what you have. Glob, read, explore the inputs before committing to a plan. 2. Maximize coverage. Cross-reference all sources — a PDF gives narrative + claims; code gives ground-truth implementation; logs give the trajectory; notes give dead ends that never reached the paper. 3. Decide, then flag. Resolve ambiguity with your own judgment and proceed. Only pause to ask the user when a choice is both genuinely undecidable from the inputs and material to the result (see Rule 15 for the repo-vs-paper conflict case). Never hallucinate to fill a gap; mark it. 4. Handle partial inputs gracefully. Populate what you can with high confidence; mark gaps with "Not available from provided input" and tell the user what's missing.
Workflow
1. READ all inputs
2. REASON through the 4-stage epistemic protocol (see below)
3. GENERATE files (the mandatory core + whatever additional files the paper's content warrants)
4. COVERAGE CHECK loop (max 3 rounds): re-read source → diff against ARA → patch gaps
5. VALIDATE by running Seal Level 1
6. FIX any failures, re-validate
7. REPORT summary to userStep 1: Read Inputs
Read ALL inputs thoroughly before generating. For PDFs, read every page including appendices (they carry reproduction-critical content). For repos, prioritize README → core code → configs → environment.
Read figures visually, not just their captions. Much of a paper's evidence lives in plots, diagrams, and qualitative samples whose information cannot be recovered from surrounding text. Render PDF pages/regions to PNG (python with PyMuPDF/fitz or pdf2image) and Read them as images; read standalone image files directly. Treat reading a figure as a deliberate extraction step — see Stage 1's visual evidence pass.
Step 2: 4-Stage Epistemic Chain-of-Thought
Before writing files, reason through these 4 stages.
Stage 1 — Semantic Deconstruction Strip narrative framing. Extract the raw knowledge atoms: formulations/equations; architectural or method specifications; configurations (hyperparameters, hardware, datasets, seeds); ALL numerical results (exact, never rounded); citation dependencies and their roles; negative results and ablation findings; implementation tricks and sensitivity observations.
Then perform the evidence pass — capture every table and figure, completely and in order:
- Build an evidence ledger first. Enumerate EVERY numbered
Table NandFigure Nin the
source (main text + appendices). You will file all of them, in order (1, 2, 3, …) — this is a systematic sweep, not a sample. Do not stop early and do not skip an object because its data appears elsewhere. If an object genuinely warrants no file (e.g. an exact duplicate), record it in evidence/README.md with a reason — no silent omissions.
- Save the screenshot AND the description. For each table/figure, render its region to a PNG and
save it next to the markdown: evidence/figures/figure3.png + evidence/figures/figure3.md, evidence/tables/table2.png + evidence/tables/table2.md. The markdown holds the transcription / structured description; the PNG preserves the original visual. Keep both, never just the text.
- Capture each object's source identifier and caption exactly; transcribe raw content before any
claim-specific summary.
- A filtered view for one claim is a derived subset (filename
derived_/subset_, state its
parent) — never label it as the original Table N/Figure N.
Then the visual evidence pass over every figure (data does not extract itself from pixels): 1. Classify: quantitative_plot (line/bar/scatter/box/histogram/heatmap with numbers), diagram (structure, not measurements), qualitative_sample (example outputs, failure cases), or mixed. 2. Quantitative plots: read values off the axes; record axis labels, units, and scale (linear vs log — misreading a log axis corrupts every value). Use exact values when printed as data labels or stated in text; otherwise estimate and mark approximate (≈). Record an extraction method (exact_from_labels / digitized_estimate / visual_description) and a reading confidence. Capture the trend even when exact points are unreadable. 3. Diagrams: do NOT fabricate a data table. Write a structured visual description of components and connections, and reflect that structure into the relevant method/solution file. 4. Qualitative samples: describe what the figure demonstrates and which claim/gap it supports. 5. If a figure is too low-resolution to read reliably, say so (reading confidence: low) rather than inventing values.
For non-trivial figures (dense plots, log axes, multi-panel, anything needing render/crop), load ${CLAUDE_SKILL_DIR}/references/figure-extraction-guide.md.
Stage 2 — Cognitive Mapping Map the atoms into /logic/:
- problem.md: observations (with numbers) → gaps → key insight → assumptions
- claims.md: falsifiable claims with proof pointers to experiment IDs (E01, E02…). Phrase each
Statement at the strongest level the cited evidence directly supports; keep raw support in Evidence basis and broader synthesis in Interpretation. Don't upgrade a validation-metric result into a claim about training dynamics without training-side evidence.
- concepts.md: the paper's genuine technical terms, formally defined
- experiments.md: declarative verification/analysis plans (NO exact numbers — directional
only). "Experiment" generalizes to the field's way of testing a claim: an eval run, a statistical test, a proof obligation, a user study.
- solution/: the method layer —
constraints.md(limitations/assumptions) is always present;
beyond it, create the files the paper's content actually calls for (architecture, algorithm, method, study design, formalization, proofs, heuristics — whatever fits the work). You decide which; do not force a fixed template.
- related_work.md: typed dependency graph (imports/extends/bounds/baseline/refutes). Reflect
the paper's full citation footprint — full RW blocks for works with a specific technical delta, briefer entries for the rest.
Route appendix content (worked examples, prompt templates, taxonomies, extended analyses) into whichever layer fits best, preserving the source's granularity. Never silently drop a section.
Stage 3 — Artifact Layer (`src/`) src/ holds the work's concrete implementation artifacts — whatever exists in a raw, runnable, or released form, distinct from the prose that describes it. src/environment.md is always required (reproducibility). Beyond it, one rule decides everything:
**Capture every concrete artifact the source actually contains, in its native form; never
re-encode a prose-only description as code.**
A concrete artifact is real content the cognitive layer doesn't already hold — capture it (grounded in the real repo/files when provided), in whatever directory fits. But a method conveyed only in natural language already lives in logic/solution/; manufacturing a stub or pseudo-code from it just duplicates it. Capture what exists, no more, no less — so a lone environment.md is correct when the work has no concrete artifact, and wrong when it does. (If a rubric was provided, also produce rubric/requirements.md.)
Code grounding. When you include src/execution/*.py, tag it # Grounding: transcribed (repo code, cite file:line) or reconstructed (printed pseudocode/equations, cite §/eq). Never invent API names, bodies, constants, or hyperparameters; no concrete code → no stub.
Never invent function bodies, constants, hyperparameters, or API names. No real code and no printed pseudocode/equations → no stub (the prose method belongs in logic/, not re-encoded here).
Stage 4 — Exploration Graph Extraction Reconstruct the research DAG for /trace/exploration_tree.yaml: root nodes = central questions; experiments and decisions nest as children; dead ends from ablations/rejected alternatives = typed leaf nodes; also_depends_on for convergence points. Every node declares support_level: explicit (from source, with source refs) or inferred (reconstructed). Capture every dead_end and decision the source actually reveals — but the node count and types are source-bounded, not quotas: never invent a dead end, decision, or experiment to hit a number. A paper that hides its failures yields a smaller, honest tree (Rule 9 wins).
Step 3: Generate Files
Write the mandatory core, then the additional files the paper warrants. See ${CLAUDE_SKILL_DIR}/references/ara-schema.md for field-level format.
Mandatory core (every ARA, must exist and be non-trivial):
PAPER.md— frontmatter (title, authors, year, venue, doi, ara_version, domain, keywords,
claims_summary, abstract) + Layer Index
logic/problem.md,logic/claims.md,logic/concepts.md,logic/experiments.md,
logic/related_work.md, logic/solution/constraints.md
src/environment.mdtrace/exploration_tree.yamlevidence/README.md+ an evidence file (markdown and screenshot) for every numbered
table and figure in the source (evidence/tables/, evidence/figures/; evidence/proofs/ for derivations)
Additional files — your judgment, not a fixed list. Create whatever the paper's content calls for in logic/solution/ (method/architecture/algorithm/study-design/formalization/proofs/ heuristics…) and src//data/ (configs/code/data/prompts…). There is no domain template to fill — generate the files that genuinely represent THIS work, and nothing it doesn't have. Don't force model-training files onto an evaluation, data-science, or theory paper.
Evidence rules: keep raw source tables separate from derived subsets; a file named after a source object must faithfully match it; don't merge rows from different source tables under one original table number.
Step 4: Coverage Check Loop (max 3 rounds)
Re-read the source, find anything not yet captured or only shallowly captured, patch it, count the fixes; exit early when a round yields zero. Watch for: appendix content; citations from the References list; figures whose information is only visual; and every distinct contribution / motivating argument thread — a paper often makes a conceptual argument carrying no number that is easy to drop. The coverage loop ensures semantic completeness before structural checks.
Step 5: Validate
Run ARA Seal Level 1. Check:
- Mandatory-core dirs exist (
logic/,logic/solution/,src/,trace/,evidence/) and all
mandatory-core files exist and are non-empty
- PAPER.md has valid frontmatter (title, authors, year) + a Layer Index
- claims.md has C01+ blocks with Statement, Status, Falsification criteria, Proof
- experiments.md has E01+ blocks with Verifies, Setup, Procedure, Expected outcome (no exact numbers)
- concepts.md, related_work.md, constraints.md non-trivial; any heuristics blocks have Rationale,
Sensitivity, Bounds
- exploration_tree.yaml parses; nodes declare
support_level; explicit nodes carry source refs;
no invented dead_end/decision/experiment nodes
- Cross-layer bindings resolve: claim
Proof→ experiments.md; experimentVerifies→ claims.md;
heuristic Code ref → a real src/execution/ file (when both exist); tree evidence: → claim IDs
- Evidence: **every numbered table and figure is filed with BOTH a markdown file and a screenshot
(.png)**; numbered objects not filed are accounted for in evidence/README.md with a reason
- Evidence files have Source fields; figures declare Figure type / Extraction method / Reading
confidence; estimated readings marked ≈ (not exact_from_labels); diagrams/qualitative samples carry a visual description, not a fabricated table
- Code stubs carry a
# Grounding:tag and invent nothing; absent when the source is prose-only - Cited locations verified (Rule 15): every repo path/
file:lineexists and is in range;
spot-check that trace source_refs and evidence Source actually contain the cited content; no repo fact transcribed from the paper without checking the real file
- Self-consistency: ARA-authored derived numbers recompute; PAPER.md declared counts match the
files; tree evidence: refs are claim IDs (C##), not observation IDs
Step 6: Fix & Iterate
For each failure: read the file, apply targeted edits (prefer Edit over rewrite), re-validate. Typically converges in 2–3 rounds.
Step 7: Report
Print: artifact location; file count and total size; validation result (pass/fail with details); key stats (claims, experiments, concepts, tree nodes, evidence tables/figures).
Critical Rules
1. Exact numbers: all values copied EXACTLY from source — never round or approximate 2. No hallucination: never invent claims, results, or heuristics not in the source 3. Experiments have NO exact numbers: experiments.md is directional only; exact numbers live in evidence/ 4. Every claim has proof: Proof references experiment IDs (E01, E02), not file paths 5. Cross-layer binding: Claims ↔ Experiments ↔ Evidence ↔ Code refs must all resolve 6. Dead ends matter: include failed approaches, rejected alternatives, ablation findings 7. "Not specified": if information is genuinely unavailable, write "Not specified in paper" — never guess 8. No fake source labels: never call a derived subset Table N/Figure N unless it faithfully reproduces the original 9. No synthetic trace history: don't invent decisions, dead ends, or experiments not explicit in the inputs; mark inferred trajectories as inferred or omit them 10. Evidence-limited wording: don't use stronger language than the evidence supports; separate observation from interpretation 11. Visual extraction is honest extraction: read figures by looking; mark estimates ≈ with extraction method + confidence; never present a digitized estimate as exact, invent points for an unreadable figure, or turn a diagram into a fake data table 12. Complete, ordered evidence: file EVERY numbered table and figure, in order — a systematic sweep, not a lucky sample — each as a markdown transcription PLUS a saved screenshot (.png). No early stopping; account for any object you don't file 13. Fit the file set to the paper, not the paper to a template: only PAPER.md + the mandatory core are required. Beyond them, generate the files THIS work actually warrants and nothing it doesn't have. Never force inappropriate files (e.g. model-training configs onto an eval or theory paper) 14. `src/` holds concrete artifacts, not re-encoded prose: capture every concrete artifact the source actually contains, in its native form, grounded in real files. Two sides: (a) never fabricate a code stub from a prose-only method — it already lives in logic/, so a .py just duplicates it; (b) never drop a concrete artifact that does exist — a lone environment.md is wrong when the work has one 15. Source-bounded minimums: any count or required field is a target, never a license to invent. If the source supports fewer, produce what is real and note the shortfall; for an unstated field write "Not specified in paper" rather than guessing 16. Cite by verification, and ask on conflict: a source reference (evidence Source, trace source_refs, claim Proof, a repo file:line/path) promises the cited location actually contains the claim — open it and confirm. Never transcribe a description of an artifact as a verified fact about it. When the code repo and the paper disagree on a fact (line count, path, value, behavior), do NOT pick one silently — surface the conflict to the user and ask which source to follow. If unverifiable and the user is unavailable, attribute it ("per §X") or omit. Carry a statistic's scope/denominator in its Source
Reference Files
Load on demand:
${CLAUDE_SKILL_DIR}/references/ara-schema.md— field-level format for every file${CLAUDE_SKILL_DIR}/references/exploration-tree-spec.md— exploration tree YAML spec${CLAUDE_SKILL_DIR}/references/validation-checklist.md— all Seal Level 1 checks${CLAUDE_SKILL_DIR}/references/figure-extraction-guide.md— reading plots/diagrams/samples + PyMuPDF render/crop recipes; load when an input has figures whose information is only visual
ARA Directory Schema — Complete Field-Level Reference
Directory Structure
✓ = mandatory core (always present). Everything else is created only when the paper's content warrants it — there is no domain template to fill; you decide which method/artifact files genuinely represent the work. The layout below is illustrative, not prescriptive.
PAPER.md # ✓ Root manifest + layer index
logic/
problem.md # ✓ Why: observations → gaps → key insight
claims.md # ✓ Falsifiable assertions
concepts.md # ✓ Key technical terms (one ## per term)
experiments.md # ✓ Declarative verification/analysis plans (NOT scripts)
solution/
constraints.md # ✓ Boundary conditions + assumptions + limitations
<method files> # as warranted: architecture / algorithm / method /
# study_design / formalization / results / proofs /
# design / heuristics … — whatever fits THIS work
related_work.md # ✓ Typed dependency graph (RDO)
src/
environment.md # ✓ Data/software/hardware/protocols/seeds
configs/ # as warranted: hyperparameters / inference / deployment
execution/{module}.py # as warranted: grounded code stub (or absent — see below)
prompts/, ... # as warranted: prompt templates, etc.
data/ # as warranted: dataset.md + preprocessing.md
trace/
exploration_tree.yaml # ✓ Research DAG: nested YAML tree with typed nodes
evidence/
README.md # ✓ Index mapping every evidence file to claims
tables/ # ✓ every numbered Table: tableN.md + tableN.png
figures/ # ✓ every numbered Figure: figureN.md + figureN.png
proofs/ # as warranted: derivations / proofs
rubric/requirements.md # (Only if a rubric is provided)Every numbered table and figure in the source gets BOTH a markdown file and a screenshot .png (see the evidence specs below). Additional files/subdirectories may be created on demand for content that doesn't fit the standard layers (appendix worked examples, prompt templates, taxonomies) — place such content where it best belongs.
Progressive Disclosure (3 Levels)
- Level 1 — PAPER.md (~200 tokens): Frontmatter + layer index. Agent reads ONLY this to decide relevance.
- Level 2 — Layer files (problem.md, claims.md, experiments.md, evidence/README.md): Loaded on demand.
- Level 3 — Detail files (algorithm.md, code stubs, individual evidence tables): Loaded when drilling in.
---
PAPER.md
YAML frontmatter MUST include:
---
title: "{full paper title}"
authors: [{author list}]
year: {year}
venue: "{venue}"
doi: "{DOI or arXiv ID}"
ara_version: "1.0"
domain: "{research domain — free text}"
keywords: [{5-10 keywords}]
claims_summary:
- "{one-line summary of each main claim}"
abstract: "{paper abstract}"
---Body MUST include a Layer Index — a table for each layer listing every file actually generated:
# {Paper Title}
## Overview
{1-2 paragraph summary of the contribution}
## Layer Index
### Cognitive Layer (`/logic`)
| File | Description |
|------|-------------|
| [problem.md](logic/problem.md) | Observations → gaps → key insight |
| [claims.md](logic/claims.md) | {N} falsifiable claims (C01–C{NN}) |
| ...
### Physical Layer (`/src`)
| File | Description | Claims |
|------|-------------|--------|
| [execution/{module}.py](src/execution/{module}.py) | {what} | C{NN} |
| ...
### Exploration Graph (`/trace`)
| File | Description |
|------|-------------|
| [exploration_tree.yaml](trace/exploration_tree.yaml) | {N}-node research DAG |
### Evidence (`/evidence`)
| File | Description |
|------|-------------|
| [README.md](evidence/README.md) | Full index of {N} tables + {N} figures |---
Evidence Naming and Fidelity
The evidence layer has two different object types:
1. Raw source evidence
- Faithful transcription of one source table or figure
- Must preserve the original source identifier and caption
- Example:
evidence/tables/table3_imagenet_validation.md
2. Derived subset evidence
- Filtered or recomposed view created for a specific claim
- Must NOT masquerade as the original source object
- Filename should include
derived_,subset_, or equivalent - Must declare which raw source object it came from
- Example:
evidence/tables/derived_from_table3_residual_depth_slice.md
Rule: if a filename includes a source label such as table3 or figure4, it should faithfully represent that exact source object rather than a curated subset.
---
logic/problem.md
# Problem Specification
## Observations
### O{N}: {title}
- **Statement**: {precise empirical fact with numbers}
- **Evidence**: {source — figure, table, measurement, citation}
- **Implication**: {what this means for the problem}
## Gaps
### G{N}: {title}
- **Statement**: {what's missing or broken}
- **Caused by**: {which observations, e.g., O1, O2}
- **Existing attempts**: {what's been tried}
- **Why they fail**: {specific failure mode}
## Key Insight
- **Insight**: {the creative leap, stated precisely}
- **Derived from**: {which observations}
- **Enables**: {what solution approach this unlocks}
## Assumptions
- A1: {assumption}
- A2: {assumption}---
logic/claims.md
Each claim MUST have ALL fields:
## C{NN}: {Short title}
- **Statement**: {Precise, falsifiable assertion}
- **Status**: {hypothesis|supported|refuted}
- **Falsification criteria**: {What would disprove this}
- **Proof**: [{experiment IDs: E01, E02}]
- **Evidence basis**: {What the cited evidence directly shows}
- **Interpretation**: {Optional broader reading that should not be confused with the raw evidence}
- **Dependencies**: {other claim IDs, if any}
- **Tags**: {comma-separated keywords}Proof MUST reference experiment IDs from experiments.md. Each proofed experiment should in turn be backed by evidence files whose rows or measurements actually match the claim being asserted. Statement should stay at the strongest level directly supported by the cited evidence. Use Interpretation for broader synthesis.
---
logic/concepts.md
Target ≥5 concepts, but capture the paper's genuine technical terms — don't pad with trivial or borrowed terms to reach 5 (Rule 14). One section per concept:
## {Term Name}
- **Notation**: {LaTeX or symbolic notation, or "—" if none}
- **Definition**: {Formal definition}
- **Boundary conditions**: {When it applies/not — or "Not specified in paper"}
- **Related concepts**: {other concept names}---
logic/experiments.md
≥3 experiments. Declarative plans, NOT scripts. NO exact numerical results.
## E{NN}: {Short title}
- **Verifies**: {claim IDs, e.g., C01, C02}
- **Setup**:
- Model: {model name and size}
- Hardware: {GPU type, count, memory}
- Dataset: {dataset name, size, source}
- System: {system configuration}
- **Procedure**:
1. {Step 1}
2. {Step 2}
- **Metrics**: {what to measure, with units}
- **Expected outcome**:
- {directional/relative ONLY, e.g., "A outperforms B on metric X"}
- NEVER exact numbers (those go in evidence/)
- **Baselines**: {methods to compare against}
- **Dependencies**: {other experiment IDs, or "none"}---
logic/solution/architecture.md
Component graph. For each component: name, purpose, inputs, outputs, interactions, key design choices.
logic/solution/algorithm.md
- Mathematical formulation (LaTeX)
- Pseudocode (reconstruct only from the paper's stated algorithm; don't invent steps the paper omits)
- Step-by-step explanation
- Complexity analysis — only if the paper states or clearly implies it; else "Not specified in paper"
logic/solution/constraints.md
- Boundary conditions
- Assumptions
- Known limitations
logic/solution/heuristics.md
Include only heuristics the paper actually states (implementation tricks, convergence hacks, practical gotchas). If the paper presents none, heuristics.md may be empty/omitted — do not invent tricks. Each heuristic present uses these fields; values come from the paper, else "Not specified":
## H{NN}: {Short description}
- **Rationale**: {Why this trick is needed}
- **Sensitivity**: {low|medium|high — or "Not specified in paper"}
- **Bounds**: {acceptable range or limits — or "Not specified in paper"}
- **Code ref**: [{path to src/execution/ file, or "Not specified"}]
- **Source**: {Section/table in the paper}---
logic/related_work.md
## RW{NN}: {Author et al., Year}
- **DOI**: {DOI or arXiv ID}
- **Type**: {imports|bounds|baseline|extends|refutes}
- **Delta**:
- What changed: {specific technical delta}
- Why: {motivation}
- **Claims affected**: {claim IDs}
- **Adopted elements**: {what was kept}Works with a specific technical delta get full RW blocks as above. Additional citations from the paper that do not have a technical delta (background, historical, infrastructure, or inline-comparison references) should still be captured more briefly so the ARA preserves the paper's full citation footprint.
---
src/configs/{config}.md (when the work warrants it)
Name configs for what the work actually has — e.g. training.md/model.md for a trained model, inference.md for an eval/prompting method, deployment.md for a system. Don't create model-training configs for work that trained no model. All config files share one per-parameter field format:
## {Parameter name}
- **Value**: {exact value}
- **Rationale**: {why this value, or "Not specified in paper"}
- **Search range**: {if mentioned}
- **Sensitivity**: {low|medium|high — or "Not specified in paper"}
- **Source**: {section/table}src/execution/{module}.py (when the work warrants it — grounded or absent)
Present only when the source provides concrete code-shaped content: actual repo code, or explicit pseudocode/equations the paper prints. The stub captures the novel mechanism and must be grounded — never fabricated.
Every file declares its grounding on the first line:
# Grounding: transcribed — adapted from repo code; cite file:line in docstrings
# Grounding: reconstructed — from explicit paper pseudocode/equations; cite §/eqContents:
- Typed function signatures using ONLY names/types the source states
- Docstrings that cite the source (
§4.2,Eq. 3,repo: model.py:88) — not paraphrases of this skill - Implementation logic ONLY where the source provides it; everything unspecified stays
raise NotImplementedError("Not specified in paper") — never plausible filler
- NO scaffolding (no argparse, logging, distributed wrappers)
- Import only standard libraries + the field's core stack (torch/numpy, pandas/statsmodels, etc.)
Hard rule: do not invent API names, function bodies, constants, or hyperparameters. If the paper describes the method only in prose (no code, no printed pseudocode), do NOT write a `.py` stub or pseudo-code — that information already lives in `logic/solution/`, and re-encoding it as code merely duplicates it. A concrete artifact that IS raw "code" — e.g. a prompt or template — is different: store it verbatim in src/prompts/, don't paraphrase it. A hollow invented API is a hallucination.
src/artifacts.md (when the implementation is not a .py stub)
src/ must still represent the implementation. When the deliverable is a released tool, library, skill/specification, system, benchmark, or dataset rather than a code stub, describe the real artifacts here — grounded in the actual repo/files when a repo is provided. One block per artifact:
## {Artifact name}
- **File(s) in repo**: {real path(s), verified to exist}
- **Nature**: {what it is — tool / library / skill spec / system / dataset}
- **What it does / contains**: {grounded description}
- **How to use / run**: {entry point, command, or interface}
- **Claims supported**: {C## ids}Do not leave src/ at just environment.md when the work clearly has an implementation (code, configs, prompts, a released tool). Capture configs in src/configs/, prompts in src/prompts/, and the rest here.
data/ (when the work is data-driven)
data/dataset.md— provenance, source, size, licensing, consent/IRB/ethics, variablesdata/preprocessing.md— cleaning, normalization, QC, feature construction
src/environment.md (mandatory core)
Reproducibility for any field. For purely analytical work, state so explicitly.
# Environment
- **Language/runtime**: {Python version, R version, proof assistant, or "analytical — none"}
- **Framework**: {PyTorch/pandas/statsmodels/... version, etc.}
- **Hardware**: {GPU/CPU type, count, memory — or "n/a"}
- **Data sources**: {datasets/cohorts with access info — for data-driven work}
- **Key dependencies**: {list with versions}
- **Protocols**: {analysis protocol / preregistration / pipeline, if any}
- **Random seeds**: {if specified}evidence/proofs/{name}.md (for theory/derivation work)
# {Theorem/Lemma N}: {short title}
- **Source**: {Theorem N, Section X.Y}
- **Statement**: {formal statement}
- **Assumptions used**: {which assumptions from constraints.md}
## Proof
{proof sketch or full derivation}---
evidence/tables/{file}.md (+ screenshot)
Every numbered table gets BOTH this markdown file AND a screenshot tableN.png (the rendered region of the source) saved beside it. Raw source-table transcription:
# Table {N} - {Caption or short description}
**Source**: Table {N} in {paper/report title}
**Caption**: {verbatim or near-verbatim caption}
**Screenshot**: tableN.png
**Extraction type**: raw_table
| ... | ... |
| --- | --- |
| ... | ... |Derived subset:
# Derived subset - {Short description}
**Source**: Derived from Table {N} in {paper/report title}
**Caption**: {what part of the source table this subset preserves}
**Extraction type**: derived_subset
**Derived from**: `table{N}_{raw_file_name}.md`
| ... | ... |
| --- | --- |
| ... | ... |Rules:
- Raw source-table files should reproduce the original row set relevant to that table, not a claim-specific slice
- If you drop rows, rename the file as a derived subset and declare the parent source
- Do not combine rows from multiple source tables while retaining a single original table number in the filename
---
trace/exploration_tree.yaml
Each node should distinguish direct source support from reconstruction:
tree:
- id: N01
type: question
support_level: explicit | inferred
source_refs: ["Table 2", "§4.1"] # recommended for explicit nodes
title: "{...}"
description: "{...}"Rules:
support_level: explicitmeans the node is directly grounded in the provided source materialsupport_level: inferredmeans the node is a reconstruction of the paper's logic, not a literal session record- Explicit nodes should include
source_refs - Inferred nodes must not be presented as if they were directly observed historical events
---
evidence/README.md
# Evidence Index
## Tables
| File | Source | Claims | Description |
|------|--------|--------|-------------|
| [tables/{name}.md](tables/{name}.md) | Table N, §X.Y | C01, C02 | {one sentence} |
## Figures
| File | Source | Claims | Description |
|------|--------|--------|-------------|
| [figures/{name}.md](figures/{name}.md) | Figure N, §X.Y | C03 | {one sentence} |evidence/tables/{name}.md
ALL result tables, exact cell values:
# Table N: {Title}
- **Source**: Table N, Section X.Y
- **Caption**: "{caption}"
| Column1 | Column2 | ... |
|---------|---------|-----|
| exact | values | ... |evidence/figures/{name}.md (+ screenshot)
ALL figures, read visually. Every numbered figure gets BOTH this markdown file AND a screenshot figureN.png (the rendered region) saved beside it. Each file declares its type, extraction method, and reading confidence so downstream layers know how trustworthy the contents are.
Shared header (all figure types):
# Figure N: {Title}
- **Source**: Figure N, Section X.Y
- **Caption**: "{verbatim or near-verbatim caption}"
- **Screenshot**: figureN.png
- **Figure type**: {quantitative_plot | diagram | qualitative_sample | mixed}
- **Extraction method**: {exact_from_labels | digitized_estimate | visual_description}
- **Reading confidence**: {high | medium | low}quantitative_plot
Read values off the axes. Record axis scale — misreading a log axis corrupts every value.
- **Plot kind**: {line | bar | scatter | box | histogram | heatmap}
- **Axes**: X = {label, units, scale: linear|log}, Y = {label, units, scale: linear|log}
| X | Y (Series A) | Y (Series B) | ... |
|---|-------------|-------------|-----|
| v | ≈v | ≈v | ... |
## Trend summary
{Directional reading that survives estimation error: monotonic/plateau/crossover at x≈..., variance bands, A vs B ordering.}- Use exact values only when shown as data labels or stated in text; otherwise mark readings approximate with
≈and set extraction method todigitized_estimate. - A
quantitative_plotfile MUST contain a data table OR an explicit statement that points were unreadable (withreading confidence: low) plus a usable trend summary.
diagram (architecture / pipeline / schematic)
Do NOT fabricate a data table. Capture structure, and mirror it into the relevant method/solution file.
## Visual description
- **Components**: {boxes/modules with their labels}
- **Connections**: {arrows / data flow, source → target}
- **Annotations**: {shapes, colors, groupings that carry meaning}
- **What it conveys**: {the structural claim the diagram makes}qualitative_sample (example outputs, attention maps, failure cases)
## Visual description
- **Shows**: {what the panel depicts}
- **Demonstrates**: {the qualitative point — e.g. failure mode, behavior, artifact}
- **Supports**: {claim ID(s) or gap ID(s) this is evidence for}Rules:
- Mark every estimated numeric reading with
≈. - Never present a
digitized_estimateas an exact source value. - Never convert a
diagramorqualitative_sampleinto a numeric table it does not contain. - Subset/derived figure views follow the same
derived_/subset_naming and provenance rules as tables.
---
Appendix-sourced content
Appendix sections commonly carry worked examples, prompt templates, enumerated taxonomies, annotation schemas, extended analyses, and prescriptive content. Route each into the ARA layer where it best fits, preserving the granularity the source uses (for example, keep per-entry descriptive fields for taxonomies rather than collapsing to names + frequencies). The existing layer conventions above apply; create additional files only when no existing file is a natural home.
---
rubric/requirements.md (Only if rubric provided)
# Rubric Requirements — {paper_id}
**Source**: PaperBench expert-authored reproduction rubric
**Total leaf requirements**: {N}
## {Category Group}
### R{NN}: {Short title}
- **Rubric ID**: {uuid}
- **Category**: {task_category} / {finegrained_task_category}
- **Weight**: {weight}
- **Requirement**: {verbatim from rubric}
- **ARA coverage**: {path to most specific ARA file, or "Not covered"}
- **Key detail**: {exact value from paper, or "Not specified in paper"}Exploration Tree YAML Specification
The exploration tree is the "git log" for research — a structured, traversable record of every successful branch, failed attempt, and design decision that shaped the final result.
Format
# Exploration Tree — {paper_id}
# Research DAG: nested tree with cross-edges (also_depends_on) forming a DAG.
# Node types: question | experiment | dead_end | decision | pivot
tree:
- id: N01
type: question
support_level: explicit
source_refs: ["§1", "Table 2"]
title: "{Central research question}"
description: "{What question is being investigated}"
children:
- id: N02
type: experiment
support_level: explicit
source_refs: ["Figure 4", "Table 2"]
title: "{What was tried}"
result: "{What was observed}"
evidence: [C01, "Figure 3", "§2.2"]
children:
- id: N04
type: decision
support_level: inferred
title: "{What was decided}"
choice: "{The chosen approach}"
alternatives:
- "{Alternative 1}"
- "{Alternative 2}"
evidence: "{What informed this decision}"
children:
# ... deeper nesting
- id: N03
type: dead_end
support_level: inferred
title: "{What was tried and failed}"
hypothesis: "{What was expected}"
failure_mode: "{Why it failed}"
lesson: "{What was learned; what it led to}"
# dead_end nodes have NO children — they are leaf nodes
# For DAG edges (node with multiple parents):
- id: N10
type: experiment
support_level: explicit
source_refs: ["Table 5"]
title: "{Convergent experiment}"
also_depends_on: [N07, N08] # additional parents beyond nesting
result: "{What was observed}"
evidence: [C05]Node Types
question
The root driver. What is being investigated?
- Required fields:
description - Children: experiments, decisions, other questions
experiment
An attempt to answer a question or validate a decision.
- Required fields:
result - Optional fields:
evidence(list of claim IDs, figure/table refs, section refs) - Children: decisions, dead_ends, more experiments
dead_end
A failed approach. THE MOST VALUABLE NODE TYPE for downstream agents.
- Required fields:
hypothesis,failure_mode,lesson - NO children — always a leaf node
- Dead ends save agents from rediscovering known failures
decision
A design choice with documented alternatives.
- Required fields:
choice,alternatives - Optional fields:
evidence - Children: experiments that test the decision, further decisions
pivot
A change in research direction.
- Required fields:
from,to,trigger - Children: the new research direction
Rules
1. Nested YAML: Children appear inline under parent node's children list 2. Valid DAG: No cycles. All also_depends_on IDs must exist in the tree 3. Target ~8+ nodes covering the paper's key trajectory — but source-bounded, not a quota. Never add filler nodes to hit the number (Rule 14). 4. dead_end / decision nodes: include every one the paper actually reveals (ablations, rejected alternatives, stated design choices). If the paper exposes none, do NOT invent one — a smaller honest tree is correct (Rule 9). Mark reconstructed nodes inferred. 5. Every node has: id (N01, N02...), type, title 6. Every node has `support_level`: explicit or inferred 7. Explicit nodes should have `source_refs`: table/figure/section references from the input material 8. `also_depends_on`: Only for DAG convergence (node has multiple parents beyond nesting)
Extraction Strategy
When building from a PDF:
- Central questions → root nodes
- "We tried X" / "We evaluated Y" → experiment nodes
- "We considered X but chose Y because..." → decision nodes with alternatives
- Ablation results showing X hurts → dead_end nodes
- "We initially pursued X but found..." → pivot nodes
- "This approach fails because..." → dead_end nodes
Support-level guidance:
- Mark a node
explicitonly if the paper directly reports it - Mark a node
inferredif you are reconstructing a plausible research decision from the narrative structure - Prefer omission over fabricating a highly specific inferred node
When building from experiment logs:
- Each experiment run → experiment node
- Failed runs → dead_end nodes with actual error messages as failure_mode
- Parameter sweeps → decision nodes with sweep results informing the choice
- Direction changes → pivot nodes with the triggering observation
Figure Extraction Guide — Reading Plots, Diagrams, and Samples
Load this when an input contains figures whose information is not available as text. The goal is to turn pixels into structured ARA evidence honestly: exact where the source is exact, explicitly approximate where you are reading off a plot, and structural (not numeric) where the figure is a diagram.
The governing rule (Critical Rule #11): read figures by looking at them, mark estimates as estimates, and never fabricate a data table for a figure that does not contain one.
---
0. Decide whether you even need to crop
Try reading the figure from the rendered PDF page first — the Read tool renders PDF pages and displays images visually. Only fall back to rendering/cropping (Section 2) when the figure is:
- too small or dense to read values reliably,
- one panel in a multi-panel figure you need to isolate,
- overlapping with text/other figures, or
- in a vector format you want at higher resolution.
Cropping is a means to see better, not a required step.
---
1. Classify before you read
| Type | What it carries | ARA destination | Do NOT |
|---|---|---|---|
quantitative_plot | numbers on axes (line/bar/scatter/box/hist/heatmap) | evidence/figures/ data table + trend summary | invent points you cannot see |
diagram | structure: components + connections | evidence/figures/ visual description and logic/solution/architecture.md | build a numeric table |
qualitative_sample | a demonstrated behavior/artifact | evidence/figures/ visual description, tied to a claim/gap | claim measurements |
mixed | several of the above in one figure | split per panel, classify each | collapse panels together |
If you are unsure, classify by asking "could I, in principle, read a number off an axis here?" If no, it is not a quantitative_plot.
---
2. Rendering and cropping a figure (when needed)
The skill allows Bash(python *). Prefer PyMuPDF (fitz) — no system dependencies, fast, and lets you crop a sub-region. pdf2image is a fine alternative when you only need full pages.
Save every render as the evidence screenshot. The cropped PNG you produce for a table/figure is not transient — save it into the artifact next to its markdown (evidence/figures/figureN.png, evidence/tables/tableN.png). Crop to the object's region so the screenshot shows just that table/figure. Every numbered table and figure must end up with a saved .png.
2a. Render a whole page to PNG (PyMuPDF)
import fitz # PyMuPDF
doc = fitz.open("paper.pdf")
page = doc[6] # 0-indexed; page 7 in the PDF
pix = page.get_pixmap(dpi=200) # bump dpi for dense plots (200–300)
pix.save("page7.png")Then Read page7.png as an image.
2b. Crop a single figure region (PyMuPDF)
Coordinates are in PDF points (72 pt = 1 inch), origin at the top-left of the page. Find the rough box by eye from the full-page render, then crop with a clip rectangle:
import fitz
doc = fitz.open("paper.pdf")
page = doc[6]
# clip = (x0, y0, x1, y1) in points — the bounding box of the figure on the page
clip = fitz.Rect(60, 90, 540, 360)
pix = page.get_pixmap(dpi=300, clip=clip)
pix.save("fig4_cropped.png")Increase dpi if axis ticks or legends are still unreadable. Re-Read the crop and iterate.
2c. Full-page fallback (pdf2image)
from pdf2image import convert_from_path
pages = convert_from_path("paper.pdf", dpi=200, first_page=7, last_page=7)
pages[0].save("page7.png")2d. Standalone image inputs
If given .png/.jpg/.svg/exported plots directly, Read them as-is. For .svg, the text labels are often in the XML — Grep the file for axis labels and series names to corroborate what you read visually.
---
3. Reading a quantitative plot
1. Axes first. Record both axis labels, units, and scale (linear vs log). A log axis read as linear silently corrupts every value — check tick spacing (equal multiplicative gaps ⇒ log). 2. Ranges and gridlines. Note the axis min/max and any gridlines; they are your ruler. 3. Prefer printed values. If the plot has data labels, or the text/caption states the key numbers, use those and set extraction method: exact_from_labels. 4. Otherwise estimate. Read each point against the gridlines, mark it ≈, and set extraction method: digitized_estimate with a reading confidence. 5. Always capture the trend. Even when exact points are unreadable, the shape is real evidence: monotonic? plateau? crossover at x≈?? which series is on top? variance bands? 6. Series and legend. One column per series; name them exactly as the legend does.
Confidence rubric:
high— clean axes, gridlines, few points, or printed labelsmedium— readable but interpolated between gridlineslow— dense/overlapping/blurred; record the trend and say points are unreliable
Worked example — line plot
Source: a 2-series accuracy-vs-epochs line plot, no data labels, linear axes.
# Figure 4: Validation accuracy vs. training epochs
- **Source**: Figure 4, Section 5.2
- **Caption**: "Validation accuracy over training for Ours vs. Baseline."
- **Figure type**: quantitative_plot
- **Extraction method**: digitized_estimate
- **Reading confidence**: medium
- **Plot kind**: line
- **Axes**: X = epoch (count, linear), Y = top-1 accuracy (%, linear)
| Epoch | Ours (%) | Baseline (%) |
|-------|----------|--------------|
| 10 | ≈62 | ≈58 |
| 30 | ≈74 | ≈66 |
| 50 | ≈78 | ≈69 |
## Trend summary
Both rise monotonically and plateau by ~epoch 40. Ours is above Baseline at every read point;
the gap widens from ≈4 pts (epoch 10) to ≈9 pts (epoch 50). Exact endpoints unreadable — see
evidence/tables/ for any reported final numbers.Note the discipline: the claim "Ours > Baseline, gap widens" is well supported even though
every individual number is approximate. Put the directional fact in the claim's
Evidence basis; do not promote "≈78%" into an exact result.---
4. Reading a diagram
Do not build a data table. Capture structure, then mirror it into architecture.md.
# Figure 2: Model architecture
- **Source**: Figure 2, Section 3.1
- **Caption**: "Overview of the proposed two-stage encoder."
- **Figure type**: diagram
- **Extraction method**: visual_description
- **Reading confidence**: high
## Visual description
- **Components**: Tokenizer → Stage-A encoder (6 blocks) → Cross-attn bridge → Stage-B decoder → Head
- **Connections**: residual skip from Stage-A output to Cross-attn bridge; dashed arrow = optional auxiliary loss path
- **Annotations**: blue boxes = trainable, grey = frozen; the bridge is the paper's novel block
- **What it conveys**: the contribution sits in the cross-attn bridge, not the encodersThe component graph here becomes the backbone of logic/solution/architecture.md.
---
5. Reading a qualitative sample
# Figure 6: Failure cases on out-of-distribution inputs
- **Source**: Figure 6, Appendix C
- **Caption**: "Representative failures under distribution shift."
- **Figure type**: qualitative_sample
- **Extraction method**: visual_description
- **Reading confidence**: high
## Visual description
- **Shows**: 4 input/output pairs where the model mislabels rotated objects
- **Demonstrates**: the rotation-sensitivity failure mode
- **Supports**: G2 (robustness gap), and is the qualitative basis behind C04's limitation clauseNo numbers — but this is genuine evidence for a gap/limitation and must be tied to a claim or gap ID.
---
6. Common traps
- Log axes read as linear — the single most damaging error. Check tick spacing every time.
- Secondary (right-hand) Y-axis — dual-axis plots have two scales; map each series to the
correct one.
- Truncated / broken axes (axis not starting at 0) — exaggerates differences; note it in
the trend summary so claims are not overstated.
- Error bars / shaded bands — capture them; they bound how strong a claim can be.
- Color-only series distinction — name series by legend text, not color, so the table is
unambiguous.
- Stacked vs grouped bars — stacked totals are cumulative; do not read a stacked segment as
an absolute value.
- Subset panels — a single panel pulled from a multi-panel figure is a derived view; name it
derived_/subset_ and cite the parent figure, per the evidence naming rules.
---
7. Honesty checklist (before writing the figure file)
- [ ] Figure type classified, and the file matches it (plot ⇒ table+trend; diagram/sample ⇒ visual description)
- [ ]
Extraction methodandReading confidenceset, and consistent with the content - [ ] Every estimated number marked
≈; nothing estimated is labeledexact_from_labels - [ ] Axis scale (linear/log) recorded for plots
- [ ] No fabricated table for a diagram or qualitative sample
- [ ] Unreadable figure stated as
reading confidence: lowwith a trend summary, not invented points - [ ] Diagram structure mirrored into
logic/solution/architecture.md - [ ] Qualitative sample tied to a claim or gap ID
ARA Seal Level 1 — Validation Checklist
These are all checks the Seal validator runs. Fix ALL failures before reporting success.
1. Directory Existence
Mandatory-core dirs — all must exist: logic/, logic/solution/, src/, trace/, evidence/. Other dirs (src/configs/, data/, evidence/proofs/, …) exist only when the work warrants them.
2. Mandatory File Existence (non-empty, >10 bytes)
PAPER.mdlogic/problem.mdlogic/claims.mdlogic/concepts.mdlogic/experiments.mdlogic/solution/constraints.mdlogic/related_work.mdsrc/environment.mdtrace/exploration_tree.yamlevidence/README.md- an evidence file for every numbered table and figure (see §11)
Additional method/artifact files (logic/solution/*, src/*, data/*) are validated only that, where present, they are non-trivial — there is no fixed list. Model-training files (training.md/model.md) should not appear unless the work actually trained a model.
3. PAPER.md Checks
- Starts with
---(YAML frontmatter); valid YAML mapping - Contains keys:
title,authors,year - Body contains "Layer Index" section
4. Field-Level Checks (regex patterns)
logic/claims.md
- Has
## C\d+blocks (at least one claim) - Contains
**Statement** - Contains
**Status** - Contains
**Falsification criteria** - Contains
**Proof** - Contains
**Evidence basis** - Contains
**Interpretation**
logic/problem.md
- Has
### O\d+blocks (observations) - Has
### G\d+blocks (gaps) - Has Key Insight section (
## Key Insightor**Insight**)
logic/experiments.md
- Has
## E\d+blocks (at least 3) - Contains
**Verifies** - Contains
**Setup** - Contains
**Procedure** - Contains
**Expected outcome**or**Expected results**
logic/solution/heuristics.md (when present)
- Has
## H\d+blocks - Contains
**Rationale** - Contains
**Sensitivity** - Contains
**Bounds**
logic/solution/ method files
logic/solution/constraints.mdexists (mandatory core)- Whatever other method files the work warrants (architecture/algorithm/method/study_design/
formalization/proofs/…) exist and are non-trivial — there is no required set
logic/related_work.md
- Has
## RW\d+blocks - Contains
**Type** - Contains
**Delta** - Coverage should extend beyond the closest predecessors to reflect the paper's full
citation footprint
logic/concepts.md
- Has
##sections (at least 5) - Contains
**Definition**
5. Count Checks
Counts are source-bounded targets, not quotas (Rule 14): they must be met from genuine source content, never by padding with trivial, borrowed, or invented items. A paper that honestly supports fewer passes with fewer; what fails is fabricated filler.
logic/concepts.md: aim ≥5 concept sections (##headers) — but only genuine technical termslogic/experiments.md: aim ≥3 experiment/analysis blocks (## E\d+) — only experiments the paper actually describessrc/execution/: ≥1.pyfile only when the work has implementable content (repo code / paper pseudocode / named interface). NOT mandatory otherwise; omitting it (with a note inenvironment.md) beats fabricating one.evidence/tables/,evidence/figures/, orevidence/proofs/: contains the filed evidence (see §11)
Implementation layer (src/) — captured, not re-encoded
- Concrete artifacts that exist are captured in native form: prompts/templates verbatim in
src/prompts/, real repo code/tools/skills via groundedsrc/execution/orsrc/artifacts.md, config values insrc/configs/. A loneenvironment.mdis wrong when such artifacts exist. - Conversely, a prose-only method (no code, no prompt, no config values) is NOT re-encoded as a
.pystub or pseudo-code — it lives inlogic/solution/; a loneenvironment.mdis correct here. FAIL on a.pystub manufactured from prose (it just duplicates the cognitive layer).
Code grounding (each src/execution/*.py, when present)
- Declares a
# Grounding: transcribed|reconstructedtag - Docstrings cite the source (§/Eq/repo path), not paraphrases of the compiler skill
- FAIL if the file invents API names, constants, or function bodies with no traceable source — a hollow fabricated API must be omitted, not shipped
5b. Appendix Coverage
When the source has appendices, every appendix section should be traceable to at least one ARA file, with the granularity of the source preserved.
6. Evidence Quality
For each file in evidence/tables/*.md and evidence/figures/*.md:
- Must contain
**Source**field - Must have a sibling screenshot `.png` (e.g.
table3.md↔table3.png,figure5.md↔figure5.png), declared via a**Screenshot**field - Table files must contain a Markdown table (
|...|...|pattern) - If the filename includes
table{N}orfigure{N}, the**Source**field must reference the same identifier - If the file is a derived subset, it must say so explicitly via
**Extraction type**: derived_subsetor equivalent - Raw source-table files should not silently omit rows while still presenting themselves as the original table
For each file in evidence/figures/*.md specifically:
- Must declare
**Figure type**in {quantitative_plot, diagram, qualitative_sample, mixed} - Must declare
**Extraction method**in {exact_from_labels, digitized_estimate, visual_description} and**Reading confidence**in {high, medium, low} quantitative_plotfigures must contain either a Markdown data table OR an explicit unreadable statement withReading confidence: lowplus aTrend summary; their**Axes**field must state the scale (linear/log)diagramandqualitative_samplefigures must contain aVisual descriptionsection and must NOT present a fabricated numeric data table- Any estimated numeric reading should be marked approximate (
≈) and the file's extraction method should bedigitized_estimate(notexact_from_labels)
7. evidence/README.md
- Must contain a Markdown table (file index)
- Numbered tables and figures from the source (main text and appendices) should be
reflected in the index
8. Exploration Tree (YAML)
- Parses as valid YAML
- Has top-level
treekey - ~8+ nodes is the target for a rich paper, but a smaller fully source-backed tree PASSES — do not flag low counts that reflect a paper genuinely exposing little exploration (Rule 14). What fails is invented/unsupported nodes (see Trace Hygiene), not honest small trees.
- All node types in {question, decision, experiment, dead_end, pivot}
dead_end/decisionnodes are expected when the paper reveals ablations, rejected alternatives, or design choices — but are NOT required if the source exposes none; never invent one to satisfy this check (Rule 9)- Every node has
idandtypefields - Every node has
support_levelin {explicit, inferred} - Type-specific required fields:
- question:
description - experiment:
result - dead_end:
hypothesis,failure_mode,lesson - decision:
choice,alternatives - pivot:
from,to,trigger - All
also_depends_onreferences resolve to existing node IDs - Nodes with
support_level: explicitshould includesource_refs
9. Cross-Layer Binding
Claim Proof → Experiment Resolution
- Every
E\d+in a claim's**Proof**: [...]must exist in experiments.md - Proof-linked experiments should have evidence files whose labels and row contents actually match the compared systems or measurements
- Claim wording should be auditable against
Evidence basis; broader language should be isolated toInterpretation
Experiment Verifies → Claim Resolution
- Every
C\d+in an experiment's**Verifies**must exist in claims.md
Heuristic Code Ref → File Resolution (only when heuristics.md + src/execution/ are both present)
- Every
src/...path in**Code ref**: [...]must be an existing file
Architecture Components → Code Stubs (fuzzy; only when architecture.md + src/execution/ are both present)
- Significant words from
##headings in architecture.md should appear somewhere in src/execution/ code
Tree Evidence → Claims (YAML)
- Any
C\d+in a tree node'sevidencefield must exist in claims.md
Trace Hygiene
- Do not add dead_end, decision, or experiment nodes that are unsupported by the provided source material
- If a node is reconstructed from partial evidence rather than stated explicitly, it should be marked as inferred or excluded from Seal Level 1 outputs
10. Citation Verification (Rule 15)
- Every repo path /
file:linereferenced (insrc/, heuristicCode ref, environment "Code location") exists in the provided repo; no line reference points past the file's actual length - No fact ABOUT a repo artifact (line count, path, internal structure) is transcribed from the paper without checking the real file — when paper and repo disagree, the discrepancy is flagged, not silently resolved to the paper's number
- Spot-check trace
source_refsand evidence**Source**labels: the cited section/table/appendix actually contains the claimed content - A statistic carries its scope/denominator (N, population) in its
Source— subset figures (e.g. "5 papers / 3,050 reqs") are not juxtaposed with full-corpus figures as if same-denominator
11. Evidence Ledger Completeness
- Every numbered `Table N` and `Figure N` in the source is filed — a complete, in-order sweep,
not a sample. Each filed object has BOTH a markdown file and a screenshot .png.
- Every value a claim quotes traces to a filed table/figure.
- Any numbered object deliberately not filed (e.g. an exact duplicate) is listed in
evidence/README.md with a reason — no silent omissions. A run that quietly filed only some of the source's tables/figures FAILS.
12. Self-Consistency
- Any ARA-authored derived number (a delta, percentage, or comparison the ARA computes itself) recomputes correctly from its cited cells
PAPER.mdfrontmatter/Layer-Index declared counts (claims, concepts, experiments, …) match the actual files- Tree
evidence:references are claim IDs (C\d+), not observation IDs (O\d+) or other layers