Evidence Draft (NO PROSE)
Purpose: turn papers/paper_notes.jsonl + subsection mapping into writeable evidence packs so the writer never has to guess (and never copies outline placeholders).
Key design: every pack should contain evidence snippets (1–2 sentences) with provenance (abstract/fulltext/notes pointer). Even abstract-level snippets are better than template prose.
Why this matters for writing quality:
- •Packs are the writer substrate; if packs are thin, C5 will either pad prose or guess.
- •Treat
blocking_missingas a stop signal: route upstream (notes/bindings) instead of writing around gaps.
Role cards (prompt-level guidance)
- •
Evidence Curator
- •Mission: turn paper notes into contrastable, citeable evidence (not summaries).
- •Do: extract snippet-backed comparisons; surface protocol details and failure modes.
- •Avoid: axis-driven "hypotheses" that are not supported by snippets.
- •
Provenance Accountant
- •Mission: keep every snippet auditable.
- •Do: attach provenance pointers (abstract/fulltext/notes location) and keep excerpts sentence-level.
- •Avoid: untraceable paraphrases that cannot be verified.
- •
Skeptic
- •Mission: prevent evidence inflation.
- •Do: downgrade claims when evidence is abstract/title-only; convert unknowns into
verify_fields(not repeated boilerplate in prose). - •Avoid: strong conclusions without protocol/metric context.
Non-negotiables
- •NO PROSE: packs are bullets-only evidence, not narrative paragraphs.
- •No fabrication: do not invent datasets/metrics/numbers.
- •Citation hygiene: every cite key must exist in
citations/ref.bib. - •Claim candidates must be snippet-derived (no axis-driven “Hypothesis: …” items); put questions into
verify_fieldsinstead. - •Avoid silent truncation: keep
claim_candidates[].claimlong enough to carry concrete detail (<= ~400 chars) and keep highlightexcerptsentence-level (<= ~280 chars). - •Numeric-claim hygiene (evidence substrate):
- •If a snippet/claim includes digits or
%, also include minimal context in the same bullet (at least 2 of: task/setting, metric definition, constraint/budget/tool access). - •If the context is not present in notes/fulltext, do not keep the number; downgrade to qualitative wording and add a
verify_fieldsitem instead.
- •If a snippet/claim includes digits or
- •Evidence-aware language:
- •fulltext-backed → can summarize comparisons
- •abstract-only/title-only → must be provisional + list verify-fields (no strong “dominant trade-offs” language)
Inputs
Required:
- •
outline/subsection_briefs.jsonl - •
papers/paper_notes.jsonl - •
citations/ref.bib
Optional (recommended for addressable evidence):
- •
papers/evidence_bank.jsonl - •
outline/evidence_bindings.jsonl
Outputs
- •
outline/evidence_drafts.jsonl
Optional (human-readable):
- •
outline/evidence_drafts/(folder of per-subsection Markdown packs)
Output format (outline/evidence_drafts.jsonl)
JSONL (one JSON object per line). Required fields per record:
- •
sub_id,title - •
evidence_ids(list[str]; ifoutline/evidence_bindings.jsonlexists, this should match the binding for the subsection) - •
evidence_level_summary(counts:fulltext|abstract|title) - •
evidence_snippets(list; each hastext,paper_id,citations,provenance) - •
definitions_setup(list of cited bullets) - •
claim_candidates(3–5 items; each hasclaim,citations,evidence_field) - •
concrete_comparisons(>=8 items; each hasaxis,A_papers,B_papers,citations,evidence_field; may also includeA_highlights/B_highlightswith snippet-backed contrast anchors) - •
evaluation_protocol(list of concrete protocol bullets + citations) - •
failures_limitations(>=5 cited bullets) - •
blocking_missing(list[str]; if non-empty, drafting must stop) - •
verify_fields(list[str]; non-blocking: fields to verify before making strong claims)
Provenance schema (per snippet)
Example:
{"source":"abstract","pointer":"papers/paper_notes.jsonl:paper_id=P0012#abstract","evidence_level":"abstract"}
Allowed source: fulltext|abstract|paper_notes|title.
Workflow
- •Load
outline/subsection_briefs.jsonland read each subsection’srq,axes,clusters, and evidence-level policy. - •Load
papers/paper_notes.jsonland build a per-paper evidence index (bibkey,evidence_level,abstract,fulltext_path,limitations). - •For each subsection:
- •Build evidence_snippets from mapped papers (prefer fulltext, else abstract), and record provenance (A150++: target >=12 snippets per H3).
- •Definitions/setup: 1–2 bullets that define setup + scope boundary (with citations).
- •Claim candidates: 3–5 checkable candidates (prefer snippet-derived; tag with
evidence_field). - •Concrete comparisons: >=8 A-vs-B comparisons (cluster-vs-cluster) along explicit axes.
- •Evaluation protocol: list concrete benchmark/metric names if extractable; otherwise treat as a blocking gap.
- •Failures/limitations: >=5 concrete limitations/failure modes with citations.
- •Set
blocking_missingfor hard blockers (e.g., no usable citations; title-only evidence; no eval tokens for an eval-heavy subsection).
- •Write
outline/evidence_drafts.jsonland per-subsection Markdown copies.
Quality checklist
- • Every subsection has >=8 concrete comparisons.
- •
evidence_snippetshas >=12 items and includes provenance. - • Any bullet containing numbers/% also carries minimal protocol context (task/metric/constraint), or the number is removed and moved to
verify_fields. - •
claim_candidateshas >=3 snippet-derived items (no axis-driven hypotheses). - •
blocking_missingis empty. - • No
TODO/(placeholder)/<!-- SCAFFOLD -->/ unicode ellipsis (…) remains.
Script
Refinement marker (recommended; prevents churn)
When you are satisfied with evidence packs (and blocking_missing is empty), create:
- •
outline/evidence_drafts.refined.ok
This is an explicit "I reviewed/refined this" signal:
- •prevents scripts from regenerating and undoing your work
- •(in strict runs) can be used as a completion signal before writing
Quick Start
- •
python .codex/skills/evidence-draft/scripts/run.py --help - •
python .codex/skills/evidence-draft/scripts/run.py --workspace <ws>
All Options
- •See
--help. - •Inputs (required):
outline/subsection_briefs.jsonl,papers/paper_notes.jsonl,citations/ref.bib. - •Inputs (optional):
papers/evidence_bank.jsonl,outline/evidence_bindings.jsonl.
Examples
- •Generate evidence packs after citations:
- •Ensure
citations/ref.bibexists. - •Ensure
outline/subsection_briefs.jsonlexists (axes/clusters/plan filled). - •Ensure
papers/paper_notes.jsonlhas usable evidence (abstract/fulltext/limitations). - •Run:
python .codex/skills/evidence-draft/scripts/run.py --workspace workspaces/<ws>
- •Ensure
Troubleshooting
Issue: evidence packs have blocking_missing entries
Fix:
- •Treat
blocking_missingas a stop signal: enrichpapers/paper_notes.jsonl/papers/evidence_bank.jsonl(or adjust scope) before drafting prose.
Issue: evidence snippets are empty or untraceable
Fix:
- •Ensure each snippet includes provenance (paper id + location) and that
outline/evidence_bindings.jsonlis non-empty for the subsection.