feat(workflow): 이메일 커넥터 데모 (목 드라이버) + 전체 루프 e2e - #56
Conversation
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
비전 §4(d) 루프 전체를 실서버 e2e로 증명: 받은편지함 → email-triage (체인 루트) → 승인 → email-reply(parentRequestId 체인) → 승인 → 발송 (드라이버) → ack x4. 반려 시 reply 미생성·발송 0건 경로 포함. 커넥터는 공개 계약(actor 등록·요청·actor WS 구독·폴링 보조·ack)만 사용 — 서버 무변경, 자격증명은 커넥터 프로세스에만. IMAP/Gmail은 mockInbox와 같은 드라이버 인터페이스로 교체 예정. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 5019754a62
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| const summary = { chains: [], sent: [], skipped: [] }; | ||
|
|
||
| try { | ||
| for (const mail of driver.listUnprocessed()) { |
There was a problem hiding this comment.
The example is advertised as accepting an IMAP/Gmail driver by replacing the mock with the same interface, but this loop treats listUnprocessed() as a synchronous iterable. Real mail drivers will typically return Promise<Mail[]>; with such a driver this throws before processing any mail, and the later send/markProcessed calls are also not awaited, so failures can be reported as sent/processed. Await the driver methods, or use an async iterator, so the documented driver swap works.
Useful? React with 👍 / 👎.
요약
이메일 업무 관리 구상(#54 문서화 → #55 토대)의 실동작 증명 — 자격증명 없이 목 드라이버로 전체 루프를 e2e로 고정.
스펙:
docs/superpowers/specs/2026-08-04-workflow-email-connector-demo-design.mdworkflow/examples/email-connector/:runEmailConnector({driver,...})— actor 등록 → 메일별email-triage(체인 루트) → 결정 대기(actor WS 1차 + 폴링 보조) → 승인 시email-reply(parentRequestId 체인, 초안 payload) → 승인 시 드라이버 발송 → ack. 반려 시 해당 단계에서 중단·skipped 기록.listUnprocessed/send/markProcessed— IMAP/Gmail은 목 드라이버 교체만으로 연결(커넥터 본체 무수정). 자격증명은 커넥터 프로세스에만 머묾.e2e (
tests/email-connector-demo.test.mjs)경계
workflow/examples·workflow/tests·README + 스펙 문서만 추가.🤖 Generated with Claude Code