Skip to content

feat(mail): 쪽지함 — 크루 우편함을 화면으로(사장 발신·대기·배달 기록·실패함 재투입) - #292

Merged
beyondworks merged 4 commits into
mainfrom
feat/crew-mailbox
Aug 23, 2026
Merged

feat(mail): 쪽지함 — 크루 우편함을 화면으로(사장 발신·대기·배달 기록·실패함 재투입)#292
beyondworks merged 4 commits into
mainfrom
feat/crew-mailbox

Conversation

@beyondworks

@beyondworks beyondworks commented Aug 23, 2026

Copy link
Copy Markdown
Owner

무엇

크루 우편함(src/crewmail.mjs, mail/)은 지금까지 send_to_crew·회의실 cc로만 채워지고 화면이 없었다. 사이드바 "쪽지함" 페이지로 드러낸다.

  • 코어 src/crewmail.mjs: listMail(pending·dead·log) / cancelMail(대기만, .claimed는 거부) / requeueDead(attempts 0·lastError 제거로 복귀, .corrupt 불가) / deleteDead. 배달 기록 mail/.log.jsonl — 성공·실패·소진·취소 시 한 줄 append(실패는 배달을 막지 않음), 2000줄 초과 시 읽을 때 최근 1000줄로 절단(ponytail: 주석). mail/은 sync EXCLUDE라 동기화 미영향(기존 테스트로 잠겨 있음).
  • 저장 관문 검증 추가: sendCrewMail이 수신 slug·cc를 검증(/·\·..·dot 접두 거부). 격리 재현에서 API로 to:"../x"를 넘기자 <ws root>/x/에 파일이 생겼다 — 사장 발신 API가 화면 입력을 그대로 넘기므로 저장 관문에서 막았다.
  • API app/api/companies/[ws]/mail/route.js: GET/POST(사장 발신 — room.mjs cc와 같은 from:'captain', fromRole:'captain', 이름은 회사 언어별 '사장'/'the captain')/DELETE(?to=&id=)/PATCH({op:'requeue'|'deleteDead', file}). guardCompany·에러 형식은 routines 라우트 동일.
  • 페이지 app/c/[ws]/mail/page.jsx: 보내기(수신 DropUp·참조 칩 토글 ≤4·textarea) / ① 대기 중(수신·발신·종류·시각·시도·배달 중 칩·취소) / ② 배달 기록(성공·실패·취소 점 + 수신 크루 대화 Link) / ③ 실패함(재투입·삭제 — ConfirmModal). 5초 폴링. 사이드바 항목 + mail 아이콘, i18n ko/en 34키.

검증

  • node --test test/crewmail.test.mjs 23/23 (신규 7: listMail 구조·cancel의 .claimed 거부·배달 로그 성공/실패·requeueDead·deleteDead(.corrupt)·경로 검증·sendCrewMail slug 관문)
  • npm test 922 tests / 917 pass / 0 fail / 5 skipped · npx next build 통과
  • 격리 QA 서버(:3231, 임시 ARGO_ROOT, Supabase env 비움) — creator 프리셋 회사에서 사장 쪽지 1건(to + 존재하지 않는 cc) 발신 → 스케줄러 틱마다 배달 실패(러너 없음)가 배달 기록·시도 횟수에 반영되는 것 확인. 화면 스크린샷(라이트/다크, Aside): artifacts/mail-light.png, artifacts/mail-dark.png(로컬, 미커밋).
  • 3틱 후 실패함에 2건 적재 → 브라우저에서 재투입 클릭(하람 건이 대기 중·시도 0회로 복귀) / 삭제 클릭 → ConfirmModal → 확인(실패함 비워짐) 확인. 스크린샷 artifacts/mail-dead.png, artifacts/mail-delete-modal.png.
  • API 직접: to:"../x" → 400 잘못된 크루 slug.

미검증

  • 실제 러너로 배달 성공하는 경로의 화면(배달 기록 초록 점) — 러너 미연결 환경. 로직은 단위 테스트로만.
  • 영어 모드 화면 렌더(키는 등록, 시각 확인은 ko만).
  • Tauri 웹뷰·Windows.

🤖 Generated with Claude Code

beyondworks and others added 4 commits August 23, 2026 11:10
…d + 배달 기록(.log.jsonl), 수신 slug 저장 관문 검증

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…실패 기록 삭제

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…), 사이드바 항목·i18n ko/en

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@beyondworks
beyondworks merged commit f18960d into main Aug 23, 2026
2 checks passed
@beyondworks
beyondworks deleted the feat/crew-mailbox branch August 23, 2026 02:41
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