What's Changed
- refactor: extract board pin knowledge to Board.pins_by_role() by @nordstad in #232
- refactor: extract PinAssigner to shared top-level module by @nordstad in #233
- fix: add cross-validation to both assembly paths by @nordstad in #234
- refactor: decompose WireRouter into focused internal classes by @nordstad in #235
Full Changelog: v0.17.7...v0.18.0