보고 '내용' 열람을 지시자 + 해당 업무 담당자로 제한:
- 백엔드 buildDetail: viewerId 기준으로 권한 없으면 checkpointReports 를 빈 배열로 응답(findOne 에 현재 사용자 전달). 점검일에는 reported 플래그를 두어 상태는 전원 공유
- 프론트: checkpointState 는 reported 플래그 기준, '보고 완료' 클릭(모달)은 지시자·담당자만. 그 외는 비클릭 상태 배지
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
하단 토글 목록 제거 → 상단 '보고 완료' 체크포인트 클릭 시 모달로 보고 내용 표시.
모달은 업무 생성의 카테고리 탭(필수/관리/보안/부가) 방식으로 항목을 구분해 보여준다.
보고 스냅샷에 category 추가(백엔드 엔티티/서비스 + 프론트 타입/뷰/스토어).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- 해야 할 일 항목의 진행상태 배지 제거(진행상태는 중간 점검 보고/기록에서만 확인)
- 중간 점검 점검일 목록 간격 확대, 상태 배지·보고서 작성 버튼 크기 소폭 확대
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
진행 상태(미착수/진행중/완료)를 상시 토글 대신 '보고서'로 전환:
- 보고는 점검일 당일(KST)에만 가능, 지나면 누락 — 마감 전 상시 전송 제거
- 작업자가 점검일 당일 보고서 폼에서 항목별 상태 + 메모를 작성해 전송(상태는 보고에 포함)
- 지시자는 상세 화면에서 보고 기록을 접힌 목록으로 보고 클릭해 펼쳐 열람
- 체크리스트 항목은 마지막 보고 상태를 읽기 전용 배지로 표시(인라인 편집 제거)
- 상시 진행상태 갱신 엔드포인트/DTO 제거(work-status)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
작성/수정 화면: 중간 점검일 여러 개 입력(추가/삭제, 편집 모드 로드).
상세 화면: 체크리스트 항목별 작업자 진행상태(미착수/진행중/완료) 토글(담당자) + 비담당자 배지,
중간 점검 카드(점검일 목록, 점검일~마감 구간 '보고 보내기', 보고 메모, 보고 이력 스냅샷).
타입/컴포저블/스토어/뷰모델 + 알림(task.checkpoint_reported) 렌더 연동.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
비관리자가 URL 로 직접 진입해도 폼이 열리던 문제 수정 — 프로젝트 로드 후 canManage 가 아니면
경고 후 프로젝트 상세로 리다이렉트. 생성·수정 모두 백엔드 admin 전용과 일치시킨다.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
프로젝트 상세 업무 목록의 '새 업무' 버튼을 repo.canManage(관리자) 일 때만 표시.
업무 생성은 백엔드에서 이미 admin 전용이므로 UI 노출을 권한과 일치시킨다.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
새 탭으로 뜨는 인증 완료 화면을 간결하게 정리 — 상단 Relay 브랜드 표기와
'이 창에서 로그인하기' 버튼을 제거하고, 미사용이 된 RelayMark import·관련 CSS 정리.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
로그인 호출에 silent 옵션을 추가해 전역 에러 토스트를 끄고, 로그인 화면에서 에러를 직접 처리.
미인증(403)은 토스트 없이 인증 메일 발송 후 발송 완료 화면으로 이동하고, 그 외 자격 오류만 다이얼로그로 안내.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
로그인 화면 상단 인라인 재발송 배너를 제거하고, 미인증(403) 로그인 시도 시
인증 메일을 즉시 발송한 뒤 /signup?sent=<이메일> 의 '발송 완료' 화면으로 이동하도록 변경.
SignupPage 는 sent 쿼리로 진입하면 곧바로 발송 완료 단계를 표시한다.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
인증 미완료 상태에서 재가입/로그인이 모두 막혀 데드락되던 문제 해결.
- signup: 인증 완료 계정만 409로 거부하고, 미인증 로컬 계정은 입력값으로 갱신 후 인증 메일 재발송(중복 계정 생성 안 함)
- 로그인 화면: 미인증(403) 응답 시 '인증 메일 다시 보내기' 인라인 액션 노출
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
SMTP 미구현 상태에서 운영 환경의 isProd 분기가 인증/재설정 링크를 가려 사실상 인증 불가였던 제한 해제.
개발·운영 공통으로 전체 링크를 로그로 남긴다. 실 메일러 도입 시 토큰 노출 방지를 위해 반드시 제거 필요(주석 경고 명시).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
사이드바·인증 화면 'R' 텍스트 로고를 브랜드 더블 셰브론 마크(RelayMark)로 교체.
favicon을 SVG+PNG+ICO 세트와 웹 매니페스트로 정비(create-vue 기본 아이콘 대체), 가운데 셰브론을 키워 작은 크기 가독성 개선.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
프로젝트 목록·업무 목록·내 업무에 정렬/검색/프로젝트 필터를 백엔드 쿼리 파라미터로 추가(페이지네이션과 일관). 활동 멤버 필터는 전량 로드 피드 기준 클라이언트 처리.
모든 정렬/필터 및 멤버 초대 역할 선택을 네이티브 select → 공통 DropdownSelect 컴포넌트로 통일.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
업무 작성 화면의 .page max-width(77.5rem) override 제거 → 전역 기본값 67.5rem 상속.
프로젝트 목록·내 업무·상세 등 다른 화면과 동일한 너비로 정렬.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
상세 화면에서 첨부 업로드·삭제 UI/로직을 제거하고 목록 표시만 유지.
업로드는 작성·편집 화면에서만 가능하도록 일원화(미사용 스토어 액션·CSS 정리).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
이미 스키마가 존재하는 DB(과거 synchronize 로 생성·데이터 보존)에 배포해도
부팅이 실패하지 않도록, up() 진입 시 핵심 테이블(users) 존재를 확인해 DDL 을
건너뛰고 마이그레이션을 '적용됨'으로만 기록한다(데이터/스키마 보존). 빈 DB 는
기존대로 전체 스키마를 생성한다.
검증: 빈 DB 전체 생성 / 스키마 존재 DB(이력 없음) 건너뛰고 기록·데이터 보존 /
재실행 멱등(No migrations pending) 모두 확인.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
동작 방식(dev synchronize / 운영 migrationsRun 자동), 스크립트(generate/create/
run/revert), 새 마이그레이션 생성 절차(임시 DB diff), 기존 운영 DB 베이스라인 SQL 정리.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
운영(synchronize 비활성, migrationsRun 활성)에서 스키마를 구성할 마이그레이션이
전무해 신규 운영 DB 배포 시 테이블이 생성되지 않던 문제를 해결한다.
- data-source.ts(CLI 전용 DataSource) + package.json 마이그레이션 스크립트
(typeorm/migration:generate/create/run/revert) 추가
- 초기 마이그레이션(CreateInitialSchema) 생성 — 전체 스키마(users·projects·
project_members·tasks·task_assignees·checklist_items·comments·attachments·
activities·notifications·refresh_sessions·ai_conversations·ai_messages,
인덱스·FK 포함), uuid-ossp 확장 생성 보장
- 임시 빈 DB에 up/down 적용 검증, 현재 dev 스키마와 드리프트 없음(No changes) 확인
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
업무 삭제 모달은 공통 다이얼로그와 동일 구조(아이콘+제목+설명+취소/삭제)라
공통 시스템으로 통합한다. 구조가 다른 할 일 검토 모달은 그대로 유지.
- showDelete·confirmDelete·삭제 모달 마크업 제거
- askDelete() 에서 dialog.confirm(danger, 삭제)로 확인받아 삭제
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
모든 window.alert/confirm 을 업무 삭제 모달과 동일한 구조/디자인의
공통 모달로 대체하고, 한 곳에서 관리하도록 다이얼로그 시스템을 도입한다.
- dialog.store: 알림/확인 큐 + Promise 기반 상태 관리
- useDialog(): alert/confirm 컴포저블 API
- AppDialog: App 루트 1회 마운트, 전역 .modal-*/.mbtn 클래스로 렌더
(variant: info/success/warning/danger → 아이콘·버튼 색)
- relay.css: modal-ico.info/.warning, mbtn.primary 변형 추가
- 교체: API 에러 알림(useApi), 검증/성공 알림(Signup/ProjectCreate/
ProjectSettings/TaskCreate), 삭제·제거 확인(ProjectSettings/
ProjectMembers/AgentChatPanel)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
업무 상세 지시자 카드 하단에 있던 '언제 지시했는지' 텍스트를 '지시자' 라벨과
같은 줄의 우측 상단으로 배치한다.
- side-head(라벨 + 우측 보조 텍스트) 한 줄 배치 추가, issued-at 우측 정렬
- 하단 .meta-line 제거(미사용 스타일 정리)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
가로로 겹쳐 표시되는 프로필 스택이 3개를 넘으면 마지막에 +N 으로 표기한다.
- 업무 목록(ProjectDetailPage): 담당자 스택 3개 초과 시 +N
- 내 업무(MyTasksPage): 미니 담당자 스택 3개 초과 시 +N(.mini-more 추가)
- 프로젝트 멤버 스택(목록/헤더)은 이미 백엔드 AVATAR_LIMIT=3 으로 동일 처리됨
- 담당자 세로 목록(상세)·칩(지시 작성)은 겹침 스택이 아니라 제외
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
ProjectHeader(상세·멤버·활동·설정 공용)의 .rh-desc 가 설명이 비어도 빈 줄로
렌더되어 제목과 프로필·업데이트 시간 사이 간격이 벌어지던 문제 수정 —
설명이 있을 때만 렌더. (프로젝트 목록과 동일 처리)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
설명(desc)이 비어도 .repo-desc 가 빈 줄로 렌더되어 제목과 프로필·업데이트
시간 영역 사이 간격이 과하게 벌어지던 문제 수정 — 설명이 있을 때만 렌더.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
기존 드롭다운 메뉴 안에 숨어 보이지 않던 로그아웃을 항상 노출되는
버튼으로 변경한다.
- 사용자 프로필 행은 표시 전용, 아래에 로그아웃 버튼 상시 노출(빨강 호버)
- 접힘 시 아이콘만 표시
- 미사용 드롭다운(menuOpen·me-menu·me-overlay) 로직/스타일 제거
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- 데스크톱: 사이드바 접기 토글(아이콘 레일, 상태 localStorage 보존)
접힘 시 브랜드/네비/사용자가 아이콘만 표시, 메뉴는 레일 우측으로 펼침
- 모바일(≤48rem): 사이드바를 오버레이 드로어로 전환, 툴바 햄버거로 열고
배경/화면 전환 시 닫힘(접힘 상태는 모바일에서 무시)
- 전역 도구에서 미사용 검색 아이콘 제거
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
추후 메뉴 확장을 고려해 AppShell 레이아웃을 사이드바 구조로 변경한다.
- 좌측 사이드바: 브랜드 + 세로 네비(내 업무/프로젝트, 아이콘) + 하단 사용자 프로필·메뉴(위로 펼침)
- 우측 본문 컬럼: 슬림 툴바(페이지 액션 슬롯 + AI/검색/알림) + 기존 페이지 슬롯
- 알림 드롭다운·AI 패널 동작은 그대로 유지(.page 본문은 컬럼 내 중앙 정렬)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
수정 요청 시 공용 메시지 입력을 필수에서 선택으로 완화한다.
- 백엔드: ApprovalChangesDto.note 를 선택값으로 변경, requestChanges 가
빈 메시지면 changesNote 를 null 로 저장
- 프론트: 제출 버튼 비활성(메시지 필수) 해제, 빈 메시지는 미전송,
안내/라벨 문구를 '선택'으로 정리
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
수정 요청(검토 모달)을 제외한 나머지 승인 흐름에서는 메시지를 사용하지 않는다.
- 진행 중 → 승인 요청 카드의 메시지 입력창 제거
- 승인 요청 도착 카드의 승인 메시지 표시 제거
- approvalNote 상태 제거, sendApproval 은 메시지 없이 요청
- 미사용이 된 .ap-note 입력 스타일 정리(수정 요청 메모 .ap-note-box 는 유지)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
설명 텍스트와 아래 버튼/입력창이 너무 붙어 보여 간격을 넓힌다.
- 액션 버튼 영역 상단 여백 0.8125rem → 1.125rem
- 승인 메시지 입력창 상단 여백 추가(0.875rem)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
공용 수정 요청 메시지는 그대로 두고, 검토 모달에서 각 보완 항목 아래에
항목별 보완 내용을 개별 등록할 수 있게 하고 상세 화면에 함께 표시한다.
- 백엔드: ChecklistItem.reviewNote 컬럼 추가, ChecklistReviewDto.note 수용,
requestChanges 가 미완성 항목에 보완 내용 보관(완료/승인 시 비움), 상세 응답 동봉
- 프론트: 검토 모달 보완 항목 아래 보완 내용 textarea(개별), 상세 체크리스트
보완 항목 아래 보완 내용 표시. 공용 메시지 입력은 유지
- 테스트: 미완성 항목 보완 내용 보관·완료 항목 비움 검증(9 tests)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
업무가 '수정 요청됨(changes)' 상태일 때 상세 화면 체크리스트의
미완료 항목을 빨강 X(보완 필요)로 표시해 담당자가 보완 대상을 명확히 보게 한다.
- 완료 항목은 초록 체크, 보완 항목은 빨강 X + '보완 필요' 태그
- changes 상태가 아닐 때는 기존대로 체크/빈 박스 유지
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
지시자 검토 카드의 '승인하기' 버튼과 별도 승인 모달을 제거하고,
단일 '할 일 검토하기' 버튼이 검토 모달을 열도록 통합한다.
- 검토 카드 버튼을 '할 일 검토하기' 하나로 정리(승인하기 제거)
- 미사용이 된 승인 확인 모달·approveTask·showApprove 상태 제거
- 승인은 검토 모달에서 전 항목 완료 시 '승인 완료' 버튼으로 수행
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
시안(수정 요청 모달.html)을 반영해 모달 UI를 재구성한다.
- 헤더(그라데이션 배지·안내)·스크롤 본문·고정 푸터 구조로 변경
- 항목별 완료/보완을 세그먼트 토글(완료=초록 / 보완=빨강 좌측 바)로 표시,
카테고리 그룹·진행률 바·완료 카운트 동봉
- 보완 항목 수에 따라 안내 배너(warn/good)와 메시지 필수 여부가 전환
- 모든 항목 완료 시 버튼이 '승인 완료'(초록)로 바뀌어 곧바로 승인,
보완 항목이 있으면 '수정 요청 보내기 (N건)'(빨강)으로 메시지와 함께 반려
- 모달 진입 시 전 항목을 '완료'로 초기화(담당자가 완료를 주장하며 요청)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
지시자가 승인을 검토하며 수정 요청할 때, 단순 텍스트 입력에 더해
할 일 목록에서 어떤 항목이 완성/미완성인지 체크(✓)·X로 표시할 수 있게 한다.
- 백엔드: ApprovalChangesDto 에 항목별 검토 결과(checklist) 추가,
requestChanges 가 전달된 항목만 done 상태로 반영(미전달 항목은 보존)
- 프론트: 수정 요청 모달에 카테고리별 체크/X 토글 UI 추가, 검토 결과를
note 와 함께 전송
- 테스트: 전달된 항목만 완료 체크가 반영되는지 검증(9 tests)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
업무 지시(생성/편집)·상세 화면의 '해야 할 일'을 AI 추천과 동일한
4개 영역(필수/관리/보안/부가)으로 분류한다.
- 백엔드: ChecklistItem 에 category 컬럼(기본 '필수') 추가, 생성/동기화
DTO·서비스·응답에 category 반영
- 프론트: 생성/편집은 카테고리 탭 + 탭별 추가 입력, AI 추천 항목은
소속 영역으로 매핑해 일괄 추가, 상세는 카테고리별 그룹 표시
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Docker 만 사용하므로 standalone 안내를 정리:
- 프론트 env(.example): '단독 실행 시 주석 해제' 안내 + 주석 처리된 VITE 라인 제거
(VITE_ 값은 compose build arg 로만 주입됨)
- CLAUDE.md: '단독 실행 시 주석 예시 활성화' 규칙 삭제
- README: 사전요구사항/cp 명령/‘단독 실행’ 섹션/env 표의 standalone 문구 제거
(모바일은 compose 비대상이라 별도 실행 안내만 한 줄 유지)
- integration-progress: Redis 폴백 설명의 '단독 실행' 표현을 'REDIS_HOST 미설정 시'로 교정
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- 죽은 설정 제거: GITEA_*/REPO_IMPORT_ADMIN_EMAIL (저장소·Gitea 기능 삭제됨)
- 섹션 헤더 스타일을 # === 블록으로 전 파일 통일(루트/백엔드/프론트)
- 루트: AI 섹션(AI_TIMEOUT_MS) 형식 통일 + production 파일에 누락됐던 AI 섹션 추가
- 백엔드: JWT/앱URL/OAuth/AI 4섹션으로 일관 정렬, production 에 누락됐던 URL/OAuth/AI 추가
- 프론트: 빌드 주입 변수 안내(VITE_API_BASE_URL·VITE_AI_TIMEOUT_MS) 명시
- 각 .env 와 .example 의 키·순서·주석을 동일하게(값만 실값/placeholder 차이)
(실제 .env.* 는 gitignore 라 미커밋 — 로컬에선 동일 구조로 함께 정리함)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
근본 원인: useApi 기본 axios timeout 이 10초인데 suggestChecklist 가 이를
덮어쓰지 않아, AI 생성이 10초를 넘으면(항목 제한 해제 후 ~10.5초로 일관 초과)
백엔드가 200 으로 완료해도 프론트가 먼저 끊어 '추천을 가져오지 못했습니다' 발생.
(백엔드 에러 로그가 없던 이유 — 백엔드는 성공했음)
suggestChecklist 호출에 timeout 60000(백엔드 abort 30초보다 길게) 지정.
런타임 측정: 백엔드 suggest 응답 10.48초/HTTP 200 확인.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- 프롬프트의 '3~6개씩' 제한 제거 → 카테고리별로 필요한 만큼 제안
- parseSuggestions 의 카테고리당 15개 슬라이스 캡 제거(응답 길이는 max_tokens 가 자연 제한)
- 항목이 늘어 잘리지 않도록 suggest max_tokens 3072 → 4096
런타임 재현: 동일 입력에서 필수8·관리6·보안8·부가6(총 28개)로 더 풍부하게 반환.
백엔드 build/lint 0.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
4개 카테고리(필수/관리/보안/부가) 구조화 JSON 응답이 max_tokens=1024 를
넘으면 중간에 잘려 JSON 파싱이 실패하고 '추천을 가져오지 못했습니다' 로 떴음.
- callClaude 에 maxTokens 파라미터 추가, suggestChecklist 는 3072 사용
- parseSuggestions 파싱 실패/빈 결과 시 원본 일부를 warn 로그로 남겨 진단 가능
런타임 재현: 동일 입력으로 필수5·관리5·보안5·부가4(총 19개) 정상 반환 확인.
백엔드 build/lint 0.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>