Skip to content

feat(email): rename Reply -> Needs Reply everywhere (mig 92 + ingest canonicalisation) - #168

Merged
vjvarada merged 1 commit into
mainfrom
rename-needs-reply
Jul 23, 2026
Merged

feat(email): rename Reply -> Needs Reply everywhere (mig 92 + ingest canonicalisation)#168
vjvarada merged 1 commit into
mainfrom
rename-needs-reply

Conversation

@vjvarada

Copy link
Copy Markdown
Contributor

A bare "Reply" reads as a verb/button, not a state. The conversation-status
label becomes "Needs Reply" across rules, labels, analytics, presets, and the
mailbox mirror.

Follows the To-Reply->Reply rename playbook exactly:

  • mig 92 rewrites what we own (rule name, LABEL action, categories arrays)
  • persist._RENAMED_LABELS canonicalises AT INGEST — the categories-authoritative
    provider re-asserts old labels every sync, so a one-time rewrite alone would
    be resurrected; mapping at ingest makes the rename stick while the
    reconciler replaces provider-side labels over time
  • legacy aliases kept everywhere a token/name/label resolves
    (_LEGACY_STATUS_KEYS += NEEDS_REPLY, _CONVERSATION_SYSTEM_KEYS,
    _LEGACY_CONVERSATION_LABELS += "Reply", preset-install legacy-alias skip,
    auto-draft rule lookup)
  • frontend: QuickFilters chip + preset template

836 email unit tests green (rename-legacy suite extended: ingest
canonicalisation + needs-reply-name resolution pins).

Co-Authored-By: Claude Fable 5 noreply@anthropic.com

…g 92)

A bare "Reply" reads as a verb/button, not a state. The conversation-status
label becomes "Needs Reply" across rules, labels, analytics, presets, and the
mailbox mirror.

Follows the To-Reply->Reply rename playbook exactly:
- mig 92 rewrites what we own (rule name, LABEL action, categories arrays)
- persist._RENAMED_LABELS canonicalises AT INGEST — the categories-authoritative
  provider re-asserts old labels every sync, so a one-time rewrite alone would
  be resurrected; mapping at ingest makes the rename stick while the
  reconciler replaces provider-side labels over time
- legacy aliases kept everywhere a token/name/label resolves
  (_LEGACY_STATUS_KEYS += NEEDS_REPLY, _CONVERSATION_SYSTEM_KEYS,
  _LEGACY_CONVERSATION_LABELS += "Reply", preset-install legacy-alias skip,
  auto-draft rule lookup)
- frontend: QuickFilters chip + preset template

836 email unit tests green (rename-legacy suite extended: ingest
canonicalisation + needs-reply-name resolution pins).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@vjvarada
vjvarada merged commit efae822 into main Jul 23, 2026
2 of 3 checks passed
@vjvarada
vjvarada deleted the rename-needs-reply branch July 23, 2026 03:07
vjvarada added a commit that referenced this pull request Jul 23, 2026
…ule (#177)

* feat(email): one rules screen — learned patterns nested under their rule

The engine already runs one pipeline (patterns deterministically first, AI
classifier second), but the VIEW was split: rules in the Rules tab, the
patterns that pre-empt them in Settings. Now each rule card discloses its own
learned patterns (with pending-review state, approve/reject/forget inline —
the same PatternRow the Settings screen uses, so the surfaces can't drift),
and the tab header states the actual execution order, ending at the
Uncategorized pill / Fix flow that teaches new ones.

Storage stays separate on purpose: merging patterns into rule conditions
would lose the approval gate (#96/#97) and the per-pattern provenance.

Also fixes stale "Reply" in the empty-state copy (missed in the #168 rename).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* docs(email): record second-wave ships in the master plan; strike Dismiss from v2

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
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