# Port layout policy experiment — 2026-09-12 This isolated experiment addresses the projection feedback that prevents some valid direct-resize rectangles. It does not implement desktop resizing or adopt a new production policy. Gitea [issue 16](http://217.177.34.108:3000/sorokin.oleg.edu/ARCADIA-Studio/issues/16) owns live coordination. The preceding [inverse experiment](diagram-resize-foundation-20260912.md) explains why adding solver iterations cannot resolve the current geometric constraint. Source `7e25b3d3907693cbbf03bb51b5e08b01d743a934` derives from `e57c390` on an isolated experimental branch. The ordinary projection entrypoint still selects Current. An explicit nonpersisted experimental entrypoint compares Current, unchanged automatic sides with adaptive spacing, and capacity-aware side assignment over finalized owner bounds. No desktop, schema or API policy switch was added. The [exact patch and four source files](experiments/resize-port-policy-20260912/manifest.json) are portable evidence; they are not integrated production changes. ## Executed Windows evidence All 116 recorded core/workspace input files were independently compared with their exact committed Git bytes before archiving. Each gate records unchanged inputs and preserved root core artifacts. The isolated target uses Rust/Cargo 1.98.1 Windows GNU LLVM, LLVM-MinGW 20260908 and one compiler job. Receipts also record compiler/linker hashes and complete command arguments. | Command suffix after `cargo test --locked --jobs 1 -p oa-core` | Result | | --- | --- | | `--test experimental_port_policy -- --nocapture --test-threads=1` | 8 passed, 0 failed/ignored | | `--lib capacity_experiment::tests -- --nocapture --test-threads=1` | 3 passed, 0 failed/ignored; 68 filtered | | `--test port_anchors -- --nocapture --test-threads=1` | 13 passed, 0 failed/ignored | The first allocator filter used the filename `port_capacity_experiment` instead of the Rust module name. It selected zero tests. Its successful process exit is preserved but excluded from evidence; the corrected filter explicitly ran all three allocator tests. The original summary's process-success field must not be interpreted as nonempty test coverage. The accepted summary and individual logs distinguish them. The eight comparison tests establish the selected forbidden rectangles and outward-handle examples, manual-anchor/source round trips, deterministic alias behavior, and one narrow-peer-gap route. They do not execute a desktop resize gesture or establish the general inverse for enclosure, folds and states. For the 100-port fixture, Current produces a 728×2808 owner with minimum measured same-side center gap 27.999878. Adaptive spacing retains 728×804 but reduces the gap to 7.757538, below the 14-unit port glyph. Capacity-aware assignment retains 728×804 with gap 28.444397. This is a geometry/spacing comparison; it does not establish readability or acceptable routes for all 100 exchanges. ## Independent critique and next decision The [independent review](experiments/resize-port-policy-20260912/independent-review.md) identified two concrete prospective ergonomic regressions. Both subsequently reproduced with actual core projection/routing at test source `a95db10ce73d639f59eb1ec1153de26f4967881c`: - The 20-port right-facing example changes 12 ports' sides at height 259.9 → 260.0, then zero at 260.0 → 260.1. Both controls have zero changes. The previous assignment remains feasible at the larger frame, so zero/one change suffices for capacity/preference. The spacing-only control still has a sub-glyph center gap of about 11.79; its stability does not make it acceptable by itself. Candidate total route length changes 41393.008 → 41410, with 54 → 55 bends. All threshold routes remain clear. - The eight-port candidate places port `…006a` on Top at `(112,0)`. Its mandatory 18-unit stub intersects obstacle `…002a`'s inflated bounds. Exchange `…03ee` reports `NoClearPath`; both controls have zero blocked stubs and zero warnings. The full UUIDs and every port/route are preserved in the case logs and geometry. The [standalone build](experiments/resize-port-policy-20260912/falsifiers/build.json) passes with warnings denied, using the fingerprint-identified, unchanged 7e25b3d core and dependency libraries. Exact test bytes match a95db10; core inputs match the passed baseline. This is a standalone integration-test executable, not a Cargo workspace or desktop gate. Both tests are explicitly listed and run with `--exact`; each exits 101 at its intended prospective acceptance assertion, with unchanged inputs/binary. The [run record](experiments/resize-port-policy-20260912/falsifiers/run.json) preserves two failures, zero passing tests and `policy_accepted: false`. Controls and their route/geometry invariants are evaluated before the final assertions. All 36 canonical model/projection/route artifacts are preserved alongside logs and hashes. This [analytical comparison](experiments/resize-port-policy-20260912/falsifiers/obstacle-comparison.png) was drawn from the recorded core geometry and visually inspected; it is not an application screenshot and shows only the local port stubs, not full routes. ![Recorded owner, obstacle and port-stub geometry under three policies](experiments/resize-port-policy-20260912/falsifiers/obstacle-comparison.png) The first green gates did not cover those risks; the new tests falsify adoption of the current candidate. A revised allocator must address actual exit positions and avoid needless side changes, including a near-corner obstacle whose midpoint test is clear. The desired boundary remains promising: finalize rectangular geometry before automatic side choice, while preserving authored anchors, source parity and real routing endpoints. The current candidate is not adopted. No passing desktop resize workflow, general geometry solution, historical rendering equivalence or issue closure is claimed. Linux/WSL remains deferred. ## Revision boundary The [revised candidate comparison](experiments/resize-port-policy-20260912/revision-design.md) and [independent interval critique](experiments/resize-port-policy-20260912/interval-design-critique.md) separate attribution, clear-position placement and more general repair. The next isolated source, **6203b5c**, changes fallback ranking only: fixed UUID/side scores replace occupancy-dependent rankings in an explicit fourth experimental mode. The original three modes and default Current remain unchanged. Three fixed identity sets and forward/reverse height sweeps distinguish ranking churn from the untouched exit-clearance failure. Source review found no actionable defect; compilation and execution remain pending. The [source handoff](experiments/resize-port-policy-20260912/stable-ranking/source-handoff.md) and [serialized gate runner](experiments/resize-port-policy-20260912/stable-ranking/run-stable-ranking-gates.py) are archived with exact changed Git blobs and the a95-to-6203 patch. The runner requires exact committed input bytes, a fresh isolated target, recorded core/test artifacts and exact test inventories. Designated prospective failures keep their nonzero exits and non-adoption status. It has not been executed. This does not select a general resize policy. The critique supplies further unexecuted counterexamples: per-edge ancestor obstacles make different ports' legal borders differ; independent spreading across narrow gaps can violate the required spacing; normalized primary-side preferences can flip collectively without any fallback allocation; and restarting a whole owner at a different gap tier can create churn even with fixed ranks. Exact placement witnesses, actual routes and stable identity sweeps must evaluate these separately. A flat interval experiment is justified, but neither a common scalar capacity nor stable fallback ranks establish the full requirement. The production policy remains unchanged.