Skip to content

feat: unify desktop selects through shared facade - #522

Merged
PeterGuy326 merged 7 commits into
mainfrom
codex/521-desktop-control-facade
Sep 29, 2026
Merged

PeterGuy326 merged 7 commits into
mainfrom
codex/521-desktop-control-facade

Conversation

@Bindy-lbb

@Bindy-lbb Bindy-lbb commented Sep 27, 2026 •

Copy link
Copy Markdown
Collaborator

Closes #521

Depends on bytefolk/design-system#32 for merge ordering. CI now pins the reviewed Select facade commit from that PR so validation can run before the dependency merge.

Summary

  • replace the Project Board's seven native selects with the shared Select facade
  • move the Turn approval scope control to the same facade
  • explicitly disable the three editor Selects during save/delete operations
  • move the design-system pin in all verification jobs to the Select facade commit
  • make the date-window test deterministic across calendar days

Validation

  • npm run build
  • npm run typecheck:renderer
  • npm run test:renderer -- project-board.test.tsx TurnPanel.test.tsx (50 passing)

After design-system PR #32 merges, this PR can merge in the normal dependency order.

@Bindy-lbb
Bindy-lbb marked this pull request as ready for review September 28, 2026 01:17
PeterGuy326
PeterGuy326 previously approved these changes Sep 28, 2026

@PeterGuy326 PeterGuy326 left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Reviewed exact head da25e75.

Clean unification. What I checked:

  1. The design-system pin bump (9104569 -> 4a82fce across all five checkout steps) is the load-bearing change: the new pin supplies the shared Select this PR adopts. CI on this head runs against the new pin and is 11/11 green, so the pin and the component land together.
  2. ProjectBoard: all six native selects (card status, owner filter, status filter, priority filter, editor assignee/status/priority) move to the shared Select with typed generics and options derived from the same STATUSES/PRIORITIES arrays - no option content drifted. The editor selects also gain aria-labels they were missing.
  3. project-board.css: the hand-rolled native-select chrome (height/border/disabled opacity) is deleted rather than fighting the antd selector; the remaining rules are pure layout constraints (min/max-width) plus a 12px font override on .ant-select-selector. The accidentally-deleted :focus-visible grouping is correctly re-formed - the outline rule still applies to buttons.
  4. TurnThread: the approval scope select moves to the shared Select at size=small and gains the owb-turn__approval-scope hook.
  5. Tests: migrated to the antd interaction model (mouseDown + overlay option click via visibleSelectOptions) instead of fireEvent.change on a native select, and the inverted-date clamp case now pins the system time - that case was wall-clock sensitive.

No blocking findings. Approving.

@PeterGuy326 PeterGuy326 left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Requesting changes on head b071b547. The migration itself looks clean (native selects → shared Select facade, tests aligned, busy-state preserved), but the required Node 24 / macos-14 check fails deterministically — twice, including after a --failed rerun:

  • Failing test: renderer/test/App.test.tsx > App context navigation > consolidates the collaboration toolbar and places employee actions beside the tabs — Test timed out in 5000ms.
  • The same suite passes on Node 24 / ubuntu-latest, so this is not a pure infra flake. The whole App suite is slow on macOS (collect 82.87s, tests 300.66s), and the toolbar/navigation test sits in the migrated area, which makes a facade-related async settle issue plausible.

Suggested next steps (author's call which fits):

  1. Reproduce locally on a mac if available, or add --run scoping to run just this test on CI to iterate fast.
  2. If the assertion is a findBy*/waitFor waiting on facade-rendered controls under load, raise that specific timeout rather than the global one, and keep the 5s default for the rest.
  3. Alternatively, if it turns out to be a pure macOS throughput issue, splitting App.test.tsx (111 tests, ~300s) so the navigation group gets its own file/time budget would make the signal trustworthy again.

Two smaller notes, non-blocking:

  • The pinned design-system ref 4a82fce is content-identical to the squash-merged db1bcbbd (feat: add shared select facade (#32)) on design-system main; pinning the merged main SHA instead would make the provenance easier to audit.
  • import { Select } from "@fullstack-ai-infra/ui" matches current repo convention; once the @bytefolk/ui rename (design-system#19) lands, this and the existing call sites will need a coordinated sweep.

Not product acceptance. Happy to re-review once the macOS run is green.

PeterGuy326 added a commit that referenced this pull request Sep 29, 2026
…#531)

The full-App toolbar test sits above the 5s vitest default on slower runners and failed fresh runs of main on both platforms (#529), blocking #520/#522/#524/#527 through no change of their own. 15s matches the other full-App tests in this file. Closes #529.

@PeterGuy326 PeterGuy326 left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Approving on head 75c3d3c — withdrawing my earlier CHANGES_REQUESTED (b071b54). Its only blocker was the deterministic Node 24 / macos-14 timeout in the toolbar test, which #531 and #534 fixed with explicit 15s budgets. After syncing this branch with main (which now carries both fixes), every required check is green on the fresh head, so the migration itself stands as reviewed: clean facade, tests aligned, busy-state preserved.

@PeterGuy326
PeterGuy326 merged commit fcef614 into main Sep 29, 2026
11 checks passed
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.

feat(ui): unify desktop controls through the shared facade

2 participants