93 lines
5.6 KiB
Markdown
93 lines
5.6 KiB
Markdown
# 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.
|