Skip to content

[codex] polish session list/header metadata UX#411

Draft
gaius-codius wants to merge 37 commits intotiann:mainfrom
gaius-codius:feat/session-list-header-polish
Draft

[codex] polish session list/header metadata UX#411
gaius-codius wants to merge 37 commits intotiann:mainfrom
gaius-codius:feat/session-list-header-polish

Conversation

@gaius-codius
Copy link
Copy Markdown
Contributor

@gaius-codius gaius-codius commented Apr 7, 2026

Summary

  • polish session list rows and session header metadata with compact dot-separated chips
  • add color-coded flavor labels, pending/thinking badges, inactive dimming, and session enter animation
  • keep grouped session headers by machine/path; path only in group headers, not each session row
  • fix touch + desktop expand/collapse behavior for grouped session headers
  • improve new session page scrolling so create actions stay reachable
  • add focused unit/Playwright coverage for the metadata polish

Scope

This PR is intentionally limited to session list/header glanceability polish and closely related UX fixes.

Not included:

  • manual sorting
  • group/session move menus
  • sort preference persistence

Impact

  • denser, clearer session metadata in sidebar and header
  • better flavor/model/effort/permission/worktree visibility
  • more reliable mobile expand/collapse behavior
  • better create-session usability on shorter viewports

Validation

  • bun run typecheck:web
  • cd web && bun run test SessionList SessionHeader SessionActionMenu
  • focused local Playwright/manual validation for:
    • session metadata rendering
    • group expand/collapse on touch + desktop
    • new-session scrolling / reachable create button

gaius-codius and others added 30 commits February 18, 2026 14:23
Restore the original dark theme as default and offer Catpuccin Mocha
as an opt-in theme. Add a manual theme toggle in Settings > Display
with System, Light, Dark, and Catpuccin options. Theme persists via
localStorage and syncs across tabs.
Add Gaius Light (warm pearl) and Gaius Dark (deep slate) themes using
classical Roman pigments — cinnabar red, verdigris green, lapis blue,
and aureus gold — rendered in a modern contemporary style. Includes
auto-switching Gaius option that follows system preference.
Add permissionMode to SessionSummary, show permission mode and flavor
badges in session header and list with theme-aware colors.
…nner

The runner integration test was calling stopRunner() which reads the real
~/.hapi/runner.state.json and kills whatever runner it finds. This caused
the production/systemd runner to die whenever tests were executed.

Fix by redirecting all test runner state to a temp directory under /tmp/
and passing HAPI_HOME env to all spawned child processes. Also add
rebuild-and-restart script and bump PWA cache size limit for builds.
- Remove macOS resource fork files, add ._* to .gitignore
- Add error logging in upsert catch block (sessionSortPreferences.ts)
- Fix GroupActionMenu/SessionActionMenu focus targeting disabled buttons
- Add .max() constraints to SessionManualOrderSchema arrays
- Extract duplicate sort toggle logic into shared useSortToggle hook
- Fix redundant reconcileManualOrder calls (applyManualOrder now takes
  pre-reconciled order)
- Extract duplicate SVG icons to shared SortIcons.tsx
- Remove unused createEmptyManualOrder export
- Add userId scoping to SSE session-sort-preference-updated broadcast
- Wrap runner integration test afterAll in try/finally
- Add ArrowUp/ArrowDown keyboard navigation to GroupActionMenu
- Add useSessionSortPreferenceMutation tests (optimistic update,
  rollback, API unavailable)

via [HAPI](https://hapi.run)
feat: persist session sort mode + manual ordering in hub
test(web): add playwright e2e coverage for session sort backend
# Conflicts:
#	hub/src/store/index.ts
#	hub/src/sync/syncEngine.ts
#	shared/src/schemas.ts
#	shared/src/sessionSummary.ts
#	web/src/components/SessionHeader.tsx
#	web/src/components/SessionList.tsx
#	web/src/lib/agentFlavorUtils.ts
#	web/src/router.tsx
#	web/src/routes/settings/index.tsx
@gaius-codius gaius-codius force-pushed the feat/session-list-header-polish branch from d9cf245 to ca3b5a5 Compare April 7, 2026 05:42
@gaius-codius gaius-codius changed the title [codex] polish session list/header UX and follow-up fixes [codex] polish session list/header metadata UX Apr 7, 2026
@gaius-codius
Copy link
Copy Markdown
Contributor Author

Addressed the valid review items in 4655347 (fix: address PR review follow-ups).

Fixed:

  • restored move-threshold cancel in useLongPress via onPointerMove (~8px) to avoid accidental navigation while touch-scrolling
  • validated session-alive payloads with Zod, including modelMode
  • quoted interpolated values in web/playwright.config.ts
  • removed the enteringSessionIds bookkeeping race by computing the diff and updating the known-id set in the same memo
  • removed unused index in SessionList
  • merged duplicate reduced-motion rule for .animate-session-enter
  • restored .happy-thread-messages > * { content-visibility: auto; contain-intrinsic-size: auto 80px; }
  • added a clarifying comment in SyncEngine.applySessionConfig that modelMode is currently hub-managed metadata only and is not yet part of the CLI set-session-config RPC

Validation:

  • bun run typecheck:web
  • cd web && bun run test SessionList SessionHeader SessionActionMenu
  • bun run typecheck:hub still hits pre-existing unrelated errors in hub/src/tunnel/tlsGate.ts and hub/src/web/routes/guards.ts

Strip catpuccin, gaius-light, and gaius-dark theme blocks from CSS
and locale files — these belong in a separate theming PR.

via [HAPI](https://hapi.run)
- normalize flavor in supportsModelChange and add coverage
- tighten sessionAliveSchema bounds (sid, time, model, effort)
- replace inline ModelMode import with named type import
- add useLongPress unit tests (pointer gating, threshold, keyboard)
- add positive assertions alongside SessionHeader negative checks
- decouple e2e login wait from English copy
- document session-metadata e2e spec and shared env knobs
- note session-alive payload validation in hub README
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