Skip to content

feat(sidebar): add title-only session cards - #23512

Open
rio-evrard wants to merge 1 commit into
kirodotdev:mainfrom
rio-evrard:feat/title-only-session-cards
Open

rio-evrard wants to merge 1 commit into
kirodotdev:mainfrom
rio-evrard:feat/title-only-session-cards

Conversation

@rio-evrard

@rio-evrard rio-evrard commented Oct 23, 2026 •

Copy link
Copy Markdown

Problem / Motivation

Goal: Let people reduce sidebar session cards to their titles with one optional setting.

The sidebar has separate controls for some card details, but no single title-only mode. People who organize many sessions by title still see repeated agent metadata, timestamps, activity previews, and linked-source chips.

Why it matters

A title-only option makes dense session lists faster to scan and keeps unrelated issue or pull-request references out of screenshots and screen shares.

Not a goal

What changed (motivation → approach → change)

A browser-local Title-only session cards switch now appears under Settings → Chat → Sessions. It defaults off, updates the mounted sidebar immediately, and persists with the existing chat display preferences.

When enabled, the shared session row keeps its title and title-line working cue while omitting the repeated agent/timestamp metadata, secondary activity or message line, and linked source chips. A session that needs the user (an owed approval, an unanswered question, a waiting loop, an interrupted turn, or an unread result) keeps one icon in front of its title, with the same glyph and label the full card uses, so it never looks idle. Work the full card names on its status line (a goal loop, a workflow run, a monitor action) lights the title-line live dot, a goal loop whose last turn was interrupted shows the danger loop icon instead of the dot, and a blocked or budget-stopped monitor keeps its warning icon. A collapsed conductor whose hidden sessions need the user shows the needs-you icon, and one whose hidden sessions are running shows the live dot. The same row component supplies list and board views, so both receive the same presentation without changing stored session data or provider refresh behavior.

The generated documentation registry (src/kiro_crew/docs/settings-registry.generated.json), command-palette registry (website/src/components/commandPalette/settingsRegistry.gen.ts), supported locale catalogs under website/src/i18n, and focused tests describe and lock in the preference. This is broader than #21925, which hides only ordinary message previews while preserving the remaining card status and metadata.

Backwards compatibility

Compatible: the new browser-local preference defaults to false, so existing installations retain detailed session cards.

Reader: website/src/pages/ChatSidebar.tsx:ChatSidebar -- chat -- reads the preference and passes it through the shared row shell.
Reader: website/src/pages/chat-sidebar/SessionRow.tsx:SessionRow -- chat -- hides only rendered card details when the preference is enabled; slot payloads and row actions are unchanged.
Reader: website/src/pages/settings/ChatPanel.tsx:ChatPanel -- settings -- writes the preference through the existing mc-chat-config path.

Tests

  • ChatSettings.test.tsx covers the detailed default, stored opt-in, and repair of invalid stored values.
  • ChatSidebar.sourceLinkChip.test.tsx verifies that titles remain while the activity preview, timestamp, and source chips disappear; that a pending approval and an unread result each keep a labelled title-line marker; that a workflow run and a goal loop light the live dot; that a stalled goal loop shows its interrupted marker and no live dot; that a collapsed conductor with a hidden session needing approval shows the needs-you icon, alongside the live dot when the conductor itself is working; and that full cards get none of these extra cues. These tests fail with the SessionRow.tsx change reverted.
  • Focused suite (settings, source chips, settings panel, peer sessions, status markers): 230 tests passed.
  • Determinism proof: changed tests passed 20/20 single-worker runs; changed and neighboring tests passed 10/10 four-worker runs; shuffled run passed with seed 231023.
  • TypeScript, targeted ESLint, diff-scoped i18n, generated-index production build, flake-pattern ratchet, and CI-pinned Semgrep 1.78.0 passed. Semgrep reported 0 findings.

Manual verification

Verified in an isolated local dashboard profile:

  1. Detailed cards showed agent metadata, timestamps, message previews, and source chips.
  2. Enabling Settings → Chat → Sessions → Title-only session cards reduced each card to its title.
  3. Refreshing preserved the preference.
  4. Disabling the setting restored detailed cards.

The screenshots use synthetic sessions and links.

Screenshots / video

Detailed cards Title-only cards
Detailed session cards Title-only session cards

Title-only session cards setting enabled

Related Issues

Part of #21239

Related overlap: #21925 provides a narrower preview-only setting and intentionally keeps status indicators and other card details visible.

Checklist

  • One commit with a Conventional Commits title
  • Existing focused tests pass and new tests cover the preference
  • Self-review completed; code follows project style guidelines
  • Documentation and generated settings metadata updated
  • No secrets, credentials, or internal references in the diff

Contribution License Agreement

Contributions are accepted under the project's Apache-2.0 license; see the Licensing section of CONTRIBUTING.md.

@rio-evrard
rio-evrard marked this pull request as ready for review October 23, 2026 18:04
@rio-evrard
rio-evrard requested review from a team and KiroCrewCaptain as code owners October 23, 2026 18:04
@rio-evrard
rio-evrard requested a review from buluoray October 23, 2026 18:04
@github-actions github-actions Bot added fork Pull request from a fork (external contributor) readiness: action required A blocking check or review needs attention readiness: checking Automated validation is still running and removed readiness: action required A blocking check or review needs attention labels Oct 23, 2026
@github-actions

github-actions Bot commented Oct 23, 2026 •

Copy link
Copy Markdown
Contributor

UX Review (Opus 5.5, fork) — ✅ PASS (a BLOCK with no Trigger and no Outcome does not block)

UX-level review of 206f141dde9f694450069b8a925ca1d034708cb0 via the fork AI-review pipeline — updated in place on each push. A BLOCK verdict blocks PR readiness; PASS does not.

UX-Verdict: PASS

cannot evaluate: missing the title-line status markers that title-only cards add. The only title-only screenshot shows idle titles, so nobody has seen how a session that needs approval or is running looks.

Evidence gaps

  • The marker in front of the title on a title-only card (session-compact-attention): needs approval, sub-agent approval, needs input, loop waiting on you, stalled goal loop, interrupted turn, blocked or budget-stopped monitor, a collapsed conductor's hidden session needing you, and unread. None appears in attachment-03.png. To close: attach a title-only screenshot with at least the approval, unread and interrupted markers.
  • The live dot on a title-only card for a goal loop, a workflow run, a monitor action, or a collapsed conductor whose hidden sessions are running: no screenshot shows it. To close: one title-only screenshot with a running loop or workflow row.

Notes

  • Placement: the new toggle is inserted between "Split view session grid" and "Dim inactive panes", which only works when split view is on. That separates a setting from the one it depends on. Move it next to "PR and Issue Chips on Session Cards" (ChatPanel.tsx:1099), the other session-card setting.
  • Pinned marker lost: the pin icon lives in the metadata line (isPinned && <Pin …>). A title-only card hides that line, so pinned sessions lose their visible cue. Keep the pin glyph on the title line.
  • Description overpromises: "Show only each session title" is not true, because markers still appear. The es/fr/it/pt/ru/hi/ja/ko/zh-CN translations also drop "metadata". Suggested English: "Show each session as its title plus one status icon. Hides metadata, activity previews and linked source chips." Then re-translate.

[UX-REVIEWED] 206f141

Description read

[DESCRIPTION-READ] 25df14b8cdce4c34d026706d6be1f5258a108a434103f7bc4101eacb4fa892b8

That sha256 names everything this verdict read: the PR description, plus the 6 evidence file(s) the workflow collected from it and handed this review. It covers that evidence because the media strip replaces every attachment URL with the same placeholder, so an edit swapping one attachment for another would leave the description's captured text identical while what this review judged changed. Recompute it with .github/scripts/pr-description-capture.sh over the same inputs; if it differs, the description or that evidence changed after this verdict was formed and any finding drawn from either is unproven.

@github-actions

github-actions Bot commented Oct 23, 2026 •

Copy link
Copy Markdown
Contributor

First Principles Review (Opus 5.5, fork) — ✅ PASS

Premise-level review of 206f141dde9f694450069b8a925ca1d034708cb0 via the fork AI-review pipeline — why this exists and whether the shipped surface is the smallest honest version. Updated in place on each push. A BLOCK verdict blocks PR readiness; PASS does not.

First-Principles-Verdict: PASS

Nothing blocks. The title-line status ladder repeats glyph and label choices the row resolver already makes.

Notes

  • Item 4 — duplicate of website/src/pages/chat-sidebar/SessionRow.tsx rowStateEntry (build() entries, lines 655-890): compactAttention checks rowStateEntry?.key against 7 resolver keys (pending_approval, subagent_awaiting, needs_input, loop_waiting, goal_loop, interrupted, structured_monitor_passive). It then copies each branch's glyph, ink and label by hand; the first four are identical to the build() output. If a resolver branch changes its icon, the title-only card keeps the old one. Subtraction: delete the hand-written ladder and take the glyph and label from the winning resolver entry, so the resolver stays the only place that maps state to icon.

What this change ships

Inventory (9 items) — 8 justified

Intent: let people reduce sidebar session cards to their titles with one optional switch that is off by default. ADDITION.

  1. New "Title-only session cards" switch under Settings → Chat → Sessions, off by default — justified
  2. When on, the agent/timestamp metadata line disappears from every card, in list and board views — justified
  3. When on, the activity/message line and the PR/issue chips disappear — justified
  4. When on, an owed approval, a question, a waiting loop, an interrupted turn, a blocked monitor or an unread result shows as one icon before the title — duplicate of the rowStateEntry glyphs in SessionRow.tsx
  5. When on, a running goal loop, workflow or monitor action lights the title live dot; a stalled loop shows a danger icon instead — justified
  6. When on, a collapsed conductor shows a needs-you icon or the live dot for its hidden sessions — justified
  7. The setting appears in the command palette, the docs settings registry and the find_ui index — justified
  8. The setting's label and description are added to all 12 locale catalogs — justified
  9. Three PR screenshots are committed under temp-screenshots/ (the fork exception documented in .gitignore) — justified

[FIRST-PRINCIPLES-REVIEWED] 206f141

Description read

[DESCRIPTION-READ] 0a5f657a6abfa4073069cd9446bd2cb4b62f983823049516e65e39a1da34778e

That sha256 names the PR description this verdict read. Recompute it with .github/scripts/pr-description-capture.sh; if it differs, the description changed after this verdict was formed and any finding drawn from the description is unproven.

@github-actions

github-actions Bot commented Oct 23, 2026 •

Copy link
Copy Markdown
Contributor

Design Review (Opus 5.5, fork) — ✅ PASS

Design-level review of 206f141dde9f694450069b8a925ca1d034708cb0 via the fork AI-review pipeline — updated in place on each push. A BLOCK verdict blocks PR readiness; PASS does not.

Design-Verdict: PASS

The setting is opt-in and off by default, it takes nothing away, and committed screenshots show this revision.

Notes

  • When title-only cards are on, the source chips are hidden but their provider refresh keeps running ("without changing … provider refresh behavior"). That means periodic provider calls for chips nobody can see. If that matters, gate the refresh on compactSessionCards, the same way turning off the existing source-chip setting already stops those calls.
  • The hidden metadata line also carries the pin, mute and incognito icons. Title-only cards silently drop those cues too, and the settings description ("hides metadata, activity previews, and linked source chips") doesn't say so.

[DESIGN-REVIEWED] 206f141

Description read

[DESCRIPTION-READ] d7095a93a8772a5ddd151db67d6ed5856d0c6bb5f20a3837428935dc8380a7ee

That sha256 names everything this verdict read: the PR description, plus the 1 evidence file(s) the workflow collected from it and handed this review. It covers that evidence because the media strip replaces every attachment URL with the same placeholder, so an edit swapping one attachment for another would leave the description's captured text identical while what this review judged changed. Recompute it with .github/scripts/pr-description-capture.sh over the same inputs; if it differs, the description or that evidence changed after this verdict was formed and any finding drawn from either is unproven.

@github-actions

github-actions Bot commented Oct 23, 2026 •

Copy link
Copy Markdown
Contributor

GPT 6.1 Review (fork) — ✅ no blocking findings

Reviewed 206f141dde9f694450069b8a925ca1d034708cb0 via the fork AI-review pipeline; updated in place on each push.

Review details

No findings.
[GPT-REVIEWED] 206f141

@github-actions

github-actions Bot commented Oct 23, 2026 •

Copy link
Copy Markdown
Contributor

Opus 5.5 Review (fork) — ✅ no blocking findings

Reviewed 206f141dde9f694450069b8a925ca1d034708cb0 via the fork AI-review pipeline; updated in place on each push.

Review details

No findings.

[OPUS-REVIEWED] 206f141

@github-actions github-actions Bot added readiness: action required A blocking check or review needs attention and removed readiness: checking Automated validation is still running labels Oct 23, 2026
@rio-evrard
rio-evrard force-pushed the feat/title-only-session-cards branch from 37dd33a to 40a3f81 Compare October 23, 2026 21:41
@github-actions github-actions Bot added the merge conflict Branch has merge conflicts with its base — author must resolve before merge label Oct 24, 2026
@rio-evrard
rio-evrard force-pushed the feat/title-only-session-cards branch from 40a3f81 to 6b8c6fb Compare October 24, 2026 08:10
@github-actions github-actions Bot removed the merge conflict Branch has merge conflicts with its base — author must resolve before merge label Oct 24, 2026
@rio-evrard
rio-evrard force-pushed the feat/title-only-session-cards branch from 6b8c6fb to 029c8c9 Compare October 24, 2026 09:42
@github-actions github-actions Bot added readiness: checking Automated validation is still running readiness: action required A blocking check or review needs attention and removed readiness: action required A blocking check or review needs attention readiness: checking Automated validation is still running labels Oct 24, 2026
@rio-evrard
rio-evrard force-pushed the feat/title-only-session-cards branch from 029c8c9 to 206f141 Compare October 24, 2026 11:52
@github-actions github-actions Bot added readiness: checking Automated validation is still running readiness: passed Eligible automated validation passed for the current revision and removed readiness: action required A blocking check or review needs attention readiness: checking Automated validation is still running labels Oct 24, 2026

This branch has not been deployed

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

Labels

fork Pull request from a fork (external contributor) readiness: passed Eligible automated validation passed for the current revision

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant