6.7 KiB
Mandatory-lead placement repair result
The diagnosed sparse terminal conflict is repairable with a bounded native separation pass, but the result is not an accepted Arrange replacement. It removes the routing warning and unrelated-node penetration while making crossings, shared connector length and one label/stroke intersection worse. Keep the released router and production node arrangement. The next useful planner work is connection ordering and corridor/label space during initial coordinate assignment, including compound geometry; do not add more local repair rounds or retune router penalties on this corpus.
Source 074051261a0beee1047e2b5624c879deef7813bc, based on the placement reference
at2850b915. Core changes extract the existing endpoint choice and early lead
guard into shared helpers and expose a read-only necessary-condition report.
Router search/cost/fallback behavior is unchanged. Repair is an example-only
consumer, unsupported for nested/folded/omitted placements and Scenario.
It is not connected to Command::Layout, REST or desktop history.
Observed result
Primary run02 preserves the five original scenes, five Arrange-reset controls, four old native candidates and three external-placement transfers. Twelve flat cases are supported; the five workshop variants explicitly reject unsupported topology. These are not counted as repair passes. Only the sparse external placement changes node geometry: eight nodes move down11 units. Twenty-three of110 projected port positions move, with zero side changes. Final port identity and owner sets are exact.
The target Planning Aggregate top moves840→851 while Assessment Package's bottom remains820. The top port's18-unit outward stub ends at833, just beyond the inflated blocker bottom832. The sole incompatible edge becomes admissible and obtains a complete route with no warning or unrelated-node penetration.
| Sparse external placement measure | Before | After repair |
|---|---|---|
| Incompatible mandatory-lead edges | 1 | 0 |
| NoClearPath warnings | 1 | 0 |
| Unrelated-node penetrations | 1 | 0 |
| Node overlaps | 0 | 0 |
| Proper crossings | 20 | 22 |
| All point contacts | 55 | 58 |
| Pairwise collinear shared length | 666 | 761 |
| Label/node and label/label collisions | 0 / 0 | 0 / 0 |
| Label/stroke intersections | 0 | 1 |
| Route length | 64223 | 64322 |
| Drawing area | 12840450 | 12936535 |
The two original mixed scenes also change route length and drawing bounds because eligible authored pins/label overrides are reset; no nodes or ports move. Do not attribute that effect to the new separation pass. All other supported cases retain geometry and measured results. The old native sparse candidate's 40522 shared-length problem remains. Empty lead diagnostics do not establish legibility or complete route feasibility.
All12 supported outputs conserve the complete Project except declared node positions and eligible route reset, retain stored node sizes and port anchors, preserve complete projected edge/port identity, and pass JSON/single-source round trips. Duplicate input gives the same result; all nine subsequent calls through call10 remain exactly equal. Automatic side-flip repair, compound translation, opposite-order rejection and native usability are not established by these successful corpus cases.
Verification and failures retained
Windows Rust1.98.1 gnullvm, LLVM-mingw20260908, offline locked dependencies, one build job and previously frozen environment. No Linux build or native UI acceptance run for this experimental repair.
The subsequent evidence commit changes only a prototype budget comment and documentation/evidence; executable Rust statements remain those tested at07405126.
cargo test --locked --offline -p oa-core --test lead_feasibility --test routing_geometry --test edge_attachments --test port_anchors
cargo test --locked --offline -p oa-core --lib --example auto_layout_probe
cargo build --release --locked --offline -p oa-core --example auto_layout_probe
cargo clippy --locked --offline -p oa-core --lib --example auto_layout_probe --test lead_feasibility -- -D warnings
Gates14–17 pass at07405126:40 selected integration tests,130 library tests, 2 example solver tests, optimized build and strict Clippy. No broader-suite claim. Five-case route-control JSONL is byte-for-byte identical to the frozen released-router output (SHA2569a31a676f23dea2f41daec39497f569d68231fa0fd66e5a1a476be97d5d61ac2). Both runners complete18 children (route control plus17 scenes), exit0 with unchanged bound inputs; unsupported status is inside the result, not inferred from exit status. Each child has a90-second cap. No latency claim is made.
Gate13 at2be8c7f2 compiled but two new non-port fixtures failed semantic validation because their default DataTypes were primitives. Source07405126 changes only those fixtures to valid Record types; the failed receipt remains.
The first analysis failed on implicit Windows cp1252 decoding of UTF-8 JSONL. Independent audit found81 altered string leaves in three workshop seeds (27 each), no numeric/geometry differences; nine other generated seeds were exact. Preserve run01 as superseded evidence. The v2 runner/analyzer use explicit UTF-8 and produce primary run02. They also independently compare the complete raw Project modulo allowed changes and full(owner,port) identity sets.
The prototype's work counter is a weighted size/iteration budget, not an exact count of all routing/projection operations or a wall-clock guarantee. Explicit graph, round and span limits remain separate guards.
Reproduction and evidence
Build the source pin above, then use the archived v2 experiment runner with the frozen corpus and prior reference archive. The portable probe interface is:
auto_layout_probe --route-corpus MANIFEST
auto_layout_probe --repair-placement PROJECT_JSON DIAGRAM_UUID
The latter emits before/after geometry, full models, diagnostics, quality
measures, metadata checks and ten-call stability. Original inputs, run receipts,
commands, scripts, failure logs and independent audits are retained in
evidence/placement-clearance-07405126.zip; evidence/manifest.json identifies
every member and SHA256. Native binaries are represented by capture hashes,
not embedded. See source review, result review,
final claim/archive review, design alternatives
and bounded consumer. The final review is versioned outside
the immutable evidence archive; its minor runner wording correction is applied.
This branch evidence is local-only until a successful Gitea push and byte readback; earlier publication attempts failed with remote disk-full errors. No issue closure, release change, merge or whole-Arrange quality claim.