123 lines
7.8 KiB
Markdown
123 lines
7.8 KiB
Markdown
# 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.
|
||
|
||

|
||
|
||
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.
|