# Evidence Draft

> Create per-subsection evidence packs (NO PROSE): claim candidates, concrete comparisons, evaluation protocol, limitations, plus citation-backed evidence snippets with provenance.

- Skill: `willoscar/evidence-draft` (Agent Skill, multi-file: 11 files)
- Install (CLI): `npx skillmds add willoscar/evidence-draft`
- Raw SKILL.md: https://api.skillmd.com/api/skills/willoscar/evidence-draft/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Research & Search
- Author: WILLOSCAR (https://skillmd.com/u/willoscar)
- Updated: 2026-09-10
- Page: https://skillmd.com/skills/willoscar/evidence-draft

---


# Evidence Draft

## Triggers & routing

- **Trigger**: evidence draft, evidence pack, claim candidates, concrete comparisons, evidence snippets, provenance, 证据草稿, 证据包, 可引用事实.


Build deterministic `outline/evidence_drafts.jsonl` packs from briefs + notes + optional evidence bindings.

Compatibility mode is active: this migration preserves the existing JSONL contract while moving evidence-quality policy, sparse-evidence routing, and evaluation-anchor rules into `references/` and `assets/`.

## Load Order

Always read:
- `references/overview.md`
- `references/evidence_quality_policy.md`

Read by task:
- `references/block_vs_downgrade.md` when deciding whether thin evidence should block drafting or only downgrade claim strength
- `references/evaluation_anchor_rules.md` when evaluation tokens, protocol context, or numeric claims are weak
- `references/examples_sparse_evidence.md` for evidence-thin pack calibration
- `references/source_text_hygiene.md` when paper self-narration or generic result wrappers are leaking into pack snippets / claim candidates

Machine-readable assets:
- `assets/evidence_pack_schema.json`
- `assets/evidence_policy.json`
- `assets/source_text_hygiene.json`
- repo-wide `assets/limitation-signals.json` — shared polarity rules that keep
  resolved failures and positive improvements out of limitation slots

## Inputs

Required:
- `outline/subsection_briefs.jsonl`
- `papers/paper_notes.jsonl`
- `citations/ref.bib`

Optional but recommended:
- `papers/evidence_bank.jsonl`
- `outline/evidence_bindings.jsonl`

## Outputs

Keep the current output contract:
- `outline/evidence_drafts.jsonl`
- optional human-readable mirrors under `outline/evidence_drafts/`

## Script Boundary

Use `scripts/run.py` only for:
- deterministic joins across briefs / notes / evidence bank / bindings
- snippet extraction and provenance assembly
- policy-driven `blocking_missing` / `downgrade_signals` / `verify_fields` materialization
- pack validation and Markdown mirror generation

Do not treat `run.py` as the place for:
- filler bullets that make thin evidence look complete
- hidden sparse-evidence judgment that is not inspectable from `references/` / `assets/`
- reader-facing narrative prose

## Output Shape Rules

Keep these stable:
- preserve the existing top-level pack fields already used by downstream survey pipelines
- `claim_candidates` must remain snippet-derived
- `concrete_comparisons` must remain genuinely two-sided; if one cluster has no usable highlight, drop the card and surface thin evidence upstream instead of fabricating an A-vs-B contrast
- snippet sampling should stay cluster-aware: when a subsection has explicit clusters, evidence selection should avoid collapsing onto one route just because its abstracts contain louder result sentences
- sparse evidence should surface as explicit blockers / downgrade signals / verify fields, not filler bullets
- citation keys must remain constrained to `citations/ref.bib`

## Compatibility Notes

Current mode is reference-first with deterministic compatibility:
- `assets/evidence_policy.json` defines pack thresholds and sparse-evidence routing
- `assets/evidence_pack_schema.json` documents/validates the stable pack shape
- `assets/source_text_hygiene.json` owns this Skill's wrapper cleanup, while the
  repo-wide `assets/limitation-signals.json` owns limitation polarity across
  `paper-notes`, `evidence-draft`, and `writer-context-pack`
- `scripts/run.py` still materializes the existing JSONL + Markdown outputs, but no longer pads sparse sections with generic caution prose

## Quick Start

- `uv run python .codex/skills/evidence-draft/scripts/run.py --workspace <workspace>`

## Execution Notes

When running in compatibility mode, `scripts/run.py` currently reads:
- `outline/subsection_briefs.jsonl`
- `papers/paper_notes.jsonl`
- `citations/ref.bib`
- optionally `papers/evidence_bank.jsonl` and `outline/evidence_bindings.jsonl`
- `assets/evidence_policy.json` and `assets/evidence_pack_schema.json`

## Script

### Quick Start

- `uv run python .codex/skills/evidence-draft/scripts/run.py --workspace <workspace>`

### All Options

- `--workspace <dir>`
- `--unit-id <id>`
- `--inputs <path1;path2>`
- `--outputs <path1;path2>`
- `--checkpoint <C*>`

### Examples

- `uv run python .codex/skills/evidence-draft/scripts/run.py --workspace <workspace>`

## Troubleshooting

- If packs look complete despite thin evidence, inspect `assets/evidence_policy.json` and `references/block_vs_downgrade.md` before changing Python.
- If evaluation bullets are generic, inspect `references/evaluation_anchor_rules.md` and the policy asset.
- If claims are strong but evidence is abstract/title-only, downgrade via `downgrade_signals` and `verify_fields` rather than adding narrative caveats.

