Skip to content

fix(web-ui): show the scheduled job mark on session rows only - #3171

Merged
nonoqing merged 1 commit into
GCWing:mainfrom
nonoqing:fix/session-scheduled-job-mark
Sep 21, 2026
Merged

nonoqing merged 1 commit into
GCWing:mainfrom
nonoqing:fix/session-scheduled-job-mark

Conversation

@nonoqing

Copy link
Copy Markdown
Collaborator

Summary

The scheduled-job count shipped as a chip beside the title on both the session row and the workspace row. On a session row it read as a fifth activity badge next to the BTW, dispatch, review, and background-subagent chips, and it drew its clock at 8px, where the shared 1.6 stroke width resolves to about half a pixel, so the glyph became a smudge next to the count. A workspace owns no session, so the count it borrowed from its sessions did not belong on that row at all.

Type and Areas

Type: UI/UX fix

Areas: web UI (NavPanel session and workspace rows)

Motivation / Impact

The mark now reads as one mark on one row:

  • The session row carries a single 12px secondary clock in the trailing cell, the same drawing and slot SessionStatusIndicator already uses. The count stays on the accessible name instead of a visible digit, so the mark is scannable without competing with the title.
  • SessionStatusIndicator takes an idleFallback: the cell shows the status when the session has one to report (running, approval, unread, queued, and so on) and the scheduled mark otherwise, still yielding to the row menu on hover or focus. No new stylesheet rule is needed for it.
  • Workspace rows drop the mark entirely and stop subscribing to cronJobCountsStore, so the counts store no longer needs to be mounted from that row.
  • SessionsSection.scss returns to its pre-fix(scheduled-jobs): surface agent-created jobs in the product surfaces #3149 state: the inline-item-cron-badge rule is gone, verified by the file's blob hash (7e13a7a9f) matching the index 7e13a7a9f..e02b4a607 line of fix(scheduled-jobs): surface agent-created jobs in the product surfaces #3149.

Verification

pnpm --dir src/web-ui run test:run \
  src/app/components/NavPanel/sections/sessions/SessionsSectionLayout.test.ts \
  src/app/components/NavPanel/sections/workspaces/WorkspaceListSectionLayout.test.ts \
  src/app/components/NavPanel/unifiedSessionCreation.test.ts \
  src/app/components/NavPanel/navigationIconIntegration.test.ts \
  src/app/startup/startupPerformanceContract.test.ts \
  src/features/dispatch/dispatch.contract.test.ts \
  src/app/styles/textClipping.test.ts \
  src/infrastructure/appearance/runtime/AppearanceOverlayHost.test.ts
# 8 files, 122 tests passed

pnpm run type-check:web       # exit 0
pnpm run theme:color-audit:all  # frontend-colors: ok web-ui: 2318 files, app raw=0, fallbacks=0

The two layout contract tests move with the change: the session row test asserts the stylesheet no longer carries any cron rule, that the mark goes through idleFallback, and that it stays at xs with secondary tone; the workspace row test inverts into an assertion that the row must not reference scheduledJobCount, cronJobCountsStore, badgeTooltip, or inline-item-cron.

Reviewer Notes

  • Deliberate consequence, worth a design call: the scheduled mark and the queued status mark are now the same glyph in the same cell, so a clock on a session row's right edge can mean either "this session has scheduled jobs" or "this session is queued". Differentiating them would take a different glyph, which would give up the point of drawing them alike. Happy to change it if the duplication is not wanted.
  • cronJobCountsStore's byWorkspaceId is now referenced only by the store's own test. It is left in place in this PR so the snapshot shape stays stable; say the word and I will strip it in a follow-up or here.
  • No Rust, protocol, or persisted-shape change: this is presentation only, so there is nothing to migrate and no cross-version or remote-surface behavior to negotiate.
  • No user-facing strings added or removed; the existing nav.scheduledJobs.badgeTooltip now serves as the accessible name.

The scheduled-job count shipped as a pill beside the title, on session rows
and workspace rows alike. On a session row it read as a fifth activity badge
next to the BTW, dispatch, review, and background-subagent chips, and it drew
its clock at 8px, where the shared 1.6 stroke width resolves to about half a
pixel, so the glyph became a smudge beside the count. A workspace owns no
session, so the count it borrowed from its sessions did not belong on that row
at all.

Draw the mark as one 12px secondary clock in the session row's trailing cell,
the same drawing and slot the session status indicator already uses, and keep
the count on the accessible name. A session with a status to report keeps that
status, and the cell still yields to the row menu on hover or focus. Workspace
rows stop subscribing to the counts store, and the badge stylesheet rule goes
with it.

Co-authored-by: bitfun-ai <318544290+bitfun-ai@users.noreply.github.com>
@nonoqing
nonoqing merged commit f46fe6f into GCWing:main Sep 21, 2026
9 checks passed
@nonoqing
nonoqing deleted the fix/session-scheduled-job-mark branch September 21, 2026 08:33
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