Use measured workspace space before overflowing actions - #104
Merged
alexschmander merged 1 commit intoSep 7, 2026
Merged
Conversation
alexschmander
marked this pull request as ready for review
September 5, 2026 19:03
alexschmander
marked this pull request as draft
September 5, 2026 20:47
alexschmander
marked this pull request as ready for review
September 5, 2026 21:33
This was referenced Sep 5, 2026
alexschmander
marked this pull request as draft
September 5, 2026 21:52
alexschmander
marked this pull request as ready for review
September 5, 2026 22:39
alexschmander
force-pushed
the
fix/measured-workspace-overflow
branch
from
September 7, 2026 13:43
650a930 to
564c86c
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
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.564c86caea85950abcd0461f6fe60f553a37881d.44326cfbe69a487c9e3b5d0aa9b7c6a64c6d7f05../scripts/verify.sh changed 44326cfbe69a487c9e3b5d0aa9b7c6a64c6d7f05on this exact head: locked Rust baseline, both workspaces, all-feature UI tests, WASM check and release Trunk build.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.rsowns 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.rsowns persisted-ID bookkeeping. Both native egui and production WASM reach these shared owners.Acceptance criteria and evidence
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.logat650a930 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.jsonrecords 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 inupstream-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.jsondistinguishes 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-nativecovers 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 inrevision-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
f6adc8c11b799ad857d521b73c55f755fc471f80exercises 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 ing6-independent-activity/availability-final-dpr1; the five-case probe isspinner-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 availabilityas a16×16 ProgressIndicator at229,68.g6-independent-activity/native-loading-f6adc8c/result.jsonrecords 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-final650retains 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-annotationanddist-9f50686-provenance.jsonbind 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.mdfor measured overflow, focus, primary layout and short migration allocation;docs/ui-ownership.mdnames 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
Handoff status
Final exact-head
Testingsucceeded for650a9303b85f9dc8e7edf6bcb1c04a10bb88f0a3: 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.