diff --git a/harness/auto-layout-investigation-20260925.md b/harness/auto-layout-investigation-20260925.md index 2848f201..b18fa4f9 100644 --- a/harness/auto-layout-investigation-20260925.md +++ b/harness/auto-layout-investigation-20260925.md @@ -6,6 +6,11 @@ record above released `715036e132677dd2bc2fb37ed316d93dc9987aec`, not an accepte replacement layout contract or a completed fix. User-owned requirements remain in `PROJECT_GOAL.md` and the issue. +The [first executed experiment](experiments/auto-layout-20260925/results-01.md) +records nine Windows fixtures at `e7deea70`: hierarchy/label improvements, +repeat stability, and two shared-connector regressions. The candidate remains +experimental; successful execution is not acceptance of a replacement command. + ## Question and existing evidence Can explicit Auto-layout produce a readable arrangement that accounts for diff --git a/harness/experiments/auto-layout-20260925/results-01.md b/harness/experiments/auto-layout-20260925/results-01.md new file mode 100644 index 00000000..2786b83e --- /dev/null +++ b/harness/experiments/auto-layout-20260925/results-01.md @@ -0,0 +1,106 @@ +# First automatic-layout experiment + +## Decision + +Retain the hierarchy/label-spacing prototype for further experiments; do not +adopt it as production Auto-layout. It improves several named fixtures beyond +resetting old bends, but regresses shared connector length in two fixtures. +Shorter routes and zero proper crossings do not establish readable connections. +The next experiment should isolate route selection at fixed node positions, +before adding more node spacing or replacing the existing routing engine. + +## Method and receipt + +Tested source `e7deea7039bcf31675cffbb462cfeb19d62a7e20`, based on released +`715036e132677dd2bc2fb37ed316d93dc9987aec`. No production file changed in that +commit. Windows x86_64-pc-windows-gnullvm, Rust 1.98.1, LLVM mingw, one Cargo job, +incremental compilation disabled; Linux excluded. Command: + +```text +cargo run --locked --offline -p oa-core --example auto_layout_probe +``` + +The recorded runner completed at 2026-09-25T00:42:06Z, exit 0, unchanged inputs, +no recorded failure. stderr contains only compile/run progress. This means the +diagnostic process completed, not that layout quality passed. The JSONL has one +metadata record and nine fixture records, with full input/result Projects and +core route geometry. Its SHA256 is +`21786ae5cb668f60e9252dc884668ee5e98289443d0b3723a9ea69bf21d47fd1`. + +[Evidence archive](run-01/probe-e7deea70.zip), 900995 bytes, SHA256 +`c52f82d4782cd6a7f8cbe67498c8b2371e99204a65976aa8bcbbd0a86f835069`, +contains original receipts, source inventories, output, runners and 37 offline +geometry PNGs. [Manifest](run-01/manifest.json) binds every member and the +post-run executable identity. All archive members were byte-compared to the +local originals. Original absolute paths describe this machine; reproduce using +the source commit and command above, with a suitable Windows Rust toolchain. + +## Observations + +Values below compare existing Layout with the layered prototype. Reset-only +matches existing Layout except for the authored-detour fixture, where it already +reduces length to 240, bends to zero and area to 90816. Shared length is pairwise +segment overlap, not the union of occupied space; area uses recorded bounds. + +| Fixture | Shared length | Label/node collisions | Route length | Bends | Area | +| --- | ---: | ---: | ---: | ---: | ---: | +| Four-node chain | 0 → 0 | 0 → 0 | 720 → 246 | 0 → 0 | 213312 → 150744 | +| Seven-node chain | 0 → 0 | 0 → 0 | 2560 → 492 | 8 → 0 | 523584 → 271920 | +| Diamond | 36 → 82 | 0 → 0 | 2200 → 688 | 8 → 4 | 300576 → 260832 | +| Crossed bipartite | 276 → 344 | 0 → 0 | 3284 → 688 | 12 → 4 | 300576 → 165360 | +| Nested cross-boundary | 0 → 0 | 1 → 0 | 1076 → 364 | 6 → 2 | 284096 → 366528 | +| Authored detour/label | 0 → 0 | 0 → 0 | 2348 → 187 | 6 → 0 | 628040 → 83820 | +| Fixed ports | 0 → 0 | 0 → 0 | 916 → 863 | 4 → 4 | 125976 → 116754 | +| Reversed children in two containers | 148 → 0 | 1 → 0 | 872 → 372 | 4 → 0 | 288512 → 272800 | +| Long ordinary labels | 36 → 36 | 2 → 0 | 1340 → 1436 | 4 → 4 | 200448 → 208800 | + +Proper interior crossings, unrelated node overlaps, unrelated edge/node +penetrations, label/label collisions, unrelated label/stroke intersections and +route warnings are zero in the baseline, reset and candidate outputs. This is +not proof of crossing elimination: the crossing definition excludes bend and +T contacts, and overlapping strokes can make endpoint pairing ambiguous. + +The parent inspected offline geometry for the reversed-container baseline and +candidate, crossed-bipartite candidate and long-label candidate. Reordering the +right container's children separates the two routes; the bipartite result has +a visually ambiguous shared central trunk. The long-label boxes occupy the +available corridors. These images render core boxes/lines, not actual label +glyphs or the desktop application, and therefore are not native UI acceptance. + +Every candidate reports exact same-input determinism, idempotence and equality +to its first result for calls 2–10. Reported semantic, node identity/metadata and +nongeometry conservation hold. JSON and canonical single-source parse/format +round trips hold for all nine before/baseline/reset/candidate Projects. The +authored-detour route changes intentionally. These assertions do not separately +establish hidden-route or attachment lifecycle policy. Other-view conservation +is vacuous in these single-view fixtures. + +Existing Layout's Session operation passes one-step Undo/Redo and history +checks. The pure candidate function has no integrated command/history evidence. +The [source review](probe-review.md) defines remaining metric and fixture gaps. +Folded/filtered topology, State/Allocation diagrams, cycles/undirected graphs, +large models, multifile sources, application/API admission and native editing +remain outside this run. Issue36's multiline State candidate is not in this base. + +An [independent results audit](results-audit-01.md) checked receipt bindings, +complete Projects, all 37 image hashes and eight offline images. It independently +recomputed both shared-route regressions and confirmed the scoped conclusions. + +## Implications + +Resetting obsolete bends is useful but insufficient. Hierarchy ordering and +label clearance have distinct value, with measurable area/length tradeoffs. +Increasing a global gap cannot be assumed to fix shared-route ambiguity. +Inspect the existing router's candidate scoring and compare complete endpoint +join costs, overlap penalties and available lane candidates using the same +geometry. Preserve the full quality vector and endpoint/obstacle invariants; +reject a change that merely converts overlap into uncounted contacts. + +The [routing inspection](routing-experiment-plan.md) identified a concrete +asymmetry: a locally selected route leg scores the source join but omits the +target-stub join until after choosing that leg. Test that small correction first, +at unchanged node positions, before the auditor's proposed alignment/spacing +alternatives. This is a falsifiable source-based hypothesis, not a conclusion +that it explains all shared routes. A separate committed candidate will preserve +this first control; no overlap weight or node placement should change in that +comparison. diff --git a/harness/experiments/auto-layout-20260925/results-audit-01.md b/harness/experiments/auto-layout-20260925/results-audit-01.md new file mode 100644 index 00000000..7fc8387b --- /dev/null +++ b/harness/experiments/auto-layout-20260925/results-audit-01.md @@ -0,0 +1,56 @@ +# #32 first experiment — independent results audit + +Source e7deea7039bcf31675cffbb462cfeb19d62a7e20, production baseline715036e132677dd2bc2fb37ed316d93dc9987aec. Command: `cargo run --locked --offline -p oa-core --example auto_layout_probe`; Windows x86_64-pc-windows-gnullvm/dev. Recorded exit0, failure=null, source inputs unchanged. Independently checked receipt-bound log hashes and equal before/after source inventories. No rerun, compiler, GUI or model helper executed. + +**Conclusion: useful evidence for continued experimentation, not a production winner.** All nine finite fixtures completed; candidate conservation/repeat/roundtrip checks pass. Two shared-run regressions are real, while nested/reversed-container/long-label improvements are also supported. There are no predefined quality thresholds, so exit0 means the probe ran, not that layout quality passed. + +## Verified results + +Exactly one metadata row plus nine fixture rows. Every candidate is supported and valid as recorded, repeats exactly from identical input, equals its second-call result, and remains equal to its first result through calls2–10. Existing Layout likewise has passing repeat/history checks. Every before/after/reset/candidate canonical JSON and single-source roundtrip is recorded exact. Candidate semantic/node-identity/visibility/port-anchor/nongeometry booleans are true on all nine. I independently compared complete output Projects after restoring only diagrams, and checked target layout fields and route attachment fields against input: no difference. Most attachment lists are empty, so this is not broad attachment coverage. Other-view checks are vacuous for single-view fixtures. + +The authored_detour_and_label candidate intentionally has authored_routes_exact=false because its three pins and label override are removed. That is the experimental reset policy, not an unexplained conservation failure. Reset-only already removes the detour; layered must earn its additional complexity elsewhere. Actual Undo/Redo was executed only for existing Command::Layout. Layered is a pure transformer with no command/UI integration or history evidence. + +Values below compare **baseline Layout plus reset-only control → layered candidate**, not the original hand-placed input: + +| Fixture | Shared length | Label/node pairs | Bends | Route length | Drawing area | +| --- | --- | --- | --- | --- | --- | +| flat_chain_4 | 0 → 0 | 0 → 0 | 0 → 0 | 720 → 246 | 213312 → 150744 | +| chain_7_row_wrap | 0 → 0 | 0 → 0 | 8 → 0 | 2560 → 492 | 523584 → 271920 | +| diamond | 36 → 82 | 0 → 0 | 8 → 4 | 2200 → 688 | 300576 → 260832 | +| crossed_bipartite | 276 → 344 | 0 → 0 | 12 → 4 | 3284 → 688 | 300576 → 165360 | +| nested_cross_boundary | 0 → 0 | 1 → 0 | 6 → 2 | 1076 → 364 | 284096 → 366528 | +| authored_detour_and_label | 0 → 0 | 0 → 0 | 0 → 0 | 240 → 187 | 90816 → 83820 | +| fixed_ports | 0 → 0 | 0 → 0 | 4 → 4 | 916 → 863 | 125976 → 116754 | +| two_containers_reversed_children | 148 → 0 | 1 → 0 | 4 → 0 | 872 → 372 | 288512 → 272800 | +| long_ordinary_labels | 36 → 36 | 2 → 0 | 4 → 4 | 1340 → 1436 | 200448 → 208800 | + +All these control/candidate outputs report zero strict proper crossings, unrelated-node collisions, unrelated edge/node penetrations, label/label pairs, unrelated label/stroke pairs and routing warnings. Therefore this run provides **no discriminating evidence of proper-crossing reduction**. Zero warnings is not proof of unambiguous independent routes. + +## Independently checked regressions and improvements + +- **diamond:** shared length36→82. Control has two18-unit common terminal runs. Candidate retains those and adds one46-unit horizontal shared run for edge pair0009/000c. Nonterminal shared length0→46; this is not just a terminal-exemption artifact. Bends8→4 and length2200→688 improve, but they partially come with merged routing. +- **crossed_bipartite:** shared276→344, nonterminal204→272. Control has four18-unit common-tip runs plus204 horizontal. Candidate has those same72 terminal units, two additional46 horizontal overlaps, and a180-unit vertical overlap between distinct edge pairs0009/000c. Independent axis-interval sums match the emitted values exactly. A more compact drawing and fewer turns do not erase this distinguishability regression. +- **nested_cross_boundary:** reported label/node collision1→0 and route length1076→364; area284096→366528 increases about29%. The geometry PNG shows the parent widened to place its children horizontally. This is a real tradeoff, not universal improvement. +- **two_containers_reversed_children:** shared148→0, label/node1→0, bends4→0, length872→372 and area288512→272800. The hand-authored alternate child order exists independently; the candidate's straight separated connections support a meaningful ordering improvement over reset-only. +- **long_ordinary_labels:** label/node2→0, shared36 unchanged, but length1340→1436 and area200448→208800 grow. This is supported clearance-for-space tradeoff using approximate core rectangles, not native glyph evidence. + +Viewed eight offline PNGs: baseline/candidate diamond, baseline/candidate crossed_bipartite, baseline/candidate nested_cross_boundary, candidate two_containers_reversed_children and candidate long_ordinary_labels. They corroborate route sharing and spacing changes. All37 image identities and their manifest binding to the original output log were checked. Images are schematic rectangles/polylines with fixed scale per fixture, not application renders or text measurements. + +## Method limits versus actual failures + +Proper-crossing definition excludes T contacts and bend intersections; shared length counts pairwise traversal multiplicity. I recomputed the two reported regressions independently from axis-aligned intervals, so those particular increases are actual geometry outcomes, not metric bugs. An unconditional dominance claim fails on those results, but the experiment has not predeclared a total preference ordering across compactness and sharing. Retain the whole metric vector. + +Reset eligibility is post-baseline-Layout versus pre-layout in the candidate; equivalent for current unchanged-visibility fixtures only. No folded/filter/omitted-node/State/Allocation/undirected-cycle/dense scaling/UI admission/multi-file source lifecycle acceptance follows. The source work budget is partial and runtime complexity was not established here. No native GUI, universal label-ink correctness, candidate command Undo, or issue32 completion is claimed. Base715 lacks the separate36 measured State label follow-up. + +## Next falsifiable experiment + +Keep these nine frozen inputs and add one explicit orthogonal proper-crossing witness plus a non-incident overlap/touch counterexample to verify the evaluator distinguishes them. Then isolate diamond/bipartite routing interaction with a tiny predeclared set of node-placement alternatives (current top alignment, centered rank, deterministic stagger, conservative wider gap), keeping the router unchanged. Record actual routed metrics for every alternative; do not silently choose whichever plot looks best or optimize only bend count. + +Hypothesis: a bounded alignment/spacing change can remove the candidate's excess nonterminal sharing without surrendering reversed-container and long-label gains. Falsifier: no alternative reaches control-or-better shared length while retaining no new obstacle/label collisions and predeclared reasonable area/length bounds. Use controls' reported geometry as a fixed comparator and preserve every alternative; if it fails, investigate router channel/parallel-edge handling rather than repeatedly widening all spacing or introducing a whole external engine. This next probe remains diagnostic; attachment/hidden-route sentinels and real command/history/native validation follow before production selection. + +Evidence SHA256: +- 01-probe/command/result.json: `119179803e8c26b960ca4280e0429bb537a6f9ff5666267e49bfab989f48dc73` +- 01-probe/command/output.log: `21786ae5cb668f60e9252dc884668ee5e98289443d0b3723a9ea69bf21d47fd1` +- 01-probe/command/inputs-before.json: `2e56c60055651f59c58228fb3cdfbd4bfc6dea10236f333ae1824af9a928ecfe` +- 01-probe/command/inputs-after.json: `2e56c60055651f59c58228fb3cdfbd4bfc6dea10236f333ae1824af9a928ecfe` +- geometry/manifest.json: `022fa0f307f9fb92fccbbc139637c62f40d1dcc3a4ea555a35c6b08d82bdb3b5` diff --git a/harness/experiments/auto-layout-20260925/routing-experiment-plan.md b/harness/experiments/auto-layout-20260925/routing-experiment-plan.md new file mode 100644 index 00000000..281bc2c4 --- /dev/null +++ b/harness/experiments/auto-layout-20260925/routing-experiment-plan.md @@ -0,0 +1,53 @@ +# #32 next routing experiment: distinguish shared terminals from ambiguous trunks + +Local source/receipt diagnosis only; no builds, formatters, GUI or product edits. Input: completed `e7deea70` probe `.local/auto-layout-checks-20260925/01-probe/command/output.log`; implementation read from `.local/auto-layout-20260925/crates/oa-core/src/routing.rs`. The probe uses **core estimated label bounds**, not renderer glyph measurement. No new candidate module is justified until the required private routing hook is agreed. + +## Exact observed geometry + +The layered diamond has 82 units of pairwise shared length: 36 classified as common terminal stubs, 46 nonterminal. Edges ending `009` and `00c` share the physical output `(264,106)`, its 18-unit stub to `(282,106)`, then an avoidable extra horizontal run to `(328,106)`. Edge `00c` then turns down to `(328,286)` and enters `(346,286)`. A candidate branching immediately at `(282,106)`, going to `(282,286)`, then right to the target would separate that extra 46-unit trunk while preserving the port and stub. This is a geometric proposal, not a verified collision-free final result; the same obstacle and label checks must evaluate it. + +The layered crossed-bipartite case has 344 shared units: 72 common-terminal, 272 nonterminal. Its opposite diagonal routes both use `x=328, y=106..286`, an exact 180-unit coincident vertical run. Top and bottom horizontal portions add 92 nonterminal shared units. The source stubs are at `x=282`; target stubs at `x=328`. Proper crossings are reported as zero, but these coincident routes do not provide unambiguous independent traces. Do not treat the zero as a solved crossing problem. + +## Source evidence: a local scoring asymmetry precedes penalty tuning + +`crossing_cost` charges `min(shared_length * 0.12, 80)` per previously occupied segment, multiplied by segment count. A proper interior crossing costs24. `BEND_COST` is24. `RoutingSpace::new` uses obstacle boundary coordinates; fast-path candidates add the start/end midpoint, and grid coordinates add start/end. Neither systematically adds lanes offset from previously occupied trunks. + +More importantly, `fast_path(start, end, space, previous, incoming)` includes the turn from the preceding source-side segment, but has no outgoing direction parameter. `route_edge` chooses this local path and only later appends the final target attachment point `b.point`; complete `path_cost` is then compared across endpoint choices, not across the discarded alternative paths for that same endpoint pair. With fixed semantic ports there may be no alternate endpoint choice to recover the discarded route. `grid_path` is only a fallback when `fast_path` returns None, not a better-cost search after a valid fast path. + +For the diamond, horizontal-then-vertical has one internal bend and no incoming bend; its 46-unit shared portion costs5.52. Vertical-then-horizontal has one internal bend plus an incoming bend, costing24 extra locally. But appending the target segment adds the missing final bend to horizontal-then-vertical. Complete paths have equal bend counts; the local comparison prefers the shared route because it omitted one terminal join. The 180-unit bipartite overlap costs21.6, also below one turn. This explains a plausible bias, not proof that correcting it resolves every route. + +## Minimal discriminating comparison (proposal to parent) + +Freeze layered node positions, labels' text, attachments, port identities/anchors, edge order and work budgets. Compare a small fixed sequence, not an open parameter search: + +1. **J: symmetric terminal-join cost.** Supply an optional outgoing point/direction to fast-path scoring. For the final segment to `b.stub`, use `b.point`; include `turn_cost(penultimate, end, outgoing)` both in actual candidate score and admissible pruning estimates where applicable. Intermediate authored pins have no predetermined outgoing direction; do not invent one. If grid routing supports this experiment too, target state selection must account for the terminal turn before returning the best result. Preserve baseline behavior for absent outgoing context. This isolates the suspected bias without stronger penalties or enlarged diagrams. +2. **JP: J plus stronger shared-run penalty.** One declared test coefficient, e.g.1.0 per unit with the existing80 cap, compared with0.12. Keep the proper crossing cost24 unchanged so the comparison exposes whether penalizing overlap merely substitutes crossings. Do not choose this variant solely by shared length. Preserve all hard endpoint constraints. +3. **JPL: JP plus bounded lane candidates.** For occupied horizontal/vertical trunks, offer parallel offsets of `CLEARANCE` on either side where applicable; validate obstacle clearance and fixed terminal stubs. Use a strict deterministic global cap on added coordinates/candidates and reuse existing work exhaustion handling. This tests whether absent geometric alternatives, rather than insufficient penalty, is the blocker. No persisted waypoint authoring and no unconstrained port movement. +4. **Spacing control.** Only if J/JP fail, compare the unchanged router with one fixed additional inter-layer gap (e.g.24 world units). This is a control, not the assumed remedy: larger gaps may lengthen shared trunks and enlarge diagrams while retaining identical topological ambiguity. Do not mix spacing and router changes in the first comparison. + +The first J variant is the smallest informative next experiment. If it removes diamond's extra trunk while retaining invariants, stop and inspect results before implementing JP/JPL. A clean shared terminal fan-out need not eliminate its unavoidable initial18-unit stub. Conversely, sharing a node identity does not exempt arbitrary later overlap, and different physical ports on the same node must not be collapsed into one endpoint exemption. + +## Required hook and ownership boundary + +The candidate module can call public `route_diagram`, but cannot change private `crossing_cost`, `fast_path`, `grid_path` or candidate generation. Returning a changed Project with temporary authored waypoints would test a different policy and would violate the generated-elbows-remain-derived experiment. Copying the entire router into an example introduces unnecessary divergence. + +Therefore propose a parent-owned isolated routing experiment hook, with no default production behavior change, or a separate disposable source variant controlled by the existing runner. Evaluator needs an optional routing provider returning `RoutedView` for a fixed Project, rather than only `candidate -> Project`. It must reuse that provider for every metric, capture, and repeat check and label the variant explicitly. Until parent approves that hook, no module/interface changes were made. The current original/reset/layered comparisons remain reproducible. + +## Falsifiers and risks + +Evaluate both raw and terminal-excluded shared length, proper crossings, T/bend contacts, route lengths/turns, unrelated-node/header penetration, label collisions, warnings and runtime/work counts. A positive overlap moved onto a bend is not a successful reduction in intersections. The crossed K2,2 fixture with fixed port ordering may require a genuine visible crossing or an outer detour; do not demand zero overlap AND zero crossings without a fixed-attachment feasible witness. Separate forced terminal contacts from independently traceable route interiors. + +Keep diamond, crossed-bipartite, chain and long-label fixtures; add a fixed shared-output fan-out, two distinct ports on one node, opposite-direction connections, and a narrow obstacle corridor. Verify exact endpoint coordinates and metadata; preserve ordinary authored pins and preview/settled agreement if the routing change advances beyond this isolated experiment. Stable-ID order can privilege earlier routes, so rerun the same graph under a fixed edge-ID permutation and disclose sensitivity instead of relabeling edges to improve the score. + +Labels are placed after paths settle; lane changes can worsen label collisions even when node positions stay fixed. Parent's eventual GUI inspection should trace each diagonal from its source label/port through the corridor to its intended target at normal zoom. No geometry metric alone establishes that user outcome. This note selects a falsifiable experiment, not an accepted product fix. + +## Exact J patch plan, held for parent's separate candidate pin + +No edits to `routing.rs` are authorized yet. After parent publishes the first experiment evidence, the narrowly proposed change is: + +- Add `outgoing: Option` beside `incoming` in private `fast_path` and `grid_path` only. At `route_edge`'s loop over authored pins followed by `b.stub`, pass `Some(b.point)` only when `index == pins.len()`; pass `None` for every intermediate waypoint. The preceding settled path still supplies `incoming` exactly as now. No public API or metadata change. +- In `fast_path`, extend its shared `join(path)` closure with the terminal turn from `path[path.len()-2]` through `end` to `outgoing`, when two path points exist. Both `estimate(path)` and actual scoring already call `join`; change both consistently through that closure. Keep the two-bend lower-bound early exit: Manhattan distance plus two bend costs remains a lower bound for two-bend alternatives because terminal penalties are nonnegative. Keep final whole-path `path_cost` unchanged; local scoring does not persist a cost, so it does not double-charge the returned path. +- In `grid_path`, add the terminal turn **during relaxation when `next == last`**, using `turn_cost(a, b, outgoing)`. Include it in `costs[state]` and the queue priority before the target state can be popped. Do not merely add a penalty after returning the first reached target: that would fail to compare alternative arrival directions. The existing Manhattan heuristic remains admissible because the new terminal penalty is nonnegative. The initial incoming-turn logic remains unchanged. +- `start == end` has no locally selectable segment. Keep the degenerate result, and rely on whole-path scoring for the junction between preceding/following points. Do not fabricate a direction from an absent penultimate point. Waypoint positions/order remain exact; this patch does not claim globally optimal look-ahead across several hard-pin legs. + +Focused tests before comparing full fixtures: (1) fast-path diamond geometry with one occupied horizontal trunk, fixed start/target stubs, asserting the equal-complete-bend alternative branches earlier; (2) directly exercise grid routing with two clear arrivals where adding the target join changes the preferred total, compare complete cost to an enumerated feasible alternative; (3) mirrored/rotated terminal geometry, including straight continuation and reversal costs; (4) outgoing=None preserves established intermediate-waypoint behavior; (5) full route with one/multiple authored pins retains exact pins and terminal attachments, plus start=end leg; (6) preview versus settled geometry remains consistent under the same baseline/budget. Use private unit tests for fast/grid so a passing public route cannot accidentally avoid the grid test. Then rerun the unchanged probe corpus and report the complete quality vector, especially any newly visible crossings. No expected overall improvement is asserted before execution. diff --git a/harness/experiments/auto-layout-20260925/run-01/.gitattributes b/harness/experiments/auto-layout-20260925/run-01/.gitattributes new file mode 100644 index 00000000..e8ef64a1 --- /dev/null +++ b/harness/experiments/auto-layout-20260925/run-01/.gitattributes @@ -0,0 +1 @@ +* -text whitespace=blank-at-eol,blank-at-eof,space-before-tab,cr-at-eol diff --git a/harness/experiments/auto-layout-20260925/run-01/manifest.json b/harness/experiments/auto-layout-20260925/run-01/manifest.json new file mode 100644 index 00000000..e723d2a6 --- /dev/null +++ b/harness/experiments/auto-layout-20260925/run-01/manifest.json @@ -0,0 +1,217 @@ +{ + "source_commit": "e7deea7039bcf31675cffbb462cfeb19d62a7e20", + "baseline_commit": "715036e132677dd2bc2fb37ed316d93dc9987aec", + "scope": "Nine small SA FunctionalDataflow diagnostic fixtures; Windows core geometry, not native UI or production acceptance.", + "binary_after_completed_run": { + "path": "target/debug/examples/auto_layout_probe.exe", + "bytes": 24039424, + "sha256": "a95736170f58d25c60a16f2683b961aad8b31f97e4357c3e0d2f7e81d21176bd" + }, + "members": { + "run/command/changes.patch": { + "bytes": 0, + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "run/command/context.json": { + "bytes": 3488, + "sha256": "4dd4e602c2b33fd229a7241e1a4d6a2de399df197b5613af4b3126bfd357c476" + }, + "run/command/inputs-after.json": { + "bytes": 1722092, + "sha256": "2e56c60055651f59c58228fb3cdfbd4bfc6dea10236f333ae1824af9a928ecfe" + }, + "run/command/inputs-before.json": { + "bytes": 1722092, + "sha256": "2e56c60055651f59c58228fb3cdfbd4bfc6dea10236f333ae1824af9a928ecfe" + }, + "run/command/output.log": { + "bytes": 331975, + "sha256": "21786ae5cb668f60e9252dc884668ee5e98289443d0b3723a9ea69bf21d47fd1" + }, + "run/command/result.json": { + "bytes": 4124, + "sha256": "119179803e8c26b960ca4280e0429bb537a6f9ff5666267e49bfab989f48dc73" + }, + "run/command/stderr.log": { + "bytes": 279, + "sha256": "492e4346b5daf9d9eed2aa96c89c5104b9d8d7f830074b1346c9f5aaf053d662" + }, + "run/environment.json": { + "bytes": 9463, + "sha256": "14e53dd6359601bdd9be3ad24c527fca96310d9eb4ffa91965f71841f8df2f82" + }, + "run/orchestration.log": { + "bytes": 165, + "sha256": "e4bf56f792c8e8fc9288fc08ef5f0159941b8026e435a427722b59ccc4e34831" + }, + "geometry/authored_detour_and_label-after.png": { + "bytes": 12492, + "sha256": "44e30b94ef11b176155ab3df90fe5b52788c07442a42a355d3458fa904c147bd" + }, + "geometry/authored_detour_and_label-before.png": { + "bytes": 12468, + "sha256": "097588fae4fd6253c25ab4b60be1ad685ead3a3012b206f382cec0be1341e700" + }, + "geometry/authored_detour_and_label-experimental_candidate-metrics.png": { + "bytes": 13162, + "sha256": "82a07de168cda7dacdad2bd532dae408172466b2776acf8cfaabef6711c0539b" + }, + "geometry/authored_detour_and_label-reset_only_control-metrics.png": { + "bytes": 12777, + "sha256": "e676edc49ec6ebb2fe29e976c36cba589f76330e7f9eb27b8835415a2ed5d225" + }, + "geometry/chain_7_row_wrap-after.png": { + "bytes": 14271, + "sha256": "a020c1535e3d6e48cb5e6d7ae8403a256767c68ce26876fd773f3b626c61e365" + }, + "geometry/chain_7_row_wrap-before.png": { + "bytes": 13771, + "sha256": "0b282cbd29eb3e29fa7d3bb9c3c9746caa14c77372b3191d78fa1a60743d0b11" + }, + "geometry/chain_7_row_wrap-experimental_candidate-metrics.png": { + "bytes": 14396, + "sha256": "3ca042155d918083c5f4135ae059205b29b8ee5944819a6040a22eeb572f5f04" + }, + "geometry/chain_7_row_wrap-reset_only_control-metrics.png": { + "bytes": 14549, + "sha256": "8828f289159deb0c2bedd130495197639775cd8edeb561f0de5501e2980d1e1d" + }, + "geometry/crossed_bipartite-after.png": { + "bytes": 13144, + "sha256": "54a1b5e983bc9b6f619e67c13173d0ff5000e30f080aaf6c0a9064f59036f4b7" + }, + "geometry/crossed_bipartite-before.png": { + "bytes": 13413, + "sha256": "8622726dfdfc01e93fcd2d9d22c6d082e5a169b9dcd59f788e876954431214fd" + }, + "geometry/crossed_bipartite-experimental_candidate-metrics.png": { + "bytes": 13848, + "sha256": "de238d7e904a050b93cc63926f9b4b4723d4b98e6741971fc98f81d771a8a52e" + }, + "geometry/crossed_bipartite-reset_only_control-metrics.png": { + "bytes": 13349, + "sha256": "0b2a8c49368258b23c15a8e06bf9b881f0e53fed8b5fd7d6f216a09837634abc" + }, + "geometry/diamond-after.png": { + "bytes": 12556, + "sha256": "6afcff1e5c10758e5eab3b803ec858d0af3da953be4af93df75257544a7252b2" + }, + "geometry/diamond-before.png": { + "bytes": 13255, + "sha256": "30d514155ec0e88a68e62089cd50b7747924a81095c957aa67b1bf5a70ac18f8" + }, + "geometry/diamond-experimental_candidate-metrics.png": { + "bytes": 13581, + "sha256": "14dc1304822e74f8c7e0146a02af69ea39dc90d0d655a75b97383644c04b8900" + }, + "geometry/diamond-reset_only_control-metrics.png": { + "bytes": 12982, + "sha256": "48414d7a859c774f2cef51d0fc1512b1c9fe1540c540f96fac7f9531583d8731" + }, + "geometry/fixed_ports-after.png": { + "bytes": 11889, + "sha256": "574cb0249c3bcc3140b9d61906332295a8462e32fbcd6b9526d8b05e202e38a0" + }, + "geometry/fixed_ports-before.png": { + "bytes": 12013, + "sha256": "d07ef2105aa63f3aaacb19e9a7ca4960239b01f05f734baa6270657a465b4ab0" + }, + "geometry/fixed_ports-experimental_candidate-metrics.png": { + "bytes": 12394, + "sha256": "d7fdcd7d4a1a014dd34243400dcd74a7596388fc5747853e5a6629535ca3083e" + }, + "geometry/fixed_ports-reset_only_control-metrics.png": { + "bytes": 12231, + "sha256": "237e181db92baf49c24554ec4325137b014413603b62cb08dee63e6e68fa3e8d" + }, + "geometry/flat_chain_4-after.png": { + "bytes": 12582, + "sha256": "7326cd482a61bea4cb787770449253a55f41e102794c8fc6a8500d9244c20cc7" + }, + "geometry/flat_chain_4-before.png": { + "bytes": 12723, + "sha256": "b086e2b23d4b68cb43366725a26fbb39fdc2e87d18cd7109c9b3ec950ab665ba" + }, + "geometry/flat_chain_4-experimental_candidate-metrics.png": { + "bytes": 13405, + "sha256": "3bb352dd5066a3b2cc5bb298c9f47a02416186421df4841b96c944e523d11104" + }, + "geometry/flat_chain_4-reset_only_control-metrics.png": { + "bytes": 12918, + "sha256": "eba3eede6771a1ebfc7b773b48b599f5ca49613ad7444ab26acfea7d20dde515" + }, + "geometry/long_ordinary_labels-after.png": { + "bytes": 12643, + "sha256": "f4f0c360e9ce44d631dd1d9f7c202954be943fdbede6288edbaddf9b890fcaec" + }, + "geometry/long_ordinary_labels-before.png": { + "bytes": 12661, + "sha256": "3c17c1195337cda7cd4141a15428b66cac1475421600b6ecffc3db57dbfd9f94" + }, + "geometry/long_ordinary_labels-experimental_candidate-metrics.png": { + "bytes": 13235, + "sha256": "d2931b576901fec68b23afd1a54d4c301eda4a75ba30184344749e0add277bc0" + }, + "geometry/long_ordinary_labels-reset_only_control-metrics.png": { + "bytes": 12969, + "sha256": "68aacc7196a4995ff8a884a15ec91a31bd386bdd2d232fd2c27696a7f83cf791" + }, + "geometry/manifest.json": { + "bytes": 8099, + "sha256": "022fa0f307f9fb92fccbbc139637c62f40d1dcc3a4ea555a35c6b08d82bdb3b5" + }, + "geometry/nested_cross_boundary-after.png": { + "bytes": 13344, + "sha256": "51db6785ab89f5d92c61288604ae3c76aee467e291738b54466db5704c0eec8b" + }, + "geometry/nested_cross_boundary-before.png": { + "bytes": 13547, + "sha256": "3b3963f5ef5a42106a006f1825ae5d85b722aa3bf163452ba986ef3369b57cc2" + }, + "geometry/nested_cross_boundary-experimental_candidate-metrics.png": { + "bytes": 13535, + "sha256": "0ba365785753e748dc7c86c3f1eb5767f9ccb87c0ae0e18085e6a9d32b79f60d" + }, + "geometry/nested_cross_boundary-reset_only_control-metrics.png": { + "bytes": 13549, + "sha256": "fbe21b57616459ecdbbd083dccd73bd120f5b7ad59a8ad80ea38cbbf9c3f49c1" + }, + "geometry/two_containers_reversed_children-after.png": { + "bytes": 13950, + "sha256": "1536fa9da0fa89a64b12e7faf6d0dab1c3fa0177517e39fd1adaeaee3f2214fe" + }, + "geometry/two_containers_reversed_children-before.png": { + "bytes": 14076, + "sha256": "2f3a2d55d30ff206d9daf9b8f84ba0e960332a02275289c66ab2e104da2e890e" + }, + "geometry/two_containers_reversed_children-experimental_candidate-metrics.png": { + "bytes": 14500, + "sha256": "8a0744cf04d305a0431468395b3676604e03991e577f9f9d2f45e8497b1ef9ca" + }, + "geometry/two_containers_reversed_children-manual_planar_order_witness-metrics.png": { + "bytes": 14531, + "sha256": "60623d358d9cb930c2c2c4995c9286c653e597c411b8879b77ac099fe9b0406b" + }, + "geometry/two_containers_reversed_children-reset_only_control-metrics.png": { + "bytes": 14126, + "sha256": "2483bf404953ce9b3da38f2adca10c4e02e34638e2999acae7beecb5fe936a83" + }, + "tooling/run-auto-layout-check-20260925.py": { + "bytes": 2771, + "sha256": "d652c4df47f13aefc723bc54362d7b61308b8983c8d39ae7721c012519358ea2" + }, + "tooling/run.py": { + "bytes": 13814, + "sha256": "698ed7182726c77fa4a1c85fc6dd08187ed20689941f57e749e3f0bc845f3252" + }, + "tooling/auto-layout-format-precommit-20260925.json": { + "bytes": 364, + "sha256": "29c93825b415e04204d3fe23a85eef0798560bbb5a1a169689326602f65a9f35" + } + }, + "archive": { + "name": "probe-e7deea70.zip", + "bytes": 900995, + "sha256": "c52f82d4782cd6a7f8cbe67498c8b2371e99204a65976aa8bcbbd0a86f835069" + } +} diff --git a/harness/experiments/auto-layout-20260925/run-01/probe-e7deea70.zip b/harness/experiments/auto-layout-20260925/run-01/probe-e7deea70.zip new file mode 100644 index 00000000..a3988e2c Binary files /dev/null and b/harness/experiments/auto-layout-20260925/run-01/probe-e7deea70.zip differ