inire/docs/optimization_pass_01_log.md

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 641300 to 529038 congestion checks, from 1737551 to 1164421 candidate ids, and from 1208409 to 838008 exact pair checks while runtime improved from 104.07s to 102.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 529038 to 344747 congestion checks, from 1164421 to 375624 candidate ids, and from 838008 to 314367 exact pair checks while runtime improved from 102.02s to 88.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 344747 to 331308, but runtime still regressed to about 99.00s and nodes expanded rose to 184853.
  • Tightening lazy-requeue bookkeeping did not recover the search-order penalty. A later measurement pushed the same canary to 153.63s, 247887 expanded nodes, 427874 congestion misses, and 166395 lazy 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.36s to 99.81s, from 173498 to 187339 expanded nodes, from 344747 to 378630 congestion checks, and from 364731 to 392058 candidate 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 -