feat: 업데이트 내역 게시판 · 쓰기 화면 [보내기] 숨음과 목록 고르기 칸 고침 #26

Merged
ttipo merged 12 commits from feat/release-notes into main 2026-11-11 06:24:46 +09:00

12 Commits

Author SHA1 Message Date
ttipo f4a85fda27 docs: 쓰기 화면 스크롤과 목록 고르기 칸 고침을 디자인 README · 스킬에 적는다
CI (Flutter) / Flutter (analyze · test) (pull_request) Successful in 23m1s
CI / Backend (lint · type-check · test · e2e · build) (pull_request) Successful in 14m22s
CI / Frontend (lint · type-check · test · build) (pull_request) Successful in 15m10s
CI / Infra (compose · Dockerfile · nginx · 운영 스크립트) (pull_request) Successful in 3m50s
CI / 에러 코드 SSOT 동기화 검사 (pull_request) Successful in 11m41s
CI (Flutter) / Flutter (analyze · test) (push) Successful in 22m57s
CI / Backend (lint · type-check · test · e2e · build) (push) Successful in 13m47s
CI / Frontend (lint · type-check · test · build) (push) Successful in 13m15s
CI / Infra (compose · Dockerfile · nginx · 운영 스크립트) (push) Successful in 1m51s
CI / 에러 코드 SSOT 동기화 검사 (push) Successful in 11m19s
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-10 22:14:52 +09:00
ttipo 0ff1ec46af fix(frontend): 목록 보기에서 고르기 상자를 누르면 메일까지 열리던 것을 고친다
목록 보기의 줄은 줄 전체의 click 에서 event.target.closest('button') 로 단추를 가렸다. 상자 가운데(그림 rect)를 누르면 단추 처리기가 고르기를 바꾼 뒤
처리기 사이에 Vue 가 다시 그려 그 그림이 문서에서 떨어지고, 줄 처리기의 closest 가 비어 메일까지 열렸다(사용자 보고).

- 무엇을 눌렀는지는 사건이 지나간 길(composedPath — eventPathHas)로 가르고, 상자 · 별 그림은 pointer-events: none 이다
- 고르기 칸의 빈자리를 눌러도 고른다(Shift 는 범위 · Ctrl 은 하나씩), 별 칸의 빈자리는 아무 일도 없다. 대화로 묶은 목록의 줄도 같다

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-10 22:14:52 +09:00
ttipo f3586abcd7 fix(frontend): 받는 사람이 많으면 쓰기 화면의 [보내기]가 화면 밖으로 숨던 것을 고친다
받는 사람 · 참조 · 숨은참조가 여러 줄이 되면 편집 영역(최소 300)이 줄지 않아 쓰기 칸 전체가 화면을 넘쳤다. 바깥 스크롤과 본문 스크롤이 겹치고,
흐름 끝의 [보내기] 줄이 화면 밖으로 밀렸다(사용자 보고 — 전 직원을 숨은참조에 넣었을 때).

- [보내기] 줄은 스크롤하는 칸의 아래에 붙는다(sticky). 겹침 차례는 편집기 툴바 2 < [보내기] 줄 3 < 받는 사람 추천 목록 · 메뉴를 연 툴바 4
- 칩 · 입력 칸은 96px 을 넘으면 그 칸 안에서 스크롤한다(초점 · 칩 추가 · 입력 때 맨 아래로). 넓은 화면은 편집 영역이 200 까지 먼저 줄어 보통 높이에서 바깥 스크롤이 생기지 않는다
- 넓은 화면에서 숨긴 낭독 글이 앱 틀 밖에 놓여 문서까지 스크롤하던 것을 고치고(.compose position: relative), [보내기] 줄에 가린 칸으로 옮긴 초점은 가린 만큼 올린다(useFocusAboveFooter)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-10 22:14:52 +09:00
ttipo 6eba013416 docs(backend): 업데이트 내역 첫 글의 날짜를 배포 날(11월 12일)로 정한다
배포 일정이 11월 12일(목) 오전 1시로 정해져 파일 이름을 2026-11-12.md 로 바꾸고 날짜 메모 줄을 지웠다.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-10 20:35:24 +09:00
ttipo f0e9a50b01 docs(backend): 업데이트 내역 첫 글을 11월 5일 이후 바뀐 것으로 쓴다
CI (Flutter) / Flutter (analyze · test) (pull_request) Successful in 24m43s
CI / Backend (lint · type-check · test · e2e · build) (pull_request) Successful in 14m6s
CI / Frontend (lint · type-check · test · build) (pull_request) Successful in 13m45s
CI / Infra (compose · Dockerfile · nginx · 운영 스크립트) (pull_request) Successful in 2m4s
CI / 에러 코드 SSOT 동기화 검사 (pull_request) Successful in 11m43s
1차 배포(11월 5일 전환) 뒤 만든 기능을 직원이 어디서 무엇을 누르면 되는지 중심으로 모았다(휴대폰 앱 · 웹메일과 휴대폰 앱 · 웹메일의 메일 읽기와 정리 · 주소록 · 설정 · 그 밖에).
앱에서도 보이는 글이라 묶음 머리에 어느 쪽 기능인지 적었다. 파일 이름(날짜)은 임시 — 배포 날로 고치고 메모 줄을 지운다.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-10 20:16:29 +09:00
ttipo 5ce614cc0c docs: 업데이트 내역을 계약 7절 · 디자인 README · 스킬에 적는다
계약 7절(API 둘 · 글 파일 규칙)과 머리말의 달력 날짜 예외, 웹 · 앱 디자인 README 의 업데이트 내역 절, 세 스택 스킬 행을 더했다.
보드의 목록 최대 개수를 구현(100)에 맞추고, 편집 도구가 보이지 않는 글자의 이스케이프를 실제 글자로 푼 일을 공통 규칙에 적는다.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-10 19:37:01 +09:00
ttipo def96e833b feat(frontend): 설정 › 정보 › 업데이트 내역(목록 → 글)을 더한다
- 설정 메뉴 셋째 묶음 "정보", 목록은 게시판 표(줄 전체 링크 · [더 보기]), 글은 [← 목록으로] · 다음 글 · 이전 글 줄 · [목록]
- 글을 보는 동안에도 메뉴 항목이 고른 상태다(aria-current 는 목록 page · 글 true)
- 문서가 스크롤하는 좁은 폭에서도 글 · 목록이 맨 위부터 보이고(라우터 전역 scrollBehavior 없이), 위에 붙은 줄에 초점이 가리지 않는다
- 날짜는 달력 날짜 글이라 시간대를 거치지 않는다, /settings/info 는 목록으로 바꿔 끼운다

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-10 19:37:00 +09:00
ttipo 1d01130c9d feat(flutter): 설정 › 앱 정보에 업데이트 내역(목록 → 글)을 더한다
앱 버전 다음 줄에서 목록(제목 · 날짜, [더 보기])으로 들어가 줄을 누르면 글(날짜 · 제목 · 묶음, 다음 글 · 이전 글 줄)이 열린다.
없는 글 · 받지 못함 · 글 없음 상태를 두고, 날짜는 달력 날짜 글이라 시각으로 바꾸지 않는다(CalendarDate). 다른 글 줄은 지금 글을 바꿔 끼워 뒤로는 늘 목록이다.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-10 19:37:00 +09:00
ttipo 1b3f9ba7fe refactor(flutter): 메일 화면의 불러오기 상태 위젯을 shared 로 옮긴다
업데이트 내역(설정 모듈)도 같은 상태 틀을 쓰는데 모듈끼리 import 하지 않으므로 shared/widgets/load_states.dart 로 옮겼다.
모양 · 동작은 그대로다(MailStateLayout → StateLayout · MailListError → LoadErrorView · 막대 SkeletonBar · LoadingSkeleton). 메일 줄 꼴의 막대와 빈 메일함 등은 메일에 남는다.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-10 19:36:59 +09:00
ttipo cd958f3bf4 feat(backend): 업데이트 내역 읽기 API 와 첫 글을 더한다
직원이 웹메일 · 휴대폰 앱에서 무엇이 새로 생겼는지 읽는 게시판의 서버 몫이다. 글은 운영자가 backend/release-notes/ 에 글마다 파일 하나로 쓰고
(올리는 API · DB 표 · 새 에러 코드 없음), GET /api/release-notes(커서 목록)와 GET /api/release-notes/{id}(글 + 바로 옛 글 · 새 글)로 웹 · 앱에 똑같이 준다.

- 글 폴더는 src 밖이라 개발 컨테이너(바인드 마운트)는 다시 띄우지 않아도 새 글이 보이고, 운영 이미지는 Dockerfile 이 폴더를 함께 복사한다
- 틀린 글은 실행 때 그 글만 건너뛰고 error 로그(파일 이름 · 줄 · 까닭만 — 기동 때 한 번 읽어 배포 직후 보인다), 실제 폴더를 엄격하게 읽는 시험이 CI 에서 운영자의 오타를 잡는다
- 파일은 O_NOFOLLOW 로 한 번 열어 일반 파일 · 256KB 까지만 읽고, 모양이 틀린 id 도 없는 글과 같은 404 RES_001 이다
- 첫 글(2026-11-18.md)은 다음 배포 소식이다 — 파일 이름(날짜)은 배포 날로 고친다

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-10 19:36:59 +09:00
ttipo abe4c1364c docs: 업데이트 내역 보드를 더한다
웹 설정 › 정보 › 업데이트 내역과 앱 설정 › 앱 정보 › 업데이트 내역(게시판 — 목록에서 글로), 글 파일 쓰는 법을 한 보드에 그렸다(캔버스 v80 확정).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-10 16:43:26 +09:00
ttipo 1962f07d79 docs: 로드맵에 16단계 합침과 업데이트 내역 시작을 적는다
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-10 16:33:55 +09:00