Skip to content

UX-24: Inbox color-coded status tags and text fatigue reduction#631

Merged
Chris0Jeky merged 3 commits intomainfrom
feature/624-inbox-status-tags
Mar 31, 2026
Merged

UX-24: Inbox color-coded status tags and text fatigue reduction#631
Chris0Jeky merged 3 commits intomainfrom
feature/624-inbox-status-tags

Conversation

@Chris0Jeky
Copy link
Copy Markdown
Owner

Summary

  • Status chips in InboxView now use semantic color-coding: Failed (red/error), Applied to Board (green/success), Triaging/Triaged/Ready for review (amber/warning), New (ember), Ignored (muted gray, unchanged)
  • Excerpt text truncated to 2 lines via line-clamp with font-weight: 400 to reduce visual density
  • Alternating row backgrounds (nth-child(even)) for improved scanability

Test plan

  • Verify status chips render with correct colors for each status value (New, Triaging, Triaged, Ready for review, Applied to board, Ignored, Failed)
  • Verify excerpt text truncates at 2 lines for long content
  • Verify alternating row backgrounds appear in the inbox list
  • Verify active/selected row styles still override alternating backgrounds
  • Verify light mode and dark mode both look correct (tokens have both variants)
  • npm run typecheck passes
  • npm run build passes

Closes #624

- Status chips now use semantic colors: Failed (red), Applied to Board
  (green), Triaging/Triaged/Ready for review (amber), New (ember),
  Ignored (muted gray unchanged)
- Excerpt truncated to 2 lines with line-clamp and font-weight 400
- Alternating row backgrounds for visual rhythm

Closes #624
@chatgpt-codex-connector
Copy link
Copy Markdown

You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard.
To continue using code reviews, you can upgrade your account or add credits to your account and enable them for code reviews in your settings.

Copy link
Copy Markdown

@gemini-code-assist gemini-code-assist bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

This pull request introduces status-based color coding for chips in the inbox view, adds alternating row backgrounds for better readability, and implements line-clamping for task excerpts. Feedback focuses on correcting the CSS selector for alternating backgrounds in the virtual list, reducing logic duplication between status labels and classes, and ensuring consistent line-clamping across mobile and desktop views.

Comment on lines +1051 to +1053
.td-inbox-row:nth-child(even) {
background: var(--td-surface-container-low, #1e1d1d);
}
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

high

The :nth-child(even) selector on .td-inbox-row will not work as intended. In the template (lines 723-731), each .td-inbox-row is wrapped inside a div created by the v-for loop. Consequently, every .td-inbox-row is the first and only child of its immediate parent. To achieve alternating backgrounds in this virtual list structure, you should target the sibling wrapper elements instead.

.td-inbox__list div[role="presentation"] > div:nth-child(even) .td-inbox-row {
  background: var(--td-surface-container-low, #1e1d1d);
}

Comment on lines +171 to +180
function statusChipClass(status: CaptureStatusValue): string {
if (status === 0 || status === 'New') return 'td-status-chip--new'
if (status === 1 || status === 'Triaging') return 'td-status-chip--triaging'
if (status === 2 || status === 'Triaged') return 'td-status-chip--triaging'
if (status === 3 || status === 'ProposalCreated') return 'td-status-chip--triaging'
if (status === 4 || status === 'Converted') return 'td-status-chip--converted'
if (status === 5 || status === 'Ignored') return 'td-status-chip--ignored'
if (status === 6 || status === 'Failed') return 'td-status-chip--failed'
return ''
}
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

The logic in statusChipClass heavily duplicates the conditional structure and mapping found in statusLabel (lines 160-169). This increases maintenance overhead, as any future status additions or changes will require updates in both functions. Consider refactoring these into a shared mapping object or a unified helper function that returns both the label and the CSS class for a given status.

font-weight: 400;
line-height: 1.5;
display: -webkit-box;
-webkit-line-clamp: 2;
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

There is a discrepancy between the desktop and mobile line-clamping for excerpts. While this change sets a 2-line limit for desktop, the existing mobile media query (line 1389) still uses -webkit-line-clamp: 3. To align with the PR's goal of "text fatigue reduction," mobile should likely be restricted to 2 lines (or even 1) to save vertical space on smaller screens.

nth-child(even) does not work with virtualized rows since each
td-inbox-row is the sole child of its wrapper div. Use index-based
class (td-inbox-row--alt) instead to ensure alternating backgrounds
render correctly regardless of virtual DOM structure.
@Chris0Jeky
Copy link
Copy Markdown
Owner Author

Adversarial Self-Review

Issues found and fixed

  1. Alternating row backgrounds broken with virtual list (fixed in commit 2): The initial implementation used nth-child(even) on .td-inbox-row, but because the virtualized list wraps each row in its own container div, every .td-inbox-row is the first (and only) child of its parent -- so nth-child(even) would never match. Fixed by computing alternation from virtualRow.index % 2 and applying a td-inbox-row--alt class instead.

Potential concerns reviewed (no issues found)

  • CSS specificity: --active and --selected row states explicitly set background, so they will override the --alt alternating background as intended.
  • Design token coverage: All referenced CSS variables (--td-color-error, --td-color-error-light, --td-color-success, --td-color-success-light, --td-color-warning, --td-color-warning-light, --td-color-ember, --td-color-ember-dim) are defined in both dark and light mode in design-tokens.css.
  • Status mapping completeness: All 7 status values (0-6) are mapped in statusChipClass. The fallback returns empty string for unknown statuses, which safely falls back to base chip styling.
  • Triaged and ProposalCreated grouped as amber: Both "Triaged" and "Ready for review" use the same amber/warning color as "Triaging" since they all represent in-progress triage states. This is a reasonable grouping but could be refined if stakeholders want distinct colors for pre-review vs post-triage.
  • Empty .td-status-chip--ignored rule: Intentionally left with a comment explaining it inherits base styles. Could be removed entirely, but having it documents the design intent.
  • -webkit-line-clamp: Uses the -webkit-box approach which is widely supported in all modern browsers (Chrome, Firefox 68+, Safari, Edge). The display: -webkit-box is required for line-clamp to work.
  • No security concerns: Changes are purely CSS/template cosmetic; no user input handling or data flow changes.
  • No accessibility regressions: Color is additive (not the sole differentiator) -- status text labels remain readable in all chip variants.

Match desktop truncation for consistent text fatigue reduction.
@Chris0Jeky Chris0Jeky merged commit 23a251b into main Mar 31, 2026
22 checks passed
@Chris0Jeky Chris0Jeky deleted the feature/624-inbox-status-tags branch March 31, 2026 14:50
@github-project-automation github-project-automation bot moved this from Pending to Done in Taskdeck Execution Mar 31, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

Status: Done

Development

Successfully merging this pull request may close these issues.

UX-24: Inbox — add color-coded status tags and reduce text fatigue

1 participant