120 KiB
Optimization Pass 01 Log
This log records the step-by-step measurements for the first visibility-focused optimization pass.
Each section is appended after a discrete code change using scripts/diff_performance_baseline.py.
Step 0 - Pre-optimization baseline
Measured on 2026-03-31T18:02:56-07:00.
Baseline: docs/performance_baseline.json.
Findings:
- Current default tangent-corner routing still pays for eager exact visibility-graph construction.
- Visibility-build ray casts dominate all three hotspot scenarios before any routing changes.
Performance Baseline Diff
| Scenario | Metric | Baseline | Current | Delta |
|---|---|---|---|---|
| example_04_sbends_and_radii | duration_s | 1.9938 | 2.0940 | +0.1002 |
| example_04_sbends_and_radii | nodes_expanded | 15.0000 | 15.0000 | +0.0000 |
| example_04_sbends_and_radii | visibility_builds | 3.0000 | 3.0000 | +0.0000 |
| example_04_sbends_and_radii | visibility_corner_pairs_checked | 18148.0000 | 18148.0000 | +0.0000 |
| example_04_sbends_and_radii | ray_cast_calls | 18218.0000 | 18218.0000 | +0.0000 |
| example_04_sbends_and_radii | ray_cast_calls_visibility_build | 18148.0000 | 18148.0000 | +0.0000 |
| example_04_sbends_and_radii | ray_cast_exact_geometry_checks | 21265.0000 | 21265.0000 | +0.0000 |
| example_04_sbends_and_radii | ray_cast_candidate_bounds | 50717.0000 | 50717.0000 | +0.0000 |
| example_06_bend_collision_models | duration_s | 4.1186 | 4.2483 | +0.1297 |
| example_06_bend_collision_models | nodes_expanded | 240.0000 | 240.0000 | +0.0000 |
| example_06_bend_collision_models | visibility_builds | 6.0000 | 6.0000 | +0.0000 |
| example_06_bend_collision_models | visibility_corner_pairs_checked | 39848.0000 | 39848.0000 | +0.0000 |
| example_06_bend_collision_models | ray_cast_calls | 40530.0000 | 40530.0000 | +0.0000 |
| example_06_bend_collision_models | ray_cast_calls_visibility_build | 39848.0000 | 39848.0000 | +0.0000 |
| example_06_bend_collision_models | ray_cast_exact_geometry_checks | 36858.0000 | 36858.0000 | +0.0000 |
| example_06_bend_collision_models | ray_cast_candidate_bounds | 121732.0000 | 121732.0000 | +0.0000 |
| example_07_large_scale_routing | duration_s | 1.3734 | 1.4031 | +0.0297 |
| example_07_large_scale_routing | nodes_expanded | 78.0000 | 78.0000 | +0.0000 |
| example_07_large_scale_routing | visibility_builds | 11.0000 | 11.0000 | +0.0000 |
| example_07_large_scale_routing | visibility_corner_pairs_checked | 10768.0000 | 10768.0000 | +0.0000 |
| example_07_large_scale_routing | ray_cast_calls | 11151.0000 | 11151.0000 | +0.0000 |
| example_07_large_scale_routing | ray_cast_calls_visibility_build | 10768.0000 | 10768.0000 | +0.0000 |
| example_07_large_scale_routing | ray_cast_exact_geometry_checks | 11651.0000 | 11651.0000 | +0.0000 |
| example_07_large_scale_routing | ray_cast_candidate_bounds | 21198.0000 | 21198.0000 | +0.0000 |
Step 1 - Lazy visibility state split
Measured on 2026-03-31T18:05:49-07:00.
Baseline: docs/performance_baseline.json.
Findings:
- Corner-index rebuilds are now measured separately from exact visibility-graph builds.
- Default tangent-corner routing still triggers exact graph work at query time, so visibility-build counters remain hot in this step.
Performance Baseline Diff
| Scenario | Metric | Baseline | Current | Delta |
|---|---|---|---|---|
| example_04_sbends_and_radii | duration_s | 1.9938 | 0.2543 | -1.7395 |
| example_04_sbends_and_radii | nodes_expanded | 15.0000 | 15.0000 | +0.0000 |
| example_04_sbends_and_radii | visibility_corner_index_builds | - | 2.0000 | - |
| example_04_sbends_and_radii | visibility_builds | 3.0000 | 2.0000 | -1.0000 |
| example_04_sbends_and_radii | visibility_corner_pairs_checked | 18148.0000 | 1892.0000 | -16256.0000 |
| example_04_sbends_and_radii | ray_cast_calls | 18218.0000 | 1962.0000 | -16256.0000 |
| example_04_sbends_and_radii | ray_cast_calls_visibility_build | 18148.0000 | 1892.0000 | -16256.0000 |
| example_04_sbends_and_radii | ray_cast_exact_geometry_checks | 21265.0000 | 2445.0000 | -18820.0000 |
| example_04_sbends_and_radii | ray_cast_candidate_bounds | 50717.0000 | 3864.0000 | -46853.0000 |
| example_06_bend_collision_models | duration_s | 4.1186 | 0.2055 | -3.9131 |
| example_06_bend_collision_models | nodes_expanded | 240.0000 | 240.0000 | +0.0000 |
| example_06_bend_collision_models | visibility_corner_index_builds | - | 3.0000 | - |
| example_06_bend_collision_models | visibility_builds | 6.0000 | 3.0000 | -3.0000 |
| example_06_bend_collision_models | visibility_corner_pairs_checked | 39848.0000 | 396.0000 | -39452.0000 |
| example_06_bend_collision_models | ray_cast_calls | 40530.0000 | 1078.0000 | -39452.0000 |
| example_06_bend_collision_models | ray_cast_calls_visibility_build | 39848.0000 | 396.0000 | -39452.0000 |
| example_06_bend_collision_models | ray_cast_exact_geometry_checks | 36858.0000 | 0.0000 | -36858.0000 |
| example_06_bend_collision_models | ray_cast_candidate_bounds | 121732.0000 | 877.0000 | -120855.0000 |
| example_07_large_scale_routing | duration_s | 1.3734 | 1.3958 | +0.0224 |
| example_07_large_scale_routing | nodes_expanded | 78.0000 | 78.0000 | +0.0000 |
| example_07_large_scale_routing | visibility_corner_index_builds | - | 10.0000 | - |
| example_07_large_scale_routing | visibility_builds | 11.0000 | 10.0000 | -1.0000 |
| example_07_large_scale_routing | visibility_corner_pairs_checked | 10768.0000 | 10768.0000 | +0.0000 |
| example_07_large_scale_routing | ray_cast_calls | 11151.0000 | 11151.0000 | +0.0000 |
| example_07_large_scale_routing | ray_cast_calls_visibility_build | 10768.0000 | 10768.0000 | +0.0000 |
| example_07_large_scale_routing | ray_cast_exact_geometry_checks | 11651.0000 | 11651.0000 | +0.0000 |
| example_07_large_scale_routing | ray_cast_candidate_bounds | 21198.0000 | 21198.0000 | +0.0000 |
Step 2 - Tangent-corner cheap path
Measured on 2026-03-31T18:06:53-07:00.
Baseline: docs/performance_baseline.json.
Findings:
- Default tangent-corner expansion now uses only the corner index and never requests the exact corner graph.
- The expected win is zero visibility-build ray casts in the hotspot trio while keeping node counts stable.
Performance Baseline Diff
| Scenario | Metric | Baseline | Current | Delta |
|---|---|---|---|---|
| example_04_sbends_and_radii | duration_s | 1.9938 | 0.0280 | -1.9659 |
| example_04_sbends_and_radii | nodes_expanded | 15.0000 | 15.0000 | +0.0000 |
| example_04_sbends_and_radii | visibility_corner_index_builds | - | 2.0000 | - |
| example_04_sbends_and_radii | visibility_builds | 3.0000 | 0.0000 | -3.0000 |
| example_04_sbends_and_radii | visibility_corner_pairs_checked | 18148.0000 | 0.0000 | -18148.0000 |
| example_04_sbends_and_radii | ray_cast_calls | 18218.0000 | 70.0000 | -18148.0000 |
| example_04_sbends_and_radii | ray_cast_calls_visibility_build | 18148.0000 | 0.0000 | -18148.0000 |
| example_04_sbends_and_radii | ray_cast_exact_geometry_checks | 21265.0000 | 0.0000 | -21265.0000 |
| example_04_sbends_and_radii | ray_cast_candidate_bounds | 50717.0000 | 4.0000 | -50713.0000 |
| example_06_bend_collision_models | duration_s | 4.1186 | 0.1900 | -3.9286 |
| example_06_bend_collision_models | nodes_expanded | 240.0000 | 240.0000 | +0.0000 |
| example_06_bend_collision_models | visibility_corner_index_builds | - | 3.0000 | - |
| example_06_bend_collision_models | visibility_builds | 6.0000 | 0.0000 | -6.0000 |
| example_06_bend_collision_models | visibility_corner_pairs_checked | 39848.0000 | 0.0000 | -39848.0000 |
| example_06_bend_collision_models | ray_cast_calls | 40530.0000 | 682.0000 | -39848.0000 |
| example_06_bend_collision_models | ray_cast_calls_visibility_build | 39848.0000 | 0.0000 | -39848.0000 |
| example_06_bend_collision_models | ray_cast_exact_geometry_checks | 36858.0000 | 0.0000 | -36858.0000 |
| example_06_bend_collision_models | ray_cast_candidate_bounds | 121732.0000 | 97.0000 | -121635.0000 |
| example_07_large_scale_routing | duration_s | 1.3734 | 0.2042 | -1.1693 |
| example_07_large_scale_routing | nodes_expanded | 78.0000 | 78.0000 | +0.0000 |
| example_07_large_scale_routing | visibility_corner_index_builds | - | 10.0000 | - |
| example_07_large_scale_routing | visibility_builds | 11.0000 | 0.0000 | -11.0000 |
| example_07_large_scale_routing | visibility_corner_pairs_checked | 10768.0000 | 0.0000 | -10768.0000 |
| example_07_large_scale_routing | ray_cast_calls | 11151.0000 | 383.0000 | -10768.0000 |
| example_07_large_scale_routing | ray_cast_calls_visibility_build | 10768.0000 | 0.0000 | -10768.0000 |
| example_07_large_scale_routing | ray_cast_exact_geometry_checks | 11651.0000 | 150.0000 | -11501.0000 |
| example_07_large_scale_routing | ray_cast_candidate_bounds | 21198.0000 | 683.0000 | -20515.0000 |
Step 3 - Final optimized baseline
Measured on 2026-03-31T18:08:19-07:00.
Baseline: /tmp/inire_pre_optimization_baseline.json.
Findings:
- Committed baseline artifacts were regenerated from the optimized router after the tangent-corner change landed.
- The hotspot trio now reaches the same node counts with zero exact visibility-graph builds in default tangent-corner mode.
Performance Baseline Diff
| Scenario | Metric | Baseline | Current | Delta |
|---|---|---|---|---|
| example_04_sbends_and_radii | duration_s | 1.9938 | 0.0279 | -1.9659 |
| example_04_sbends_and_radii | nodes_expanded | 15.0000 | 15.0000 | +0.0000 |
| example_04_sbends_and_radii | visibility_corner_index_builds | - | 2.0000 | - |
| example_04_sbends_and_radii | visibility_builds | 3.0000 | 0.0000 | -3.0000 |
| example_04_sbends_and_radii | visibility_corner_pairs_checked | 18148.0000 | 0.0000 | -18148.0000 |
| example_04_sbends_and_radii | ray_cast_calls | 18218.0000 | 70.0000 | -18148.0000 |
| example_04_sbends_and_radii | ray_cast_calls_visibility_build | 18148.0000 | 0.0000 | -18148.0000 |
| example_04_sbends_and_radii | ray_cast_exact_geometry_checks | 21265.0000 | 0.0000 | -21265.0000 |
| example_04_sbends_and_radii | ray_cast_candidate_bounds | 50717.0000 | 4.0000 | -50713.0000 |
| example_06_bend_collision_models | duration_s | 4.1186 | 0.1900 | -3.9286 |
| example_06_bend_collision_models | nodes_expanded | 240.0000 | 240.0000 | +0.0000 |
| example_06_bend_collision_models | visibility_corner_index_builds | - | 3.0000 | - |
| example_06_bend_collision_models | visibility_builds | 6.0000 | 0.0000 | -6.0000 |
| example_06_bend_collision_models | visibility_corner_pairs_checked | 39848.0000 | 0.0000 | -39848.0000 |
| example_06_bend_collision_models | ray_cast_calls | 40530.0000 | 682.0000 | -39848.0000 |
| example_06_bend_collision_models | ray_cast_calls_visibility_build | 39848.0000 | 0.0000 | -39848.0000 |
| example_06_bend_collision_models | ray_cast_exact_geometry_checks | 36858.0000 | 0.0000 | -36858.0000 |
| example_06_bend_collision_models | ray_cast_candidate_bounds | 121732.0000 | 97.0000 | -121635.0000 |
| example_07_large_scale_routing | duration_s | 1.3734 | 0.2004 | -1.1730 |
| example_07_large_scale_routing | nodes_expanded | 78.0000 | 78.0000 | +0.0000 |
| example_07_large_scale_routing | visibility_corner_index_builds | - | 10.0000 | - |
| example_07_large_scale_routing | visibility_builds | 11.0000 | 0.0000 | -11.0000 |
| example_07_large_scale_routing | visibility_corner_pairs_checked | 10768.0000 | 0.0000 | -10768.0000 |
| example_07_large_scale_routing | ray_cast_calls | 11151.0000 | 383.0000 | -10768.0000 |
| example_07_large_scale_routing | ray_cast_calls_visibility_build | 10768.0000 | 0.0000 | -10768.0000 |
| example_07_large_scale_routing | ray_cast_exact_geometry_checks | 11651.0000 | 150.0000 | -11501.0000 |
| example_07_large_scale_routing | ray_cast_candidate_bounds | 21198.0000 | 683.0000 | -20515.0000 |
Step 4 - Tangent candidate scan baseline
Measured on 2026-03-31T18:33:15-07:00.
Baseline: docs/performance_baseline.json.
Findings:
- The next hotspot is tangent-corner candidate scanning, especially example_02 and example_07.
- This baseline captures current candidate-check volume before narrowing the corner-index query window.
Performance Baseline Diff
| Scenario | Metric | Baseline | Current | Delta |
|---|---|---|---|---|
| example_02_congestion_resolution | duration_s | 0.3365 | 0.3321 | -0.0044 |
| example_02_congestion_resolution | nodes_expanded | 366.0000 | 366.0000 | +0.0000 |
| example_02_congestion_resolution | visibility_tangent_candidate_scans | 363.0000 | 363.0000 | +0.0000 |
| example_02_congestion_resolution | visibility_tangent_candidate_corner_checks | 18991.0000 | 18991.0000 | +0.0000 |
| example_02_congestion_resolution | visibility_tangent_candidate_ray_tests | 253.0000 | 253.0000 | +0.0000 |
| example_02_congestion_resolution | ray_cast_calls | 1164.0000 | 1164.0000 | +0.0000 |
| example_02_congestion_resolution | danger_map_lookup_calls | 2208.0000 | 2208.0000 | +0.0000 |
| example_02_congestion_resolution | score_component_calls | 976.0000 | 976.0000 | +0.0000 |
| example_05_orientation_stress | duration_s | 0.2503 | 0.2404 | -0.0099 |
| example_05_orientation_stress | nodes_expanded | 286.0000 | 286.0000 | +0.0000 |
| example_05_orientation_stress | visibility_tangent_candidate_scans | 280.0000 | 280.0000 | +0.0000 |
| example_05_orientation_stress | visibility_tangent_candidate_corner_checks | 1483.0000 | 1483.0000 | +0.0000 |
| example_05_orientation_stress | visibility_tangent_candidate_ray_tests | 9.0000 | 9.0000 | +0.0000 |
| example_05_orientation_stress | ray_cast_calls | 1243.0000 | 1243.0000 | +0.0000 |
| example_05_orientation_stress | danger_map_lookup_calls | 2079.0000 | 2079.0000 | +0.0000 |
| example_05_orientation_stress | score_component_calls | 1198.0000 | 1198.0000 | +0.0000 |
| example_07_large_scale_routing | duration_s | 0.2034 | 0.1962 | -0.0072 |
| example_07_large_scale_routing | nodes_expanded | 78.0000 | 78.0000 | +0.0000 |
| example_07_large_scale_routing | visibility_tangent_candidate_scans | 68.0000 | 68.0000 | +0.0000 |
| example_07_large_scale_routing | visibility_tangent_candidate_corner_checks | 34735.0000 | 34735.0000 | +0.0000 |
| example_07_large_scale_routing | visibility_tangent_candidate_ray_tests | 77.0000 | 77.0000 | +0.0000 |
| example_07_large_scale_routing | ray_cast_calls | 383.0000 | 383.0000 | +0.0000 |
| example_07_large_scale_routing | danger_map_lookup_calls | 681.0000 | 681.0000 | +0.0000 |
| example_07_large_scale_routing | score_component_calls | 291.0000 | 291.0000 | +0.0000 |
Step 5 - Tangent candidate strip query
Measured on 2026-03-31T18:34:10-07:00.
Baseline: docs/performance_baseline.json.
Findings:
- Tangent-corner candidate collection now queries orientation-aware radius strips instead of scanning a full square around each search state.
- The main acceptance signal is lower tangent corner checks with unchanged node counts and route outcomes.
Performance Baseline Diff
| Scenario | Metric | Baseline | Current | Delta |
|---|---|---|---|---|
| example_02_congestion_resolution | duration_s | 0.3365 | 0.3361 | -0.0004 |
| example_02_congestion_resolution | nodes_expanded | 366.0000 | 366.0000 | +0.0000 |
| example_02_congestion_resolution | visibility_tangent_candidate_scans | 363.0000 | 363.0000 | +0.0000 |
| example_02_congestion_resolution | visibility_tangent_candidate_corner_checks | 18991.0000 | 873.0000 | -18118.0000 |
| example_02_congestion_resolution | visibility_tangent_candidate_ray_tests | 253.0000 | 253.0000 | +0.0000 |
| example_02_congestion_resolution | ray_cast_calls | 1164.0000 | 1164.0000 | +0.0000 |
| example_02_congestion_resolution | danger_map_lookup_calls | 2208.0000 | 2208.0000 | +0.0000 |
| example_02_congestion_resolution | score_component_calls | 976.0000 | 976.0000 | +0.0000 |
| example_05_orientation_stress | duration_s | 0.2503 | 0.2500 | -0.0003 |
| example_05_orientation_stress | nodes_expanded | 286.0000 | 286.0000 | +0.0000 |
| example_05_orientation_stress | visibility_tangent_candidate_scans | 280.0000 | 280.0000 | +0.0000 |
| example_05_orientation_stress | visibility_tangent_candidate_corner_checks | 1483.0000 | 70.0000 | -1413.0000 |
| example_05_orientation_stress | visibility_tangent_candidate_ray_tests | 9.0000 | 9.0000 | +0.0000 |
| example_05_orientation_stress | ray_cast_calls | 1243.0000 | 1243.0000 | +0.0000 |
| example_05_orientation_stress | danger_map_lookup_calls | 2079.0000 | 2079.0000 | +0.0000 |
| example_05_orientation_stress | score_component_calls | 1198.0000 | 1198.0000 | +0.0000 |
| example_07_large_scale_routing | duration_s | 0.2034 | 0.1874 | -0.0160 |
| example_07_large_scale_routing | nodes_expanded | 78.0000 | 78.0000 | +0.0000 |
| example_07_large_scale_routing | visibility_tangent_candidate_scans | 68.0000 | 68.0000 | +0.0000 |
| example_07_large_scale_routing | visibility_tangent_candidate_corner_checks | 34735.0000 | 321.0000 | -34414.0000 |
| example_07_large_scale_routing | visibility_tangent_candidate_ray_tests | 77.0000 | 77.0000 | +0.0000 |
| example_07_large_scale_routing | ray_cast_calls | 383.0000 | 383.0000 | +0.0000 |
| example_07_large_scale_routing | danger_map_lookup_calls | 681.0000 | 681.0000 | +0.0000 |
| example_07_large_scale_routing | score_component_calls | 291.0000 | 291.0000 | +0.0000 |
Step 6 - Empty danger-map fast path
Measured on 2026-03-31T18:50:25-07:00.
Baseline: docs/performance_baseline.json.
Findings:
- Scoring now skips danger-map sampling when the KD-tree is empty, which should primarily help obstacle-free scenarios.
- The no-warm-start example_07 variant is included as a canary; it is not part of the default baseline corpus, so baseline values may be absent on first measurement.
Performance Baseline Diff
| Scenario | Metric | Baseline | Current | Delta |
|---|---|---|---|---|
| example_02_congestion_resolution | duration_s | 0.3325 | 0.3260 | -0.0065 |
| example_02_congestion_resolution | nodes_expanded | 366.0000 | 366.0000 | +0.0000 |
| example_02_congestion_resolution | score_component_calls | 976.0000 | 976.0000 | +0.0000 |
| example_02_congestion_resolution | danger_map_lookup_calls | 2208.0000 | 0.0000 | -2208.0000 |
| example_02_congestion_resolution | danger_map_cache_hits | 1433.0000 | 0.0000 | -1433.0000 |
| example_02_congestion_resolution | danger_map_cache_misses | 775.0000 | 0.0000 | -775.0000 |
| example_02_congestion_resolution | warm_start_paths_built | 3.0000 | 3.0000 | +0.0000 |
| example_02_congestion_resolution | warm_start_paths_used | 3.0000 | 3.0000 | +0.0000 |
| example_05_orientation_stress | duration_s | 0.2404 | 0.2375 | -0.0029 |
| example_05_orientation_stress | nodes_expanded | 286.0000 | 286.0000 | +0.0000 |
| example_05_orientation_stress | score_component_calls | 1198.0000 | 1198.0000 | +0.0000 |
| example_05_orientation_stress | danger_map_lookup_calls | 2079.0000 | 0.0000 | -2079.0000 |
| example_05_orientation_stress | danger_map_cache_hits | 1386.0000 | 0.0000 | -1386.0000 |
| example_05_orientation_stress | danger_map_cache_misses | 693.0000 | 0.0000 | -693.0000 |
| example_05_orientation_stress | warm_start_paths_built | 2.0000 | 2.0000 | +0.0000 |
| example_05_orientation_stress | warm_start_paths_used | 2.0000 | 2.0000 | +0.0000 |
| example_07_large_scale_routing_no_warm_start | added | - | - | - |
Step 7 - Verification baseline
Measured on 2026-03-31T19:00:03-07:00.
Baseline: docs/performance_baseline.json.
Findings:
- The next low-risk optimization target is redundant verification during refinement, especially in example_02.
- The no-warm-start example_07 canary stays in the measurement set even though it is not part of the default baseline corpus.
Performance Baseline Diff
| Scenario | Metric | Baseline | Current | Delta |
|---|---|---|---|---|
| example_02_congestion_resolution | duration_s | 0.3220 | 0.3304 | +0.0084 |
| example_02_congestion_resolution | verify_path_report_calls | 35.0000 | 35.0000 | +0.0000 |
| example_02_congestion_resolution | refine_path_calls | 3.0000 | 3.0000 | +0.0000 |
| example_02_congestion_resolution | refinement_candidates_verified | 26.0000 | 26.0000 | +0.0000 |
| example_02_congestion_resolution | refinement_candidates_accepted | 2.0000 | 2.0000 | +0.0000 |
| example_02_congestion_resolution | congestion_check_calls | 0.0000 | 0.0000 | +0.0000 |
| example_02_congestion_resolution | warm_start_paths_built | 3.0000 | 3.0000 | +0.0000 |
| example_02_congestion_resolution | warm_start_paths_used | 3.0000 | 3.0000 | +0.0000 |
| example_05_orientation_stress | duration_s | 0.2340 | 0.2348 | +0.0008 |
| example_05_orientation_stress | verify_path_report_calls | 12.0000 | 12.0000 | +0.0000 |
| example_05_orientation_stress | refine_path_calls | 3.0000 | 3.0000 | +0.0000 |
| example_05_orientation_stress | refinement_candidates_verified | 0.0000 | 0.0000 | +0.0000 |
| example_05_orientation_stress | refinement_candidates_accepted | 0.0000 | 0.0000 | +0.0000 |
| example_05_orientation_stress | congestion_check_calls | 412.0000 | 412.0000 | +0.0000 |
| example_05_orientation_stress | warm_start_paths_built | 2.0000 | 2.0000 | +0.0000 |
| example_05_orientation_stress | warm_start_paths_used | 2.0000 | 2.0000 | +0.0000 |
| example_07_large_scale_routing_no_warm_start | added | - | - | - |
Step 8 - Deferred refinement verification
Measured on 2026-03-31T19:02:46-07:00.
Baseline: docs/performance_baseline.json.
Findings:
- Per-net verification inside _refine_results() is now deferred to the final verification pass to avoid verifying the same refined path twice.
- The main expected signal is fewer verify_path_report_calls with unchanged route outcomes.
Performance Baseline Diff
| Scenario | Metric | Baseline | Current | Delta |
|---|---|---|---|---|
| example_02_congestion_resolution | duration_s | 0.3220 | 0.3273 | +0.0052 |
| example_02_congestion_resolution | verify_path_report_calls | 35.0000 | 32.0000 | -3.0000 |
| example_02_congestion_resolution | refine_path_calls | 3.0000 | 3.0000 | +0.0000 |
| example_02_congestion_resolution | refinement_candidates_verified | 26.0000 | 26.0000 | +0.0000 |
| example_02_congestion_resolution | refinement_candidates_accepted | 2.0000 | 2.0000 | +0.0000 |
| example_02_congestion_resolution | congestion_check_calls | 0.0000 | 0.0000 | +0.0000 |
| example_02_congestion_resolution | warm_start_paths_built | 3.0000 | 3.0000 | +0.0000 |
| example_02_congestion_resolution | warm_start_paths_used | 3.0000 | 3.0000 | +0.0000 |
| example_05_orientation_stress | duration_s | 0.2340 | 0.2350 | +0.0011 |
| example_05_orientation_stress | verify_path_report_calls | 12.0000 | 9.0000 | -3.0000 |
| example_05_orientation_stress | refine_path_calls | 3.0000 | 3.0000 | +0.0000 |
| example_05_orientation_stress | refinement_candidates_verified | 0.0000 | 0.0000 | +0.0000 |
| example_05_orientation_stress | refinement_candidates_accepted | 0.0000 | 0.0000 | +0.0000 |
| example_05_orientation_stress | congestion_check_calls | 412.0000 | 412.0000 | +0.0000 |
| example_05_orientation_stress | warm_start_paths_built | 2.0000 | 2.0000 | +0.0000 |
| example_05_orientation_stress | warm_start_paths_used | 2.0000 | 2.0000 | +0.0000 |
| example_07_large_scale_routing_no_warm_start | added | - | - | - |
Step 9 - Dynamic rtree for congestion and verification
Measured on 2026-03-31T20:12:56-07:00.
Baseline: docs/performance_baseline.json.
Findings:
- Dynamic congestion confirmation and dynamic-path verification now use the mutable rtree index instead of rebuilding a transient STRtree.
- The expected signal is dynamic_tree_rebuilds dropping to zero on the normal corpus while route outcomes stay unchanged.
Performance Baseline Diff
| Scenario | Metric | Baseline | Current | Delta |
|---|---|---|---|---|
| example_02_congestion_resolution | duration_s | 0.3211 | 0.3273 | +0.0062 |
| example_02_congestion_resolution | dynamic_tree_rebuilds | 6.0000 | 0.0000 | -6.0000 |
| example_02_congestion_resolution | congestion_check_calls | 0.0000 | 0.0000 | +0.0000 |
| example_02_congestion_resolution | congestion_exact_pair_checks | 0.0000 | 0.0000 | +0.0000 |
| example_02_congestion_resolution | verify_path_report_calls | 32.0000 | 32.0000 | +0.0000 |
| example_02_congestion_resolution | verify_dynamic_exact_pair_checks | 90.0000 | 130.0000 | +40.0000 |
| example_05_orientation_stress | duration_s | 0.2351 | 0.2324 | -0.0028 |
| example_05_orientation_stress | dynamic_tree_rebuilds | 10.0000 | 0.0000 | -10.0000 |
| example_05_orientation_stress | congestion_check_calls | 412.0000 | 412.0000 | +0.0000 |
| example_05_orientation_stress | congestion_exact_pair_checks | 66.0000 | 68.0000 | +2.0000 |
| example_05_orientation_stress | verify_path_report_calls | 9.0000 | 9.0000 | +0.0000 |
| example_05_orientation_stress | verify_dynamic_exact_pair_checks | 2.0000 | 4.0000 | +2.0000 |
| example_07_large_scale_routing_no_warm_start | added | - | - | - |
Step 10 - Incremental dynamic congestion grid
Measured on 2026-03-31T20:29:38-07:00.
Baseline: docs/performance_baseline.json.
Findings:
- Dynamic path removal is now net-owned and the congestion grid is updated incrementally instead of being invalidated and rebuilt.
- The expected signal is dynamic_grid_rebuilds dropping to zero and better performance on congestion-heavy or no-warm-start routing.
Performance Baseline Diff
| Scenario | Metric | Baseline | Current | Delta |
|---|---|---|---|---|
| example_05_orientation_stress | duration_s | 0.2394 | 0.2605 | +0.0211 |
| example_05_orientation_stress | nodes_expanded | 286.0000 | 286.0000 | +0.0000 |
| example_05_orientation_stress | congestion_check_calls | 412.0000 | 412.0000 | +0.0000 |
| example_05_orientation_stress | congestion_exact_pair_checks | 68.0000 | 68.0000 | +0.0000 |
| example_05_orientation_stress | congestion_cache_hits | 2.0000 | 2.0000 | +0.0000 |
| example_05_orientation_stress | congestion_cache_misses | 412.0000 | 412.0000 | +0.0000 |
| example_05_orientation_stress | dynamic_grid_rebuilds | 3.0000 | 0.0000 | -3.0000 |
| example_05_orientation_stress | dynamic_path_objects_added | 37.0000 | 37.0000 | +0.0000 |
| example_05_orientation_stress | dynamic_path_objects_removed | 25.0000 | 25.0000 | +0.0000 |
| example_07_large_scale_routing_no_warm_start | added | - | - | - |
Step 11 - Per-polygon congestion broad phase
Measured on 2026-03-31T20:36:35-07:00.
Baseline: docs/performance_baseline.json.
Findings:
- Congestion candidate collection now scans per dilated polygon bounds instead of the move-wide union bounds.
- The main expected signal is fewer broad-phase candidate ids, especially on large dynamic-path states such as example_07 without warm start.
Performance Baseline Diff
| Scenario | Metric | Baseline | Current | Delta |
|---|---|---|---|---|
| example_05_orientation_stress | duration_s | 0.2541 | 0.2488 | -0.0053 |
| example_05_orientation_stress | nodes_expanded | 286.0000 | 286.0000 | +0.0000 |
| example_05_orientation_stress | congestion_check_calls | 412.0000 | 412.0000 | +0.0000 |
| example_05_orientation_stress | congestion_candidate_ids | - | 83.0000 | - |
| example_05_orientation_stress | congestion_exact_pair_checks | 68.0000 | 70.0000 | +2.0000 |
| example_05_orientation_stress | congestion_cache_hits | 2.0000 | 2.0000 | +0.0000 |
| example_05_orientation_stress | congestion_cache_misses | 412.0000 | 412.0000 | +0.0000 |
| example_05_orientation_stress | dynamic_grid_rebuilds | 0.0000 | 0.0000 | +0.0000 |
| example_05_orientation_stress | dynamic_path_objects_added | 37.0000 | 37.0000 | +0.0000 |
| example_05_orientation_stress | dynamic_path_objects_removed | 25.0000 | 25.0000 | +0.0000 |
| example_07_large_scale_routing | duration_s | 0.1984 | 0.1867 | -0.0118 |
| example_07_large_scale_routing | nodes_expanded | 78.0000 | 78.0000 | +0.0000 |
| example_07_large_scale_routing | congestion_check_calls | 0.0000 | 0.0000 | +0.0000 |
| example_07_large_scale_routing | congestion_candidate_ids | - | 0.0000 | - |
| example_07_large_scale_routing | congestion_exact_pair_checks | 0.0000 | 0.0000 | +0.0000 |
| example_07_large_scale_routing | congestion_cache_hits | 0.0000 | 0.0000 | +0.0000 |
| example_07_large_scale_routing | congestion_cache_misses | 0.0000 | 0.0000 | +0.0000 |
| example_07_large_scale_routing | dynamic_grid_rebuilds | 0.0000 | 0.0000 | +0.0000 |
| example_07_large_scale_routing | dynamic_path_objects_added | 88.0000 | 88.0000 | +0.0000 |
| example_07_large_scale_routing | dynamic_path_objects_removed | 44.0000 | 44.0000 | +0.0000 |
| example_07_large_scale_routing_no_warm_start | added | - | - | - |
Step 12 - Cheap exact congestion predicates
Measured on 2026-03-31T20:47:00-07:00.
Baseline: docs/performance_baseline.json.
Findings:
- Congestion and dynamic verification now use non-constructive overlap predicates instead of building intersection geometries for every exact pair check.
- The no-warm-start example_07 canary now reports its current metrics directly in the log, which makes the congestion hot path measurable even though it is not part of the committed baseline corpus.
- The canary runtime dropped materially with unchanged node and congestion counts, which confirms that exact confirmation cost was a major part of the remaining congestion overhead.
Performance Baseline Diff
| Scenario | Metric | Baseline | Current | Delta |
|---|---|---|---|---|
| example_05_orientation_stress | duration_s | 0.2541 | 0.2682 | +0.0141 |
| example_05_orientation_stress | nodes_expanded | 286.0000 | 286.0000 | +0.0000 |
| example_05_orientation_stress | congestion_check_calls | 412.0000 | 412.0000 | +0.0000 |
| example_05_orientation_stress | congestion_candidate_ids | - | 83.0000 | - |
| example_05_orientation_stress | congestion_exact_pair_checks | 68.0000 | 70.0000 | +2.0000 |
| example_05_orientation_stress | congestion_cache_hits | 2.0000 | 2.0000 | +0.0000 |
| example_05_orientation_stress | congestion_cache_misses | 412.0000 | 412.0000 | +0.0000 |
| example_05_orientation_stress | dynamic_grid_rebuilds | 0.0000 | 0.0000 | +0.0000 |
| example_05_orientation_stress | dynamic_path_objects_added | 37.0000 | 37.0000 | +0.0000 |
| example_05_orientation_stress | dynamic_path_objects_removed | 25.0000 | 25.0000 | +0.0000 |
| example_07_large_scale_routing_no_warm_start | duration_s | - | 109.2839 | - |
| example_07_large_scale_routing_no_warm_start | nodes_expanded | - | 173498.0000 | - |
| example_07_large_scale_routing_no_warm_start | congestion_check_calls | - | 641300.0000 | - |
| example_07_large_scale_routing_no_warm_start | congestion_candidate_ids | - | 1737551.0000 | - |
| example_07_large_scale_routing_no_warm_start | congestion_exact_pair_checks | - | 1192907.0000 | - |
| example_07_large_scale_routing_no_warm_start | congestion_cache_hits | - | 5379.0000 | - |
| example_07_large_scale_routing_no_warm_start | congestion_cache_misses | - | 641300.0000 | - |
| example_07_large_scale_routing_no_warm_start | dynamic_grid_rebuilds | - | 0.0000 | - |
| example_07_large_scale_routing_no_warm_start | dynamic_path_objects_added | - | 1601.0000 | - |
| example_07_large_scale_routing_no_warm_start | dynamic_path_objects_removed | - | 1462.0000 | - |
Step 13 - Relevant-polygon exact congestion checks
Measured on 2026-03-31T21:03:00-07:00.
Baseline: docs/performance_baseline.json.
Findings:
- Congestion candidate tracking now remembers which dilated move polygons produced each candidate object, so exact confirmation no longer retests candidates against unrelated polygons.
- This slice was largely neutral in aggregate counters: the no-warm-start canary still spent most of its time in congestion, which means the next win had to come from reducing how often congestion is queried at all.
Performance Baseline Diff
| Scenario | Metric | Baseline | Current | Delta |
|---|---|---|---|---|
| example_05_orientation_stress | duration_s | 0.2523 | 0.2753 | +0.0230 |
| example_05_orientation_stress | nodes_expanded | 286.0000 | 286.0000 | +0.0000 |
| example_05_orientation_stress | congestion_check_calls | 412.0000 | 412.0000 | +0.0000 |
| example_05_orientation_stress | congestion_candidate_ids | 83.0000 | 83.0000 | +0.0000 |
| example_05_orientation_stress | congestion_exact_pair_checks | 70.0000 | 70.0000 | +0.0000 |
| example_05_orientation_stress | congestion_cache_hits | 2.0000 | 2.0000 | +0.0000 |
| example_05_orientation_stress | congestion_cache_misses | 412.0000 | 412.0000 | +0.0000 |
| example_05_orientation_stress | dynamic_grid_rebuilds | 0.0000 | 0.0000 | +0.0000 |
| example_05_orientation_stress | dynamic_path_objects_added | 37.0000 | 37.0000 | +0.0000 |
| example_05_orientation_stress | dynamic_path_objects_removed | 25.0000 | 25.0000 | +0.0000 |
| example_07_large_scale_routing_no_warm_start | duration_s | - | 104.0661 | - |
| example_07_large_scale_routing_no_warm_start | nodes_expanded | - | 173498.0000 | - |
| example_07_large_scale_routing_no_warm_start | congestion_check_calls | - | 641300.0000 | - |
| example_07_large_scale_routing_no_warm_start | congestion_candidate_ids | - | 1737551.0000 | - |
| example_07_large_scale_routing_no_warm_start | congestion_exact_pair_checks | - | 1208409.0000 | - |
| example_07_large_scale_routing_no_warm_start | congestion_cache_hits | - | 5379.0000 | - |
| example_07_large_scale_routing_no_warm_start | congestion_cache_misses | - | 641300.0000 | - |
| example_07_large_scale_routing_no_warm_start | dynamic_grid_rebuilds | - | 0.0000 | - |
| example_07_large_scale_routing_no_warm_start | dynamic_path_objects_added | - | 1601.0000 | - |
| example_07_large_scale_routing_no_warm_start | dynamic_path_objects_removed | - | 1462.0000 | - |
Step 14 - Self-collision before congestion
Measured on 2026-03-31T21:08:00-07:00.
Baseline: docs/performance_baseline.json.
Findings:
- Moves that self-intersect the ancestor chain are now rejected before congestion scoring, so the search no longer spends congestion work on moves that will be discarded anyway.
- This is the first slice that materially cut congestion volume on the no-warm-start example_07 canary.
- Relative to Step 13, the canary dropped from
641300to529038congestion checks, from1737551to1164421candidate ids, and from1208409to838008exact pair checks while runtime improved from104.07sto102.02s.
Performance Baseline Diff
| Scenario | Metric | Baseline | Current | Delta |
|---|---|---|---|---|
| example_05_orientation_stress | duration_s | 0.2523 | 0.2662 | +0.0139 |
| example_05_orientation_stress | nodes_expanded | 286.0000 | 286.0000 | +0.0000 |
| example_05_orientation_stress | congestion_check_calls | 412.0000 | 412.0000 | +0.0000 |
| example_05_orientation_stress | congestion_candidate_ids | 83.0000 | 83.0000 | +0.0000 |
| example_05_orientation_stress | congestion_exact_pair_checks | 70.0000 | 70.0000 | +0.0000 |
| example_05_orientation_stress | congestion_cache_hits | 2.0000 | 2.0000 | +0.0000 |
| example_05_orientation_stress | congestion_cache_misses | 412.0000 | 412.0000 | +0.0000 |
| example_05_orientation_stress | dynamic_grid_rebuilds | 0.0000 | 0.0000 | +0.0000 |
| example_05_orientation_stress | dynamic_path_objects_added | 37.0000 | 37.0000 | +0.0000 |
| example_05_orientation_stress | dynamic_path_objects_removed | 25.0000 | 25.0000 | +0.0000 |
| example_07_large_scale_routing_no_warm_start | duration_s | - | 102.0202 | - |
| example_07_large_scale_routing_no_warm_start | nodes_expanded | - | 173498.0000 | - |
| example_07_large_scale_routing_no_warm_start | congestion_check_calls | - | 529038.0000 | - |
| example_07_large_scale_routing_no_warm_start | congestion_candidate_ids | - | 1164421.0000 | - |
| example_07_large_scale_routing_no_warm_start | congestion_exact_pair_checks | - | 838008.0000 | - |
| example_07_large_scale_routing_no_warm_start | congestion_cache_hits | - | 3933.0000 | - |
| example_07_large_scale_routing_no_warm_start | congestion_cache_misses | - | 529038.0000 | - |
| example_07_large_scale_routing_no_warm_start | dynamic_grid_rebuilds | - | 0.0000 | - |
| example_07_large_scale_routing_no_warm_start | dynamic_path_objects_added | - | 1601.0000 | - |
| example_07_large_scale_routing_no_warm_start | dynamic_path_objects_removed | - | 1462.0000 | - |
Step 15 - Uncongested dominance before congestion
Measured on 2026-03-31T21:18:00-07:00.
Baseline: docs/performance_baseline.json.
Findings:
- Admission now computes the uncongested component score before congestion and prunes moves that are already closed-set-dominated even with zero congestion penalty.
- This slice materially reduced congestion misses without increasing
score_component_calls, so it removed congestion work instead of shifting it into scoring. - Relative to Step 14, the no-warm-start example_07 canary dropped from
529038to344747congestion checks, from1164421to375624candidate ids, and from838008to314367exact pair checks while runtime improved from102.02sto88.86s.
Performance Baseline Diff
| Scenario | Metric | Baseline | Current | Delta |
|---|---|---|---|---|
| example_05_orientation_stress | duration_s | 0.2494 | 0.2619 | +0.0125 |
| example_05_orientation_stress | nodes_expanded | 286.0000 | 286.0000 | +0.0000 |
| example_05_orientation_stress | congestion_check_calls | 412.0000 | 213.0000 | -199.0000 |
| example_05_orientation_stress | congestion_candidate_ids | 83.0000 | 19.0000 | -64.0000 |
| example_05_orientation_stress | congestion_exact_pair_checks | 70.0000 | 18.0000 | -52.0000 |
| example_05_orientation_stress | congestion_cache_hits | 2.0000 | 2.0000 | +0.0000 |
| example_05_orientation_stress | congestion_cache_misses | 412.0000 | 213.0000 | -199.0000 |
| example_05_orientation_stress | dynamic_grid_rebuilds | 0.0000 | 0.0000 | +0.0000 |
| example_05_orientation_stress | dynamic_path_objects_added | 37.0000 | 37.0000 | +0.0000 |
| example_05_orientation_stress | dynamic_path_objects_removed | 25.0000 | 25.0000 | +0.0000 |
| example_05_orientation_stress | score_component_calls | 1198.0000 | 1198.0000 | +0.0000 |
| example_07_large_scale_routing_no_warm_start | duration_s | - | 88.8639 | - |
| example_07_large_scale_routing_no_warm_start | nodes_expanded | - | 173498.0000 | - |
| example_07_large_scale_routing_no_warm_start | congestion_check_calls | - | 344747.0000 | - |
| example_07_large_scale_routing_no_warm_start | congestion_candidate_ids | - | 375624.0000 | - |
| example_07_large_scale_routing_no_warm_start | congestion_exact_pair_checks | - | 314367.0000 | - |
| example_07_large_scale_routing_no_warm_start | congestion_cache_hits | - | 3300.0000 | - |
| example_07_large_scale_routing_no_warm_start | congestion_cache_misses | - | 344747.0000 | - |
| example_07_large_scale_routing_no_warm_start | dynamic_grid_rebuilds | - | 0.0000 | - |
| example_07_large_scale_routing_no_warm_start | dynamic_path_objects_added | - | 1601.0000 | - |
| example_07_large_scale_routing_no_warm_start | dynamic_path_objects_removed | - | 1462.0000 | - |
| example_07_large_scale_routing_no_warm_start | score_component_calls | - | 534994.0000 | - |
Step 16 - Lazy congestion on pop (rejected)
Measured on 2026-03-31T23:55:00-07:00.
Baseline: docs/performance_baseline.json.
Findings:
- Congestion resolution was moved from move generation to node pop, with penalized nodes requeued after their overlap count was resolved.
- The first cut reduced raw congestion misses on the no-warm-start example_07 canary from
344747to331308, but runtime still regressed to about99.00sand nodes expanded rose to184853. - Tightening lazy-requeue bookkeeping did not recover the search-order penalty. A later measurement pushed the same canary to
153.63s,247887expanded nodes,427874congestion misses, and166395lazy requeues. - This pass was rejected and reverted. The remaining congestion misses appear structural, but optimistic unresolved nodes created too much extra search churn.
Step 17 - Grid-span congestion broad-phase cache
Measured on 2026-03-31T22:44:31-07:00.
Baseline: docs/performance_baseline.json.
Findings:
- Congestion broad-phase candidate unions are now cached by queried grid-cell span within a single A* run.
- The exact overlap cache still misses at the previous rate, but the new grid-span cache hits heavily on repeated local congestion probes.
- Relative to the reverted Step 15 state, the no-warm-start example_07 canary improved from about 87.20s to 84.71s with unchanged nodes expanded and congestion check calls.
- The canary's broad-phase work also dropped modestly, from 375624 to 364731 candidate ids and from 314367 to 305397 exact pair checks.
Performance Baseline Diff
| Scenario | Metric | Baseline | Current | Delta |
|---|---|---|---|---|
| example_05_orientation_stress | duration_s | 0.2386 | 0.2380 | -0.0007 |
| example_05_orientation_stress | nodes_expanded | 286.0000 | 286.0000 | +0.0000 |
| example_05_orientation_stress | moves_generated | 1624.0000 | 1624.0000 | +0.0000 |
| example_05_orientation_stress | moves_added | 681.0000 | 681.0000 | +0.0000 |
| example_05_orientation_stress | congestion_check_calls | 213.0000 | 213.0000 | +0.0000 |
| example_05_orientation_stress | congestion_cache_hits | 2.0000 | 2.0000 | +0.0000 |
| example_05_orientation_stress | congestion_cache_misses | 213.0000 | 213.0000 | +0.0000 |
| example_05_orientation_stress | congestion_grid_span_cache_hits | - | 133.0000 | - |
| example_05_orientation_stress | congestion_grid_span_cache_misses | - | 22.0000 | - |
| example_05_orientation_stress | congestion_candidate_ids | 19.0000 | 19.0000 | +0.0000 |
| example_05_orientation_stress | congestion_exact_pair_checks | 18.0000 | 18.0000 | +0.0000 |
| example_07_large_scale_routing | duration_s | 0.1885 | 0.1841 | -0.0044 |
| example_07_large_scale_routing | nodes_expanded | 78.0000 | 78.0000 | +0.0000 |
| example_07_large_scale_routing | moves_generated | 372.0000 | 372.0000 | +0.0000 |
| example_07_large_scale_routing | moves_added | 227.0000 | 227.0000 | +0.0000 |
| example_07_large_scale_routing | congestion_check_calls | 0.0000 | 0.0000 | +0.0000 |
| example_07_large_scale_routing | congestion_cache_hits | 0.0000 | 0.0000 | +0.0000 |
| example_07_large_scale_routing | congestion_cache_misses | 0.0000 | 0.0000 | +0.0000 |
| example_07_large_scale_routing | congestion_grid_span_cache_hits | - | 0.0000 | - |
| example_07_large_scale_routing | congestion_grid_span_cache_misses | - | 0.0000 | - |
| example_07_large_scale_routing | congestion_candidate_ids | 0.0000 | 0.0000 | +0.0000 |
| example_07_large_scale_routing | congestion_exact_pair_checks | 0.0000 | 0.0000 | +0.0000 |
| example_07_large_scale_routing_no_warm_start | duration_s | - | 84.8404 | - |
| example_07_large_scale_routing_no_warm_start | nodes_expanded | - | 173498.0000 | - |
| example_07_large_scale_routing_no_warm_start | moves_generated | - | 857732.0000 | - |
| example_07_large_scale_routing_no_warm_start | moves_added | - | 348559.0000 | - |
| example_07_large_scale_routing_no_warm_start | congestion_check_calls | - | 344747.0000 | - |
| example_07_large_scale_routing_no_warm_start | congestion_cache_hits | - | 3300.0000 | - |
| example_07_large_scale_routing_no_warm_start | congestion_cache_misses | - | 344747.0000 | - |
| example_07_large_scale_routing_no_warm_start | congestion_grid_span_cache_hits | - | 199762.0000 | - |
| example_07_large_scale_routing_no_warm_start | congestion_grid_span_cache_misses | - | 26740.0000 | - |
| example_07_large_scale_routing_no_warm_start | congestion_candidate_ids | - | 364731.0000 | - |
| example_07_large_scale_routing_no_warm_start | congestion_exact_pair_checks | - | 305397.0000 | - |
Step 18 - Net-envelope maintenance and counters
Measured on 2026-03-31T23:05:08-07:00.
Baseline: docs/performance_baseline.json.
Findings:
- Added per-net dynamic envelope state and public counters without changing congestion or verification query behavior yet.
- The expected result for this slice is unchanged routing behavior; the new envelope counters should stay at zero until the broad phase starts using them.
Performance Baseline Diff
| Scenario | Metric | Baseline | Current | Delta |
|---|---|---|---|---|
| example_05_orientation_stress | duration_s | 0.2312 | 0.2343 | +0.0031 |
| example_05_orientation_stress | nodes_expanded | 286.0000 | 286.0000 | +0.0000 |
| example_05_orientation_stress | congestion_check_calls | 213.0000 | 213.0000 | +0.0000 |
| example_05_orientation_stress | congestion_candidate_nets | - | 0.0000 | - |
| example_05_orientation_stress | congestion_net_envelope_cache_hits | - | 0.0000 | - |
| example_05_orientation_stress | congestion_net_envelope_cache_misses | - | 0.0000 | - |
| example_05_orientation_stress | congestion_grid_span_cache_hits | 133.0000 | 133.0000 | +0.0000 |
| example_05_orientation_stress | congestion_grid_span_cache_misses | 22.0000 | 22.0000 | +0.0000 |
| example_05_orientation_stress | congestion_candidate_ids | 19.0000 | 19.0000 | +0.0000 |
| example_05_orientation_stress | congestion_exact_pair_checks | 18.0000 | 18.0000 | +0.0000 |
| example_05_orientation_stress | verify_dynamic_candidate_nets | - | 0.0000 | - |
| example_07_large_scale_routing | duration_s | 0.1858 | 0.1833 | -0.0026 |
| example_07_large_scale_routing | nodes_expanded | 78.0000 | 78.0000 | +0.0000 |
| example_07_large_scale_routing | congestion_check_calls | 0.0000 | 0.0000 | +0.0000 |
| example_07_large_scale_routing | congestion_candidate_nets | - | 0.0000 | - |
| example_07_large_scale_routing | congestion_net_envelope_cache_hits | - | 0.0000 | - |
| example_07_large_scale_routing | congestion_net_envelope_cache_misses | - | 0.0000 | - |
| example_07_large_scale_routing | congestion_grid_span_cache_hits | 0.0000 | 0.0000 | +0.0000 |
| example_07_large_scale_routing | congestion_grid_span_cache_misses | 0.0000 | 0.0000 | +0.0000 |
| example_07_large_scale_routing | congestion_candidate_ids | 0.0000 | 0.0000 | +0.0000 |
| example_07_large_scale_routing | congestion_exact_pair_checks | 0.0000 | 0.0000 | +0.0000 |
| example_07_large_scale_routing | verify_dynamic_candidate_nets | - | 0.0000 | - |
| example_07_large_scale_routing_no_warm_start | duration_s | - | 84.6663 | - |
| example_07_large_scale_routing_no_warm_start | nodes_expanded | - | 173498.0000 | - |
| example_07_large_scale_routing_no_warm_start | congestion_check_calls | - | 344747.0000 | - |
| example_07_large_scale_routing_no_warm_start | congestion_candidate_nets | - | 0.0000 | - |
| example_07_large_scale_routing_no_warm_start | congestion_net_envelope_cache_hits | - | 0.0000 | - |
| example_07_large_scale_routing_no_warm_start | congestion_net_envelope_cache_misses | - | 0.0000 | - |
| example_07_large_scale_routing_no_warm_start | congestion_grid_span_cache_hits | - | 199762.0000 | - |
| example_07_large_scale_routing_no_warm_start | congestion_grid_span_cache_misses | - | 26740.0000 | - |
| example_07_large_scale_routing_no_warm_start | congestion_candidate_ids | - | 364731.0000 | - |
| example_07_large_scale_routing_no_warm_start | congestion_exact_pair_checks | - | 305397.0000 | - |
| example_07_large_scale_routing_no_warm_start | verify_dynamic_candidate_nets | - | 0.0000 | - |
Step 19 - Route-time net-envelope broad phase
Measured on 2026-03-31T23:10:12-07:00.
Baseline: docs/performance_baseline.json.
Findings:
- Congestion checks now query per-net dynamic envelopes before descending into cached per-object candidate sets.
- Search order is unchanged in this slice; the acceptance signal is lower candidate-net and exact-pair work at the same node count.
Performance Baseline Diff
| Scenario | Metric | Baseline | Current | Delta |
|---|---|---|---|---|
| example_05_orientation_stress | duration_s | 0.2312 | 0.2443 | +0.0131 |
| example_05_orientation_stress | nodes_expanded | 286.0000 | 286.0000 | +0.0000 |
| example_05_orientation_stress | congestion_check_calls | 213.0000 | 213.0000 | +0.0000 |
| example_05_orientation_stress | congestion_candidate_nets | - | 15.0000 | - |
| example_05_orientation_stress | congestion_net_envelope_cache_hits | - | 133.0000 | - |
| example_05_orientation_stress | congestion_net_envelope_cache_misses | - | 22.0000 | - |
| example_05_orientation_stress | congestion_grid_span_cache_hits | 133.0000 | 11.0000 | -122.0000 |
| example_05_orientation_stress | congestion_grid_span_cache_misses | 22.0000 | 4.0000 | -18.0000 |
| example_05_orientation_stress | congestion_candidate_ids | 19.0000 | 19.0000 | +0.0000 |
| example_05_orientation_stress | congestion_exact_pair_checks | 18.0000 | 18.0000 | +0.0000 |
| example_05_orientation_stress | verify_dynamic_candidate_nets | - | 0.0000 | - |
| example_07_large_scale_routing | duration_s | 0.1858 | 0.1940 | +0.0081 |
| example_07_large_scale_routing | nodes_expanded | 78.0000 | 78.0000 | +0.0000 |
| example_07_large_scale_routing | congestion_check_calls | 0.0000 | 0.0000 | +0.0000 |
| example_07_large_scale_routing | congestion_candidate_nets | - | 0.0000 | - |
| example_07_large_scale_routing | congestion_net_envelope_cache_hits | - | 0.0000 | - |
| example_07_large_scale_routing | congestion_net_envelope_cache_misses | - | 0.0000 | - |
| example_07_large_scale_routing | congestion_grid_span_cache_hits | 0.0000 | 0.0000 | +0.0000 |
| example_07_large_scale_routing | congestion_grid_span_cache_misses | 0.0000 | 0.0000 | +0.0000 |
| example_07_large_scale_routing | congestion_candidate_ids | 0.0000 | 0.0000 | +0.0000 |
| example_07_large_scale_routing | congestion_exact_pair_checks | 0.0000 | 0.0000 | +0.0000 |
| example_07_large_scale_routing | verify_dynamic_candidate_nets | - | 0.0000 | - |
| example_07_large_scale_routing_no_warm_start | duration_s | - | 85.7274 | - |
| example_07_large_scale_routing_no_warm_start | nodes_expanded | - | 173498.0000 | - |
| example_07_large_scale_routing_no_warm_start | congestion_check_calls | - | 344747.0000 | - |
| example_07_large_scale_routing_no_warm_start | congestion_candidate_nets | - | 557244.0000 | - |
| example_07_large_scale_routing_no_warm_start | congestion_net_envelope_cache_hits | - | 199762.0000 | - |
| example_07_large_scale_routing_no_warm_start | congestion_net_envelope_cache_misses | - | 26740.0000 | - |
| example_07_large_scale_routing_no_warm_start | congestion_grid_span_cache_hits | - | 193229.0000 | - |
| example_07_large_scale_routing_no_warm_start | congestion_grid_span_cache_misses | - | 25872.0000 | - |
| example_07_large_scale_routing_no_warm_start | congestion_candidate_ids | - | 364731.0000 | - |
| example_07_large_scale_routing_no_warm_start | congestion_exact_pair_checks | - | 305397.0000 | - |
| example_07_large_scale_routing_no_warm_start | verify_dynamic_candidate_nets | - | 0.0000 | - |
Step 20 - Verification net-envelope broad phase
Measured on 2026-03-31T23:14:19-07:00.
Baseline: docs/performance_baseline.json.
Findings:
- Final verification now queries dynamic net envelopes before descending into per-object overlap checks.
- This slice should leave routing search metrics stable and reduce dynamic verification scans when non-overlapping nets are present.
Performance Baseline Diff
| Scenario | Metric | Baseline | Current | Delta |
|---|---|---|---|---|
| example_05_orientation_stress | duration_s | 0.2312 | 0.2370 | +0.0058 |
| example_05_orientation_stress | nodes_expanded | 286.0000 | 286.0000 | +0.0000 |
| example_05_orientation_stress | congestion_check_calls | 213.0000 | 213.0000 | +0.0000 |
| example_05_orientation_stress | congestion_candidate_nets | - | 15.0000 | - |
| example_05_orientation_stress | congestion_net_envelope_cache_hits | - | 133.0000 | - |
| example_05_orientation_stress | congestion_net_envelope_cache_misses | - | 22.0000 | - |
| example_05_orientation_stress | congestion_grid_span_cache_hits | 133.0000 | 11.0000 | -122.0000 |
| example_05_orientation_stress | congestion_grid_span_cache_misses | 22.0000 | 4.0000 | -18.0000 |
| example_05_orientation_stress | congestion_candidate_ids | 19.0000 | 19.0000 | +0.0000 |
| example_05_orientation_stress | congestion_exact_pair_checks | 18.0000 | 18.0000 | +0.0000 |
| example_05_orientation_stress | verify_dynamic_candidate_nets | - | 3.0000 | - |
| example_05_orientation_stress | verify_dynamic_exact_pair_checks | 4.0000 | 4.0000 | +0.0000 |
| example_07_large_scale_routing | duration_s | 0.1858 | 0.1843 | -0.0016 |
| example_07_large_scale_routing | nodes_expanded | 78.0000 | 78.0000 | +0.0000 |
| example_07_large_scale_routing | congestion_check_calls | 0.0000 | 0.0000 | +0.0000 |
| example_07_large_scale_routing | congestion_candidate_nets | - | 0.0000 | - |
| example_07_large_scale_routing | congestion_net_envelope_cache_hits | - | 0.0000 | - |
| example_07_large_scale_routing | congestion_net_envelope_cache_misses | - | 0.0000 | - |
| example_07_large_scale_routing | congestion_grid_span_cache_hits | 0.0000 | 0.0000 | +0.0000 |
| example_07_large_scale_routing | congestion_grid_span_cache_misses | 0.0000 | 0.0000 | +0.0000 |
| example_07_large_scale_routing | congestion_candidate_ids | 0.0000 | 0.0000 | +0.0000 |
| example_07_large_scale_routing | congestion_exact_pair_checks | 0.0000 | 0.0000 | +0.0000 |
| example_07_large_scale_routing | verify_dynamic_candidate_nets | - | 158.0000 | - |
| example_07_large_scale_routing | verify_dynamic_exact_pair_checks | 27.0000 | 24.0000 | -3.0000 |
| example_07_large_scale_routing_no_warm_start | duration_s | - | 85.5035 | - |
| example_07_large_scale_routing_no_warm_start | nodes_expanded | - | 173498.0000 | - |
| example_07_large_scale_routing_no_warm_start | congestion_check_calls | - | 344747.0000 | - |
| example_07_large_scale_routing_no_warm_start | congestion_candidate_nets | - | 557244.0000 | - |
| example_07_large_scale_routing_no_warm_start | congestion_net_envelope_cache_hits | - | 199762.0000 | - |
| example_07_large_scale_routing_no_warm_start | congestion_net_envelope_cache_misses | - | 26740.0000 | - |
| example_07_large_scale_routing_no_warm_start | congestion_grid_span_cache_hits | - | 193229.0000 | - |
| example_07_large_scale_routing_no_warm_start | congestion_grid_span_cache_misses | - | 25872.0000 | - |
| example_07_large_scale_routing_no_warm_start | congestion_candidate_ids | - | 364731.0000 | - |
| example_07_large_scale_routing_no_warm_start | congestion_exact_pair_checks | - | 305397.0000 | - |
| example_07_large_scale_routing_no_warm_start | verify_dynamic_candidate_nets | - | 3723.0000 | - |
| example_07_large_scale_routing_no_warm_start | verify_dynamic_exact_pair_checks | - | 1428.0000 | - |
Step 21 - Per-net grid occupancy before object descent
Measured on 2026-03-31T23:45:12-07:00.
Baseline: docs/performance_baseline.json.
Findings:
- Congestion checks now cache candidate net ids from dynamic grid occupancy before building the heavier per-span object unions.
- On the no-warm-start example_07 canary, candidate nets fell materially from the prior net-envelope pass while nodes expanded and congestion check calls stayed flat.
- Object-level candidate ids and exact pair checks stayed essentially unchanged, so the next likely win is a finer-grained dynamic structure per long net rather than more cache layering.
Performance Baseline Diff
| Scenario | Metric | Baseline | Current | Delta |
|---|---|---|---|---|
| example_05_orientation_stress | duration_s | 0.2327 | 0.2399 | +0.0072 |
| example_05_orientation_stress | nodes_expanded | 286.0000 | 286.0000 | +0.0000 |
| example_05_orientation_stress | congestion_check_calls | 213.0000 | 213.0000 | +0.0000 |
| example_05_orientation_stress | congestion_candidate_nets | 15.0000 | 15.0000 | +0.0000 |
| example_05_orientation_stress | congestion_net_envelope_cache_hits | 133.0000 | 133.0000 | +0.0000 |
| example_05_orientation_stress | congestion_net_envelope_cache_misses | 22.0000 | 22.0000 | +0.0000 |
| example_05_orientation_stress | congestion_grid_net_cache_hits | - | 11.0000 | - |
| example_05_orientation_stress | congestion_grid_net_cache_misses | - | 4.0000 | - |
| example_05_orientation_stress | congestion_grid_span_cache_hits | 11.0000 | 11.0000 | +0.0000 |
| example_05_orientation_stress | congestion_grid_span_cache_misses | 4.0000 | 4.0000 | +0.0000 |
| example_05_orientation_stress | congestion_candidate_ids | 19.0000 | 19.0000 | +0.0000 |
| example_05_orientation_stress | congestion_exact_pair_checks | 18.0000 | 18.0000 | +0.0000 |
| example_05_orientation_stress | verify_dynamic_candidate_nets | 3.0000 | 3.0000 | +0.0000 |
| example_05_orientation_stress | verify_dynamic_exact_pair_checks | 4.0000 | 4.0000 | +0.0000 |
| example_07_large_scale_routing | duration_s | 0.1865 | 0.1881 | +0.0015 |
| example_07_large_scale_routing | nodes_expanded | 78.0000 | 78.0000 | +0.0000 |
| example_07_large_scale_routing | congestion_check_calls | 0.0000 | 0.0000 | +0.0000 |
| example_07_large_scale_routing | congestion_candidate_nets | 0.0000 | 0.0000 | +0.0000 |
| example_07_large_scale_routing | congestion_net_envelope_cache_hits | 0.0000 | 0.0000 | +0.0000 |
| example_07_large_scale_routing | congestion_net_envelope_cache_misses | 0.0000 | 0.0000 | +0.0000 |
| example_07_large_scale_routing | congestion_grid_net_cache_hits | - | 0.0000 | - |
| example_07_large_scale_routing | congestion_grid_net_cache_misses | - | 0.0000 | - |
| example_07_large_scale_routing | congestion_grid_span_cache_hits | 0.0000 | 0.0000 | +0.0000 |
| example_07_large_scale_routing | congestion_grid_span_cache_misses | 0.0000 | 0.0000 | +0.0000 |
| example_07_large_scale_routing | congestion_candidate_ids | 0.0000 | 0.0000 | +0.0000 |
| example_07_large_scale_routing | congestion_exact_pair_checks | 0.0000 | 0.0000 | +0.0000 |
| example_07_large_scale_routing | verify_dynamic_candidate_nets | 158.0000 | 158.0000 | +0.0000 |
| example_07_large_scale_routing | verify_dynamic_exact_pair_checks | 24.0000 | 24.0000 | +0.0000 |
| example_07_large_scale_routing_no_warm_start | duration_s | - | 85.4211 | - |
| example_07_large_scale_routing_no_warm_start | nodes_expanded | - | 173498.0000 | - |
| example_07_large_scale_routing_no_warm_start | congestion_check_calls | - | 344747.0000 | - |
| example_07_large_scale_routing_no_warm_start | congestion_candidate_nets | - | 386147.0000 | - |
| example_07_large_scale_routing_no_warm_start | congestion_net_envelope_cache_hits | - | 199762.0000 | - |
| example_07_large_scale_routing_no_warm_start | congestion_net_envelope_cache_misses | - | 26740.0000 | - |
| example_07_large_scale_routing_no_warm_start | congestion_grid_net_cache_hits | - | 193229.0000 | - |
| example_07_large_scale_routing_no_warm_start | congestion_grid_net_cache_misses | - | 25872.0000 | - |
| example_07_large_scale_routing_no_warm_start | congestion_grid_span_cache_hits | - | 189741.0000 | - |
| example_07_large_scale_routing_no_warm_start | congestion_grid_span_cache_misses | - | 25579.0000 | - |
| example_07_large_scale_routing_no_warm_start | congestion_candidate_ids | - | 364731.0000 | - |
| example_07_large_scale_routing_no_warm_start | congestion_exact_pair_checks | - | 305397.0000 | - |
| example_07_large_scale_routing_no_warm_start | verify_dynamic_candidate_nets | - | 3723.0000 | - |
| example_07_large_scale_routing_no_warm_start | verify_dynamic_exact_pair_checks | - | 1436.0000 | - |
Step 22 - Segmented per-net dynamic envelopes (rejected)
Measured on 2026-04-01T00:02:00-07:00.
Baseline: docs/performance_baseline.json.
Findings:
- Dynamic objects were grouped into small per-net segment envelopes and congestion/verification descended through those groups before raw object checks.
- This was the first pass aimed at reducing object-level confirmation work directly, but it regressed the no-warm-start example_07 canary instead of helping it.
- Relative to the accepted per-net grid-occupancy state, the canary worsened from about
85.36sto99.81s, from173498to187339expanded nodes, from344747to378630congestion checks, and from364731to392058candidate ids. - The segment layer appears to have increased search churn and broad-phase overhead enough to outweigh any local pruning benefit, so this pass was rejected and reverted.
Step 23 - End-of-iteration reverify only
Measured on 2026-04-01T19:00:59-07:00.
Baseline: docs/performance_baseline.json.
Findings:
- Added full end-of-iteration reverify using final installed geometry before deciding whether negotiated congestion should continue.
- This slice still reroutes every net every iteration; it only changes conflict truth and iteration metrics.
Performance Baseline Diff
| Scenario | Metric | Baseline | Current | Delta |
|---|---|---|---|---|
| example_02_congestion_resolution | duration_s | 0.3241 | 0.3359 | +0.0118 |
| example_02_congestion_resolution | route_iterations | 1.0000 | 1.0000 | +0.0000 |
| example_02_congestion_resolution | nets_routed | 3.0000 | 3.0000 | +0.0000 |
| example_02_congestion_resolution | nets_carried_forward | - | 0.0000 | - |
| example_02_congestion_resolution | nodes_expanded | 366.0000 | 366.0000 | +0.0000 |
| example_02_congestion_resolution | congestion_check_calls | 0.0000 | 0.0000 | +0.0000 |
| example_02_congestion_resolution | congestion_cache_misses | 0.0000 | 0.0000 | +0.0000 |
| example_02_congestion_resolution | iteration_reverify_calls | - | 1.0000 | - |
| example_02_congestion_resolution | iteration_reverified_nets | - | 3.0000 | - |
| example_02_congestion_resolution | iteration_conflicting_nets | - | 0.0000 | - |
| example_02_congestion_resolution | iteration_conflict_edges | - | 0.0000 | - |
| example_02_congestion_resolution | congestion_candidate_nets | 0.0000 | 0.0000 | +0.0000 |
| example_02_congestion_resolution | congestion_candidate_ids | 0.0000 | 0.0000 | +0.0000 |
| example_02_congestion_resolution | congestion_exact_pair_checks | 0.0000 | 0.0000 | +0.0000 |
| example_05_orientation_stress | duration_s | 0.2283 | 0.2312 | +0.0029 |
| example_05_orientation_stress | route_iterations | 2.0000 | 2.0000 | +0.0000 |
| example_05_orientation_stress | nets_routed | 6.0000 | 6.0000 | +0.0000 |
| example_05_orientation_stress | nets_carried_forward | - | 0.0000 | - |
| example_05_orientation_stress | nodes_expanded | 286.0000 | 286.0000 | +0.0000 |
| example_05_orientation_stress | congestion_check_calls | 213.0000 | 213.0000 | +0.0000 |
| example_05_orientation_stress | congestion_cache_misses | 213.0000 | 213.0000 | +0.0000 |
| example_05_orientation_stress | iteration_reverify_calls | - | 2.0000 | - |
| example_05_orientation_stress | iteration_reverified_nets | - | 6.0000 | - |
| example_05_orientation_stress | iteration_conflicting_nets | - | 2.0000 | - |
| example_05_orientation_stress | iteration_conflict_edges | - | 1.0000 | - |
| example_05_orientation_stress | congestion_candidate_nets | 15.0000 | 15.0000 | +0.0000 |
| example_05_orientation_stress | congestion_candidate_ids | 19.0000 | 19.0000 | +0.0000 |
| example_05_orientation_stress | congestion_exact_pair_checks | 18.0000 | 18.0000 | +0.0000 |
| example_07_large_scale_routing | duration_s | 0.1888 | 0.1921 | +0.0032 |
| example_07_large_scale_routing | route_iterations | 1.0000 | 1.0000 | +0.0000 |
| example_07_large_scale_routing | nets_routed | 10.0000 | 10.0000 | +0.0000 |
| example_07_large_scale_routing | nets_carried_forward | - | 0.0000 | - |
| example_07_large_scale_routing | nodes_expanded | 78.0000 | 78.0000 | +0.0000 |
| example_07_large_scale_routing | congestion_check_calls | 0.0000 | 0.0000 | +0.0000 |
| example_07_large_scale_routing | congestion_cache_misses | 0.0000 | 0.0000 | +0.0000 |
| example_07_large_scale_routing | iteration_reverify_calls | - | 1.0000 | - |
| example_07_large_scale_routing | iteration_reverified_nets | - | 10.0000 | - |
| example_07_large_scale_routing | iteration_conflicting_nets | - | 0.0000 | - |
| example_07_large_scale_routing | iteration_conflict_edges | - | 0.0000 | - |
| example_07_large_scale_routing | congestion_candidate_nets | 0.0000 | 0.0000 | +0.0000 |
| example_07_large_scale_routing | congestion_candidate_ids | 0.0000 | 0.0000 | +0.0000 |
| example_07_large_scale_routing | congestion_exact_pair_checks | 0.0000 | 0.0000 | +0.0000 |
| example_07_large_scale_routing_no_warm_start | duration_s | - | 85.3822 | - |
| example_07_large_scale_routing_no_warm_start | route_iterations | - | 15.0000 | - |
| example_07_large_scale_routing_no_warm_start | nets_routed | - | 150.0000 | - |
| example_07_large_scale_routing_no_warm_start | nets_carried_forward | - | 0.0000 | - |
| example_07_large_scale_routing_no_warm_start | nodes_expanded | - | 173498.0000 | - |
| example_07_large_scale_routing_no_warm_start | congestion_check_calls | - | 344747.0000 | - |
| example_07_large_scale_routing_no_warm_start | congestion_cache_misses | - | 344747.0000 | - |
| example_07_large_scale_routing_no_warm_start | iteration_reverify_calls | - | 15.0000 | - |
| example_07_large_scale_routing_no_warm_start | iteration_reverified_nets | - | 150.0000 | - |
| example_07_large_scale_routing_no_warm_start | iteration_conflicting_nets | - | 145.0000 | - |
| example_07_large_scale_routing_no_warm_start | iteration_conflict_edges | - | 165.0000 | - |
| example_07_large_scale_routing_no_warm_start | congestion_candidate_nets | - | 386147.0000 | - |
| example_07_large_scale_routing_no_warm_start | congestion_candidate_ids | - | 364731.0000 | - |
| example_07_large_scale_routing_no_warm_start | congestion_exact_pair_checks | - | 305397.0000 | - |
Step 24 - Early stop on stalled conflict graph
Measured on 2026-04-01T19:16:22-07:00.
Baseline: docs/performance_baseline.json.
Findings:
- Rejected selective reroute working-set policies after they made the no-warm-start canary dramatically slower.
- Kept end-of-iteration reverify and now stop negotiated-congestion once the final conflict graph repeats twice with no structural change.
- On the no-warm-start canary this cut runtime from about 85.9s to 5.45s, with route iterations dropping from 15 to 4 and congestion checks from 344747 to 12096.
Performance Baseline Diff
| Scenario | Metric | Baseline | Current | Delta |
|---|---|---|---|---|
| example_02_congestion_resolution | duration_s | 0.3241 | 0.3460 | +0.0219 |
| example_02_congestion_resolution | route_iterations | 1.0000 | 1.0000 | +0.0000 |
| example_02_congestion_resolution | nets_routed | 3.0000 | 3.0000 | +0.0000 |
| example_02_congestion_resolution | nets_carried_forward | - | 0.0000 | - |
| example_02_congestion_resolution | nodes_expanded | 366.0000 | 366.0000 | +0.0000 |
| example_02_congestion_resolution | congestion_check_calls | 0.0000 | 0.0000 | +0.0000 |
| example_02_congestion_resolution | congestion_cache_misses | 0.0000 | 0.0000 | +0.0000 |
| example_02_congestion_resolution | iteration_reverify_calls | - | 1.0000 | - |
| example_02_congestion_resolution | iteration_reverified_nets | - | 3.0000 | - |
| example_02_congestion_resolution | iteration_conflicting_nets | - | 0.0000 | - |
| example_02_congestion_resolution | iteration_conflict_edges | - | 0.0000 | - |
| example_02_congestion_resolution | congestion_candidate_nets | 0.0000 | 0.0000 | +0.0000 |
| example_02_congestion_resolution | congestion_candidate_ids | 0.0000 | 0.0000 | +0.0000 |
| example_02_congestion_resolution | congestion_exact_pair_checks | 0.0000 | 0.0000 | +0.0000 |
| example_05_orientation_stress | duration_s | 0.2283 | 0.3251 | +0.0968 |
| example_05_orientation_stress | route_iterations | 2.0000 | 3.0000 | +1.0000 |
| example_05_orientation_stress | nets_routed | 6.0000 | 9.0000 | +3.0000 |
| example_05_orientation_stress | nets_carried_forward | - | 0.0000 | - |
| example_05_orientation_stress | nodes_expanded | 286.0000 | 571.0000 | +285.0000 |
| example_05_orientation_stress | congestion_check_calls | 213.0000 | 306.0000 | +93.0000 |
| example_05_orientation_stress | congestion_cache_misses | 213.0000 | 306.0000 | +93.0000 |
| example_05_orientation_stress | iteration_reverify_calls | - | 3.0000 | - |
| example_05_orientation_stress | iteration_reverified_nets | - | 9.0000 | - |
| example_05_orientation_stress | iteration_conflicting_nets | - | 6.0000 | - |
| example_05_orientation_stress | iteration_conflict_edges | - | 3.0000 | - |
| example_05_orientation_stress | congestion_candidate_nets | 15.0000 | 92.0000 | +77.0000 |
| example_05_orientation_stress | congestion_candidate_ids | 19.0000 | 80.0000 | +61.0000 |
| example_05_orientation_stress | congestion_exact_pair_checks | 18.0000 | 68.0000 | +50.0000 |
| example_07_large_scale_routing | duration_s | 0.1888 | 0.1998 | +0.0110 |
| example_07_large_scale_routing | route_iterations | 1.0000 | 1.0000 | +0.0000 |
| example_07_large_scale_routing | nets_routed | 10.0000 | 10.0000 | +0.0000 |
| example_07_large_scale_routing | nets_carried_forward | - | 0.0000 | - |
| example_07_large_scale_routing | nodes_expanded | 78.0000 | 78.0000 | +0.0000 |
| example_07_large_scale_routing | congestion_check_calls | 0.0000 | 0.0000 | +0.0000 |
| example_07_large_scale_routing | congestion_cache_misses | 0.0000 | 0.0000 | +0.0000 |
| example_07_large_scale_routing | iteration_reverify_calls | - | 1.0000 | - |
| example_07_large_scale_routing | iteration_reverified_nets | - | 10.0000 | - |
| example_07_large_scale_routing | iteration_conflicting_nets | - | 0.0000 | - |
| example_07_large_scale_routing | iteration_conflict_edges | - | 0.0000 | - |
| example_07_large_scale_routing | congestion_candidate_nets | 0.0000 | 0.0000 | +0.0000 |
| example_07_large_scale_routing | congestion_candidate_ids | 0.0000 | 0.0000 | +0.0000 |
| example_07_large_scale_routing | congestion_exact_pair_checks | 0.0000 | 0.0000 | +0.0000 |
| example_07_large_scale_routing_no_warm_start | duration_s | - | 5.4956 | - |
| example_07_large_scale_routing_no_warm_start | route_iterations | - | 4.0000 | - |
| example_07_large_scale_routing_no_warm_start | nets_routed | - | 40.0000 | - |
| example_07_large_scale_routing_no_warm_start | nets_carried_forward | - | 0.0000 | - |
| example_07_large_scale_routing_no_warm_start | nodes_expanded | - | 4580.0000 | - |
| example_07_large_scale_routing_no_warm_start | congestion_check_calls | - | 12096.0000 | - |
| example_07_large_scale_routing_no_warm_start | congestion_cache_misses | - | 12096.0000 | - |
| example_07_large_scale_routing_no_warm_start | iteration_reverify_calls | - | 4.0000 | - |
| example_07_large_scale_routing_no_warm_start | iteration_reverified_nets | - | 40.0000 | - |
| example_07_large_scale_routing_no_warm_start | iteration_conflicting_nets | - | 34.0000 | - |
| example_07_large_scale_routing_no_warm_start | iteration_conflict_edges | - | 52.0000 | - |
| example_07_large_scale_routing_no_warm_start | congestion_candidate_nets | - | 24413.0000 | - |
| example_07_large_scale_routing_no_warm_start | congestion_candidate_ids | - | 21820.0000 | - |
| example_07_large_scale_routing_no_warm_start | congestion_exact_pair_checks | - | 18030.0000 | - |
Step 25 - Finalize stalled conflict stop
Measured on 2026-04-01T19:17:59-07:00.
Baseline: docs/performance_baseline.json.
Findings:
- Removed the leftover full-reroute pre-eviction from the rejected working-set experiment so normal multi-net cases keep their previous search behavior.
- Accepted state: end-of-iteration reverify plus early termination when the conflict graph repeats twice without structural change.
- The no-warm-start example_07 canary now runs in about 5.8s with 4 iterations and 9865 congestion checks, while example_05 returns to 2 iterations and 213 congestion checks.
Performance Baseline Diff
| Scenario | Metric | Baseline | Current | Delta |
|---|---|---|---|---|
| example_02_congestion_resolution | duration_s | 0.3241 | 0.3451 | +0.0209 |
| example_02_congestion_resolution | route_iterations | 1.0000 | 1.0000 | +0.0000 |
| example_02_congestion_resolution | nets_routed | 3.0000 | 3.0000 | +0.0000 |
| example_02_congestion_resolution | nets_carried_forward | - | 0.0000 | - |
| example_02_congestion_resolution | nodes_expanded | 366.0000 | 366.0000 | +0.0000 |
| example_02_congestion_resolution | congestion_check_calls | 0.0000 | 0.0000 | +0.0000 |
| example_02_congestion_resolution | congestion_cache_misses | 0.0000 | 0.0000 | +0.0000 |
| example_02_congestion_resolution | iteration_reverify_calls | - | 1.0000 | - |
| example_02_congestion_resolution | iteration_reverified_nets | - | 3.0000 | - |
| example_02_congestion_resolution | iteration_conflicting_nets | - | 0.0000 | - |
| example_02_congestion_resolution | iteration_conflict_edges | - | 0.0000 | - |
| example_02_congestion_resolution | congestion_candidate_nets | 0.0000 | 0.0000 | +0.0000 |
| example_02_congestion_resolution | congestion_candidate_ids | 0.0000 | 0.0000 | +0.0000 |
| example_02_congestion_resolution | congestion_exact_pair_checks | 0.0000 | 0.0000 | +0.0000 |
| example_05_orientation_stress | duration_s | 0.2283 | 0.2433 | +0.0150 |
| example_05_orientation_stress | route_iterations | 2.0000 | 2.0000 | +0.0000 |
| example_05_orientation_stress | nets_routed | 6.0000 | 6.0000 | +0.0000 |
| example_05_orientation_stress | nets_carried_forward | - | 0.0000 | - |
| example_05_orientation_stress | nodes_expanded | 286.0000 | 286.0000 | +0.0000 |
| example_05_orientation_stress | congestion_check_calls | 213.0000 | 213.0000 | +0.0000 |
| example_05_orientation_stress | congestion_cache_misses | 213.0000 | 213.0000 | +0.0000 |
| example_05_orientation_stress | iteration_reverify_calls | - | 2.0000 | - |
| example_05_orientation_stress | iteration_reverified_nets | - | 6.0000 | - |
| example_05_orientation_stress | iteration_conflicting_nets | - | 2.0000 | - |
| example_05_orientation_stress | iteration_conflict_edges | - | 1.0000 | - |
| example_05_orientation_stress | congestion_candidate_nets | 15.0000 | 15.0000 | +0.0000 |
| example_05_orientation_stress | congestion_candidate_ids | 19.0000 | 19.0000 | +0.0000 |
| example_05_orientation_stress | congestion_exact_pair_checks | 18.0000 | 18.0000 | +0.0000 |
| example_07_large_scale_routing | duration_s | 0.1888 | 0.1982 | +0.0094 |
| example_07_large_scale_routing | route_iterations | 1.0000 | 1.0000 | +0.0000 |
| example_07_large_scale_routing | nets_routed | 10.0000 | 10.0000 | +0.0000 |
| example_07_large_scale_routing | nets_carried_forward | - | 0.0000 | - |
| example_07_large_scale_routing | nodes_expanded | 78.0000 | 78.0000 | +0.0000 |
| example_07_large_scale_routing | congestion_check_calls | 0.0000 | 0.0000 | +0.0000 |
| example_07_large_scale_routing | congestion_cache_misses | 0.0000 | 0.0000 | +0.0000 |
| example_07_large_scale_routing | iteration_reverify_calls | - | 1.0000 | - |
| example_07_large_scale_routing | iteration_reverified_nets | - | 10.0000 | - |
| example_07_large_scale_routing | iteration_conflicting_nets | - | 0.0000 | - |
| example_07_large_scale_routing | iteration_conflict_edges | - | 0.0000 | - |
| example_07_large_scale_routing | congestion_candidate_nets | 0.0000 | 0.0000 | +0.0000 |
| example_07_large_scale_routing | congestion_candidate_ids | 0.0000 | 0.0000 | +0.0000 |
| example_07_large_scale_routing | congestion_exact_pair_checks | 0.0000 | 0.0000 | +0.0000 |
| example_07_large_scale_routing_no_warm_start | duration_s | - | 5.7283 | - |
| example_07_large_scale_routing_no_warm_start | route_iterations | - | 4.0000 | - |
| example_07_large_scale_routing_no_warm_start | nets_routed | - | 40.0000 | - |
| example_07_large_scale_routing_no_warm_start | nets_carried_forward | - | 0.0000 | - |
| example_07_large_scale_routing_no_warm_start | nodes_expanded | - | 6567.0000 | - |
| example_07_large_scale_routing_no_warm_start | congestion_check_calls | - | 9865.0000 | - |
| example_07_large_scale_routing_no_warm_start | congestion_cache_misses | - | 9865.0000 | - |
| example_07_large_scale_routing_no_warm_start | iteration_reverify_calls | - | 4.0000 | - |
| example_07_large_scale_routing_no_warm_start | iteration_reverified_nets | - | 40.0000 | - |
| example_07_large_scale_routing_no_warm_start | iteration_conflicting_nets | - | 35.0000 | - |
| example_07_large_scale_routing_no_warm_start | iteration_conflict_edges | - | 52.0000 | - |
| example_07_large_scale_routing_no_warm_start | congestion_candidate_nets | - | 12879.0000 | - |
| example_07_large_scale_routing_no_warm_start | congestion_candidate_ids | - | 13342.0000 | - |
| example_07_large_scale_routing_no_warm_start | congestion_exact_pair_checks | - | 11116.0000 | - |
Step 24 - Conflict-directed reroute working set
Measured on 2026-04-01T19:30:43-07:00.
Baseline: docs/performance_baseline.json.
Findings:
- Later iterations now reroute only unresolved nets plus a deterministic greedy cover of the end-of-iteration conflict graph.
- Repeated conflict signatures widen the working set to all conflicting nets and then all nets once if the graph keeps stalling.
Performance Baseline Diff
| Scenario | Metric | Baseline | Current | Delta |
|---|---|---|---|---|
| example_02_congestion_resolution | duration_s | 0.3241 | 0.3261 | +0.0020 |
| example_02_congestion_resolution | route_iterations | 1.0000 | 1.0000 | +0.0000 |
| example_02_congestion_resolution | nets_routed | 3.0000 | 3.0000 | +0.0000 |
| example_02_congestion_resolution | nets_carried_forward | - | 0.0000 | - |
| example_02_congestion_resolution | nodes_expanded | 366.0000 | 366.0000 | +0.0000 |
| example_02_congestion_resolution | congestion_check_calls | 0.0000 | 0.0000 | +0.0000 |
| example_02_congestion_resolution | congestion_cache_misses | 0.0000 | 0.0000 | +0.0000 |
| example_02_congestion_resolution | iteration_reverify_calls | - | 1.0000 | - |
| example_02_congestion_resolution | iteration_reverified_nets | - | 3.0000 | - |
| example_02_congestion_resolution | iteration_conflicting_nets | - | 0.0000 | - |
| example_02_congestion_resolution | iteration_conflict_edges | - | 0.0000 | - |
| example_02_congestion_resolution | congestion_candidate_nets | 0.0000 | 0.0000 | +0.0000 |
| example_02_congestion_resolution | congestion_candidate_ids | 0.0000 | 0.0000 | +0.0000 |
| example_02_congestion_resolution | congestion_exact_pair_checks | 0.0000 | 0.0000 | +0.0000 |
| example_05_orientation_stress | duration_s | 0.2283 | 0.2246 | -0.0037 |
| example_05_orientation_stress | route_iterations | 2.0000 | 2.0000 | +0.0000 |
| example_05_orientation_stress | nets_routed | 6.0000 | 5.0000 | -1.0000 |
| example_05_orientation_stress | nets_carried_forward | - | 1.0000 | - |
| example_05_orientation_stress | nodes_expanded | 286.0000 | 284.0000 | -2.0000 |
| example_05_orientation_stress | congestion_check_calls | 213.0000 | 207.0000 | -6.0000 |
| example_05_orientation_stress | congestion_cache_misses | 213.0000 | 207.0000 | -6.0000 |
| example_05_orientation_stress | iteration_reverify_calls | - | 2.0000 | - |
| example_05_orientation_stress | iteration_reverified_nets | - | 6.0000 | - |
| example_05_orientation_stress | iteration_conflicting_nets | - | 2.0000 | - |
| example_05_orientation_stress | iteration_conflict_edges | - | 1.0000 | - |
| example_05_orientation_stress | congestion_candidate_nets | 15.0000 | 15.0000 | +0.0000 |
| example_05_orientation_stress | congestion_candidate_ids | 19.0000 | 19.0000 | +0.0000 |
| example_05_orientation_stress | congestion_exact_pair_checks | 18.0000 | 18.0000 | +0.0000 |
| example_07_large_scale_routing | duration_s | 0.1888 | 0.1884 | -0.0004 |
| example_07_large_scale_routing | route_iterations | 1.0000 | 1.0000 | +0.0000 |
| example_07_large_scale_routing | nets_routed | 10.0000 | 10.0000 | +0.0000 |
| example_07_large_scale_routing | nets_carried_forward | - | 0.0000 | - |
| example_07_large_scale_routing | nodes_expanded | 78.0000 | 78.0000 | +0.0000 |
| example_07_large_scale_routing | congestion_check_calls | 0.0000 | 0.0000 | +0.0000 |
| example_07_large_scale_routing | congestion_cache_misses | 0.0000 | 0.0000 | +0.0000 |
| example_07_large_scale_routing | iteration_reverify_calls | - | 1.0000 | - |
| example_07_large_scale_routing | iteration_reverified_nets | - | 10.0000 | - |
| example_07_large_scale_routing | iteration_conflicting_nets | - | 0.0000 | - |
| example_07_large_scale_routing | iteration_conflict_edges | - | 0.0000 | - |
| example_07_large_scale_routing | congestion_candidate_nets | 0.0000 | 0.0000 | +0.0000 |
| example_07_large_scale_routing | congestion_candidate_ids | 0.0000 | 0.0000 | +0.0000 |
| example_07_large_scale_routing | congestion_exact_pair_checks | 0.0000 | 0.0000 | +0.0000 |
| example_07_large_scale_routing_no_warm_start | duration_s | - | 1626.2304 | - |
| example_07_large_scale_routing_no_warm_start | route_iterations | - | 13.0000 | - |
| example_07_large_scale_routing_no_warm_start | nets_routed | - | 108.0000 | - |
| example_07_large_scale_routing_no_warm_start | nets_carried_forward | - | 13.0000 | - |
| example_07_large_scale_routing_no_warm_start | nodes_expanded | - | 1559998.0000 | - |
| example_07_large_scale_routing_no_warm_start | congestion_check_calls | - | 3699692.0000 | - |
| example_07_large_scale_routing_no_warm_start | congestion_cache_misses | - | 3699692.0000 | - |
| example_07_large_scale_routing_no_warm_start | iteration_reverify_calls | - | 12.0000 | - |
| example_07_large_scale_routing_no_warm_start | iteration_reverified_nets | - | 120.0000 | - |
| example_07_large_scale_routing_no_warm_start | iteration_conflicting_nets | - | 113.0000 | - |
| example_07_large_scale_routing_no_warm_start | iteration_conflict_edges | - | 138.0000 | - |
| example_07_large_scale_routing_no_warm_start | congestion_candidate_nets | - | 3444090.0000 | - |
| example_07_large_scale_routing_no_warm_start | congestion_candidate_ids | - | 2987961.0000 | - |
| example_07_large_scale_routing_no_warm_start | congestion_exact_pair_checks | - | 2440828.0000 | - |
Step 26 rejected - Progressive freezing reverted
Measured on 2026-04-01T20:20:32-07:00.
Baseline: docs/performance_baseline.json.
Findings:
- The progressive-freezing experiment was reverted after bounded no-warm-start probes reached only 2 valid routes after 4 iterations and consumed the one-shot thaw without restoring correctness.
- The tree below is the restored pre-freezing state so later passes can continue from the last accepted congestion baseline.
Performance Baseline Diff
| Scenario | Metric | Baseline | Current | Delta |
|---|---|---|---|---|
| example_02_congestion_resolution | duration_s | 0.3384 | 0.3500 | +0.0115 |
| example_02_congestion_resolution | route_iterations | 1.0000 | 1.0000 | +0.0000 |
| example_02_congestion_resolution | nets_routed | 3.0000 | 3.0000 | +0.0000 |
| example_02_congestion_resolution | nets_carried_forward | 0.0000 | 0.0000 | +0.0000 |
| example_02_congestion_resolution | nodes_expanded | 366.0000 | 366.0000 | +0.0000 |
| example_02_congestion_resolution | congestion_check_calls | 0.0000 | 0.0000 | +0.0000 |
| example_02_congestion_resolution | iteration_reverify_calls | 1.0000 | 1.0000 | +0.0000 |
| example_02_congestion_resolution | iteration_conflicting_nets | 0.0000 | 0.0000 | +0.0000 |
| example_02_congestion_resolution | iteration_conflict_edges | 0.0000 | 0.0000 | +0.0000 |
| example_02_congestion_resolution | congestion_candidate_nets | 0.0000 | 0.0000 | +0.0000 |
| example_02_congestion_resolution | congestion_candidate_ids | 0.0000 | 0.0000 | +0.0000 |
| example_02_congestion_resolution | congestion_exact_pair_checks | 0.0000 | 0.0000 | +0.0000 |
| example_05_orientation_stress | duration_s | 0.2366 | 0.2547 | +0.0180 |
| example_05_orientation_stress | route_iterations | 2.0000 | 2.0000 | +0.0000 |
| example_05_orientation_stress | nets_routed | 6.0000 | 6.0000 | +0.0000 |
| example_05_orientation_stress | nets_carried_forward | 0.0000 | 0.0000 | +0.0000 |
| example_05_orientation_stress | nodes_expanded | 286.0000 | 286.0000 | +0.0000 |
| example_05_orientation_stress | congestion_check_calls | 213.0000 | 213.0000 | +0.0000 |
| example_05_orientation_stress | iteration_reverify_calls | 2.0000 | 2.0000 | +0.0000 |
| example_05_orientation_stress | iteration_conflicting_nets | 2.0000 | 2.0000 | +0.0000 |
| example_05_orientation_stress | iteration_conflict_edges | 1.0000 | 1.0000 | +0.0000 |
| example_05_orientation_stress | congestion_candidate_nets | 15.0000 | 15.0000 | +0.0000 |
| example_05_orientation_stress | congestion_candidate_ids | 19.0000 | 19.0000 | +0.0000 |
| example_05_orientation_stress | congestion_exact_pair_checks | 18.0000 | 18.0000 | +0.0000 |
| example_07_large_scale_routing | duration_s | 0.1994 | 0.2061 | +0.0067 |
| example_07_large_scale_routing | route_iterations | 1.0000 | 1.0000 | +0.0000 |
| example_07_large_scale_routing | nets_routed | 10.0000 | 10.0000 | +0.0000 |
| example_07_large_scale_routing | nets_carried_forward | 0.0000 | 0.0000 | +0.0000 |
| example_07_large_scale_routing | nodes_expanded | 78.0000 | 78.0000 | +0.0000 |
| example_07_large_scale_routing | congestion_check_calls | 0.0000 | 0.0000 | +0.0000 |
| example_07_large_scale_routing | iteration_reverify_calls | 1.0000 | 1.0000 | +0.0000 |
| example_07_large_scale_routing | iteration_conflicting_nets | 0.0000 | 0.0000 | +0.0000 |
| example_07_large_scale_routing | iteration_conflict_edges | 0.0000 | 0.0000 | +0.0000 |
| example_07_large_scale_routing | congestion_candidate_nets | 0.0000 | 0.0000 | +0.0000 |
| example_07_large_scale_routing | congestion_candidate_ids | 0.0000 | 0.0000 | +0.0000 |
| example_07_large_scale_routing | congestion_exact_pair_checks | 0.0000 | 0.0000 | +0.0000 |
| example_07_large_scale_routing_no_warm_start | duration_s | - | 5.9146 | - |
| example_07_large_scale_routing_no_warm_start | route_iterations | - | 4.0000 | - |
| example_07_large_scale_routing_no_warm_start | nets_routed | - | 40.0000 | - |
| example_07_large_scale_routing_no_warm_start | nets_carried_forward | - | 0.0000 | - |
| example_07_large_scale_routing_no_warm_start | nodes_expanded | - | 6567.0000 | - |
| example_07_large_scale_routing_no_warm_start | congestion_check_calls | - | 9865.0000 | - |
| example_07_large_scale_routing_no_warm_start | iteration_reverify_calls | - | 4.0000 | - |
| example_07_large_scale_routing_no_warm_start | iteration_conflicting_nets | - | 35.0000 | - |
| example_07_large_scale_routing_no_warm_start | iteration_conflict_edges | - | 52.0000 | - |
| example_07_large_scale_routing_no_warm_start | congestion_candidate_nets | - | 12879.0000 | - |
| example_07_large_scale_routing_no_warm_start | congestion_candidate_ids | - | 13342.0000 | - |
| example_07_large_scale_routing_no_warm_start | congestion_exact_pair_checks | - | 11116.0000 | - |
Step 26 - Progressive freezing and frozen hard prunes
Measured on 2026-04-01T20:33:10-07:00.
Baseline: docs/performance_baseline.json.
Findings:
- Completed nets are now frozen after end-of-iteration reverify, later iterations reroute only the remaining unlocked nets, and overlaps with frozen nets are rejected as hard collisions.
- This slice also tracks best-so-far iteration quality so later slices can safely restore the strongest partial solution.
Performance Baseline Diff
| Scenario | Metric | Baseline | Current | Delta |
|---|---|---|---|---|
| example_02_congestion_resolution | duration_s | 0.3384 | 0.3202 | -0.0182 |
| example_02_congestion_resolution | route_iterations | 1.0000 | 1.0000 | +0.0000 |
| example_02_congestion_resolution | nets_routed | 3.0000 | 3.0000 | +0.0000 |
| example_02_congestion_resolution | nets_carried_forward | 0.0000 | 0.0000 | +0.0000 |
| example_02_congestion_resolution | frozen_nets_promoted | - | 3.0000 | - |
| example_02_congestion_resolution | frozen_nets_thawed | - | 0.0000 | - |
| example_02_congestion_resolution | frozen_net_hard_prunes | - | 0.0000 | - |
| example_02_congestion_resolution | best_iteration_completed_nets | - | 3.0000 | - |
| example_02_congestion_resolution | best_iteration_conflict_edges | - | 0.0000 | - |
| example_02_congestion_resolution | best_iteration_dynamic_collisions | - | 0.0000 | - |
| example_02_congestion_resolution | nodes_expanded | 366.0000 | 366.0000 | +0.0000 |
| example_02_congestion_resolution | congestion_check_calls | 0.0000 | 0.0000 | +0.0000 |
| example_02_congestion_resolution | congestion_candidate_nets | 0.0000 | 0.0000 | +0.0000 |
| example_02_congestion_resolution | congestion_candidate_ids | 0.0000 | 0.0000 | +0.0000 |
| example_02_congestion_resolution | congestion_exact_pair_checks | 0.0000 | 0.0000 | +0.0000 |
| example_05_orientation_stress | duration_s | 0.2366 | 11.5966 | +11.3600 |
| example_05_orientation_stress | route_iterations | 2.0000 | 6.0000 | +4.0000 |
| example_05_orientation_stress | nets_routed | 6.0000 | 14.0000 | +8.0000 |
| example_05_orientation_stress | nets_carried_forward | 0.0000 | 4.0000 | +4.0000 |
| example_05_orientation_stress | frozen_nets_promoted | - | 2.0000 | - |
| example_05_orientation_stress | frozen_nets_thawed | - | 1.0000 | - |
| example_05_orientation_stress | frozen_net_hard_prunes | - | 865.0000 | - |
| example_05_orientation_stress | best_iteration_completed_nets | - | 1.0000 | - |
| example_05_orientation_stress | best_iteration_conflict_edges | - | 1.0000 | - |
| example_05_orientation_stress | best_iteration_dynamic_collisions | - | 2.0000 | - |
| example_05_orientation_stress | nodes_expanded | 286.0000 | 14395.0000 | +14109.0000 |
| example_05_orientation_stress | congestion_check_calls | 213.0000 | 24765.0000 | +24552.0000 |
| example_05_orientation_stress | congestion_candidate_nets | 15.0000 | 8658.0000 | +8643.0000 |
| example_05_orientation_stress | congestion_candidate_ids | 19.0000 | 10770.0000 | +10751.0000 |
| example_05_orientation_stress | congestion_exact_pair_checks | 18.0000 | 8579.0000 | +8561.0000 |
| example_07_large_scale_routing | duration_s | 0.1994 | 0.1901 | -0.0092 |
| example_07_large_scale_routing | route_iterations | 1.0000 | 1.0000 | +0.0000 |
| example_07_large_scale_routing | nets_routed | 10.0000 | 10.0000 | +0.0000 |
| example_07_large_scale_routing | nets_carried_forward | 0.0000 | 0.0000 | +0.0000 |
| example_07_large_scale_routing | frozen_nets_promoted | - | 10.0000 | - |
| example_07_large_scale_routing | frozen_nets_thawed | - | 0.0000 | - |
| example_07_large_scale_routing | frozen_net_hard_prunes | - | 0.0000 | - |
| example_07_large_scale_routing | best_iteration_completed_nets | - | 10.0000 | - |
| example_07_large_scale_routing | best_iteration_conflict_edges | - | 0.0000 | - |
| example_07_large_scale_routing | best_iteration_dynamic_collisions | - | 0.0000 | - |
| example_07_large_scale_routing | nodes_expanded | 78.0000 | 78.0000 | +0.0000 |
| example_07_large_scale_routing | congestion_check_calls | 0.0000 | 0.0000 | +0.0000 |
| example_07_large_scale_routing | congestion_candidate_nets | 0.0000 | 0.0000 | +0.0000 |
| example_07_large_scale_routing | congestion_candidate_ids | 0.0000 | 0.0000 | +0.0000 |
| example_07_large_scale_routing | congestion_exact_pair_checks | 0.0000 | 0.0000 | +0.0000 |
| example_07_large_scale_routing_no_warm_start | duration_s | - | 2136.7523 | - |
| example_07_large_scale_routing_no_warm_start | route_iterations | - | 8.0000 | - |
| example_07_large_scale_routing_no_warm_start | nets_routed | - | 62.0000 | - |
| example_07_large_scale_routing_no_warm_start | nets_carried_forward | - | 10.0000 | - |
| example_07_large_scale_routing_no_warm_start | frozen_nets_promoted | - | 4.0000 | - |
| example_07_large_scale_routing_no_warm_start | frozen_nets_thawed | - | 2.0000 | - |
| example_07_large_scale_routing_no_warm_start | frozen_net_hard_prunes | - | 76321.0000 | - |
| example_07_large_scale_routing_no_warm_start | best_iteration_completed_nets | - | 2.0000 | - |
| example_07_large_scale_routing_no_warm_start | best_iteration_conflict_edges | - | 12.0000 | - |
| example_07_large_scale_routing_no_warm_start | best_iteration_dynamic_collisions | - | 50.0000 | - |
| example_07_large_scale_routing_no_warm_start | nodes_expanded | - | 1849024.0000 | - |
| example_07_large_scale_routing_no_warm_start | congestion_check_calls | - | 4049028.0000 | - |
| example_07_large_scale_routing_no_warm_start | congestion_candidate_nets | - | 4889029.0000 | - |
| example_07_large_scale_routing_no_warm_start | congestion_candidate_ids | - | 4032868.0000 | - |
| example_07_large_scale_routing_no_warm_start | congestion_exact_pair_checks | - | 3215112.0000 | - |
Step 26 - Progressive freezing and frozen hard prunes
Measured on 2026-04-01T20:36:40-07:00.
Baseline: docs/performance_baseline.json.
Findings:
- Completed nets are frozen after end-of-iteration reverify, later iterations reroute only the remaining unlocked nets, and overlaps with frozen nets are rejected as hard collisions.
- The router also restores the strongest reverified iteration snapshot before final refinement and verification.
Performance Baseline Diff
| Scenario | Metric | Baseline | Current | Delta |
|---|---|---|---|---|
| example_02_congestion_resolution | duration_s | 0.3384 | 0.3401 | +0.0017 |
| example_02_congestion_resolution | route_iterations | 1.0000 | 1.0000 | +0.0000 |
| example_02_congestion_resolution | nets_routed | 3.0000 | 3.0000 | +0.0000 |
| example_02_congestion_resolution | nets_carried_forward | 0.0000 | 0.0000 | +0.0000 |
| example_02_congestion_resolution | frozen_nets_promoted | - | 3.0000 | - |
| example_02_congestion_resolution | frozen_nets_thawed | - | 0.0000 | - |
| example_02_congestion_resolution | frozen_net_hard_prunes | - | 0.0000 | - |
| example_02_congestion_resolution | best_iteration_completed_nets | - | 3.0000 | - |
| example_02_congestion_resolution | best_iteration_conflict_edges | - | 0.0000 | - |
| example_02_congestion_resolution | best_iteration_dynamic_collisions | - | 0.0000 | - |
| example_02_congestion_resolution | nodes_expanded | 366.0000 | 366.0000 | +0.0000 |
| example_02_congestion_resolution | congestion_check_calls | 0.0000 | 0.0000 | +0.0000 |
| example_02_congestion_resolution | congestion_candidate_nets | 0.0000 | 0.0000 | +0.0000 |
| example_02_congestion_resolution | congestion_candidate_ids | 0.0000 | 0.0000 | +0.0000 |
| example_02_congestion_resolution | congestion_exact_pair_checks | 0.0000 | 0.0000 | +0.0000 |
| example_02_congestion_resolution | iteration_reverify_calls | 1.0000 | 1.0000 | +0.0000 |
| example_02_congestion_resolution | iteration_conflicting_nets | 0.0000 | 0.0000 | +0.0000 |
| example_02_congestion_resolution | iteration_conflict_edges | 0.0000 | 0.0000 | +0.0000 |
| example_05_orientation_stress | duration_s | 0.2366 | 12.3369 | +12.1002 |
| example_05_orientation_stress | route_iterations | 2.0000 | 6.0000 | +4.0000 |
| example_05_orientation_stress | nets_routed | 6.0000 | 14.0000 | +8.0000 |
| example_05_orientation_stress | nets_carried_forward | 0.0000 | 4.0000 | +4.0000 |
| example_05_orientation_stress | frozen_nets_promoted | - | 2.0000 | - |
| example_05_orientation_stress | frozen_nets_thawed | - | 1.0000 | - |
| example_05_orientation_stress | frozen_net_hard_prunes | - | 865.0000 | - |
| example_05_orientation_stress | best_iteration_completed_nets | - | 1.0000 | - |
| example_05_orientation_stress | best_iteration_conflict_edges | - | 1.0000 | - |
| example_05_orientation_stress | best_iteration_dynamic_collisions | - | 2.0000 | - |
| example_05_orientation_stress | nodes_expanded | 286.0000 | 14395.0000 | +14109.0000 |
| example_05_orientation_stress | congestion_check_calls | 213.0000 | 24765.0000 | +24552.0000 |
| example_05_orientation_stress | congestion_candidate_nets | 15.0000 | 8658.0000 | +8643.0000 |
| example_05_orientation_stress | congestion_candidate_ids | 19.0000 | 10770.0000 | +10751.0000 |
| example_05_orientation_stress | congestion_exact_pair_checks | 18.0000 | 8579.0000 | +8561.0000 |
| example_05_orientation_stress | iteration_reverify_calls | 2.0000 | 6.0000 | +4.0000 |
| example_05_orientation_stress | iteration_conflicting_nets | 2.0000 | 12.0000 | +10.0000 |
| example_05_orientation_stress | iteration_conflict_edges | 1.0000 | 6.0000 | +5.0000 |
| example_07_large_scale_routing | duration_s | 0.1994 | 0.1978 | -0.0016 |
| example_07_large_scale_routing | route_iterations | 1.0000 | 1.0000 | +0.0000 |
| example_07_large_scale_routing | nets_routed | 10.0000 | 10.0000 | +0.0000 |
| example_07_large_scale_routing | nets_carried_forward | 0.0000 | 0.0000 | +0.0000 |
| example_07_large_scale_routing | frozen_nets_promoted | - | 10.0000 | - |
| example_07_large_scale_routing | frozen_nets_thawed | - | 0.0000 | - |
| example_07_large_scale_routing | frozen_net_hard_prunes | - | 0.0000 | - |
| example_07_large_scale_routing | best_iteration_completed_nets | - | 10.0000 | - |
| example_07_large_scale_routing | best_iteration_conflict_edges | - | 0.0000 | - |
| example_07_large_scale_routing | best_iteration_dynamic_collisions | - | 0.0000 | - |
| example_07_large_scale_routing | nodes_expanded | 78.0000 | 78.0000 | +0.0000 |
| example_07_large_scale_routing | congestion_check_calls | 0.0000 | 0.0000 | +0.0000 |
| example_07_large_scale_routing | congestion_candidate_nets | 0.0000 | 0.0000 | +0.0000 |
| example_07_large_scale_routing | congestion_candidate_ids | 0.0000 | 0.0000 | +0.0000 |
| example_07_large_scale_routing | congestion_exact_pair_checks | 0.0000 | 0.0000 | +0.0000 |
| example_07_large_scale_routing | iteration_reverify_calls | 1.0000 | 1.0000 | +0.0000 |
| example_07_large_scale_routing | iteration_conflicting_nets | 0.0000 | 0.0000 | +0.0000 |
| example_07_large_scale_routing | iteration_conflict_edges | 0.0000 | 0.0000 | +0.0000 |
| example_07_large_scale_routing_no_warm_start | duration_s | - | 1500.4410 | - |
| example_07_large_scale_routing_no_warm_start | route_iterations | - | 7.0000 | - |
| example_07_large_scale_routing_no_warm_start | nets_routed | - | 60.0000 | - |
| example_07_large_scale_routing_no_warm_start | nets_carried_forward | - | 8.0000 | - |
| example_07_large_scale_routing_no_warm_start | frozen_nets_promoted | - | 4.0000 | - |
| example_07_large_scale_routing_no_warm_start | frozen_nets_thawed | - | 2.0000 | - |
| example_07_large_scale_routing_no_warm_start | frozen_net_hard_prunes | - | 37879.0000 | - |
| example_07_large_scale_routing_no_warm_start | best_iteration_completed_nets | - | 2.0000 | - |
| example_07_large_scale_routing_no_warm_start | best_iteration_conflict_edges | - | 12.0000 | - |
| example_07_large_scale_routing_no_warm_start | best_iteration_dynamic_collisions | - | 50.0000 | - |
| example_07_large_scale_routing_no_warm_start | nodes_expanded | - | 1282078.0000 | - |
| example_07_large_scale_routing_no_warm_start | congestion_check_calls | - | 2860073.0000 | - |
| example_07_large_scale_routing_no_warm_start | congestion_candidate_nets | - | 3432589.0000 | - |
| example_07_large_scale_routing_no_warm_start | congestion_candidate_ids | - | 2740129.0000 | - |
| example_07_large_scale_routing_no_warm_start | congestion_exact_pair_checks | - | 2266598.0000 | - |
| example_07_large_scale_routing_no_warm_start | iteration_reverify_calls | - | 6.0000 | - |
| example_07_large_scale_routing_no_warm_start | iteration_conflicting_nets | - | 51.0000 | - |
| example_07_large_scale_routing_no_warm_start | iteration_conflict_edges | - | 77.0000 | - |
Step 27 - Congestion presence precheck
Measured on 2026-04-01T20:49:16-07:00.
Baseline: docs/performance_baseline.json.
Findings:
- A cached per-span presence precheck now skips full congestion evaluation when a move's dilated polygons only cover dynamic-grid cells with no other routed nets.
- The goal of this slice is to reduce congestion_check_calls without changing search outcomes or the dynamic exact-check path.
Performance Baseline Diff
| Scenario | Metric | Baseline | Current | Delta |
|---|---|---|---|---|
| example_05_orientation_stress | duration_s | 0.2366 | 0.2573 | +0.0206 |
| example_05_orientation_stress | route_iterations | 2.0000 | 2.0000 | +0.0000 |
| example_05_orientation_stress | nets_routed | 6.0000 | 6.0000 | +0.0000 |
| example_05_orientation_stress | nodes_expanded | 286.0000 | 286.0000 | +0.0000 |
| example_05_orientation_stress | congestion_check_calls | 213.0000 | 155.0000 | -58.0000 |
| example_05_orientation_stress | congestion_presence_cache_hits | - | 185.0000 | - |
| example_05_orientation_stress | congestion_presence_cache_misses | - | 30.0000 | - |
| example_05_orientation_stress | congestion_presence_skips | - | 58.0000 | - |
| example_05_orientation_stress | congestion_cache_hits | 2.0000 | 2.0000 | +0.0000 |
| example_05_orientation_stress | congestion_cache_misses | 213.0000 | 155.0000 | -58.0000 |
| example_05_orientation_stress | congestion_candidate_nets | 15.0000 | 15.0000 | +0.0000 |
| example_05_orientation_stress | congestion_candidate_ids | 19.0000 | 19.0000 | +0.0000 |
| example_05_orientation_stress | congestion_exact_pair_checks | 18.0000 | 18.0000 | +0.0000 |
| example_07_large_scale_routing | duration_s | 0.1994 | 0.1977 | -0.0017 |
| example_07_large_scale_routing | route_iterations | 1.0000 | 1.0000 | +0.0000 |
| example_07_large_scale_routing | nets_routed | 10.0000 | 10.0000 | +0.0000 |
| example_07_large_scale_routing | nodes_expanded | 78.0000 | 78.0000 | +0.0000 |
| example_07_large_scale_routing | congestion_check_calls | 0.0000 | 0.0000 | +0.0000 |
| example_07_large_scale_routing | congestion_presence_cache_hits | - | 0.0000 | - |
| example_07_large_scale_routing | congestion_presence_cache_misses | - | 0.0000 | - |
| example_07_large_scale_routing | congestion_presence_skips | - | 0.0000 | - |
| example_07_large_scale_routing | congestion_cache_hits | 0.0000 | 0.0000 | +0.0000 |
| example_07_large_scale_routing | congestion_cache_misses | 0.0000 | 0.0000 | +0.0000 |
| example_07_large_scale_routing | congestion_candidate_nets | 0.0000 | 0.0000 | +0.0000 |
| example_07_large_scale_routing | congestion_candidate_ids | 0.0000 | 0.0000 | +0.0000 |
| example_07_large_scale_routing | congestion_exact_pair_checks | 0.0000 | 0.0000 | +0.0000 |
| example_07_large_scale_routing_no_warm_start | duration_s | - | 5.6221 | - |
| example_07_large_scale_routing_no_warm_start | route_iterations | - | 4.0000 | - |
| example_07_large_scale_routing_no_warm_start | nets_routed | - | 40.0000 | - |
| example_07_large_scale_routing_no_warm_start | nodes_expanded | - | 6567.0000 | - |
| example_07_large_scale_routing_no_warm_start | congestion_check_calls | - | 4549.0000 | - |
| example_07_large_scale_routing_no_warm_start | congestion_presence_cache_hits | - | 7568.0000 | - |
| example_07_large_scale_routing_no_warm_start | congestion_presence_cache_misses | - | 2480.0000 | - |
| example_07_large_scale_routing_no_warm_start | congestion_presence_skips | - | 5482.0000 | - |
| example_07_large_scale_routing_no_warm_start | congestion_cache_hits | - | 16.0000 | - |
| example_07_large_scale_routing_no_warm_start | congestion_cache_misses | - | 4549.0000 | - |
| example_07_large_scale_routing_no_warm_start | congestion_candidate_nets | - | 12879.0000 | - |
| example_07_large_scale_routing_no_warm_start | congestion_candidate_ids | - | 13342.0000 | - |
| example_07_large_scale_routing_no_warm_start | congestion_exact_pair_checks | - | 11116.0000 | - |
Step 28 - Candidate-net congestion precheck
Measured on 2026-04-01T20:59:46-07:00.
Baseline: docs/performance_baseline.json.
Findings:
- After the dynamic-grid occupancy precheck passes, search now asks whether any candidate nets survive the existing envelope and grid-net filters before paying for full congestion evaluation.
- This slice should reduce congestion_check_calls further if many occupied spans still have no candidate nets after the broad phases.
Performance Baseline Diff
| Scenario | Metric | Baseline | Current | Delta |
|---|---|---|---|---|
| example_05_orientation_stress | duration_s | 0.2491 | 0.2500 | +0.0009 |
| example_05_orientation_stress | route_iterations | 2.0000 | 2.0000 | +0.0000 |
| example_05_orientation_stress | nets_routed | 6.0000 | 6.0000 | +0.0000 |
| example_05_orientation_stress | nodes_expanded | 286.0000 | 286.0000 | +0.0000 |
| example_05_orientation_stress | congestion_check_calls | 155.0000 | 18.0000 | -137.0000 |
| example_05_orientation_stress | congestion_presence_cache_hits | 185.0000 | 185.0000 | +0.0000 |
| example_05_orientation_stress | congestion_presence_cache_misses | 30.0000 | 30.0000 | +0.0000 |
| example_05_orientation_stress | congestion_presence_skips | 58.0000 | 58.0000 | +0.0000 |
| example_05_orientation_stress | congestion_candidate_precheck_hits | - | 135.0000 | - |
| example_05_orientation_stress | congestion_candidate_precheck_misses | - | 22.0000 | - |
| example_05_orientation_stress | congestion_candidate_precheck_skips | - | 139.0000 | - |
| example_05_orientation_stress | congestion_cache_hits | 2.0000 | 0.0000 | -2.0000 |
| example_05_orientation_stress | congestion_cache_misses | 155.0000 | 18.0000 | -137.0000 |
| example_05_orientation_stress | congestion_candidate_nets | 15.0000 | 14.0000 | -1.0000 |
| example_05_orientation_stress | congestion_candidate_ids | 19.0000 | 18.0000 | -1.0000 |
| example_05_orientation_stress | congestion_exact_pair_checks | 18.0000 | 17.0000 | -1.0000 |
| example_07_large_scale_routing | duration_s | 0.1978 | 0.1941 | -0.0037 |
| example_07_large_scale_routing | route_iterations | 1.0000 | 1.0000 | +0.0000 |
| example_07_large_scale_routing | nets_routed | 10.0000 | 10.0000 | +0.0000 |
| example_07_large_scale_routing | nodes_expanded | 78.0000 | 78.0000 | +0.0000 |
| example_07_large_scale_routing | congestion_check_calls | 0.0000 | 0.0000 | +0.0000 |
| example_07_large_scale_routing | congestion_presence_cache_hits | 0.0000 | 0.0000 | +0.0000 |
| example_07_large_scale_routing | congestion_presence_cache_misses | 0.0000 | 0.0000 | +0.0000 |
| example_07_large_scale_routing | congestion_presence_skips | 0.0000 | 0.0000 | +0.0000 |
| example_07_large_scale_routing | congestion_candidate_precheck_hits | - | 0.0000 | - |
| example_07_large_scale_routing | congestion_candidate_precheck_misses | - | 0.0000 | - |
| example_07_large_scale_routing | congestion_candidate_precheck_skips | - | 0.0000 | - |
| example_07_large_scale_routing | congestion_cache_hits | 0.0000 | 0.0000 | +0.0000 |
| example_07_large_scale_routing | congestion_cache_misses | 0.0000 | 0.0000 | +0.0000 |
| example_07_large_scale_routing | congestion_candidate_nets | 0.0000 | 0.0000 | +0.0000 |
| example_07_large_scale_routing | congestion_candidate_ids | 0.0000 | 0.0000 | +0.0000 |
| example_07_large_scale_routing | congestion_exact_pair_checks | 0.0000 | 0.0000 | +0.0000 |
| example_07_large_scale_routing_no_warm_start | duration_s | - | 89.2302 | - |
| example_07_large_scale_routing_no_warm_start | route_iterations | - | 9.0000 | - |
| example_07_large_scale_routing_no_warm_start | nets_routed | - | 90.0000 | - |
| example_07_large_scale_routing_no_warm_start | nodes_expanded | - | 113735.0000 | - |
| example_07_large_scale_routing_no_warm_start | congestion_check_calls | - | 136225.0000 | - |
| example_07_large_scale_routing_no_warm_start | congestion_presence_cache_hits | - | 217089.0000 | - |
| example_07_large_scale_routing_no_warm_start | congestion_presence_cache_misses | - | 18365.0000 | - |
| example_07_large_scale_routing_no_warm_start | congestion_presence_skips | - | 86782.0000 | - |
| example_07_large_scale_routing_no_warm_start | congestion_candidate_precheck_hits | - | 135690.0000 | - |
| example_07_large_scale_routing_no_warm_start | congestion_candidate_precheck_misses | - | 12826.0000 | - |
| example_07_large_scale_routing_no_warm_start | congestion_candidate_precheck_skips | - | 10244.0000 | - |
| example_07_large_scale_routing_no_warm_start | congestion_cache_hits | - | 1893.0000 | - |
| example_07_large_scale_routing_no_warm_start | congestion_cache_misses | - | 136225.0000 | - |
| example_07_large_scale_routing_no_warm_start | congestion_candidate_nets | - | 243951.0000 | - |
| example_07_large_scale_routing_no_warm_start | congestion_candidate_ids | - | 228721.0000 | - |
| example_07_large_scale_routing_no_warm_start | congestion_exact_pair_checks | - | 190301.0000 | - |
Step 28b - Candidate-net congestion precheck (corrected)
Measured on 2026-04-01T21:00:54-07:00.
Baseline: docs/performance_baseline.json.
Findings:
- The first candidate-net precheck attempt cached exact-bounds results by span and was not safe; this corrected slice uses a conservative span-based precheck.
- Acceptance requires the no-warm-start canary to stay near the current 4-iteration / 40-net routed shape while still reducing congestion_check_calls.
Performance Baseline Diff
| Scenario | Metric | Baseline | Current | Delta |
|---|---|---|---|---|
| example_05_orientation_stress | duration_s | 0.2491 | 0.2461 | -0.0030 |
| example_05_orientation_stress | route_iterations | 2.0000 | 2.0000 | +0.0000 |
| example_05_orientation_stress | nets_routed | 6.0000 | 6.0000 | +0.0000 |
| example_05_orientation_stress | nodes_expanded | 286.0000 | 286.0000 | +0.0000 |
| example_05_orientation_stress | congestion_check_calls | 155.0000 | 155.0000 | +0.0000 |
| example_05_orientation_stress | congestion_presence_cache_hits | 185.0000 | 185.0000 | +0.0000 |
| example_05_orientation_stress | congestion_presence_cache_misses | 30.0000 | 30.0000 | +0.0000 |
| example_05_orientation_stress | congestion_presence_skips | 58.0000 | 58.0000 | +0.0000 |
| example_05_orientation_stress | congestion_candidate_precheck_hits | - | 135.0000 | - |
| example_05_orientation_stress | congestion_candidate_precheck_misses | - | 22.0000 | - |
| example_05_orientation_stress | congestion_candidate_precheck_skips | - | 0.0000 | - |
| example_05_orientation_stress | congestion_cache_hits | 2.0000 | 2.0000 | +0.0000 |
| example_05_orientation_stress | congestion_cache_misses | 155.0000 | 155.0000 | +0.0000 |
| example_05_orientation_stress | congestion_candidate_nets | 15.0000 | 15.0000 | +0.0000 |
| example_05_orientation_stress | congestion_candidate_ids | 19.0000 | 19.0000 | +0.0000 |
| example_05_orientation_stress | congestion_exact_pair_checks | 18.0000 | 18.0000 | +0.0000 |
| example_07_large_scale_routing | duration_s | 0.1978 | 0.1979 | +0.0001 |
| example_07_large_scale_routing | route_iterations | 1.0000 | 1.0000 | +0.0000 |
| example_07_large_scale_routing | nets_routed | 10.0000 | 10.0000 | +0.0000 |
| example_07_large_scale_routing | nodes_expanded | 78.0000 | 78.0000 | +0.0000 |
| example_07_large_scale_routing | congestion_check_calls | 0.0000 | 0.0000 | +0.0000 |
| example_07_large_scale_routing | congestion_presence_cache_hits | 0.0000 | 0.0000 | +0.0000 |
| example_07_large_scale_routing | congestion_presence_cache_misses | 0.0000 | 0.0000 | +0.0000 |
| example_07_large_scale_routing | congestion_presence_skips | 0.0000 | 0.0000 | +0.0000 |
| example_07_large_scale_routing | congestion_candidate_precheck_hits | - | 0.0000 | - |
| example_07_large_scale_routing | congestion_candidate_precheck_misses | - | 0.0000 | - |
| example_07_large_scale_routing | congestion_candidate_precheck_skips | - | 0.0000 | - |
| example_07_large_scale_routing | congestion_cache_hits | 0.0000 | 0.0000 | +0.0000 |
| example_07_large_scale_routing | congestion_cache_misses | 0.0000 | 0.0000 | +0.0000 |
| example_07_large_scale_routing | congestion_candidate_nets | 0.0000 | 0.0000 | +0.0000 |
| example_07_large_scale_routing | congestion_candidate_ids | 0.0000 | 0.0000 | +0.0000 |
| example_07_large_scale_routing | congestion_exact_pair_checks | 0.0000 | 0.0000 | +0.0000 |
| example_07_large_scale_routing_no_warm_start | duration_s | - | 5.6758 | - |
| example_07_large_scale_routing_no_warm_start | route_iterations | - | 4.0000 | - |
| example_07_large_scale_routing_no_warm_start | nets_routed | - | 40.0000 | - |
| example_07_large_scale_routing_no_warm_start | nodes_expanded | - | 6567.0000 | - |
| example_07_large_scale_routing_no_warm_start | congestion_check_calls | - | 4420.0000 | - |
| example_07_large_scale_routing_no_warm_start | congestion_presence_cache_hits | - | 7568.0000 | - |
| example_07_large_scale_routing_no_warm_start | congestion_presence_cache_misses | - | 2480.0000 | - |
| example_07_large_scale_routing_no_warm_start | congestion_presence_skips | - | 5482.0000 | - |
| example_07_large_scale_routing_no_warm_start | congestion_candidate_precheck_hits | - | 2828.0000 | - |
| example_07_large_scale_routing_no_warm_start | congestion_candidate_precheck_misses | - | 1737.0000 | - |
| example_07_large_scale_routing_no_warm_start | congestion_candidate_precheck_skips | - | 129.0000 | - |
| example_07_large_scale_routing_no_warm_start | congestion_cache_hits | - | 16.0000 | - |
| example_07_large_scale_routing_no_warm_start | congestion_cache_misses | - | 4420.0000 | - |
| example_07_large_scale_routing_no_warm_start | congestion_candidate_nets | - | 12879.0000 | - |
| example_07_large_scale_routing_no_warm_start | congestion_candidate_ids | - | 13342.0000 | - |
| example_07_large_scale_routing_no_warm_start | congestion_exact_pair_checks | - | 11116.0000 | - |
Step 29 - Correctness-aware measurement logging
Measured on 2026-04-01T21:18:56-07:00.
Baseline: docs/performance_baseline.json.
Findings:
- The diff script now logs top-level outcome counts so future routing-loop changes can be judged on returned result quality as well as runtime and congestion counters.
Performance Baseline Diff
| Scenario | Metric | Baseline | Current | Delta |
|---|---|---|---|---|
| example_05_orientation_stress | duration_s | 0.2370 | 0.2507 | +0.0137 |
| example_05_orientation_stress | valid_results | 3.0000 | 3.0000 | +0.0000 |
| example_05_orientation_stress | reached_targets | 3.0000 | 3.0000 | +0.0000 |
| example_05_orientation_stress | route_iterations | 2.0000 | 2.0000 | +0.0000 |
| example_05_orientation_stress | nets_routed | 6.0000 | 6.0000 | +0.0000 |
| example_05_orientation_stress | nodes_expanded | 286.0000 | 286.0000 | +0.0000 |
| example_05_orientation_stress | congestion_check_calls | 155.0000 | 155.0000 | +0.0000 |
| example_07_large_scale_routing | duration_s | 0.1950 | 0.1992 | +0.0042 |
| example_07_large_scale_routing | valid_results | 10.0000 | 10.0000 | +0.0000 |
| example_07_large_scale_routing | reached_targets | 10.0000 | 10.0000 | +0.0000 |
| example_07_large_scale_routing | route_iterations | 1.0000 | 1.0000 | +0.0000 |
| example_07_large_scale_routing | nets_routed | 10.0000 | 10.0000 | +0.0000 |
| example_07_large_scale_routing | nodes_expanded | 78.0000 | 78.0000 | +0.0000 |
| example_07_large_scale_routing | congestion_check_calls | 0.0000 | 0.0000 | +0.0000 |
| example_07_large_scale_routing_no_warm_start | duration_s | - | 5.7234 | - |
| example_07_large_scale_routing_no_warm_start | valid_results | - | 1.0000 | - |
| example_07_large_scale_routing_no_warm_start | reached_targets | - | 10.0000 | - |
| example_07_large_scale_routing_no_warm_start | route_iterations | - | 4.0000 | - |
| example_07_large_scale_routing_no_warm_start | nets_routed | - | 40.0000 | - |
| example_07_large_scale_routing_no_warm_start | nodes_expanded | - | 6567.0000 | - |
| example_07_large_scale_routing_no_warm_start | congestion_check_calls | - | 4420.0000 | - |
Step 30 - Best iteration snapshot restoration
Measured on 2026-04-01T21:20:51-07:00.
Baseline: docs/performance_baseline.json.
Findings:
- The routing loop now snapshots the strongest reverified intermediate result set and restores it before final refinement/final verification, including timeout exits.
- This slice keeps the old repeated-conflict stop rule so any quality change can be attributed to snapshot restoration alone.
Performance Baseline Diff
| Scenario | Metric | Baseline | Current | Delta |
|---|---|---|---|---|
| example_05_orientation_stress | duration_s | 0.2370 | 0.2437 | +0.0067 |
| example_05_orientation_stress | valid_results | 3.0000 | 3.0000 | +0.0000 |
| example_05_orientation_stress | reached_targets | 3.0000 | 3.0000 | +0.0000 |
| example_05_orientation_stress | route_iterations | 2.0000 | 2.0000 | +0.0000 |
| example_05_orientation_stress | nets_routed | 6.0000 | 6.0000 | +0.0000 |
| example_05_orientation_stress | nodes_expanded | 286.0000 | 286.0000 | +0.0000 |
| example_05_orientation_stress | congestion_check_calls | 155.0000 | 155.0000 | +0.0000 |
| example_07_large_scale_routing | duration_s | 0.1950 | 0.1937 | -0.0013 |
| example_07_large_scale_routing | valid_results | 10.0000 | 10.0000 | +0.0000 |
| example_07_large_scale_routing | reached_targets | 10.0000 | 10.0000 | +0.0000 |
| example_07_large_scale_routing | route_iterations | 1.0000 | 1.0000 | +0.0000 |
| example_07_large_scale_routing | nets_routed | 10.0000 | 10.0000 | +0.0000 |
| example_07_large_scale_routing | nodes_expanded | 78.0000 | 78.0000 | +0.0000 |
| example_07_large_scale_routing | congestion_check_calls | 0.0000 | 0.0000 | +0.0000 |
| example_07_large_scale_routing_no_warm_start | duration_s | - | 5.5246 | - |
| example_07_large_scale_routing_no_warm_start | valid_results | - | 2.0000 | - |
| example_07_large_scale_routing_no_warm_start | reached_targets | - | 10.0000 | - |
| example_07_large_scale_routing_no_warm_start | route_iterations | - | 4.0000 | - |
| example_07_large_scale_routing_no_warm_start | nets_routed | - | 40.0000 | - |
| example_07_large_scale_routing_no_warm_start | nodes_expanded | - | 6567.0000 | - |
| example_07_large_scale_routing_no_warm_start | congestion_check_calls | - | 4420.0000 | - |
Step 31 - Improvement-based stagnation stop
Measured on 2026-04-01T21:23:19-07:00.
Baseline: docs/performance_baseline.json.
Findings:
- The negotiated-congestion loop now stops after two consecutive iterations with no improvement in the best-so-far reverified snapshot instead of using repeated conflict signatures.
- Best-snapshot restoration remains enabled, so the returned results should reflect the strongest intermediate iteration even if later iterations stall.
Performance Baseline Diff
| Scenario | Metric | Baseline | Current | Delta |
|---|---|---|---|---|
| example_05_orientation_stress | duration_s | 0.2370 | 0.2393 | +0.0023 |
| example_05_orientation_stress | valid_results | 3.0000 | 1.0000 | -2.0000 |
| example_05_orientation_stress | reached_targets | 3.0000 | 3.0000 | +0.0000 |
| example_05_orientation_stress | route_iterations | 2.0000 | 2.0000 | +0.0000 |
| example_05_orientation_stress | nets_routed | 6.0000 | 6.0000 | +0.0000 |
| example_05_orientation_stress | nodes_expanded | 286.0000 | 286.0000 | +0.0000 |
| example_05_orientation_stress | congestion_check_calls | 155.0000 | 155.0000 | +0.0000 |
| example_07_large_scale_routing | duration_s | 0.1950 | 0.1884 | -0.0066 |
| example_07_large_scale_routing | valid_results | 10.0000 | 10.0000 | +0.0000 |
| example_07_large_scale_routing | reached_targets | 10.0000 | 10.0000 | +0.0000 |
| example_07_large_scale_routing | route_iterations | 1.0000 | 1.0000 | +0.0000 |
| example_07_large_scale_routing | nets_routed | 10.0000 | 10.0000 | +0.0000 |
| example_07_large_scale_routing | nodes_expanded | 78.0000 | 78.0000 | +0.0000 |
| example_07_large_scale_routing | congestion_check_calls | 0.0000 | 0.0000 | +0.0000 |
| example_07_large_scale_routing_no_warm_start | duration_s | - | 5.4360 | - |
| example_07_large_scale_routing_no_warm_start | valid_results | - | 2.0000 | - |
| example_07_large_scale_routing_no_warm_start | reached_targets | - | 10.0000 | - |
| example_07_large_scale_routing_no_warm_start | route_iterations | - | 4.0000 | - |
| example_07_large_scale_routing_no_warm_start | nets_routed | - | 40.0000 | - |
| example_07_large_scale_routing_no_warm_start | nodes_expanded | - | 6567.0000 | - |
| example_07_large_scale_routing_no_warm_start | congestion_check_calls | - | 4420.0000 | - |
Step 31 rejected - Improvement-based stagnation reverted
Measured on 2026-04-01T21:25:17-07:00.
Baseline: docs/performance_baseline.json.
Findings:
- The no-improvement stop rule was reverted because it regressed example_05 from 3 valid routes to 1 even though the no-warm-start canary stayed flat.
- The tree below is the restored best-snapshot state with the older repeated-conflict stop rule still in place.
Performance Baseline Diff
| Scenario | Metric | Baseline | Current | Delta |
|---|---|---|---|---|
| example_05_orientation_stress | duration_s | 0.2370 | 0.2425 | +0.0055 |
| example_05_orientation_stress | valid_results | 3.0000 | 3.0000 | +0.0000 |
| example_05_orientation_stress | reached_targets | 3.0000 | 3.0000 | +0.0000 |
| example_05_orientation_stress | route_iterations | 2.0000 | 2.0000 | +0.0000 |
| example_05_orientation_stress | nets_routed | 6.0000 | 6.0000 | +0.0000 |
| example_05_orientation_stress | nodes_expanded | 286.0000 | 286.0000 | +0.0000 |
| example_05_orientation_stress | congestion_check_calls | 155.0000 | 155.0000 | +0.0000 |
| example_07_large_scale_routing | duration_s | 0.1950 | 0.1936 | -0.0014 |
| example_07_large_scale_routing | valid_results | 10.0000 | 10.0000 | +0.0000 |
| example_07_large_scale_routing | reached_targets | 10.0000 | 10.0000 | +0.0000 |
| example_07_large_scale_routing | route_iterations | 1.0000 | 1.0000 | +0.0000 |
| example_07_large_scale_routing | nets_routed | 10.0000 | 10.0000 | +0.0000 |
| example_07_large_scale_routing | nodes_expanded | 78.0000 | 78.0000 | +0.0000 |
| example_07_large_scale_routing | congestion_check_calls | 0.0000 | 0.0000 | +0.0000 |
| example_07_large_scale_routing_no_warm_start | duration_s | - | 5.5321 | - |
| example_07_large_scale_routing_no_warm_start | valid_results | - | 2.0000 | - |
| example_07_large_scale_routing_no_warm_start | reached_targets | - | 10.0000 | - |
| example_07_large_scale_routing_no_warm_start | route_iterations | - | 4.0000 | - |
| example_07_large_scale_routing_no_warm_start | nets_routed | - | 40.0000 | - |
| example_07_large_scale_routing_no_warm_start | nodes_expanded | - | 6567.0000 | - |
| example_07_large_scale_routing_no_warm_start | congestion_check_calls | - | 4420.0000 | - |