Skip to content

fix(web): remove the Tasks panel from the workspace rail - #4352

Open
hzub wants to merge 3 commits into
mainfrom
OMNI-2350-remove-tasks-panel
Open

fix(web): remove the Tasks panel from the workspace rail#4352
hzub wants to merge 3 commits into
mainfrom
OMNI-2350-remove-tasks-panel

Conversation

@hzub

@hzub hzub commented Aug 7, 2026

Copy link
Copy Markdown
Collaborator

Related issue

Closes OMNI-2350

Summary

Removes the Tasks tab from the right-side workspace panel entirely — desktop and mobile:

  • Desktop: drops the Tasks rail tab (icon, badge, and TodoPanel content branch) from WorkspacePanel.
  • Mobile: drops the Tasks entry from the session-menu FAB and the full-screen Tasks drawer from AppShell/ChatHeader.
  • Deletes the now-unused TodoPanel component and its test.
  • Removes the "todos" member of RightRailTab and its entry in the persisted-workspace-state allow-list, so a session that had the Tasks tab stored falls back to Files on next load.

The chatStore.todos SSE data slice (session_todos events) is intentionally left in place — it's the harness data contract, not the panel UI.

Test Plan

  • tsc -b — passes.
  • oxlint --deny-warnings — clean.
  • vitest run — full suite green (5374 passed, 0 failed). Updated AppShell / ChatHeader / WorkspacePanel suites and removed the two Tasks-drawer tests.
  • Manual: on desktop, a session with todos no longer shows a Tasks tab in the workspace rail; on mobile, the session-menu FAB no longer lists Tasks. Files / Agents / Shells / Browser are unaffected on both.

Demo

Type of change

  • Bug fix
  • Feature
  • UI / frontend change
  • Refactor / chore
  • Docs
  • Test / CI
  • Breaking change

Test coverage

  • Unit tests added / updated
  • Integration tests added / updated
  • E2E tests added / updated
  • Manual verification completed
  • Existing tests cover this change
  • Not applicable

Coverage notes

Existing AppShell / ChatHeader / WorkspacePanel suites were updated to drop the removed props and the Tasks-drawer/menu tests; the remaining tests assert the rail and mobile FAB render correctly without Tasks. Manual verification: confirmed the Tasks tab is absent from the desktop rail and the Tasks entry is absent from the mobile FAB, and that the other tabs/entries still render and switch correctly.

Changelog

[UI] Remove the Tasks panel from the workspace rail

@github-actions github-actions Bot added the size/S Pull request size: S label Aug 7, 2026
@omnigent-ci

omnigent-ci Bot commented Aug 7, 2026

Copy link
Copy Markdown
Contributor

Polly AI Review

Review: OMNI-2350-remove-tasks-panel

1. Blocking issues

Stale props in WorkspacePanel.test.tsx will break the typecheck gate. This PR deletes todosSupported, todosCompleted, and todosTotal from the WorkspacePanelProps interface, but web/src/shell/WorkspacePanel.test.tsx (not touched by this diff) still renders the component with all three:

// web/src/shell/WorkspacePanel.test.tsx:113-115
todosSupported={false}
todosCompleted={0}
todosTotal={0}

Under this repo's strict config, JSX excess-property checking will raise TS2322 for props that no longer exist on the component, and tsc -b (the type-check script) compiles src, which includes test files. As written this PR fails typecheck in CI. The test must drop those three props in the same PR.

2. Security vulnerabilities

None. This is a UI-only removal with no auth, injection, secret, or boundary surface.

3. Non-blocking notes

  • Orphaned todos plumbing left behind in AppShell.tsx. After this change the desktop rail no longer has a todos tab, yet AppShell still computes railTabsAvailable.todos = todosSupported && todos.length > 0, still lists "todos" in the tab-fallback ordering array, and RightRailTab still includes "todos". If a persisted rightRailTab === "todos" is restored, railTabsAvailable["todos"] stays true, so the keep-selected-tab-valid effect won't redirect it — but WorkspacePanel has no todos branch anymore, so it silently falls through to the Files panel. Harmless visually, but it's dead/misleading state. If the intent is to fully retire the desktop Tasks tab, drop "todos" from railTabsAvailable, the fallback array, and (if nothing else uses it) RightRailTab.
  • Asymmetry with the mobile path is worth confirming as intentional. The mobile FAB Tasks drawer (ChatHeader onOpenTodos / todosPanelOpenTodoPanel) and the TodoPanel component itself remain fully wired. So "remove tasks panel" here means only the desktop rail tab; mobile still surfaces todos. If that's the design, fine — just flag it so the removal isn't assumed to be complete.
  • PR description is empty. No Related issue, Summary, Test Plan, or Type of change boxes are filled in. For a UI change the template asks for at least a one-line rationale; please populate it.

4. Summary

Clean, well-scoped removal of the desktop Tasks rail tab. There is one real blocker: the untouched WorkspacePanel.test.tsx still passes the three deleted todos* props, which will fail the tsc -b typecheck gate — fix that in this PR. Beyond that, some todos bookkeeping in AppShell (railTabsAvailable, fallback array, RightRailTab type) is now orphaned and the mobile Tasks drawer is intentionally(?) left intact; both are non-blocking cleanups/confirmations. Address the test and this is good to merge.


Automated review by Polly · workflow run

@hzub hzub changed the title OMNI-2350-remove-tasks-panel fix(web): remove the desktop Tasks tab from the workspace panel Aug 7, 2026
@github-actions github-actions Bot added size/L Pull request size: L and removed size/S Pull request size: S labels Aug 7, 2026
@hzub hzub changed the title fix(web): remove the desktop Tasks tab from the workspace panel fix(web): remove the Tasks panel from the workspace rail Aug 7, 2026
hzub added 3 commits August 7, 2026 14:54
Signed-off-by: Hubert Zub <hubert.zub@gmail.com>
The Tasks tab removal deleted todosSupported/todosCompleted/todosTotal
from WorkspacePanelProps, but the test still passed them, breaking
tsc -b. Remove them so the build is green.

Co-authored-by: Isaac
Signed-off-by: Hubert Zub <hubert.zub@gmail.com>
OMNI-2350 removes the Tasks tab from the right-side workspace panel
entirely: the desktop rail tab, the mobile Tasks drawer + FAB entry,
and the TodoPanel component. Drops the "todos" RightRailTab member and
its persisted-state allow-list entry (sessions that had it stored fall
back to Files). The chatStore.todos SSE data slice is left intact — it
is the harness data contract, not the panel UI.

Co-authored-by: Isaac
Signed-off-by: Hubert Zub <hubert.zub@gmail.com>
@hzub
hzub force-pushed the OMNI-2350-remove-tasks-panel branch from 3791a6c to 697d317 Compare August 7, 2026 14:54
@hzub

hzub commented Aug 7, 2026

Copy link
Copy Markdown
Collaborator Author

/review

@omnigent-ci

omnigent-ci Bot commented Aug 7, 2026

Copy link
Copy Markdown
Contributor

Polly AI Review

Review: fix(web): remove the Tasks panel from the workspace rail

Blocking issues

None. Two independent cross-vendor reviews (each applied the diff to a scratch tree and ran the gates) confirm typecheck, lint, and the full vitest suite pass, and that no TypeScript reference to the removed symbols survives. TodoPanel, todosPanel, todosSupported/Completed/Total, onOpenTodos, openTodosPanel, todosPanelOpen, ListTodoIcon, and the "todos" RightRailTab literal are all fully removed; the trimmed RightRailTab union and the fallback list / precedence checks are internally consistent.

Security vulnerabilities

None. This is a pure UI removal — no auth, deserialization, path, or network surface is touched.

Non-blocking notes

  • Dead CSS selector — web/src/index.css:794 and its mirror in web/android/.../NativeBridgeScript.kt:78: the safe-area inset :is(...) group still lists [data-testid="todos-panel-drawer"]. That drawer element is deleted, so the selector now matches nothing — valid CSS, no visual/runtime effect. Worth deleting both entries for tidiness, but not required and out of the direct scope of the diff.
  • Persisted-state migration verified: sessionWorkspaceState.ts gates rightRailTab through isRailTab against the trimmed RAIL_TABS, so an old stored "todos" is dropped to undefined (never re-persisted). Initial load resolves ?? "files" (AppShell.tsx:149); on session switch the invalid value becomes null and the convergent fallback effect picks the first available tab. No crash, no stuck/invalid tab — the PR's "falls back to Files" claim holds.
  • SSE contract intact: chatStore.todos (session_todos) init/reset/snapshot/update paths remain (chatStore.ts:970/1664/2621/4236), matching the PR's stated intent to keep the data slice.
  • Rail still mounts for todos-only sessions: the Agents/subagents tab is unconditional, so hasRailContent stays true and the card mounts with Agents as fallback — no empty-card regression.

Summary

A clean, complete UI removal. Both cross-vendor reviewers verified full symbol removal, safe persisted-state fallback, an intact SSE data contract, and green typecheck/lint/test gates. The only finding is two cosmetic dead CSS selectors referencing the deleted todos-panel-drawer testid — harmless, worth a one-line cleanup but not blocking. Approve.


Automated review by Polly · workflow run

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size/L Pull request size: L skip-e2e-ui-test

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant