diff --git a/harness/experiments/boundary-order-20260925/plan.md b/harness/experiments/boundary-order-20260925/plan.md new file mode 100644 index 00000000..212ed83e --- /dev/null +++ b/harness/experiments/boundary-order-20260925/plan.md @@ -0,0 +1,93 @@ +# Incoming boundary order experiment + +Issue32, following the SCC checkpoint f4fa0c11. Keep the full OA/SA product goal +and production/native acceptance requirements unchanged. This is one isolated +planner comparison with released routing, not a quality-selected parameter sweep. + +## Question and fixed candidate + +The SCC planner drops a connection from a sibling group's local graph when the +source is outside that group. Root SCC ranking knows which container is upstream, +but the children have no information for matching order across the boundary. +The existing two-container witness has164 shared units and one label/node +collision, while the old layered candidate's incoming-neighbor order has zero +for both. Preserve the SCC candidate's sparse40 structural improvement while +restoring this missing information. + +Start from the same canonical SCC plan, before import. Never change its SCC +membership, condensation ranks, internal perimeter walks, node sizes, gaps or +root layout. In each nonroot same-rank band, bundle undirected-connected SCC +blocks as indivisible units with their existing internal order. Unanchored units +retain their ordinal slots. Reorder only anchored units among their old slots, +then repack by prefix sums of unchanged heights and gaps. Old absolute Y slots +cannot be reused for differently sized blocks. Envelopes are mathematically +invariant; finite arithmetic and exact final projection remain checked bounds. + +An anchor is an oriented incoming projected edge whose target lies under the +current sibling group and whose source does not. One distinct visible source +placement contributes one vote per unit, independent of parallel relation count. +Scores are the mean of current planned absolute source-center Y coordinates, +summed in stable placement-ID order using f64. Break equal scores by original +unit order. Undirected external edges supply no invented direction or score. +This is a stated center-based heuristic, not a claim to match final port slots. + +A group can change only when a band contains at least two anchored units. +Create dependencies from every such active group that owns an offset along an +external source placement's entire ancestor chain to the consuming group. +Include the immediate containing group; do not invent additional hierarchy arcs. +Condense this influence graph and process its SCC DAG deterministically. Before +each SCC, compose a complete absolute-position snapshot from current offsets. +All member groups calculate proposals from that snapshot before committing any +of them. Each group commits once. Cyclic influence therefore has one simultaneous +step, an explicit limitation rather than an unbounded convergence loop. + +Recompose descendants through their ancestor offsets. Perform one final original- +to-final placement import, preserving the existing reset/hidden/retained-route +contract and conditional effective-minimum restoration. Exact final projection +and actual mandatory leads must pass; no size/gap/anchor repair is added. +Apply the existing graph, work and extent bounds to new dependency/snapshot work. + +## Controls, falsifiers and acceptance + +Retain all14 original cases, their SCC run02 outputs at2426d286 and the original, +Arrange-reset and old-layered controls. Flat/no-boundary outputs, particularly +sparse40 and both mixed-ID cases, must preserve complete Project, geometry and +metrics exactly (new diagnostics are separate). Existing SCC-mode and released +route-mode output must remain byte exact after adding the new observer mode. + +The existing two-container witness requires Left A before Left B, Right B before +Right A, with actual route sharing/contact/label improvement assessed against +the old zero-sharing witness. Swapping both groups is not that success. + +Add three independent topology falsifiers before execution: + +1. Opposing parents: L.A→R.B, L.B→R.A, R.A→L.A, R.B→L.B. Contradictory order + demands must remain deterministic, bounded and explicit; zero crossings is + not an achievable requirement inferred from those demands. +2. Three-parent chain: L.A→M.B, L.B→M.A, M.B→R.A, M.A→R.B. Preserve upstream + L.A