Skip to content

feat: show GTD state indicators in inbox rows - #371

Draft
salmonumbrella wants to merge 2 commits into
maathimself:mainfrom
salmonumbrella:feat/gtd-inbox-indicators-plugin
Draft

feat: show GTD state indicators in inbox rows#371
salmonumbrella wants to merge 2 commits into
maathimself:mainfrom
salmonumbrella:feat/gtd-inbox-indicators-plugin

Conversation

@salmonumbrella

Copy link
Copy Markdown
Contributor

Summary

Ports the inbox GTD state indicators from closed PR #330 onto the plugin boundary described in #368. Ordinary inbox and search rows can now show every GTD state on the thread, with the oldest relevant classification date, without putting GTD-specific joins or fields into MailFlow's core message query.

This is a stacked draft. It is blocked by #370 and currently includes that PR's commit; once #370 lands, this diff collapses to the indicator layer.

Changes

  • Add a bounded, plugin-owned metadata endpoint for up to 100 visible messages at a time.
  • Expose only a neutral message-row-meta slot from the core message list. GTD owns the labels, colors, ordering, dates, and account gating.
  • Resolve state metadata across every live copy of the same message and thread, including custom GTD folder mappings.
  • Group and chunk visible-row requests per account, ignore superseded responses, and keep optimistic classification and undo state coherent with server refreshes.
  • Refresh indicators after GTD WebSocket events, reconnects, folder-map changes, classification, undo, and unclassification.
  • Show compact state chips and a conservative age for multi-state threads.

Testing

  • Backend: npm test — 1,127 tests passed across 63 files.
  • Backend: npm run lint and npm run lint:plugins.
  • Frontend: npm test — 1,592 tests passed.
  • Frontend: npm run lint and npm run build.
  • Regression coverage includes account ownership, request bounds, custom folder mappings, cross-copy/thread metadata, canonical state order, request races, optimistic classify/undo, stale cache invalidation, and indicator rendering.
  • RoboRev reviewed the final commit. Its cache-coherency findings were reproduced and fixed; the remaining reported unified-inbox finding was checked against the actual condition and does not apply.

Blocked by #370.

Refs #368


Contributor License Agreement

By submitting this pull request I confirm that:

  • I have read and agree to the Contributor License Agreement.
  • My contribution is my own original work (or I have identified any
    third-party material and confirmed it is compatible with the CLA).
  • I have the right to submit this contribution under the terms of the CLA.

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