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