docs: 14단계 화면(검색 · 대화 묶기)을 확정해 디자인 문서에 옮긴다 #17

Merged
ttipo merged 6 commits from docs/phase14-design into main 2026-11-05 18:24:54 +09:00
Owner

⚠️ 화면 문구 말투 PR #15(fix/ui-copy-tone)를 먼저 합쳐 주세요. 이 브랜치는 그 위에 쌓았다 — 그 전에는 그 PR 의 커밋 5개가 함께 보이고, 합친 뒤에는 아래 커밋 하나만 남는다.

무엇을 · 왜

메일 14단계(스레드 보기 · 자체 검색 색인)의 화면을 사용자가 캔버스에서 확정했다(2026-11-05). 그 결정을 디자인 문서로 옮긴다 — 문서만이고 코드는 없다. 구현 · 배포는 전환(11-05) 뒤 안정화 1~2주 다음이다.

까닭(11-03 엔진 실측 · Stalwart 0.16.27):

  • 엔진 스레드는 Re: · FW: 는 떼고 묶지만 회신: · 답장: · 전달: 은 떼지 않는다 — 한국어 Outlook 과 주고받은 대화가 둘로 갈라진다.
  • 엔진 검색은 한국어를 어절이 통째로 같을 때만 찾는다 — "계약"으로 계약서 · 계약은, "회의"로 회의록을 못 찾고, 제목 맨 앞의 [공지] · Re: 는 색인에서 빠진다.

확정한 것(README 「14단계 — 검색 · 대화 묶기」):

  • 검색: 자체 색인(지금 DB — 글자 두 개씩 묶은 색인)의 부분 일치. 조건 검색(보낸 사람 · 받는 사람(참조) · 제목 · 내용 · 기간 · 첨부 있음), 검색어 강조(목록 · 읽기 화면 제목 · 본문 · 첨부 이름), 색인을 만드는 동안의 안내 줄. 메일 글이 DB · 백업에 한 벌 더 들어가는 것은 사용자가 받아들였다.
  • 같은 대화: 우리 규칙(답장 관계 + 말머리를 뗀 제목 — 회신 · 답장 · 전달 포함)으로 묶어 읽기 화면 아래에 늘 보인다(보낸편지함 포함 · 휴지통 · 스팸 빼고).
  • 목록 「대화로 묶어 보기」: 사용자마다 켬/끔, 기본 끔. 통 수는 글로(뱃지 없음). 검색 결과는 묶지 않는다.
  • 새 토큰 없음(필터 조건 칸 · 안내 줄 단추의 밀도 예외를 다시 쓴다), 문구는 「화면 문구 — 사용자에게 말하듯」.

바뀐 파일: docs/design/webmail/README.md(14단계 절), Search14.dc.html · Thread14.dc.html · ListThreads14.dc.html(캔버스 v52 와 같은 보드), canvas.json(보드 셋 · 차례 · 14단계 제목).
API 규칙(색인 · 대화 · 조건)은 구현 PR 에서 계약 2절에 더한다.

확인 방법

  • 디자인 캔버스(사용자 계정의 비공개 아티팩트)의 맨 아래 "14단계 화면" 줄 — 보드 셋 모두 눌러서 움직인다(조건 패널 · 강조 · 검색 준비 중 · 결과 없음 / 같은 대화 접기 · 펼치기 / 대화로 묶기 켬 · 끔).
  • docs/design/webmail/canvas.json 이 JSON 으로 읽히고 보드 45 · 차례 45 · 노트 phase14 가 있다.

영향 범위

  • backend
  • frontend
  • flutter
  • docker / 인프라
  • 규칙 문서(.claude/)

디자인 문서만 바꾼다.

체크리스트

  • 린트/분석 통과 (Warning 0) · 변경 영역 테스트 통과 — 해당 없음(문서)
  • 주석 한국어, 매직 넘버·하드코딩 문자열 없음 — 해당 없음
  • 사용자 노출 실패는 모두 에러 코드와 함께 처리 — 해당 없음
  • 에러 코드를 바꿨다면 npm run sync:error-codes 실행 후 생성 파일까지 커밋 — 해당 없음
  • 민감정보 미커밋 (*.example 값은 placeholder)
  • 로그에 비밀번호·토큰·요청 본문 전체가 남지 않음 — 해당 없음

🤖 Generated with Claude Code

> ⚠️ **화면 문구 말투 PR #15(`fix/ui-copy-tone`)를 먼저 합쳐 주세요.** 이 브랜치는 그 위에 쌓았다 — 그 전에는 그 PR 의 커밋 5개가 함께 보이고, 합친 뒤에는 아래 커밋 하나만 남는다. ## 무엇을 · 왜 메일 14단계(스레드 보기 · 자체 검색 색인)의 화면을 사용자가 캔버스에서 확정했다(2026-11-05). 그 결정을 디자인 문서로 옮긴다 — **문서만**이고 코드는 없다. 구현 · 배포는 전환(11-05) 뒤 안정화 1~2주 다음이다. 까닭(11-03 엔진 실측 · Stalwart 0.16.27): - 엔진 스레드는 `Re:` · `FW:` 는 떼고 묶지만 **`회신:` · `답장:` · `전달:` 은 떼지 않는다** — 한국어 Outlook 과 주고받은 대화가 둘로 갈라진다. - 엔진 검색은 한국어를 **어절이 통째로 같을 때만** 찾는다 — "계약"으로 계약서 · 계약은, "회의"로 회의록을 못 찾고, 제목 맨 앞의 [공지] · Re: 는 색인에서 빠진다. 확정한 것(README 「14단계 — 검색 · 대화 묶기」): - **검색**: 자체 색인(지금 DB — 글자 두 개씩 묶은 색인)의 부분 일치. 조건 검색(보낸 사람 · 받는 사람(참조) · 제목 · 내용 · 기간 · 첨부 있음), 검색어 강조(목록 · 읽기 화면 제목 · 본문 · 첨부 이름), 색인을 만드는 동안의 안내 줄. 메일 글이 DB · 백업에 한 벌 더 들어가는 것은 사용자가 받아들였다. - **같은 대화**: 우리 규칙(답장 관계 + 말머리를 뗀 제목 — 회신 · 답장 · 전달 포함)으로 묶어 읽기 화면 아래에 늘 보인다(보낸편지함 포함 · 휴지통 · 스팸 빼고). - **목록 「대화로 묶어 보기」**: 사용자마다 켬/끔, **기본 끔**. 통 수는 글로(뱃지 없음). 검색 결과는 묶지 않는다. - 새 토큰 없음(필터 조건 칸 · 안내 줄 단추의 밀도 예외를 다시 쓴다), 문구는 「화면 문구 — 사용자에게 말하듯」. 바뀐 파일: `docs/design/webmail/README.md`(14단계 절), `Search14.dc.html` · `Thread14.dc.html` · `ListThreads14.dc.html`(캔버스 v52 와 같은 보드), `canvas.json`(보드 셋 · 차례 · 14단계 제목). API 규칙(색인 · 대화 · 조건)은 구현 PR 에서 계약 2절에 더한다. ## 확인 방법 - 디자인 캔버스(사용자 계정의 비공개 아티팩트)의 맨 아래 "14단계 화면" 줄 — 보드 셋 모두 눌러서 움직인다(조건 패널 · 강조 · 검색 준비 중 · 결과 없음 / 같은 대화 접기 · 펼치기 / 대화로 묶기 켬 · 끔). - `docs/design/webmail/canvas.json` 이 JSON 으로 읽히고 보드 45 · 차례 45 · 노트 phase14 가 있다. ## 영향 범위 - [ ] backend - [ ] frontend - [ ] flutter - [ ] docker / 인프라 - [ ] 규칙 문서(.claude/) 디자인 문서만 바꾼다. ## 체크리스트 - [x] 린트/분석 통과 (Warning 0) · 변경 영역 테스트 통과 — 해당 없음(문서) - [x] 주석 한국어, 매직 넘버·하드코딩 문자열 없음 — 해당 없음 - [x] 사용자 노출 실패는 모두 에러 코드와 함께 처리 — 해당 없음 - [x] 에러 코드를 바꿨다면 `npm run sync:error-codes` 실행 후 생성 파일까지 커밋 — 해당 없음 - [x] 민감정보 미커밋 (`*.example` 값은 placeholder) - [x] 로그에 비밀번호·토큰·요청 본문 전체가 남지 않음 — 해당 없음 🤖 Generated with [Claude Code](https://claude.com/claude-code)
ttipo added 6 commits 2026-11-05 14:07:25 +09:00
설계 문서처럼 규칙을 적어 둔 문구가 많다는 사용자 지적(2026-11-05) — "메일 서버에 계정이 있는 직원입니다 —
이름과 주소만 보입니다." · "「@도메인」은 그 도메인에서 오는 메일 모두입니다." 같은 글. 화면 상수 · 템플릿 ·
문장을 만드는 유틸의 236곳을 무엇이 되는지 · 무엇을 하면 되는지로 다시 썼다: 줄표로 잇지 않고, 「」 대신
[단추 이름], 메일 서버 · 엔진 · 판정 같은 만든 쪽 말을 빼고, 존댓말은 그대로. 한도 · 날짜 · 개수는 빼지 않았다.
그 문구를 그대로 보던 spec 을 함께 맞췄다(lint · type-check · 단위 2,354 · TZ=UTC · build 통과).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
README 에 「화면 문구 — 사용자에게 말하듯」 절(규칙 여덟과 예시)을 두고, README 가 옮겨 적은 화면 문구를
새 글로 맞춘다. vue3 스킬 점검 목록에 문구 줄을 더한다. 보드(*.dc.html)의 글은 11-05 전 것으로 둔다.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
일부 거절 알림 · 부재중과 필터의 노란 줄 · 필터 적용 진행과 끝 알림 · 이어 올리기 줄 — 화면 상수가
원본인 글을 ddfb2d1 의 새 글과 같게 둔다.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
화면 문구(ddfb2d1)와 같은 기준으로 서버가 짓는 글을 고친다.
- 오류 문구 41개 가운데 7개: AUTH_006(「자동」) · VAL_001(괄호 꼬리표 — 길이 한도에도 나와 "형식이나 길이"로) ·
  FILE_003 · FILE_004 · MAIL_001(메일 서버 → 메일 서비스) · MAIL_013 · CONTACT_002. 코드 · 상태는 그대로이고
  sync:error-codes 로 frontend · flutter 사전을 다시 만들었다.
- 받은편지함 알림 메일 세 통: 줄표 · "이 계정의" · "판정"을 빼고, 메뉴 경로를 화면처럼 [설정] → [앱 비밀번호] 꼴로.
  링크를 넣지 않는 규칙 · 이스케이프 · 정화는 그대로다.
- 본문에 넣는 대용량 첨부 덩이의 기한 줄 · 영어 줄. 표시 · 표 모양은 그대로이고, 배포 전에 붙잡아 둔 발송의
  텍스트 덩이(옛 글)도 보내기 취소 때 떼도록 LEGACY_BLOCK_WORDINGS 를 둔다(7일 뒤 지워도 된다).

임시 복사본 Linux 컨테이너에서 lint · jest 3,209 · build, frontend lint · type-check · 단위 2,354,
flutter error_lexicon 테스트 · analyze 통과.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
docs: 서버 글의 새 말투를 README · 계약 · 오류 코드 규칙에 맞춘다
CI (Flutter) / Flutter (analyze · test) (pull_request) Failing after 0s
CI / Backend (lint · type-check · test · e2e · build) (pull_request) Successful in 15m4s
CI / Frontend (lint · type-check · test · build) (pull_request) Successful in 14m25s
CI / Infra (compose · Dockerfile · nginx · 운영 스크립트) (pull_request) Successful in 2m22s
CI / 에러 코드 SSOT 동기화 검사 (pull_request) Successful in 11m50s
1171593724
README 11 · 13단계의 덩이 · 알림 메일 글(이 절이 원본), 계약의 덩이 글 · FILE_003 · FILE_004 · AUTH_006 ·
알림 메일 메뉴 경로, 오류 코드 규칙 표의 AUTH_006 · VAL_001 을 새 글과 같게 둔다.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
docs: 14단계 화면(검색 · 대화 묶기)을 확정해 디자인 문서에 옮긴다
CI / Backend (lint · type-check · test · e2e · build) (pull_request) Successful in 13m45s
CI (Flutter) / Flutter (analyze · test) (pull_request) Successful in 20m40s
CI / Frontend (lint · type-check · test · build) (pull_request) Successful in 12m31s
CI / Infra (compose · Dockerfile · nginx · 운영 스크립트) (pull_request) Successful in 1m45s
CI (Flutter) / Flutter (analyze · test) (push) Successful in 20m0s
CI / 에러 코드 SSOT 동기화 검사 (pull_request) Successful in 11m9s
CI / Backend (lint · type-check · test · e2e · build) (push) Has been cancelled
CI / Frontend (lint · type-check · test · build) (push) Has been cancelled
CI / Infra (compose · Dockerfile · nginx · 운영 스크립트) (push) Has been cancelled
CI / 에러 코드 SSOT 동기화 검사 (push) Has been cancelled
ba80956d7e
사용자가 캔버스 초안을 확정했다(2026-11-05). 자체 색인의 부분 일치 · 조건 검색 · 검색어 강조, 읽기 화면의
같은 대화, 목록의 대화로 묶어 보기(사용자마다 · 기본 끔)를 README 14단계 절로 적고 보드 셋과 canvas.json 을
캔버스(v52)와 맞춘다. 엔진 스레드가 회신: · 답장: · 전달: 을 떼지 않고 검색이 어절 통째 일치뿐이라는
11-03 실측이 까닭이다. API 규칙은 구현 때 계약 2절에 더하고, 구현 · 배포는 전환 뒤 안정화 다음에 한다.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
ttipo merged commit ba80956d7e into main 2026-11-05 18:24:54 +09:00
Sign in to join this conversation.
No Reviewers
No Label
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: ttipo/arasystem#17