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

57 lines
2.5 KiB
Markdown

## 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