Skip to content

Use measured workspace space before overflowing actions - #104

Merged
alexschmander merged 1 commit into
fix/compact-review-contextfrom
fix/measured-workspace-overflow
Sep 7, 2026
Merged

Use measured workspace space before overflowing actions#104
alexschmander merged 1 commit into
fix/compact-review-contextfrom
fix/measured-workspace-overflow

Conversation

@alexschmander

@alexschmander alexschmander commented Sep 5, 2026

Copy link
Copy Markdown
Collaborator

Current rebase verification — 2026-09-07

Rebuilt this PR's own change on the updated stack, rooted at main 37c207f84c0aadf570b1409da4693b1bc070a280 (including #98, #101 and #103). Each PR has one commit; integration conflicts were resolved at the owning layer.

  • Current head: 564c86caea85950abcd0461f6fe60f553a37881d.
  • Verified comparison base: 44326cfbe69a487c9e3b5d0aa9b7c6a64c6d7f05.
  • Passed ./scripts/verify.sh changed 44326cfbe69a487c9e3b5d0aa9b7c6a64c6d7f05 on this exact head: locked Rust baseline, both workspaces, all-feature UI tests, WASM check and release Trunk build.
  • Local execution used the shared Cargo target, two build jobs, debug info disabled and four test threads.
  • Hosted CI must run again for the new head. Prior CI and review-handoff statements below apply only to historical heads; this rebase does not claim new independent acceptance.
  • Existing draft state, assignments and reviewer requests are preserved. No unrelated source changes, runtime data, lockfile changes or generated distributions are included.

Supplementary runtime checks on the final combined stack c6610ace040c0efd153006e18a9af9a0bfe686a5: Production Chromium 153.0.8010.12 passed keyboard +/−, wheel zoom and Fit, six viewports at DPR1 and DPR2, 390×844 at DPR3, and actual 200% browser zoom. Used a real disposable loopback server and synthetic images. Browser build-mismatch composition was not separately exercised; native/kittest covers it. Browser accessibility exposes Canvas only; widget semantics were checked natively. Browser font preferences do not establish egui text-only scaling support. No physical-device claim.

Original implementation description and historical verification

Behavior or contract

Closes #19. Depends on #102 at 2c45a4e.

Workspace bars now show the longest secondary-action prefix that fits their actual remaining width. They measure the rendered font, icon, shortcut and button frame, reserve More only for a remaining tail, and keep primary actions visible. Focus follows a moved action into the overflow menu without dispatching it during resize. Long menu content wraps and scrolls within the viewport.

Availability loading now uses a small spinner inside the truncatable identity line. Full annotation type and phase retain their width, so a slow request cannot add a third context line or shrink the short canvas. The existing named progress semantics remain shared with other workspace placements.

Combined short Review verification also found the decision-revision caption consuming another row. Valid compact revision context now carries a visible Revising prefix and the full accessible geometry-unchanged description; its redundant central caption is omitted only there. Missing or stale context retains the caption fallback.

Real browser verification also found persisted Undo→Redo losing a deleted annotation's identity. The shared state reducer now retains tombstoned IDs, so Redo appends the next version and can retry a failed save. Server validation and event formats are unchanged.

Resizing also settles the compact action panel without another input. The shell compares the allocated bottom edge with the new panel measurement in both directions, and schedules a normal repaint only when the cached height changed. This fixes both unused space after shrinkage and clipped primary actions after growth. Stable clipped content at an unsupported tiny viewport does not repaint indefinitely. No pass is discarded and no input command is replayed.

Production ownership path

panels/workspace_overflow.rs owns measurement, promotion, stable action identity and menu focus. Workspace/migration owners supply order, enabled conditions and existing command handlers. Context/footer layout allocates the rendered height and reserves availability before measuring actions. live/workflow_state.rs owns persisted-ID bookkeeping. Both native egui and production WASM reach these shared owners.

Acceptance criteria and evidence

Acceptance criterion Evidence
Actual available width and real rendered atoms Exact measured-versus-painted font/icon/shortcut test; availability slot and drawer allocation regressions
Longest prefix; no empty More Below/at/above every promotion and final-trigger-removal tests; wide native/browser captures show inline Undo/Redo
Primary controls and canvas remain visible Settled resize tests, migration final-check fail-before canvas=1px and corrected ≥44px; native and Chromium at 320×320
Stable command and keyboard focus Shrink focuses More, Enter reaches the same Redo identity and dispatches once; dynamic Save/Previous/loading and bounded long-menu tests
Annotation and migration persistence Real annotation create/save→Undo/save→Redo/save preserves ID, geometry and next version; migration keypoint Undo/save and one compact-menu revisit request
Review/correction context Live object→final review, correction draft/discard and drawer scrolling; exact context remains owned by #99/#102

Regression protection

Nine focused overflow tests cover the rendered thresholds, custom atoms, long menus, enabled states, stable focus, repeated resize and short migration canvas. The original wide-space, long-menu and short-canvas failures are retained. The persisted Undo/Redo test failed before with an invalid version chain; four cases now cover settled/in-flight Undo responses and successful/failed-then-retried Redo saves, checking exact history and event counts. Existing tests were updated only where they assumed More must always exist.

Verification

PASS: CARGO_BUILD_JOBS=2 CARGO_PROFILE_DEV_DEBUG=0 CARGO_PROFILE_TEST_DEBUG=0 RUST_TEST_THREADS=4 NO_COLOR=true ./scripts/verify.sh changed 2c45a4eddf4f33334070dc4e6b172ad954333571.

Final idle-resize-refresh/canonical-final.log at650a930 covers formatting, strict all-feature Clippy,672 tests including320 UI tests, affected storage/API tests, inspector check, WASM check and locked release Trunk. idle-resize-refresh/canonical-final-result.json records the exact head, base, command and preserved distribution hashes. Earlier494a,9bac and shrink-onlyc23 canonical results remain separate evidence. Separate locked native and server builds passed. Exact runtime SHA256 hashes and command are in upstream-refresh/revision-canonical-result.json. Diff whitespace is clean; no dependency graph or lockfile changes.

The refreshed stack includes the verified #7/#12 configuration serialization correction through append merges. The additional issue-owned revision layout regression failed before with canvas height84→58px and now preserves84px, unchanged context height, explicit revision mode, and invalid-context fallback. Independent combined probing also recovered44px for revision+workflow notice+activity. source-scope.json distinguishes inherited storage changes from this six-file UI/test/documentation correction. Prior broad action/persistence evidence remains applicable to unchanged owners; fresh revision evidence covers the new presentation.

The added loading regression failed before with standalone canvas84→66px. It now preserves the exact context and canvas allocation for ordinary and decision-revision states, keeps the named spinner in the identity line, and exercises keyboard opening/closing of Review details. Independent combined probing failed all five loading cases at26px before; the same final-source probe passes all five at44px with a disjoint workflow notice. Initial edit/parent-cursor allocation failures remain retained separately.

Four additional requested-frame resize tests cover annotation, ordinary/revision review, migration annotation/review object and full-image phases, primary44px containment and exact canvas/phase preservation. They use both the descending viewport sequence and the actual browser order that grows the final action bar. The original migration shrink failed with34px canvas versus100px settled; the growth extension failed with a primary action at y305–349 below the320px viewport. Both now pass. An explicit160×120 unsupported-size check catches infinite repaint and verifies recovery to320×320. Final migration review fixtures seed effective approved object events before asserting the final phase, matching the shared canonical target policy.

Visual or browser evidence

Private synthetic evidence: .worktrees/orchestration/issue-19/. Native captures cover annotation, review/unavailable-context, correction, migration object and final-check at 2200×1000, 1440×1000, 1288×820, 600×800, 390×844, 320×568 and 320×320, plus compact menu/keyboard focus. Final annotation and migration-menu captures use the final native build; earlier rendering-equivalent captures predate only the persisted-ID fix. Presets prove rendering, not live transactions.

Fresh Chromium runs cover annotation, migration annotation, ordinary review and migration review at six viewports with DPR1/2 and a fresh 390×844 DPR3 bootstrap, plus correction at 390×844 and 320×320: 54 viewport cases. Each scenario also checks real 200% browser zoom. Canvas backing/PNG sizes are asserted; console/page/request failures are zero. Live annotation verifies the version chain, correction retains server state while editing and discarding, and migration verifies its separate keypoint/save path. The bounded live overflow revisit check confirms one request and unchanged annotations. Screenshots include wide inline controls, compact menu, focused controls, short canvas, Inspector and correction actions.

Fresh exact494a native live evidence in upstream-refresh/revision-native covers object and staged-final revisions at all six viewports, guarded Previous cancellation, staged-discard cancellation and one atomic revision commit. Both320×320 phases retain84px canvas. Browser bboxDPR1 and skeletonDPR2 repeat the live revision workflow and six viewports; bbox also checks actual200% page zoom. A fresh390×844 DPR3 session covers compact390/320 revision, staging, cancellation and commit. Final state remains Completed with2 reviews until commit, then NeedsCorrection with4 immutable review records and2 superseded IDs. Screenshots were inspected for visible mode/type/phase, action bounds and canvas reachability.

The first DPR3 driver resized to wide after compact startup and made no preview request after its coordinate click; its timeout remains in revision-browser-dpr3.log. The corrected compact-only flow is separately retained in revision-browser-v2. That successful workflow recorded one unclassified unsuccessful background HTTP response after commit; its inherited counter did not retain a route, so this run is not claimed to have zero HTTP failures. One bounded repeat with closed route/status diagnostics completed with0 failures and the same atomic state outcome. The isolated response remains a limitation for combined independent network checks, not evidence of a classified root cause. No repeated-action retry or product change was used.

Fresh delegated Chromium evidence on the final combined candidate f6adc8c11b799ad857d521b73c55f755fc471f80 exercises the reachable slow-request state: fail availability, then hold the next retry while the live assignment remains loaded. Ordinary final review and decision revision with activity failure both retain full type/phase, a44px canvas,44px primary actions and a disjoint notice at320×320/DPR1. Exact assignments, annotations and reviews remain unchanged during the hold. Captures were visually inspected in g6-independent-activity/availability-final-dpr1; the five-case probe is spinner-after.log. Singer supplied this runtime check as delegated evidence; independent acceptance is recorded separately.

Final delegated native live inspection uses the same combined source and a disposable server with a held availability response. At320×320 it shows a44px canvas and primary controls, the spinner entirely in the identity line, full Final check and a disjoint notice. Native AccessKit exposes Loading workflow assignment availability as a16×16 ProgressIndicator at229,68. g6-independent-activity/native-loading-f6adc8c/result.json records exact source and geometry; its screenshot was visually inspected. All owned runtime processes were stopped.

The final independent combined requested-frame probe passes all five ordinary/revision and healthy/initial/stale-activity cases with44px canvas and a disjoint notice. The source-owned actual-order tests also pass primary containment for migration object and final actions. Earlier shrink-only browser proof at447 and its remaining clipped-growth captures are retained and are not presented as final acceptance.

Final9f50686 native inspection covers annotation, migration full-image and migration review through all six resize viewports, including visible44px final controls and a stable short canvas. g6-independent-activity/native-final650 retains captures, command logs and the inspected overflow keyboard focus. Final9f Chromium reproduces the original idle shrink sequence with44px canvas before idle delay or new input. The independent five-case probe and all four source resize tests pass.

The final migration Chromium run uses the actual growth order and captures the short controls immediately, after500ms and after3s idle at DPR1/2. Confirm & finish and More remain fully visible44px controls with44px canvas; all13 viewport/DPR cases plus actual200%zoom pass. Console, page, request and HTTP failures are zero, with stats/me counted explicitly. g6-integration/browser-9f50686/migration-annotation and dist-9f50686-provenance.json bind inspected captures to the exact production tree. Source19 owns the fix; Singer supplied the delegated native/review runtime evidence and independent acceptance remains separate.

Documentation

Updated docs/ui-design-guidelines.md for measured overflow, focus, primary layout and short migration allocation; docs/ui-ownership.md names the shared renderer and tombstone bookkeeping owner. No blanket freshness marker changes.

Risks and omitted checks

Independent acceptance and combined G6 verification remain pending. #5, #3 and #14 are separate tracks: no removed zoom allocation is hard-coded; integration must retain #3's measured footer and route the two new secondary shortcut render sites through #14's shared theme helper. Current branch intentionally preserves its base shortcut colors. Browser font-size preferences do not scale egui canvas text; actual 200% page zoom and custom-font kittest coverage are separate. Browser AX exposes the canvas; widget semantics are checked by native AccessKit/kittest. Wide DPR3 bootstrap is not claimed. Skeleton-only review retains #26 evidence because this change does not alter target policy; migration skeleton review is freshly covered. Earlier private driver array/timing/coordinate errors, the real persisted Redo failure, and pre-fix native layout evidence remain explicitly separate. No physical touch/stylus or production dataset was tested.

Worktree integrity

  • Unrelated worktree changes were preserved and excluded from this change.
  • No credentials, runtime datasets, generated browser distribution, or sensitive diagnostics are included.

Handoff status

  • Implementation evidence is assembled and the pull request is Awaiting CI.
  • The required CI check succeeded on this pull request's exact current head SHA.
  • The pull-request author is the accountable implementation owner and is assigned to both the issue and pull request.
  • The implementing agent did not add or remove requested reviewers.
  • Ready for review: exact-head CI and the authorized metadata handoff are complete; independent acceptance remains pending.
  • An independent human or verification agent inspected the original issue, final diff, and evidence and attempted to falsify the acceptance claims.

Final exact-head Testing succeeded for 650a9303b85f9dc8e7edf6bcb1c04a10bb88f0a3: https://github.com/HULKs/labello/actions/runs/33996439993/job/101387948006. Issue and PR are assigned to author alexschmander, nondraft and In review; existing reviewer requests are preserved. Independent group acceptance remains separately recorded.

@alexschmander alexschmander self-assigned this Sep 5, 2026
@alexschmander
alexschmander marked this pull request as ready for review September 5, 2026 19:03
@alexschmander
alexschmander marked this pull request as draft September 5, 2026 20:47
@alexschmander
alexschmander marked this pull request as ready for review September 5, 2026 21:33
@alexschmander
alexschmander marked this pull request as draft September 5, 2026 21:52
@alexschmander
alexschmander marked this pull request as ready for review September 5, 2026 22:39
@alexschmander
alexschmander force-pushed the fix/measured-workspace-overflow branch from 650a930 to 564c86c Compare September 7, 2026 13:43
@alexschmander
alexschmander merged commit 49788d3 into main Sep 7, 2026
13 of 20 checks passed
@alexschmander
alexschmander deleted the fix/measured-workspace-overflow branch September 7, 2026 17:07
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Use available context-bar space before moving actions into overflow

1 participant