# Target-join scoring experiment **Keep experimental.** Accounting for the target turn during route-leg selection confirms the suspected source/target scoring asymmetry, but does not establish uniform readability improvement. The original bipartite scene becomes more overlapped. Do not integrate this branch as a completed Arrange fix. Production routing/test source is `497c1ad8b39788148c5f03bc8542d6d8e28dbc01`. Successor `08656b18bf8934cf264469cf68fc6dea97c15cbb` only resolves three strict Clippy findings in the diagnostic observer. Probe runs at both commits emitted the same 371192 bytes, SHA256 `f9ac7c1320b1cf026259bfcaf13a39e968ae317463712d8dc793375d9a4a541f`. The [independent source review](terminal-join-source-review.md) and [independent results audit](terminal-join-results-audit.md) retain the scoped claims and limitations. The latter predates the completed contact audit below. The [evidence archive](run-j/terminal-join-08656b18.zip) contains original runs 02–06, including the failed Clippy run, source inventories, full Projects and geometry, comparison JSON, independent contact audit/script, runners and 37 offline geometry images. It is 3178939 bytes, SHA256 `bd2146237353af05b8667dc7bd728007143a2f1b24ad9f8728fdbc50ffb3368e`. [Manifest](run-j/manifest.json) records every member; every archived byte was compared with its original. Paths in original receipts identify the builder's machine, not a dependency on a peer's filesystem. ## Checks and comparison Windows Rust 1.98.1 gnullvm, locked/offline, one job, incremental disabled; Linux excluded. All receipts close with unchanged inputs and no runner failure. ```text cargo test --locked --offline -p oa-core --lib --test release_routing --test routing_geometry --test routing_labels --test state_diagrams --test group_movement cargo run --locked --offline -p oa-core --example auto_layout_probe cargo clippy --locked --offline -p oa-core --all-targets -- -D warnings ``` Tests: 185 passed, zero failed/ignored (132 library, 7 group movement, 13 release routing, 18 routing geometry, 2 routing labels, 13 State). Three new private tests exercise fast/grid terminal scoring in four orientations, absent continuation, straight/reversal and zero-length legs. Existing authored-pin/attachment/history checks pass. Initial Clippy rejected two manual-range expressions and one nested if in the observer; after that observer-only cleanup, strict core/all-target Clippy passes and the rerun output is byte-identical. No whole-workspace/native acceptance is implied. Across all 37 before/baseline/reset/layered/manual-witness variants, complete Projects, projected nodes, projected ports and exact route endpoints are unchanged versus the first experiment. This isolates routing/label placement; it is stronger than merely reusing fixture input. All nine candidate invariants, round trips, deterministic repeats and calls 2–10 remain exact. The candidate still has no integrated command Undo/Redo evidence. - Layered diamond: shared length 82→36, nonterminal 46→0; all other original metrics unchanged. Remaining 36 units are common terminal stubs. - Layered bipartite: shared length 344→187, nonterminal 272→115; routed drawing area 165360→175960. Labels, bends, length and other recorded metrics unchanged. Seven other layered metric vectors are unchanged. - **Original bipartite regression:** sharing 730→872, nonterminal 658→800; bends 5→4 and length 2076→2064. The scoring change can favor fewer bends over distinguishable routes. This is not a monotonic quality improvement. - Original diamond sharing 136→36; original two-container sharing 200→54; existing Layout/reset-only two-container sharing 148→18. The independent audit lists the complete changed vector; 30 of 37 variants are unchanged. The separate Python contact audit uses orthogonal interval reasoning to reconstruct BOTH old and new contacts. Primitive witnesses pass; all 37 new contact/proper counts match Rust, and all 37 old proper counts match v1. Layered diamond contacts decrease 3→2. Layered bipartite contacts increase 8→9: eight bend contacts become six bend plus three T contacts. Proper crossings remain zero. Thus decreased coincident length partly trades into branch contacts. Details, edge IDs, coordinates and definitions are in the archive's `support/auto-layout-contact-audit-result-20260925.json`; script is adjacent. There is no inferred aggregate quality pass. The parent viewed diamond/bipartite offline images: diamond branches separate, but bipartite horizontal tails remain visually joined despite separate vertical channels. These are schematics of core bounds, not native application or glyph evidence. The [residual diagnosis](residual-routing.md) confirms four genuine shared semantic ports; distinct-port placement is not the defect. Of 187 shared units, 72 are bounded common-port stubs and 115 are avoidable interior overlap. ## Next discriminating comparison Retain this J result as a frozen control. Test one predeclared overlap coefficient 3.0 instead of 0.12, with the existing per-segment cap 80, crossing cost 24, node/port geometry and edge ordering unchanged. This P variant is an isolated experiment, not a proposed default or a release-ready source change. Preserve the original bipartite regression as a sentinel and the entire quality vector. If stronger penalties cannot choose useful existing alternatives, inspect bounded parallel lane candidates separately; do not silently combine scoring, spacing, caps and ordering changes. A candidate that shifts overlap into hard-to- follow contacts, label collisions or large detours has not solved the user task.