Citation Anchoring (regression)
Purpose: prevent a common failure mode: polishing rewrites text and accidentally moves citation markers into a different ### subsection, breaking claim→evidence alignment.
Inputs
- •
output/DRAFT.md - •
output/citation_anchors.prepolish.jsonl(baseline; created bydraft-polisheron first run)
Outputs
- •
output/CITATION_ANCHORING_REPORT.md(PASS/FAIL + drift examples)
Baseline policy
- •
draft-polishercaptures a baseline once per run:output/citation_anchors.prepolish.jsonl. - •Subsequent polish runs should keep per-H3 citation sets stable.
Workflow (analysis-only)
Role:
- •Auditor: only checks and reports; does not edit.
Steps:
- •Load the baseline anchors.
- •Parse the current
output/DRAFT.mdinto###subsections and extract citation keys per subsection. - •Compare current sets to baseline sets:
- •keys added/removed within a subsection
- •keys that migrated across subsections
- •Write
output/CITATION_ANCHORING_REPORT.md:
- •
- Status: PASSonly if no drift is detected - •otherwise,
- Status: FAILwith a short diff table + examples
Notes
If you intentionally restructure across subsections:
- •delete
output/citation_anchors.prepolish.jsonland regenerate a new baseline (then treat that as the new regression anchor).
Troubleshooting
Issue: baseline anchor file is missing
Fix:
- •Run
draft-polisheronce to generateoutput/citation_anchors.prepolish.jsonl, then rerun the anchoring check.
Issue: citations intentionally moved across subsections
Fix:
- •Delete
output/citation_anchors.prepolish.jsonland regenerate a new baseline (then treat that as the new regression anchor).