# Route Entry and Trackers Primary atlas sources: - [station-detail-overlay.md](/home/jan/projects/rrt/docs/control-loop-atlas/station-detail-overlay.md) This note isolates the lower route-entry, linked-site, route-link, and auxiliary tracker families that are easy to lose inside the broader runtime section. Current grounded owners: - `city_connection_try_build_route_with_optional_direct_site_placement` - `route_entry_collection_try_build_path_between_optional_endpoint_entries` - `route_entry_collection_search_path_between_entry_or_coord_endpoints` - `route_entry_collection_create_endpoint_entry_from_coords_and_policy` - `route_entry_collection_map_track_lay_mode_to_endpoint_policy_byte` - `aux_route_entry_tracker_collection_refresh_route_entry_group_membership` - `aux_route_entry_tracker_collection_try_split_route_entry_chain_into_fresh_group` - `aux_route_entry_tracker_route_entry_pair_pass_adjacent_chain_transfer_gate` - `aux_route_entry_tracker_collection_try_transfer_adjacent_chain_between_groups` - `aux_route_entry_tracker_collection_reseed_group_from_route_entry_component` - `aux_route_entry_tracker_collection_refresh_component_labels_and_reseed_invalid_groups` - `aux_route_entry_tracker_query_tracker_component_labels_match` - `aux_route_entry_tracker_collection_query_component_label_by_tracker_id` - `aux_route_entry_tracker_collection_refresh_owner_adjacent_compatible_group_links` - `aux_route_entry_tracker_dispatch_route_entry_pair_metric_query` - `aux_route_entry_tracker_query_route_entry_pair_metric_via_weighted_recursive_search` - `aux_route_entry_tracker_query_route_entry_pair_metric_via_recursive_neighbor_walk` - `aux_route_entry_tracker_query_best_route_entry_pair_metric_with_endpoint_fallbacks` - `placed_structure_route_link_rebuild_route_style_grid_counters_and_endpoint_state` - `placed_structure_rebuild_route_style_candidate_scores_and_peer_links` Current bounded policy split: - policy byte `1`: single-track endpoint synthesis and direct linked-site anchor create or replace - policy byte `2`: broader linked-site anchor rebuild plus tracker regrouping - policy byte `4`: double-track endpoint synthesis with the larger track-laying-capacity charge Current bounded tracker side: - allocator at `0x004a42b0` - refcount or destroy path at `0x004a4340` - group-id setter at `0x00489f80` - endpoint-membership probe at `0x00494ed0` - bind helper at `0x00494f00` - latch refresh at `0x00494fb0` - cached-match refresh at `0x00495020` - adjacent transfer gate at `0x004a4c00` - component-label refresh sweep at `0x004a5fc0` - component-label equality test at `0x004a62c0` - component-label query at `0x004a6320` - owner-adjacent compatible-group refresh at `0x004a6360` - pair-metric dispatcher at `0x004a65b0` - weighted recursive metric branch at `0x004a5280` - alternate recursive neighbor-walk branch at `0x004a5900` - endpoint-fallback chooser at `0x004a6630` Current bounded time-side cutover: - `runtime_query_hundredths_scaled_build_version` at `0x00482e00` is the shared rounded hundredths-scaled executable or session build-version query above the `>= 0x67` branch in `0x004a65b0` - it is not a gameplay progress flag; in the local path it comes from the `RT3.EXE` version-info source through `0x00482d10`, then `+0.0001`, `*100.0`, and round, while the multiplayer path delegates through `0x0046a4b0` - the recovered `>= 0x67`, `>= 0x68`, `>= 0x69`, and `>= 0x6a` caller pattern now lines up with executable build values `1.03`, `1.04`, `1.05`, and `1.06` - that makes the tracker cutover read more cleanly too: `0x004a65b0` is now best treated as a pre-`1.03` versus `1.03+` route-metric compatibility dispatcher, not as any gameplay-time or era-side mode switch - the branch source is session-aware too: when multiplayer state is active, the same cutover can follow the session-side build path rather than only the local executable version, so mixed-version compatibility is now the strongest current explanation for why this lower metric split exists at all - nearby callers now make two more compatibility reads concrete: build `1.04+` keeps one `Recycling Plant` stem-specific branch alive inside `0x004101e0`, and build `1.05+` skips one older descriptor-side attenuation fallback in that same rebuild family - the adjacent world-side compatibility lane is bounded too: build `1.03+` can skip one older recursive connected-component bounds walk through `0x004160c0 -> 0x00415f20` when scenario field `[0x006cec78+0x46c38]` is already active - the wrapper above that compatibility read is bounded now too: `0x00416170` maps the current tile rectangle into the component table rooted at `0x0062ba7c` and only re-enters `0x004160c0` when the current owner still lacks cached bounds and the local suppressor gates stay clear - the higher neighboring projected-rectangle lane is tighter too: `0x00418610` refreshes the temporary sample band at `0x0062b7d0`, republishes the surviving rectangle through `0x0044d410`, and on the single-sample path re-enters `0x004185a0` to toggle mask bit `0x01` for the corresponding non-sentinel cells - the owner split above that lane is bounded now too: `0x00418be0` is the broader local-runtime record builder from candidate stem plus projected scratch, while `0x00418a60` is the smaller current-subject clone path over the same mask-refresh and component-bounds helpers - the scratch tail is tighter now too: `0x00416620` publishes the projected rectangle into the shared local-runtime globals, validates route-entry coverage through `0x00494240`, can branch into the special projected-slot picker `0x00415570`, and refreshes the compact per-cell side tables through `0x00414e10` - the last side helpers under that local-runtime branch are bounded now too: `0x00414470` is just the projected-slot cache setter above the subject-clone path, while `0x00418040` is the optional local-runtime overlay-payload renderer sampled by the broader stem-based builder at `0x00418be0` - the higher local-runtime owner chain is bounded now too: `0x004133b0` first drains the temporary placed-structure id queue through `0x00414480` and `0x00413f50`, rebuilding cloned local-runtime records through `0x0040e450`, and then sweeps all live placed structures through `0x0040ee10` - the owner context above that local-runtime refresh is tighter now too: inside the `Setting up Players and Companies...` `319` lane of `world_run_post_load_generation_pipeline`, the pipeline refreshes the route-entry collection `0x006cfca8`, then the auxiliary route-entry tracker collection `0x006cfcb4`, then `0x004133b0`, then a flagged world-grid cleanup sweep through `0x00448af0/0x00533fe0`, and only after that the later route-entry post-pass at `0x00491c20` - the side refresh split is tighter now too: `0x0040ee10` publishes one local position/scalar triplet through `0x00530720` and then tails into `0x0040e360`, whose current grounded subtype-`1`, class-`3` branch recomputes a linked-site anchor triplet from the peer route-entry anchor when that anchor is still live - the heavier sibling above that side refresh is bounded now too: `0x0040eba0` is the world-coordinate mutation helper that rewrites cached grid coordinates, updates the subtype-`4` proximity-bucket family when needed, rebuilds the same triplet, and then tails into `0x0040e360` What this note is for: - Route-search ownership and quality gates - Linked-site route-anchor rebuilds - Auxiliary route-entry tracker regrouping semantics - Route-style peer-link emission and route-link state - Track-laying-capacity interactions with route synthesis Latest local closure: - The linked-transit cache split is now locally bounded rather than just suggestive: the pre-`1.03` versus `1.03+` tracker metric dispatcher still matters for the weighted autoroute cache lanes at `company_rebuild_linked_transit_autoroute_site_score_cache` `0x00407bd0`, but the grounded downstream chain now stops at route choice rather than company pressure. Cache lane `+0x16` feeds the owned-site selector `company_select_best_owned_linked_transit_site_by_autoroute_score` `0x00408280`, and the weighted peer-side bands then feed `company_build_linked_transit_autoroute_entry` `0x00408380`; train-side append and add-train helpers `0x00409770` and `0x00409830` only inherit that weighted choice by calling the builder. By contrast, the company-wide roster target at `company_compute_owned_linked_transit_site_score_total` `0x00408f70` still sums only raw cache `+0x12` before `company_balance_linked_transit_train_roster` `0x00409950` reacts. So this local semantic edge is effectively closed: the compatibility split perturbs ranked site choice and seeded autoroute peer choice, not the later train-count target, and any further weighted-lane consumer would have to live outside the currently grounded local chain.