Skip to content

fix(control): tab defaults, voice lifecycle and recording controls - #522

Merged
MrYuion merged 2 commits into
developfrom
fix/control-ux-fixes
Oct 2, 2026
Merged

MrYuion merged 2 commits into
developfrom
fix/control-ux-fixes

Conversation

@MrYuion

@MrYuion MrYuion commented Oct 1, 2026

Copy link
Copy Markdown
Collaborator

The tabbed view opened with no active tab when the driver did not set selected_tab. Tab links kept the system ID from when the view was created. tabbed/:system and tabbed/:system/:tab were separate routes, so every tab change rebuilt the view and ?join=true opened the meeting list again. The voice assistant kept listening after leaving the room, showed its mic in browsers without speech recognition, and kept the old room's chat. Advanced view paging added an empty page at 6 or 12 outputs and went blank when outputs shrank. A tap on the joystick centre panned right. Recording buttons always sent to Capture, not the bound module. The selected source and lighting state used the unselected style. Video call commands failed silently.

Changes

  • Tabs: active tab is the route tab, then the driver's tab, then the first tab. The system ID is a signal. One route matcher (tabbed-route.ts) for both URL forms, so tab changes reuse the view. join is removed from the URL after the meeting list opens.
  • Voice: flag missing speech recognition, abort and detach handlers on teardown, disable on destroy, close the previous room's chat on a room change.
  • Paging: ceil page count, and the page moves to the last page when outputs shrink (linkedSignal).
  • Joystick: 25% centre dead zone.
  • Recording: buttons use the bound capture module.
  • Styling: selected source and lighting state use the filled style, like the other tooltips.
  • Video call: one _exec helper shows an error when a command fails. Bindings are typed, so the page needs no casts.

Testing

  • Unit tests for each fix (252 pass). The 15 new or changed tests fail on the old code. The lighting tooltip spec asserted the old, inverted styling and is updated.
  • Tested in the running app (mock mode and the local stack): default tab, view reuse across tab switches, single join modal, system change, unsupported browser, socket close on room change, paging, dead zone, recording module, selected styling, command errors.
  • E2E (mock): 179 pass, 19 fail. The same 19 specs fail on every branch in this stack and on the commit before fix/control-ux-fixes (bootstrap host visibility, app routing timing, and Escape not closing tooltips, which the last PR in the stack fixes). None of them reach this change. They were not run on develop itself.

Merge order

3 of 5. Based on fix/control-state-bugs. Next: refactor/control-cleanup.


Changes made by Claude Opus 5.5 (1M context) in Claude Code, running in T3 Code.

🤖 Generated with Claude Code

@vercel

vercel Bot commented Oct 1, 2026

Copy link
Copy Markdown

Deployment failed for project frontend-templates with the following error:

Resource is limited - try again in 24 hours (more than 100, code: "api-deployments-free-per-day").

Learn More: https://vercel.com/placeos?upgradeToPro=build-rate-limit

@greptile-apps

greptile-apps Bot commented Oct 1, 2026 •

Copy link
Copy Markdown

RetriggerConfidence Score: 5/5

[Medium risk] Fixes tab routing, voice assistant lifecycle, and recording controls.

The PR appears safe to merge; no new issue or outstanding previous finding remains.

Summary

The control view now keeps tabs and voice control tied to the current room, while several controls show their selected state or act on the right module. Paging, joystick movement, and video-call command feedback are updated too.

  • Tab selection, route reuse, and meeting-list links follow the current room.
  • Voice listening and chat reset when the view or room changes.
  • Paging, recording, joystick, styling, and video-call controls respond more clearly.

Reviews (2) · Last reviewed commit: "fix(control): stop voice at once and dro..."

Comment thread apps/control/src/app/ui/voice-assistant.component.ts
Comment thread apps/control/src/app/ui/voice-assistant.service.ts
Comment thread apps/control/src/app/tabbed-view/tab-outlet.component.ts
- Default the active tab to the driver's selected tab, then the first
  tab, so the panel no longer opens with no tab selected.
- Read the system id as a signal in the tab outlet so links and tab sync
  follow system changes.
- Use one route matcher for `tabbed/:system` with an optional tab, so a
  tab change reuses the view. Clear `?join=true` after the meeting list
  opens, so it does not open again.
- Voice assistant: flag browsers without speech recognition, abort
  recognition and detach handlers on teardown, disable it when the view
  is destroyed, and close the previous room's chat on a room change.
- Fix advanced view paging: no empty page when outputs fill the last
  page, and move to the last page when outputs shrink.
- Add a centre dead zone to the joystick so a tap does not pan right.
- Send recording commands to the bound capture module.
- Show the selected source and lighting state with the selected style.
- Show an error when a video call command fails, and type the call
  bindings so the page no longer needs casts.
…ange

- Turning voice control off stops recognition immediately. Only turning
  it on is debounced, so nothing is heard after the view goes away.
- A room change cancels a command still waiting for the chat to
  connect, so it cannot reach the new room.
@MrYuion
MrYuion force-pushed the fix/control-ux-fixes branch from ff896b5 to 6085fcb Compare October 1, 2026 15:23
@vercel

vercel Bot commented Oct 1, 2026 •

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

1 Skipped Deployment
Project Deployment Actions Updated
frontend-templates Ignored Ignored Preview Oct 1, 2026 3:23pm UTC

Base automatically changed from fix/control-state-bugs to develop October 2, 2026 00:48
@MrYuion
MrYuion merged commit cd940e4 into develop Oct 2, 2026
6 checks passed
@MrYuion
MrYuion deleted the fix/control-ux-fixes branch October 2, 2026 00:50
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.

1 participant