125 lines
6.7 KiB
Markdown
125 lines
6.7 KiB
Markdown
# 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](source-review.md), [result review](result-review.md),
|
||
[final claim/archive review](final-review.md), [design alternatives](design.md)
|
||
and [bounded consumer](implementation.md). 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.
|