Files
ARCADIA-Studio/harness/resize-port-policy-experiment-20260912.md
T

123 lines
7.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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.