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 by draft-polisher on first run)
Outputs
- output/CITATION_ANCHORING_REPORT.md (PASS/FAIL + drift examples)
Baseline policy
-
draft-polisher captures 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.md into ### 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: PASS only if no drift is detected
-
otherwise, - Status: FAIL with a short diff table + examples
Notes
If you intentionally restructure across subsections:
- delete output/citation_anchors.prepolish.jsonl and regenerate a new baseline (then treat that as the new regression anchor).
Troubleshooting
Issue: baseline anchor file is missing
Fix:
- Run draft-polisher once to generate output/citation_anchors.prepolish.jsonl , then rerun the anchoring check.
Issue: citations intentionally moved across subsections
Fix:
- Delete output/citation_anchors.prepolish.jsonl and regenerate a new baseline (then treat that as the new regression anchor).