Files
Meister-Eder/openspec/changes/email-based-conversation-matching/tasks.md
T
gurixandClaude Opus 4.5 b10ff7a4fe Add change spec: email-based conversation matching
Replace thread-ID-based conversation matching with email-address-based
matching for more reliable conversation continuity. Key changes:

- One conversation per email address (simpler model)
- No data expiration (conversations persist indefinitely)
- Post-completion support (questions and registration updates)
- Versioned storage for registration updates (audit trail)
- Admin notifications for registration changes

This addresses the gap where parents sending new emails (instead of
replying) would lose their registration progress.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-20 22:00:21 +01:00

2.5 KiB

1. Update Conversation Storage

  • 1.1 Modify ConversationStore to key conversations by normalized email address
  • 1.2 Add normalize_email() helper function (lowercase, trim)
  • 1.3 Update _conversation_path() to use email-based filename
  • 1.4 Add find_by_email() method to replace thread-ID-based lookup

2. Update Email Channel

  • 2.1 Remove _resolve_thread_id() from conversation matching logic
  • 2.2 Pass sender email to agent instead of thread ID for conversation lookup
  • 2.3 Keep thread ID handling for outbound reply headers (In-Reply-To, References)
  • 2.4 Store most recent inbound message ID for reply threading

3. Update Agent Core

  • 3.1 Modify process_message() to lookup conversation by email address
  • 3.2 Add post-completion intent detection (question vs. update vs. new child)
  • 3.3 Handle registration updates in completed conversations
  • 3.4 Update prompts to guide LLM for post-completion states

4. Implement Versioned Registration Storage

  • 4.1 Create versioned storage structure for registrations
  • 4.2 Implement save_registration_version() method
  • 4.3 Implement get_registration_history() method
  • 4.4 Track change summary (which fields changed) between versions
  • 4.5 Update save_registration() to use versioning for updates

5. Update Admin Notifications

  • 5.1 Add notify_registration_update() method to AdminNotifier
  • 5.2 Create email template for update notifications (include diff)
  • 5.3 Distinguish "New Registration" vs "Registration Updated" subjects
  • 5.4 Include version number in update notifications

6. Update Reminders

  • 6.1 Remove expiration warnings from reminder templates
  • 6.2 Update reminder messages to encourage completion without deletion threat
  • 6.3 Remove any scheduled data cleanup jobs (if present)

7. Update Specs and Documentation

  • 7.1 Update conversation-flow.md to remove expiration language
  • 7.2 Update channel-config.md state management section
  • 7.3 Update sample responses to remove expiration references
  • 7.4 Update CLAUDE.md with new conversation matching behavior

8. Testing

  • 8.1 Test: New email creates new conversation
  • 8.2 Test: Follow-up email (same address, different thread) continues conversation
  • 8.3 Test: Post-completion question is answered correctly
  • 8.4 Test: Post-completion update creates new version and notifies admin
  • 8.5 Test: Email address normalization works correctly