Files
ARCADIA-Studio/harness/focus-optical-validation-20261001.md
T

13 KiB
Raw Blame History

Two-axis Focus optical result — 2026-10-01 PDT

This is a bounded experiment for issue 38, tested at source 3878951262 on codex/focus-workspace-experiment-01a0d717-20261001. The predeclared plan defines the question, fixed inputs, alternatives and acceptance limits. PROJECT_GOAL.md remains authoritative. This result does not complete dense-diagram usability, accept an editable Focus workspace, or alter a published release.

Result and decision

Recovering both canvas axes gives a substantial full-scene magnification gain on the mixed and nested examples. The ordinary small view correctly remains at the existing 150% Fit clamp at full window size. Retain Focus as a useful workspace hypothesis; do not promote it as a sufficient readability remedy. Parent inspection still sees foreign-line label crossings and shared allocation runs. No new unassisted reading was obtained: a fresh-reader spawn failed with agent thread limit reached, and existing readers know the semantic answer key. Assisted inspection and magnification do not substitute for that gate.

All entries below use logical client 1440 × 900, observed Iced window scale 1.0, the same pinned executable/runtime and the complete admitted Project. Native screenshots include decorations and are 1442 × 932; those dimensions are not the client size. Zoom values are rounded here; raw measurements retain their full f32 values.

Complete saved view Nodes / ports / edges Baseline canvas / Fit Focus canvas / Fit Magnification ratio
Mixed eight-card traceability 8 / 6 / 12 824 × 535 / 0.5152723 1440 × 824 / 0.9243028 1.7938144
Nested OA allocation 12 / 0 / 7 824 × 540.6 / 0.72186 1440 × 824 / 1.20872 1.6744548
Nested SA allocation 12 / 20 / 12 824 × 540.6 / 0.66568 1440 × 824 / 1.04865 1.5753145
Small OA functional dataflow 3 / 0 / 1 824 × 574.6 / 1.5 1440 × 824 / 1.5 1.0

Each case starts Baseline → Focus → Baseline at the same window/DPI. Returned Baseline viewport, camera, header height, client and scale match exactly. Actual width and height resizes then produce client 1100 × 700 and newer measurement generations. In the mixed view, Baseline becomes 484 × 335 at 0.2895086 and Focus 1100 × 624 at 0.6985392; its resized Baseline return also matches. Resized OA/SA and small cases retain their complete content. All 22 measurement captures pass whole-value/byte conservation and independently recomputed Fit checks.

The original eight-card source is unchanged: 138661 bytes, SHA-256 9db1015369f450d5810c96a01fddb8a009d57f6aafbda5182703f15ded23d9c8. It contains one preexisting work_without_behavior_context warning; the exact independently retained baseline agrees. The unrelated routing-workshop and coastal-rescue sources are schema3 and are admitted through the identified production decoder into schema7. Their complete migration reports and 29 / 5 warnings are inventoried, with no admission errors. OA and SA runs of the same legacy file yield equal complete admitted Projects and diagnostics. The Python checker does not independently regenerate those migrations or establish a predeclared legacy-warning baseline.

Architecture and mechanical verification

The opted-in runner freezes a validated Project and uses App::with_project only to present Baseline chrome. It admits Architecture diagrams only, synchronizes layer/Explorer/create-kind state, and verifies complete Document admission. A pre-dispatch inert wrapper excludes child input, focus operations, overlays and clipboard access. The canvas adapter calls the production DiagramCanvas::draw with fresh optical state and an unavailable cursor; it cannot dispatch the production App reducer or subscription. No route, core, model, schema, label, port or endpoint-marker implementation is changed.

Private generation-stamped layout owns viewport and Fit. Header/client/scale measurement and a later matching draw acknowledgment gate capture; every actual resize invalidates readiness. The acknowledgment proves CPU draw invocation, not GPU completion. Visible native captures supply separate display evidence. Terminal faults refuse queued captures; Close always attempts a truthful, create-new PASS/FAIL receipt and exits rather than trapping the window.

Baseline uses the real body, navigation, docks, palette, tool rows and footer. Its header replaces only the action area, using the shared production header. Measured Baseline header height is 67.39999389648438; Focus uses a 48-unit header and 28-unit status row. Ordinary opt-out launch shows Home and the original New/Hosted models/Open/Save as/Save all controls. A native Open of the exact copied eight-card input, OA → SA navigation and selection of the saved mixed diagram work normally. At 1440 × 900 and at width1100, header and canvas boundaries align visually with optical Baseline; this is visual comparison, not an instrumented normal-header measurement or pixel-equality claim.

Windows verification uses Rust1.98.1, x86_64-pc-windows-gnullvm, LLVM-MinGW 20260826 UCRT, jobs1 and incremental compilation disabled. Tests and executable are dev/unoptimized with debug assertions. The serialized gate records 533 unchanged source-input hashes:

cargo fmt --all -- --check
cargo test --locked -p oa-desktop -- focus_optical diagram:: --test-threads=1
cargo clippy --locked -p oa-desktop --all-targets -- -D warnings
cargo build --locked -p oa-desktop --bin arcadia-studio

All pass: 92 tests, zero failed/ignored, 1466 filtered. These include nine optical tests for actual spy-widget input/focus/overlay exclusion, draw-only behavior, exact Fit, stale/repeated sizing, invalid admission, schema3/SA coherence, opt-in dispatch and terminal-fault/Close recovery. This is not a new full-suite or workspace gate. Initial formatting failed; its 79955-byte stdout and exit1 are retained, followed by successful formatting and the final check.

Pinned executable: 121832448 bytes, SHA-256 1be6034951f664b493c5cf7ab806618e216dc840f30ea849dc2354893ab195e4. Pinned libunwind.dll: 190976 bytes, SHA-256 f45604a12e8bcd839fd86f667c1be1cc7c4f9da2b3c69ff381ac708f0e1ae7d4. Five actual native processes exit normally with code0 and empty stdout/stderr: mixed3356, OA9180, SA5324, small8268 and ordinary4568. All binary and optical input hashes remain unchanged. Ordinary's separately copied input is checked by the parent outside its fixture-null launcher receipt.

Review, falsifiers and remaining limits

Independent proposal/source review preceded compilation. It found stale capture after terminal fault and a Close path that could trap the window; both were fixed before the tested build. The original source review pins its preformat handoff and does not retrospectively claim compilation/native coverage.

Independent evaluator review showed that the first checker accepted wrong case attribution, a wrong diagram, stale generation and zero scale. It also accepted a synthetic four-case corpus made by copying the mixed case. Those artificial data are confined to the inventoried review corpus. The authorized repair recomputes fixed binary/input hashes, checks launcher/admission/capture identity and raw logs, requires finite positive measurements and neutral state, and verifies generation transitions. The original checker and failed probes are preserved.

Parent reviewed the repair and executed it once against all four actual cases: exit0, stderr0; final report SHA-256 0ba442b4eff4138821baa1a2687d8af2f38aa8c3a5016a8abc4985722926a402. Checker SHA-256 is 8b88f148e6a4137375d9784494a15c894c45bb8f3c2379ea2bc954e68c61421f. It compares complete Project/scene/SVG bytes over time and rounds each independent Fit arithmetic intermediate to f32 using recorded bounds and viewport. It does not independently regenerate projection/routing, validate semantic correspondence to SVG, measure glyph ink, prove screenshot freshness or supply first-reading acceptance. A coordinated root-and-all-capture scene mutation remains accepted and explicitly demonstrates that scope limit. Fabricated non-null migration metadata and erased legacy warnings likewise expose the declared migration/ legacy-baseline limits rather than a passed semantic evaluator.

A different reviewer independently checked the repaired evaluator and all four actual cases, verified the 533 gate source hashes and raw log sizes, and rejected twelve further isolated mutations. No blocker was found within temporal conservation and recorded-bounds f32 Fit scope. That reviewer authored the Rust runner, so this is an independent review of the checker/evidence, not a fresh review of their own runner. They also compared the complete actual OA/SA migration objects (equal, from3/to7, one generated interface allocation,37 semantic defaults) and inventoried the small report (20 defaults); no required resolutions or unresolved message values occur. Their original report, probe and full reviewed-file inventory are preserved alongside the prior source/evaluator reviews.

Native failure probes remain visible in the evidence. An initial body-border drag did not resize. A later attempt to grow the window beyond screenshot bounds was rejected by Computer Use before input; no post-resize restoration to the original window size is claimed. The initial same-size return remains exact. Indexed Open-dialog actions did not activate Open; a refreshed coordinate click did, followed by settled native verification. Ordinary screenshots named 01-normal-loaded-model and 02-normal-load-settled still show the dialog; 03-normal-load-visible is the actual completed load. The ordinary height drag also left the screenshot at 1102 × 932: filenames 07-normal-small-exact-eight and 08-normal-resize-settled do not establish a 1100 × 700 ordinary run. No literal text was injected into inert Inspector controls without verified focus. Canvas drag and Delete attempts had no effect; capture004 preserved the complete mixed model/scene/SVG afterward.

Named DataAssociation ends, broad projection coverage, other fonts/DPI, accessibility, manual camera, editable lifecycle, save/history, held gestures and pending navigation remain outside this experiment. Linux/WSL is user-deferred. Peer #43 and other owned/paused work are untouched. A later editable promotion requires the lifecycle gates in the plan; a notation follow-up must distinguish relationship category from individual identity on shared paths.

The independent next-candidate critique reconfirms those witnesses in the frozen current scene. The proposed two dash patterns are identical for their first19 units; the specified Allocation pattern still paints18.5 of the24 units through the conversation-label bounds, including its center. Identical kind/phase cannot encode member identity on a shared prefix. These are deductive limits under the proposed phase/centerline policy, not a native dash-rendering trial or proof that whole-scene tracing is impossible. The critique pins primary Capella notation precedent and compares interaction, labels, lanes and bundles; no numeric dash vocabulary or next renderer is adopted.

Reproduction and evidence

Build the identified source with the environment above; general platform setup is in README and Windows packaging. No private executable or package is published for this experiment. The existing save-diagnostics release remains the latest delivered production scope.

Launch the experimental binary with an unchanged JSON, its saved Architecture diagram UUID and a fresh evidence destination, for example:

& '<binary-directory>\arcadia-studio.exe' --focus-optical `
  '<checkout>\harness\experiments\focus-optical-20261001\eight-card.json' `
  '00000000-0038-4000-8000-000000000001' '<fresh-output-directory>'

Wait for readiness, capture Baseline, switch/capture Focus, return/capture Baseline, exercise actual resizing and close normally. The remaining UUIDs and exact fixture hashes are in the plan. Launch without the flag to exercise the normal application. Matching DLL/toolchain provenance is required for the recorded Windows environment.

The raw packet preserves watcher/runner receipts, complete inputs/models/scenes/ SVGs, screenshots, logs, failed probes, gates, helpers and original review challenges. Host-specific QA helpers deliberately pin this source/build and create new outputs; on another host adapt paths only, preserve hashes and identities, and retain those adaptations separately. They must not point at synthetic challenge data as though it were native output. The packet inventory and independent final checker review are linked from the experiment entrypoint. The final index covers 29 files / 17465556 stored bytes and 1805 archived members. Parent's portable content verifier passes with all 1823 retained originals compared; this is byte-integrity evidence, separate from the experiment's acceptance.