Reconcile exact workspace test results and review picker locator correction
This commit is contained in:
+28810
File diff suppressed because it is too large
Load Diff
+33
@@ -0,0 +1,33 @@
|
||||
# Final-03 exact test-result reconciliation
|
||||
|
||||
Source `8ddfadf440b5c208b1adb6b211a97ba0c99cff04`; workspace exit **101**. Every admitted native test name has exactly one terminal result in its attributed target: **2,199 ok, one failed, eight ignored = 2,208**. All **61 native harnesses** match their exact inventory name multisets and ignored sets. All **64 stdout summaries** reconcile, including three zero-test doctest harnesses (`oa_cli`, `oa_core`, `oa_server`). No measured or filtered cases were reported.
|
||||
|
||||
Attribution uses the ordered Cargo stderr `Running … (executable)` records, joins each executable to its admitted inventory artifact, then pairs that order with stdout `running N tests` / terminal summaries. Each target's full name multiset is independently compared; this is not only an aggregate-count check. JSON contains all 2,208 per-name outcomes with target/package/harness and output line, all 64 summaries with stderr attribution lines, all 29 required outcomes and exact ignored reasons. Output/stderr hashes match the terminal receipt. Current target binaries were not read.
|
||||
|
||||
## Required behavior results
|
||||
|
||||
| Category | Required | Ok | Failed | Ignored |
|
||||
|---|---:|---:|---:|---:|
|
||||
| allocation_positive | 4 | 4 | 0 | 0 |
|
||||
| connection_route_9 | 9 | 9 | 0 | 0 |
|
||||
| mixed_traceability | 5 | 5 | 0 | 0 |
|
||||
| picker_vendor_mounted_8 | 8 | 7 | 1 | 0 |
|
||||
| real_text_apply | 3 | 3 | 0 | 0 |
|
||||
|
||||
All 29 required names were admitted nonignored; **28 passed, one failed**. The failure is `app::state_diagram_tests::picker_escape::mounted_state_missing_picker_escape_preserves_exact_document_then_reopens_and_places` in package `oa-desktop`, binary target `arcadia-studio`. The terminal assertion is at `crates/oa-desktop/src/app/state_picker_escape_tests.rs:71:5`, output line 2435: `open picker owns Escape, not the State canvas or App`. The desktop harness summary reports 1,527 passed, one failed and seven ignored. The result does not establish the root cause or acceptance of any later locator repair.
|
||||
|
||||
## Actual ignored results
|
||||
|
||||
- `r6_data` / `inheritance_chain_validation_scaling_probe` — explicit inheritance scaling probe; run with --ignored --nocapture (output line 479).
|
||||
- `arcadia-studio` / `app::source_rename::timing_tests::accepted_release1_prepare_commit_sync_and_confirm_timing` — manual Windows dev/debug rename latency trial; run alone with --ignored --nocapture --test-threads=1 (output line 1320).
|
||||
- `arcadia-studio` / `app::source_rename::timing_tests::layout_timing_tests::accepted_release1_constructor_vs_reuse_through_next_highlight` — manual Windows dev/debug editor replacement + layout/highlight trial; run alone with --ignored --nocapture --test-threads=1 (output line 1321).
|
||||
- `arcadia-studio` / `app::source_symbols::tests::source_symbols_100_modules_1000_definitions_10000_uses` — manual 100-module latency/process-memory trial; run alone with --ignored --nocapture --test-threads=1 (output line 1360).
|
||||
- `arcadia-studio` / `behavior::scenario::spacing::controller::timing_tests::saved_spacing_capture_prepare_20_lanes_1000_messages_3_views` — Diagnostic timing only; run alone with --exact --ignored --nocapture after correctness gates; no latency acceptance threshold (output line 1541).
|
||||
- `arcadia-studio` / `source_annotations::anchor_tests::final_multi_glyph_cluster_anchor_uses_logical_trailing_advance_edge` — manual supported-font cluster and bidi witnesses (output line 2246).
|
||||
- `arcadia-studio` / `source_annotations::anchor_tests::mixed_direction_omitted_separator_has_one_logical_predecessor_anchor` — manual supported-font cluster and bidi witnesses (output line 2247).
|
||||
- `arcadia-studio` / `source_annotations::performance_tests::annotation_projection_cost_distributions` — manual diagnostic projection distributions; no fixed machine threshold (output line 2254).
|
||||
|
||||
The earlier nine-ignore source prediction included an unregistered `scenario_label` experiment; see `.local/prerelease-gates-v2-20260924/ignored-source-reconciliation-8dd.json`. It is neither run nor ignored by this gate. The Linux strace witness remains cfg-ineligible.
|
||||
|
||||
This additive reconciliation only reads preserved logs, receipts and maps. No test/build/app/network operation was performed; no frozen attempt, source or target files were modified. “Native” here means executable Rust test harnesses, not manual GUI acceptance. No result is claimed for the parent's successor. The JSON binds all input evidence paths/hashes.
|
||||
|
||||
+47
@@ -0,0 +1,47 @@
|
||||
# State picker mounted-test failure review
|
||||
|
||||
Read-only source diagnosis of integrated commit `8ddfadf440b5c208b1adb6b211a97ba0c99cff04` in `.local/prerelease-integrated-20260924-04`. Parent owns issue 1230 and all builds/tests/publication. No build, test, source edit, or target-directory write was performed by this reviewer. The isolated repository was clean at inspection. This note is local-only.
|
||||
|
||||
## Finding
|
||||
|
||||
The failing test clicks the wrong control after integration; the observed failure does not establish a production picker Escape defect.
|
||||
|
||||
- `crates/oa-desktop/src/app/state_picker_escape_tests.rs:51–54` assumes the missing-element picker immediately precedes the canvas, and clicks `canvas.y - 24`.
|
||||
- `crates/oa-desktop/src/behavior/state_view.rs:189–200` places `selection_controls(app)` between the missing-picker slot and canvas, separated by 8px on each side. The selection-controls outer column has fixed height **56px**, not just its inner 32px row (`:244–248`). The old click therefore lands in this column. The displacement introduced by the extra sibling is **64px**.
|
||||
- The missing-picker slot remains 34px high (`:151`); its picker uses 12px text, 8px padding, and Fill width (`:165–168`). Thus the production picker is present, as the test's exact `unplaced == [f.b]` precondition also confirms, but the test never opens it.
|
||||
- The State canvas may publish selection clearing on an unowned Escape (`state_canvas.rs:869–877`). That explains why the test receives a message despite expecting the open picker to consume Escape silently.
|
||||
|
||||
## Falsification and scope
|
||||
|
||||
Checked competing explanation of broken product Escape delivery: vendored `pick_list.rs:453–462` consumes Escape for an open base widget; `pick_list.rs:736` configures the menu's close-on-Escape flag; `overlay/menu.rs:297–326` closes the open flag, captures Escape, requests redraw, and publishes no message when no close callback is configured. The State missing picker configures no close callback. `Mounted::click` uses actual Iced UserInterface event dispatch and preserves Cache; it does not inject a fake picker state. The fixture creates the expected State view without an open state form. These source facts support a stale hit target, while the parent's reported seven passing mounted Escape tests provide corroboration, not independent execution by this reviewer.
|
||||
|
||||
## Recommended correction
|
||||
|
||||
Parent's bounded two-file proposal is appropriate:
|
||||
|
||||
1. Wrap the existing, always-present 34px `missing_controls` column in a zero-padding container with stable id `state-missing-picker`, preserving its layout and stable widget-tree position.
|
||||
2. Obtain that container through existing `Mounted::geometry().bounds(id)` and click its center. Do not derive this target from canvas coordinates.
|
||||
3. Select the only popup option at measured slot bottom plus half its height. For the current single-option fixture this point is 51px below picker origin, inside the approximately 31.6–63.2px popup interval. The fixture has room for a downward menu.
|
||||
4. Strengthen `press_escape` to require Iced status `Captured`; retain the existing no-message assertion, exact document/source/selection/camera/history comparisons, exact `Place { element: f.b }` after reopening, and Undo restoration.
|
||||
|
||||
The captured Escape plus zero messages and successful reopen/Place is meaningful behavioral proof of ownership and dismissal. No new root-overlay observer framework is necessary. Existing Geometry cannot directly locate the picker: PickList has no id or operate hook, and its menu overlay does not expose an operate-based measurement. A stable container is the smallest maintainable locator using existing test infrastructure.
|
||||
|
||||
Merely changing offsets to `canvas.y - 88` and `canvas.y - 56` would fit this layout but preserve the brittle assumption; do not choose that as the durable fix.
|
||||
|
||||
## Verification still required
|
||||
|
||||
Parent should run the exact failed test against the corrected commit, then affected mounted Escape and State/multiselect coverage and the required integration gate. Confirm the 34px slot remains stable when the last missing element is placed and Undo restores it. This review makes no claim that the proposed correction has already passed tests.
|
||||
|
||||
## Actual corrective-commit review
|
||||
|
||||
Independently inspected exact commit **`a9cd364eacbbffa0693bab05b5a2b65f9d105535`**, based on `8ddfadf440b5c208b1adb6b211a97ba0c99cff04`, in `.local/state-picker-test-20260924`. HEAD matched that hash, working tree was clean, and `git diff --check 8ddfadf440b5c208b1adb6b211a97ba0c99cff04 a9cd364eacbbffa0693bab05b5a2b65f9d105535` passed. Actual diff changes only `state_view.rs` and `state_picker_escape_tests.rs` (11 insertions, 12 deletions).
|
||||
|
||||
**Verdict: no concrete correctness or maintainability issue found in the actual correction; suitable for the parent's behavioral verification and integration gate. This is source-review approval, not test or release acceptance.**
|
||||
|
||||
- Production change is precisely `container(missing_controls).id("state-missing-picker")` at the existing stable sibling position. The vendored Container constructor uses zero padding, inherits the child's fluid width strategy, and retains the child's measured natural height. With a missing element, the Fill-width picker makes its column Fill-width; the wrapper preserves that. Without missing elements, both old and wrapped slots retain the column's fixed 34px natural height. No sibling, spacing, style, or canvas dimension is intentionally changed.
|
||||
- Focus/tree preservation is stronger than merely adding an always-present wrapper: vendored `container.rs:235–249` delegates tag, state, children, and diff directly to its content. Its update, operations, and overlays delegate through the new layout node, preserving the existing widget tree and picker state. It does not create a new focus owner or intercept Escape. Geometry gains the container ID through `operate`.
|
||||
- The test now measures that slot rather than assuming adjacency to the canvas. Center and single-option target are inside the intended picker and downward menu for this exact fixture. Its fixed 1800×1100 viewport and one missing element preserve the existing assumption that the one-option menu opens below the picker; this is not a generalized menu-geometry helper.
|
||||
- New assertion requires exactly `[iced::event::Status::Captured]` **before** application subscription dispatch. The original zero-message assertion remains after real subscriptions. The exact snapshot pointer, source, selected element/node/placement, zoom/pan/fit, revision, undo/redo, reopened exact `Place` element, unchanged semantic elements/relations, and Undo source-restoration assertions are all retained unchanged.
|
||||
- No acceptance assertion was weakened, no exception/skip introduced, and no vendored Escape behavior was changed.
|
||||
|
||||
No builds or tests were executed by this reviewer. Parent reported active test compilation; compilation alone does not establish the behavioral verdict.
|
||||
Reference in New Issue
Block a user