## drandyhaas/KiCadRoutingTools — v0.21.2…v0.21.3

_39 commits._

### Fixes
- **v0.21.3: the #663 revert, a Windows freeze fix, and two DRC-honesty fixes** (749cfa8)
- **#693: "Fix DRC settings after routing" now gates the LIVE floor writeback too** (4f296ea)

### Backend
- **revert #663: DIRECTION_PREFERENCE_COST back to 250, re-screened with KiCad live** (aaa6033)
- **test_compare_seeds: record the standalone timing behind its budget (#716)** (d1aa533)
- **tests: a measured number in the routing docs must re-derive from the code** (4cc482d)
- **Merge pull request #715 from edgehero/pr/capacity-engine** (a965163)
- **tests: clear the three run_all reds and the inert timeout budget (#716)** (e5b973f)
- **Merge pull request #692 from edgehero/pr/skill-docs-v2** (758612c)
- **Merge main into #692, and the review fixes it needs** (e9dc125)
- **Merge pull request #691 from edgehero/pr/placement-run-harness-v2** (abbcd12)
- **fence_audit: keep --json to one document; drop a dead flag from the skill** (c320f38)
- **cloud: opt-in KiCad image, so oracle-leg changes can be A/B'd at all (#650)** (847a7c6)
- **in-run DRC floor sync: grade the mid-run audit at the floors that ship (#650)** (a377c9e)
- **board_brief: the board as one artifact, reading the capacity engine** (3598648)
- **capacity: say "this board cannot hold its parts" with the number** (18b8e52)
- **recovery-run harness and loop gates (serves #411)** (c22c403)
- **skills: the routing doctrine from runs 20-24, bounded deterministically** (163ae96)
- **#688: never call pcbnew.SaveBoard from the routing worker thread** (50a2676)
- **Merge pull request #690 from edgehero/pr/placement-review-instruments-v2** (80e38e5)
- **Merge pull request #689 from edgehero/pr/reachability-json** (a4e6dde)
- **review instruments: the review sheet, defect panels, pocket census, connector class** (31431ab)
- **reachability and forensics: --json-out, auto-widen and the defect record (split from #686)** (2cc340e)
- **Merge #687: seeder eviction rung and no-legal-pose blocker census (closes #630)** (0ba0226)
- **Merge #686: machine-readable run output (JSON_SUMMARY_MIN, boxed-in and finalize verdicts)** (d749988)
- **Review fixes on the run-output PR: honest time key, merge carry, no-op line** (81a4894)
- **seeder: gated eviction rung, blockers named on a no-legal-pose verdict (closes #630)** (322d7ed)
- **machine-readable run output: JSON_SUMMARY_MIN, boxed-in and finalize verdicts** (cb4fb61)
- **kicad_files: drop watchy.kicad_pro (unconsumed floors-campaign residue)** (fa72000)
- **Merge pull request #680 from edgehero/skills-placement-improvements** (789f018)
- **blocking_analysis: drop a docstring's mention of a flag that never existed** (e268146)
- **sibling lists: .kicad_dru everywhere, via copy_board.SIBLING_EXTS (PR #681)** (72caae0)
- **headless_plan: Windows re-exec must quote its argv (from PR #681)** (9745cf5)
- **manifest/GUI parity: --fab-overrides reaches its dialog control (#237 flags)** (ece1e01)
- **placement legality: courtyard blocking channel and body containment (closes #628)** (e508103)
- **Remove gp589 experiment scripts and stale wk calibration result** (5c973a8)
- **#662: enforce invariant 3b -- an island may not sever the background sheet** (61f3ff5)
- **issue #669: dogbone-first auto retry, corpus-gated -- kept as opt-in, default off** (ea63730)
- **#663: DIRECTION_PREFERENCE_COST default 250 -> 5, on a corpus screen** (be73378)

### Docs
- **docs: document the two undocumented GridRouteConfig fields** (74f62c4)

_Recap by [Repo Wrapped](https://repowrapped.com/gh/drandyhaas/KiCadRoutingTools?utm_source=github-action)._