|
1 | | -6e09425 2026-07-14 parity sweep 066fc7d..6e09425 (#326/#338/#331/#371/#373/#379/#380/#389/#390/#393/#396/#405). No wiring gaps; one documented asymmetry (net_clearances). |
| 1 | +6e88568 2026-07-15 parity sweep 6e09425..6e88568 (pr392 cross-class merge + plane-edge/grader/cp1252/partial-replay). No wiring gaps; the previously-open net_clearances asymmetry is now RESOLVED by pr392 Task 1b. |
2 | 2 |
|
3 | | -Pure AUDIT (no parity fix needed this pass): every engine change since the |
4 | | -previous marker landed in SHARED modules or was already threaded through both |
5 | | -fronts. 24 commits swept; no new CLI argparse flag, no new CLI-only post-pass. |
| 3 | +AUDIT: 17 commits swept. The only new engine surface is pr392's two flags |
| 4 | +(--net-clearances, --keep-input-copper); both are threaded through BOTH fronts |
| 5 | +plus the manifest converter and parity map. Everything else (plane-edge tap |
| 6 | +clamp, grader unify, cp1252 console, partial_replay tool) is shared-engine / |
| 7 | +grader-only / tooling with no GUI surface. |
| 8 | + |
| 9 | +RESOLVED THIS PASS (was the standing OPEN ASYMMETRY in the prior marker): |
| 10 | + * net_clearances CLI/GUI divergence is CLOSED. pr392 Task 1b (e73d9ed) makes |
| 11 | + the CLI auto-read the non-Default netclass clearances from the board's |
| 12 | + sibling .kicad_pro and build net_clearances (route.py: "Auto-read netclass |
| 13 | + clearances ... from the board's .kicad_pro"), AND stops clamping the |
| 14 | + netclasses DOWN in the output (fix_kicad_drc_settings: clamp removed / |
| 15 | + gated). This is exactly the CLI auto-build 5b4c191 aspired to. Both fronts |
| 16 | + now reserve each net's OWN class clearance as an obstacle (KiCad cross-class |
| 17 | + max(A,B)); neither rewrites the netclasses to hide violations. CLI and GUI |
| 18 | + are behaviorally aligned on multi-class boards. Task 1a (ae2453b) also |
| 19 | + honors cross-class clearance for IN-RUN mixed-class copper in the shared |
| 20 | + engine -> both fronts free. |
6 | 21 |
|
7 | 22 | WHAT WAS CHECKED (all parity-clean): |
8 | | - * #326 pad/footprint clearance overrides -> pad.local_clearance is resolved in |
9 | | - BOTH parse_kicad_pcb (route.py:1988) AND build_pcb_data_from_board |
10 | | - (kicad_parser.py:3112-3140, incl. fp.GetLocalClearance inheritance), and the |
11 | | - two are diffed by the parser-parity validator (kicad_parser.py:3659/3726). |
12 | | - * #338 board-edge rule reader (effective_board_edge_clearance / |
13 | | - read_project_edge_clearance) is used CLI-side (route/route_diff/route_planes/ |
14 | | - route_disconnected_planes/kicad_oracle) AND GUI-side |
15 | | - (swig_gui._effective_board_edge_clearance in 4 config builds; every tab's |
16 | | - board_edge_clearance kwarg; settings_persistence). Oracle-reconnect edge |
17 | | - threading (175bac1) present in both route_disconnected_planes and the GUI |
18 | | - planes path. |
19 | | - * #331/#371/#396 net_rescue: rescue_failed_nets runs INSIDE batch_route |
20 | | - (route.py:1077), so the GUI's batch_route call gets it free. Always-on, no |
21 | | - flag. |
22 | | - * #373 plane-pad plain-track fallback: _try_trace_to_same_net_copper lives in |
23 | | - the shared plane_pad_tap.py (called at :775/:917), reached by both fronts via |
24 | | - route_disconnected_planes.route_planes (GUI: planes_gui.py:1125). |
25 | | - * #379 GND-net match, #380 target-swap permutation, #389/#390 rip-by-identity / |
26 | | - NPTH seed floor, #393 underpad off-centre-via/home-lens: all in shared engine |
27 | | - modules (single_ended_routing, target_swap, obstacle_map, plane_pad_tap) -> |
28 | | - both fronts free. |
29 | | - * #405 kicad_drc_compare symmetric baseline subtraction: grader-only, no |
30 | | - routing surface. |
| 23 | + * --net-clearances: CLI argparse (route.py) + engine (routing_config |
| 24 | + set_net_clearances / obstacle_clearance) + GUI builds it from the live |
| 25 | + board's netclasses (swig_gui.py, settings_persistence.py) + manifest_to_plan |
| 26 | + special-cases it (tests/stress/manifest_to_plan.py:84) + test_gui_engine_ |
| 27 | + parity config map. Auto-read from .kicad_pro is in the SHARED engine path, so |
| 28 | + both fronts get it. |
| 29 | + * --keep-input-copper: CLI flag (route.py:1951, action=store_true default |
| 30 | + False) -> batch_route kwarg -> cleanup_pipeline (shared) -> GUI reaches it |
| 31 | + via the same cleanup call. route_diff carries the mirrored --keep-input-copper. |
| 32 | + * plane-edge tap clamp (2448070): clamp_tap_via_to_edge lives in shared |
| 33 | + plane_pad_tap.py / route_planes, reached by both fronts (planes_gui path). |
| 34 | + * grader unify (61e1d63), cp1252 console (be5f126), partial_replay (1c6b99d): |
| 35 | + grader / entry-point / test-tooling only, no routing-engine or GUI surface. |
31 | 36 |
|
32 | 37 | GATES RUN GREEN: |
33 | 38 | * test_manifest_plan_parity.py: 6201 flag-checks / 157 manifests, 0 mismatch; |
34 | 39 | param->control resolution 12/12. |
35 | 40 | * test_cli_postpass_coverage.py: 4 registered, 8 in active use, 0 failures |
36 | 41 | (bga/qfn run_drc remains the one acknowledged CLI-only report-only pass). |
37 | | - * test_gui_engine_parity.py (KiCad python, pcbnew 10.0.0, default power board): |
38 | | - VERDICT PARITY -- CLI & GUI both conn_full=True, drc=0, kicad_unconnected=0. |
39 | | - Copper sets DIFFER (~264 cli-only / ~293 gui-only of ~1250 segs) -- larger |
40 | | - than the pure A*-tie-break/UUID class, consistent with the net_clearances |
41 | | - asymmetry below firing on this board's power net classes. |
42 | | - |
43 | | -OPEN ASYMMETRY (documented design state from 5b4c191, NOT fixed here -- fixing |
44 | | -is a CLI behavioral change needing a full corpus A/B, out of scope for a marker |
45 | | -update): |
46 | | - * net_clearances (#326 B5, GridRouteConfig): the GUI BUILDS it from the live |
47 | | - board's netclasses and passes it to batch_route (swig_gui.py:2854/2994/3121), |
48 | | - so the GUI router reserves each net's OWN class clearance as an obstacle. The |
49 | | - CLI main() does NOT build it (route.py:578 comment: "GUI-fed today; harmless |
50 | | - when empty") -- the CLI instead routes at the flat run clearance and clamps |
51 | | - the non-Default netclasses DOWN in the output .kicad_pro |
52 | | - (apply_targets_to_project clamp_nondefault_netclasses). Net effect: on a |
53 | | - MULTI-NETCLASS board with larger non-Default clearances the two fronts |
54 | | - produce DIFFERENT copper (GUI more conservative), though both stay |
55 | | - functionally parity-clean (0 DRC / 0 unconnected). 5b4c191's message aspired |
56 | | - to a CLI auto-build "from the sibling .kicad_pro"; that was not implemented. |
57 | | - RESOLVE next: decide whether the CLI should auto-build net_clearances (then |
58 | | - A/B the corpus) or whether the route-flat-then-clamp approach is the intended |
59 | | - CLI contract; file an issue either way. Empty/all-Default boards are already |
60 | | - identical. |
| 42 | + * test_gui_engine_parity.py (KiCad python) NOT re-run this pass (no wx/pcbnew in |
| 43 | + this session); the no-wx gates + the shared-engine placement of both new flags |
| 44 | + cover the wiring. Next audit should re-run it on a multi-class board now that |
| 45 | + the CLI auto-builds net_clearances, to confirm the copper sets converge (the |
| 46 | + prior marker's ~264/293 copper delta was attributed to this asymmetry, now |
| 47 | + resolved -> expect the delta to shrink toward the A*-tie-break/UUID floor). |
61 | 48 |
|
62 | | -STILL NOT DIRECTLY GUI-ENGINE-TESTED (structurally covered by the no-wx gates; |
63 | | -the KiCad-python test only ran a single-ended+power board): a diff route through |
64 | | -the GUI engine (D1 ordering/rip-up/costs) and a QFN GUI fanout at the D7 |
65 | | -defaults. Next audit picks up from this marker. |
| 49 | +STILL NOT DIRECTLY GUI-ENGINE-TESTED (structurally covered by the no-wx gates): |
| 50 | +a diff route through the GUI engine and a QFN GUI fanout; plus the multi-class |
| 51 | +net_clearances convergence check noted above. Next audit picks up from this marker. |
0 commit comments