팀 칸반 보드

박소연 · 에이전트 김민아 · 앱·프론트 진수택 · 인프라·총괄 이우정 · 백엔드
할 일 (2)
팀 Android 기기 전원 APK 설치 확인
김민아 M1
W2 완료 기준의 나머지 절반 — 내 기기만 확인됨
GPU 풀가동 · 제품 시연 — g4dn.xlarge 24시간 (10-14~10-27)
진수택 계획 ~2026-10-27 상세 ▾
서울 $0.647/h ≈ $15.8/일 · 크레딧 누적 전망 $358/$400 · Budgets $350 경보
g4dn.xlarge(Tesla T4) 를 10-14~10-27 24시간 가동해 실시간 전사·표정 보조 신호를 GPU 로 돌린다. 해커톤 심사 종료 후에만 .env 스위치(STT_BACKEND · Ollama · VIT_MODEL) 를 바꾼다. 10-27 제품 시연 · 이후 AWS 잔여 리소스 정리·인계.
진행 중 (0)
완료 (138)
이력서 PDF 에서 학력·경력·기술스택 자동 추출 + AI source 표식 · 지원 폼 이력서 필수·자소서 50자 검증
박소연 PR#307 F1 09-17 상세 ▾
폼에서 비운 학력·경력·기술스택을 이력서 PDF 에서 추출해 채우고(_fill_structured_fields), AI 가 채운 필드에 source 표식을 남겨 신고값과 구별. career_years 미확인 시 null 반환. 지원 폼은 이력서 필수 · 자기소개 50자 검증(F1).
대상 미지정 단계변경은 카드 대신 글로 되묻기 · disgust 표정 라벨을 「긴장」으로
박소연 09-17 agent · ai 상세 ▾
「서류 단계로 되돌려줘」처럼 대상이 없으면 도구를 부르지 않고 「누구를?」 하고 글로 되묻는다(카드를 먼저 띄우지 않음). 면접 맥락에 맞지 않는 disgust 라벨을 긴장으로 교체하고 표정 모델 문서 반영(PR#286 후속).
나이·성별 허위 진술 탐지 + gender 스키마 · 얼굴 미검출로 판정 안 나오던 문제 수정
박소연 09-15 agent · lie-detection 상세 ▾
답변 속 나이·성별 진술이 서류와 어긋나면 잡아내는 탐지 + gender 스키마 추가. lie-detection 이 얼굴을 못 찾으면 판정이 통째로 안 나오던 것 수정.
실시간 면접 WebSocket — 말이 끝나면 다음 질문
박소연 PR#54 상세 ▾
ADR-0029 · 답변 단위가 아닌 실시간 스트리밍 경로
영상·오디오를 실시간으로 흘려보내며 답이 끝나는 지점에서 다음 질문으로 넘어가는 경로.
진위 판별 서비스 배포 — Dockerfile + 운영 compose + /ai/*
박소연 PR#42 상세 ▾
CPU 모델·GPU 불필요
표정·음성 진위 판별 서비스(ADR-0029)를 컨테이너로 만들어 운영 compose 에 붙임. 리버스 프록시 /ai/* 로 접근, CPU 모델이라 GPU 서버 불필요 — 같은 EC2 에서 돌린다.
표정·음성 진위 판별 도입 결정 — ADR-0029
박소연 PR#45 상세 ▾
이전 결정(표정 분석 제외)을 개정, 진위 판별을 재도입하는 결정 문서.
자소서 주장 → 면접 꼬리 질문 생성
박소연 PR#12 상세 ▾
자기소개서에 나온 주장을 근거로 면접에서 물어볼 후속 질문을 생성.
면접 영상 진위 판별 서비스 초안
박소연 PR#3 상세 ▾
진위 판별 서비스의 초기 형태를 저장소에 추가.
지원자 칸반 보드 UI (드래그 단계 이동)
박소연 D2·D3 ~2026-09-04 상세 ▾
지원자 카드를 드래그해 단계(지원 접수→서류 검토→면접→최종)를 이동하는 메인 보드 UI — D2·D3.
프론트 뼈대 (React 라우팅·레이아웃)
박소연 front 상세 ▾
React(Vite·TS) 라우팅·레이아웃 뼈대 구축(1주차 React 전환 작업).
API 연동 — 로그인·공고·대시보드·지원자·평가
박소연 큐7 상세 ▾
백엔드 실제 API 5개 영역(로그인·공고·대시보드·지원자·평가) 연동(큐7).
공고의 지원자 화면 + 상세 패널·일괄 단계 변경
박소연 D1·D4·D9 상세 ▾
공고별 지원자 목록 화면과 상세 패널, 지원자 일괄 단계 변경 — D1·D4·D9.
면접 일정 실연동
박소연 front
일정 테이블(ADR-0016) 도입 뒤 캘린더 시간대 다중 선택·그날 패널 딥링크로 연동 · 최종 정리 시점에 done 처리
지원자 상세 패널 UI 개선 + 더보기 페이지 + 모바일 UI
박소연 09-03 상세 ▾
지원자 상세 패널(D4·D5)의 정보 배치와 시각 정돈, 더보기 페이지 신설, 모바일 UI 개선(progress dots 정렬 등).
모바일 웹 셸(D11) · 첨부 파일 블록(C7) · F4 업로드 진행률 · 로그아웃 진입점 3종
박소연 09-02 상세 ▾
768px 이하에서 하단 탭바(공고·지원자·홈·캘린더·더보기)로 감싼 모바일 웹 셸. 지원자 상세 패널에 첨부 파일 블록(C7 프론트 몫), F4 업로드 진행률 바, 로그아웃 진입점 3곳(우측 상단·설정 계정 탭·박스 정리). 모바일 툴바 sticky·overflow·단계 필 균등 폭 등 부수 fix 다수.
오른쪽 패널 통합 · 캘린더 딥링크·다중 선택 · 아르 3D 캐릭터
박소연 09-01 상세 ▾
05-design 토큰 일괄 정리
상세·아르·캘린더·평가 네 자리로 나뉘던 오른쪽 패널을 한 자리(단일 개방·폭 360·모션 통일)로 합침. 캘린더 시간대 다중 선택, 대시보드 축소판→그날 패널→지원자 상세 딥링크. 아르 아이콘을 3D 캐릭터 렌더 PNG 로 통일, 색·그림자·radius·간격을 05-design 토큰으로.
프론트 실연동 착수 — API 클라이언트·대시보드·지원자·평가·설정 + 칸반 뷰
박소연 PR#131 PR#132 PR#134 PR#135 PR#140 상세 ▾
큐 7·8 프론트 몫
API 클라이언트·인증 배선과 공고 목록 실연동, 대시보드·지원자·평가·설정 5개 영역 실연동, 지원자 상세 연결과 패널 겹침 수정. 칸반 뷰(드래그로 단계 변경, 토스트 안내) 추가.
빈 화면 구현 · 앱 셸 개선 · 아르 UX
박소연 PR#119 상세 ▾
기능 진입 전 빈 상태 화면을 채우고, 앱 셸(상단 바·사이드바)의 여백·순서 정돈, 아르 채팅 진입 UX 다듬음.
React 로그인·공고 목록·대시보드 면접 일정 · 면접 일정 화면
박소연 PR#87 PR#89 PR#112 PR#115 상세 ▾
React 로그인·공고 목록 화면, 대시보드에 면접 일정·전형 현황, 면접 일정 화면 추가와 대시보드 진입점 연결. 목업 검토 후 마감 뱃지 스타일 누락 수정.
목업 화면 3종 — 대시보드·공고·지원자 등록 + 이동/닫기 fix
박소연 PR#37 PR#38 PR#39 PR#46 PR#47 PR#80 상세 ▾
정적 목업 → 이후 React 실연동
대시보드 정적 목업, 공고·지원자 등록 화면, 목업 화면 간 이동 연결과 닫기 표시·헤더 정렬 수정. 캐릭터 "아르다" 반영.
로그아웃을 우측 상단 계정 메뉴로(담당자 웹) · 지원자 「내 정보」 비밀번호 칸 오표시 수정
김민아 09-18 front 상세 ▾
담당자 웹만 로그아웃 진입점이 예외적으로 달랐던 것을 우측 상단 계정 메뉴로 통일. 지원자 내 정보의 비밀번호 칸이 실제와 다른 값을 보여주던 것 수정.
제출물 무결성 배지 — 상세 패널 첨부 아래
김민아 PR#46 이슈#6 상세 ▾
이력서·자소서 위변조 여부를 배지로 표시
매일 게시되는 앵커(ADR-0028) 기준으로 제출물이 게시 이후 바뀌지 않았는지 배지로 표시.
대시보드·평가현황·셸 재구성 — 시안 반영
김민아 PR#27 PR#28 PR#41 PR#43 상세 ▾
백엔드 변경 없음
대시보드와 평가 현황 화면을 새 시안으로 재구성. 부수적으로 평가 현황이 빈 상태에서 좁고 길쭉하게 서던 문제와, 단계 램프 세 칸이 다 회색으로 보이던 것, 평가 현황 열이 계단처럼 어긋나던 것을 함께 수정.
다크 딥네트워크 테마 — 프론트엔드 디자인 전면 교체
김민아 PR#18 상세 ▾
전체 화면 톤을 다크 딥네트워크로 통일.
설정에 로그아웃 진입점 — 데스크톱
김민아 PR#19 상세 ▾
데스크톱 웹에 로그아웃 버튼이 아예 없던 것을 설정 화면에 붙임.
공고 삭제 — 수정 화면 하단 + 확인 시트
김민아 PR#9 상세 ▾
공고 삭제 흐름을 앱 수정 화면 하단에 두고, 되돌릴 수 없는 동작이라 확인 시트로 한 번 더 물음.
백엔드 분담 큐 (B2 → D1 → D6)
김민아 전환기 ~2026-09-04 상세 ▾
08/25 완료 — B2 #32 · D1 #48 · D6 #72
전환기 백엔드 분담분 — B2(#32)·D1(#48)·D6(#72) 3건 구현·머지(08/25).
앱 스택 Flutter 재확정 (ADR-0010)
김민아 ADR-0010 상세 ▾
iOS 를 시연 범위에서 빼면서 Expo 기각 근거가 사라졌다 — #110 · #113
iOS를 시연 범위에서 제외하면서 Expo 채택 근거가 사라짐 — Flutter·Dart로 재확정(#110·#113), ADR-0010 갱신.
Flutter 프로젝트·디자인 토큰·내비게이션 뼈대
김민아 큐 5 상세 ▾
05-design 토큰 Dart 이식 · IBM Plex Sans KR 번들 — #114
05-design 토큰을 Dart로 이식, IBM Plex Sans KR 폰트 번들, 내비게이션 뼈대 구성(#114).
지원자 리스트 화면 (목데이터)
김민아 큐 6 상세 ▾
상단 바·공고명·단계 탭·카드 리스트 — #137
상단 바·공고명·단계 탭·지원자 카드 리스트 — 목데이터 기반 화면 완성(#137).
지원자 상세·로그인 화면 (목데이터)
김민아 큐 6 상세 ▾
지원 정보·단계 변경 버튼·로그인 — #138 외
지원 정보·단계 변경 버튼이 있는 상세 화면과 로그인 화면 — 목데이터 기반(#138 외).
Flutter 앱 M1 (조회·단계 변경·평가)
김민아 M1
큐 8 완료(09-03) 로 조회·단계 변경·평가 전 영역 서버 실연동 · 최종 정리 시점에 done 처리
JWT 로그인 연동 (secure storage)
김민아 큐 7
큐 7 JWT 로그인(09-02) 카드와 동일 항목 · 최종 정리 시점에 done 처리
모바일 시안 요청 — 목업에 없던 5건
김민아 큐 6 상세 ▾
프론트 담당자에게 요청 → 같은 날 시안 도착. 보류가 풀렸다
단계 변경 UI·이력 타임라인·평가 목록·퍼널 바 배치·모바일 공고 리스트 — 목업에 없어 05-design §12 대로 멈추고 요청한 5건. 시안이 도착해 전부 반영했다.
앱 이름 Arda · 런처 아이콘
김민아 앱 상세 ▾
PR #142
홈 화면 이름이 flutter create 값(arda)으로 남아 있어 Arda 로 고쳤다. 런처 아이콘을 Flutter 기본 로고에서 교체하고 Android 8+ 적응형 아이콘까지 생성. 원본 하나만 바꾸면 전 해상도가 다시 만들어지게 flutter_launcher_icons 로 배치했다.
시안 반영 ① 치수·단계 칩·상세 카드형
김민아 큐 6 상세 ▾
PR #143
화면 여백 12→16dp, 탭 44→48dp, 지원자 카드 72→88dp. 단계 표시를 글자에서 알약 칩으로, 상세 닫기를 X 에서 뒤로가기로, 지원 정보를 2단 그리드에서 카드형으로 바꿨다.
시안 반영 ② 퍼널 바 · 탭 인원수
김민아 큐 6 상세 ▾
PR #144
막대는 비율만, 숫자는 탭이 맡는 분담(폰 너비에 라벨이 안 들어간다). 막대는 읽기 전용 — 8dp 는 48dp 터치 타깃을 못 채운다. Row 기본 정렬 때문에 막대 높이가 0 이 되던 버그를 찾아 고치고, 크기를 재는 테스트를 붙였다 — 눈으로는 "가늘어서 안 보임"과 "높이 0"이 구분되지 않는다.
시안 반영 ③ 공고 리스트 — 앱 첫 화면
김민아 큐 6 상세 ▾
PR #145
앱 계층이 공고 → 그 공고의 지원자 → 상세가 됐다. 지원자에서 시작하면 지금 어느 공고를 보는 중인지가 화면에 없다(05-design §0.5). 상단 바도 로고형에서 제목형으로 바뀌었다.
시안 반영 ④ 단계 변경 시트 · 단계 이력 · 평가 목록
김민아 큐 6 상세 ▾
PR #146
단계 변경은 메일이 나가는 되돌릴 수 없는 동작이라 확인 시트를 뒀다. backend/app/stages.py 전이 규칙을 앱으로 옮겨 갈 수 있는 단계만 보여주고, 메일 경고는 NOTIFY_STAGES 에만, 불합격은 사유 없이 못 넘어가게 했다. 단계 이력·평가는 상세 안 섹션이 아니라 별도 화면으로 뺐다. 테스트 36 → 42개.
큐 8 완료 — 앱 서버 실연동 전 영역
김민아 09-03 상세 ▾
공고 CRUD·평가 쓰기·메모·이름/비밀번호 변경·메일 발송·이력서 열기·캘린더·메일 이력·설정 3탭·대시보드·평가 큐·통합 검색·아르 서버 연동까지. 큐 8 4단계가 하루에 마무리됨.
큐 7 JWT 로그인 · 큐 8 착수 · 단계 변경 저장 · 웹→앱 이관
김민아 09-02 상세 ▾
앱에 처음으로 네트워크가 생긴다
JWT 로그인(큐 7)으로 앱이 서버를 부르기 시작. 큐 8 첫걸음 — 공고 목록·공고별 지원자·지원자 상세를 서버에서 받아옴, 단계 변경이 실제로 저장(W4 완료 기준). 웹에 있고 앱에 없던 화면(공고 등록·첨부·검색·비밀번호 변경) 이관.
앱 UI 초안 반영 — 하단 탭바·5개 탭·홈·설정·로그인·지원자 현황
김민아 09-01 상세 ▾
앱 UI 초안(하단 탭바 + 5개 탭)을 반영, 홈 첫 화면·설정·아르 배포판·지원자 현황 리스트. 로그인을 첫 화면으로, 지원자 상세에 아르 요약·메일·단계 이력 + 목데이터 6명. 실기기 점검에서 드러난 캘린더 필터·공고 카드 숫자 수정.
Flutter 프로젝트·디자인 토큰·내비게이션 뼈대 (ADR-0010)
김민아 PR#110 PR#113 PR#114 PR#116 상세 ▾
앱 스택 Flutter 확정
앱 스택을 Flutter 로 확정(ADR-0010), 프로젝트·디자인 토큰·내비게이션 뼈대 착수(큐 5).
채용 공고 CRUD · 지원자 목록·상세·단계 이력 · 담당자 지원자 직접 등록
김민아 PR#32 PR#48 PR#72 전환기 백엔드 상세 ▾
앱 오너 확정 전 백엔드 분담분
B1·B2·B3 채용 공고 CRUD API, D1·D4·D5 지원자 목록·상세·단계 이력 API, D6 담당자 지원자 직접 등록 API.
운영 점검 · 문서 최종판 갱신 — 심사 기간 실사용 요약 · 인계 문서·팀 지킬 표기 정정
진수택 최종 정리 상세 ▾
코드는 동결 그대로 — 운영 상태 확인과 문서 표기 통일만
클라우드 운영(t3.large · 컨테이너 5개 api·db·caddy·n8n·lie-detection) 전부 정상 가동 확인 · GitHub Actions CI·외부 헬스체크·무결성 앵커 09-18 이후 전부 성공. 심사 기간 실사용(운영 DB 읽기 전용 조회, 개인정보 제외) — 아르 누적 62턴 · 누적 비용 $0.72 · 무관 질문 거절 · 프롬프트 인젝션 시도 2회 모두 요구 문구는 따르지 않음 · 단계 변경 6건 · 메일 13건 전부 발송. 인계 문서 7종을 최종판으로 교체하고, 팀 지킬의 STT 경로·인스턴스·일정 표기를 실제 운영값으로 정정.
해커톤 과제 제출 · 코드 동결 — main 마지막 커밋 8071fd9
진수택 마일스톤 상세 ▾
09-18 마지막 반영 뒤 커밋·PR 0건 · 심사는 seuk.suvisdev.cloud(클라우드 + Claude)
09-18 커밋 8071fd9(로그아웃 계정 메뉴)를 끝으로 코드를 동결하고 09-20 해커톤 과제를 제출했다. 동결 이후 배포 없음 · 열린 PR #311(AI 추정 표식 유지)은 미머지로 남김. 심사위원 데모 — 로그인 화면 「담당자 데모」·「지원자 데모」 버튼. 담당자 데모 계정은 비밀번호·권한·메일 템플릿 변경 잠금, 지원자 데모는 로그인마다 인적성·면접일정·AI 면접 초기화.
Qwen vs Claude 정량·품질 비교 보고서 · 정리 서류 13종 클라우드 기준 최종 갱신
진수택 최종 정리 상세 ▾
해커톤 제출 코드는 프리즈 — 문서·시각화만 · 팀 지킬 최종 반영
같은 자(judge.py · 동일 23건)로 학습 전 Qwen 26.1% → Claude Haiku 69.6% → Qwen v9 73.9% 를 차트로 정리하고, pass/fail 너머의 품질 4축을 분해했다 — 판정 항목별(학습 전 Qwen 약점은 도구 이름 일치 26% 한 축뿐 · 위반 없음 100%) · 질문 유형별(Claude write 0/5 는 단일턴 채점 한계) · 실패의 질(셋 다 위험한 실패 0건) · 요약 어댑터 정성 품질(경력 연수 오차·예시 베끼기). 비용($0.0139/eval건 · $0.0075/실사용 · Qwen $0+GPU $0.647/h 서울 — 초판 $0.71 은 도쿄 가격 오기)·지연(콜드 78초)·STT 무음 hallucination 까지 한 문서로 · 해석 주의(채점기 편향·23건 표본 → "동급"이 정직한 표현) 명시. HTML + PDF. 바탕화면 정리 서류 13종 본문을 클라우드 기준으로 재작성(온프레미스 확정·미의존 결론 0건), 크레덴셜·전화번호 제거. 프로젝트 소개 슬라이드(html·png·jpg) · 09-18 멘토링 피드백 지킬 기록.
클라우드 전환 확정 · 온프레미스 폐쇄 — 심사 서빙 = AWS + Anthropic Claude
진수택 결정 · 종합보고 상세 ▾
3대 PC 온프레미스를 구축했다가 심사 직전 폐쇄 · 이유와 오류 기록을 종합보고로
09-16~18 학원 PC 3대(Cloudflare Tunnel · Ollama 어댑터 3갈래 · MinIO) 로 온프레미스를 실제 구축·운영했다. 그러나 로컬 sLLM 의 다단계 도구호출 불안정(create_application 이 list_postings 를 건너뛰고 id 추측) · 브라우저↔내부 MinIO 불가 · 소형모델 특유 오류(프롬프트 예시 숫자 베끼기 → 전원 64~65점 수렴, JSON 따옴표 깨짐, 면접 중 컨테이너 재기동으로 답변 소실) 가 심사 직전에 누적됐다. 심사는 검증된 AWS 스택(Claude 안정 도구호출 · 실 S3)으로 확정. 온프레 코드·어댑터·GPU 이미지는 자산으로 보존, 구축·오류·폐쇄 경위를 종합보고 문서로 남겼다.
심사위원 데모 로그인 — 담당자·지원자 버튼 · 시연계정 잠금 · 로그인마다 리셋
진수택 PR#333 #335 #337~#339 #342~#346 상세 ▾
심사위원 여럿이 같은 계정을 써도 매번 처음 상태로
로그인 화면에 담당자·지원자 데모 버튼(?demo= 자동로그인). 데모 계정은 사용자·권한 관리와 메일 템플릿 변경을 행위자 가드로 차단(읽기 전용) — 심사자가 비번을 바꿔 서로 못 들어가는 사고 방지. 지원자 데모(조민석)는 로그인마다 인적성·면접시간·AI면접 세 화면을 초기화하고 만료를 미래로 갱신(자기 치유) · 첫 진입 안내 팝업 · 이력서·자소서 기반 AI 면접 맞춤 질문 자동 노출. 종합평가 화면에 계정 메뉴 추가 · 이름 클릭은 상세 패널, 종합평가는 「자세히 보기」로만(#330). 라이브 검증 완료.
아르 캔드 응답 $0 — 인사·능력·사용법 + 지원자 FAQ 기본·경계 질문 · 회사 프로필 근거
진수택 PR#334 #347 #348 상세 ▾
정적 발화가 매번 LLM 을 타 ~$0.02 씩 나가던 것을 규칙으로 우회
의도 라우터에 DirectAction.reply_text 를 추가해 인사·능력·사용법은 도구·LLM 없이 고정 문구로 답한다(^…$ 로 묶어 실제 요청이 붙으면 LLM 으로). 지원자 FAQ 도 인사·연봉·합격 가능성·감사 등은 캔드 · 나머지는 회사 프로필(코드브릿지)을 근거로 Claude 가 답한다. 실측 · 아르 3건 대화 8.4K tok $0.04 → 기본 질문은 $0. Gemini 추가 제안은 채택하지 않음(엔진 둘로 나누면 품질·비용 관측이 갈린다).
자료 부족 지원자 자동 서류 탈락 — ADR-0034 확장 · 「서류 탈락」 라벨
진수택 PR#349 #351 상세 ▾
자소서 1줄·전부 미기재면 분석할 게 없다 — 자동 탈락
요약 결과 insufficient=true(자료 부족) 이면 decide_document 가 applied→screening→rejected 로 옮겨 프론트에 「서류 탈락」 라벨이 붙게(applied→rejected 직행이면 「불합격」으로 보이던 것 수정). 실제 역량이 있는 지원자(insufficient=false)는 건드리지 않는다 — 대량 탈락 방지. 대상 3명은 요약 재생성 없이 decide_document 만 재실행($0).
아르 챗 개선 — 이력서·자소서 다중 첨부 · 공고 인라인 선택 · 무관 질문은 「데이터 근거」로 거절
진수택 PR#336 #341 #353 상세 ▾
파일 여러 개 드롭 · 선택형 답변을 카드 대신 메시지 안 인라인 링크로. 채용 밖 질문(유명인 등)에 Claude 가 답을 다 생성한 뒤 거절을 붙여 토큰 낭비·무관 답 유출하던 것을, 판단 기준 = "답의 근거가 우리 데이터냐" 로 프롬프트 재작성 — 외부 일반 지식은 내용 답변 없이 한 문장 거절, 이력서·자소서 속 인물·프로젝트는 원문 조회해 정상 답변.
아르 챗 이력서 드롭 접수 · 이력서 변동 diff · 탈락 축 표시 · 종합 점수 타일
진수택 PR#318 #320 #326 #327 #328 #321 #322 #299 상세 ▾
채팅에 이력서를 드롭하면 공고 선택·인적사항 확인 뒤 create_application 확인 게이트로 접수(접수 후 AI 서류 심사 자동). 같은 사람 재접수 시 이전 지원 대비 변동 요약 chain + 배지. 서류/면접/종합 어디서 떨어졌는지 빨간 축으로 한눈에. 종합 점수·등급 타일, 담당자 별점 UI 를 종합평가 링크로 대체.
요약 v2 career_years 추출 · lie-detection GPU(cuda) 이관 · CI 에 AI·앱 시험 · 이력서 본문 DB 저장 경로
진수택 PR#294 #324 #310 #282 상세 ▾
폼에 경력이 없으면 이력서에서 연차를 추출해 채운다(AI 추정 표식 유지는 #311 후속 · 미머지). VIT_DEVICE=cuda 로 arda-gpu 이관 — T4 실측 STT 275ms/3s · ViT 75ms/crop(09-17 GPU 서버 벤치 · 09-18 이후 운영은 t3.large CPU). CI 에 AI 면접 서버·Flutter 앱 시험 잡 추가 + 배포 워커 1개 재확인. 온프레미스 대비 이력서 본문 DB 저장 경로(S3 는 그대로).
웹 지원자 AI 면접 → 담당자 화상 면접방 WebRTC 송신
진수택 PR#278 상세 ▾
지원자 웹 AI 면접의 영상·음성을 담당자 실시간 분석 화면으로 1:1 P2P 송신. 3인 이상(SFU)은 시연 뒤 집단 면접으로 다시 본다.
종합평가에서 최종 합불 결정 · 공고 마감/다시 열기 · 요약 체인 v2 스키마 정합
진수택 09-15 상세 ▾
종합평가 화면에서 바로 최종 합격·불합격 결정(사람이 최종). 공고 마감·다시 열기 버튼 — 최종 결과 뒤 담당자가 직접 닫는다. 요약 체인 2단계 스키마를 chain_evaluate.v2 모양으로 맞춰 Ollama format 강제 시 20점 단위 폴백 문제 해소.
Qwen3 QLoRA 자체학습 완결 — chat v9 73.9% · 요약·면접 어댑터 3갈래 (Colab)
진수택 PR#183 → v6~v9 상세 ▾
같은 자(judge.py)로 학습 전 26.1% → v9 73.9% · 심사 서빙은 클라우드+Claude 확정, Qwen 은 비용 절감 R&D 자산
학습 데이터 222건(실측 21 + 합성 192 + 인터뷰 chain 시드 9) 로 아르 도구 호출·요약·서류 대조·꼬리질문·점수 chain 을 QLoRA(4-bit + 어댑터) 로 학습. 초기 AWS G4dn(T4) 에서 시작해 v7~v9 는 Google Colab GPU(L4/T4) 에서 훈련. 핵심 모순을 풀었다 — eval_loss 는 잘 떨어졌는데(0.339→0.074) 도구 호출은 전멸 → 손실이 7,347자 공통 시스템 프롬프트에 쏠리고 tool_call 은 1.8%라 기울기가 안 닿은 것. 이를 교정해 v9 에서 도구 이름 일치 축을 고쳤다. v9 fail 6건 중 5건은 UX상 정상(실질 ~95%+) · 어댑터 3갈래(chat v9 · summary · interview) 분리 서빙 · 요약 어댑터는 JSON·요지·역량은 정확하나 경력 연수 오차(3→5년). 결론 · 정확도는 Claude 와 동급까지 왔으나 수치 추론·형식 안정성과 콜드 스타트 78초·동시성에서 갈려 심사 서빙은 클라우드+Claude 로. 학습 파이프라인·어댑터는 R&D 자산으로 보존.
서류 자동 판정 가중치 개정 · 요건 강조·우대 축소·문화 하한 규칙
진수택 PR#182 상세 ▾
fit-check 24명 실측 분석 · 3가지 정확성 이슈 해결
fit-check 지원자 24명 실측에서 판정이 아슬한 세 케이스(요건 우수인데 문화로 탈락 · 1점 차이 탈락 · 필수 통과인데 우대 부족으로 탈락)를 발견해 알고리즘을 다듬었다. 가중치 · 요건 50→60(강조) · 우대 20→10(있으면 좋음) · 문화 30 유지. 새 규칙 · 요건 점수가 70 이상이면 문화 점수 하한 50(요건 우수 지원자를 문화 한 문구로 떨어뜨리지 않기). 팀장 결정으로 hold 상태는 도입하지 않고 자동 판정 그대로 유지 · 자동 CD 로 배포 완료 · alembic 0020 로 기존 회사 프로파일 두 키 갱신.
답변별 서류 대조 스위치 활성화 — AGENT_FINDINGS_BACKEND 반영
진수택 운영 반영 상세 ▾
이우정(백엔드) #175 UI 가 바로 뜨게 서버 스위치 켬
이우정(백엔드)이 만든 답변별 서류 대조 UI(#175)가 스위치 부재로 화면에 안 뜨던 것을 서버 .env 에 한 줄 추가해 켰다. 함정 · docker compose restart 는 env_file 을 다시 읽지 않아 반영이 안 된다 — up -d --force-recreate 로 컨테이너를 다시 만들어야 반영. 이우정(백엔드) 지적으로 즉시 재작업 · 실측으로 확인 완료. 세션당 비용 ~$0.05(Haiku 4.5, 답변 10개 + 끝날 때 1회) · 시연 규모 무리 없음.
fit-check 24명 판정 정확성 분석 · 시연 시나리오 재조정 근거
진수택 분석 리포트 상세 ▾
인수인계 오류 정정 · 실제 자동 불합격 8명 · 근거 수치화
인수인계에 있던 자동 불합격 3명(한지우·박도윤·정민호)이 실제로는 자동 합격이었고, 진짜 불합격은 8명이었다. 8명 각각의 점수 세 갈래(요건·우대·문화)를 근거로 수치화하고, 판정 알고리즘의 세 가지 정확성 이슈를 짚었다. 리포트를 근거로 알고리즘 개선안(PR #182) 을 도출 · 시연 시나리오도 남기훈(요건 우수·문화 감점) · 강현우(1점 차이) 케이스로 재구성 준비.
이우정(백엔드) 협업 — 답변 저장 버그 원인 규명·세션 로그 3답변
진수택 협업 문서 상세 ▾
이우정(백엔드)이 아침 인계 문서로 요청한 8개 질문에 실측 근거로 답변 · findings 스위치 반영 지적에 즉시 대응(force-recreate 로 해결) · 세션 59 로그 요청에 ai_score 정상(42점) 확인. 이우정(백엔드)이 진짜 이슈로 짚은 뒤늦은 답변 저장 실패(CONFLICT 409) 는 로그로 원인 짚어 전달 · 이우정(백엔드) #178 로 즉시 수정. 팀 간 실측·근거 기반 협업 · 하루 안에 세 번 왕복하며 문제 좁혀 나감.
AWS 통합 결제 조직(ETECH) 편입 — 비용 이관
진수택 AWS Organizations 상세 ▾
계정 활동 비용이 조직 지급인 계정으로 청구
ETECH SYSTEM 조직의 통합 결제(Consolidated Billing) 에 편입 · 이후 활동 비용은 조직 지급인 계정으로 청구된다. 사용량 조회는 조직 정책에 따라 제한될 수 있어 내부는 수동 계산으로 사용량을 추적. 학습·시연 총 예상 사용 시간 15시간 이내로 관리 · 학습 완료 즉시 인스턴스 stop 원칙(당시 — 10-14~27 24시간 계획으로 변경).
인터뷰방 답변 저장 버그 원인 분석 3갈래 · 픽스 방향 · 인계 문서
진수택 인계·협업 상세 ▾
이우정(백엔드)에 원인 3갈래·픽스 4개 정리 전달
시연 리허설 중 실측된 답변 저장 실패(Q9 시도 후 Q1 로 되돌아감) 를 원인 3갈래로 정리 · 픽스 4개 방향 제시. 갈래 A(꼬리질문 in-memory 캐시 미반영) · 갈래 B(빈 STT → 저장 스킵) · 갈래 C(WebSocket drain timeout · 오디오 소실). 이우정(백엔드)이 이후 실제로 #174(answered_at 기준)로 원인 규명·수정 · 팀 간 인계 문서가 실제로 문제를 좁혀 준 사례.
fit-check 지원자 24명 재접수 · 시연 데이터 준비
진수택 시연 데이터 상세 ▾
새 STAR 4문항 콘텐츠 23명 + 홍지민(배지 시연용 구 콘텐츠 유지)
시연용 지원자 24명 일괄 재접수 · 새 STAR 4문항 자기소개서로 23명 새로 · 홍지민(id=52) 만 구 콘텐츠 유지(이력서 파일 새 sha256 vs 앵커 옛 sha256 조합으로 "내용이 바뀜" 배지 시연). 공고 배치 · FE 12명 · BE 12명. 자동 불합격 시연 대상·문화 갈등 서사·정보 부족 서사·영어 이력서 케이스 골고루 포함.
EBS 확장 · 서버 스토리지 29→50GB
진수택 인프라 확장 상세 ▾
빌드 캐시·컨테이너 이미지 여유
운영 서버 디스크 여유가 떨어져 추가 배포에 지장이 생기지 않도록 EBS 볼륨 확장 · 온라인 확장으로 무중단. 확장 후 파일시스템 growfs 로 반영 · 여유 27GB 확보.
ADR-0028 §1.7 · 무결성 원장 트리거 감사 · 우회의 흔적 3갈래
진수택 PR#173 상세 ▾
임시 트리거 해제 재발 방지·감사 로그
이력서 무결성 앵커(document_anchors) 트리거를 시연 데이터 정리 목적으로 임시 해제한 이력을 근거로, 트리거 상태 변경을 반드시 흔적 남게 하는 세 갈래(감사 트리거·이벤트 로그·문서화 규칙) 를 결정 문서에 추가. 원장은 "잠긴 상태" 가 기본 · 우회는 마지막 수단 · 재발 시 자동으로 감지.
n8n 컨테이너 도입 — 알림·메일 자동화 계층 (ADR-0030 1단계)
진수택 PR#63 상세 ▾
compose 서비스·Caddy 리버스 프록시·백업·경보까지 인프라 몫 일괄
메일·알림 파이프라인을 워커 코드에서 워크플로 도구(n8n, 오픈소스 자동화 엔진)로 분리하는 결정(ADR-0030)의 1단계 인프라 반영. 트리거는 우리 API 가 쏘는 웹훅(HTTP 신호), 발송은 노드 하나(SES ↔ SMTP)만 바꾸면 공급자가 바뀐다. 운영 EC2 self-host, 편집 화면은 팀 공유 Basic Auth(간단 로그인) 뒤로. 워크플로 JSON 은 저장소가 진실 — 화면에서 고쳤으면 내보내서 커밋. 백업(볼륨 tar → S3)·지표(n8n 헬스 엔드포인트)·경보(20분 실패 시 이메일)·상태 화면까지 인프라 몫으로 일괄 반영. 백엔드 몫(내부 API 2개·발송 경로 스위치)은 별도.
발표 전 안정화 묶음 — 외부 헬스체크·메모리 경보·인스턴스 자동 복구
진수택 PR#55 상세 ▾
밖·안 이중 감시 + 하드웨어 자체가 죽어도 자동 복구
GitHub Actions 가 15분마다(cron 기준 — 실제 간격은 GitHub 스케줄 지연으로 더 벌어질 수 있음) 공개 주소를 밖에서 찌른다 — 실패 시 이슈를 열고 복구되면 자동으로 닫는다(밖 시선). 서버 안 지표에 메모리 사용률(보조 신호 서비스가 분석 1건에 574MiB)을 추가해 90% 이상이면 경보. EC2 시스템 상태 검사 실패 시 AWS 가 인스턴스를 자동으로 살리도록 알람 등록(같은 IP·디스크 유지). 배포 스크립트를 저장소로 회수 — 그동안 서버에만 있던 것을 검토·재현 가능하게.
서버 지표·경보 세팅 — CloudWatch + SNS 메일
진수택 PR#37 PR#39 상세 ▾
관측 에이전트 미설치·무료 구간 안
서버가 10분마다 상태 숫자(디스크 사용률·백업 파일 나이·API 헬스)를 CloudWatch(AWS 관측 서비스)로 밀어 넣고, 규칙(디스크 85% 이상·백업 30시간 이상·헬스 20분 연속 실패)에 걸리면 SNS(알림 서비스) 를 통해 이메일이 온다. 경보 정의는 CloudFormation 템플릿 파일 하나 — 콘솔 30번 클릭 대신 파일 업로드 한 번. 비용은 상시 무료 구간 안(사용자 지정 지표 10개·알람 10개·API 100만 건/월).
서버 상태 한 화면 스크립트 — status.sh
진수택 PR#36 상세 ▾
디스크·컨테이너·자동 배포 최근 결과·백업·헬스 응답을 한 번에 보여주는 읽기 전용 스크립트. 주 1회 사람이 눈으로 훑기 위한 계기판 — 자동 경보와 별개, 상태를 사람이 확인하는 용도.
운영 DB 매일 S3 백업 — 압축·검증·수명주기 30일
진수택 PR#32 PR#34 상세 ▾
지원자 개인정보와 무결성 원장이 인스턴스 사고로 사라지지 않게
매일 04:00 KST 서버가 DB 를 통째로 뜨서 압축·검증(gzip -t) 후 전용 S3 버킷에 올린다. 쓰기 권한 IAM 은 최소 권한(PutObject 만) — 이 키로 데이터를 되뽑을 수 없다. 버킷 수명주기 30일 자동 만료로 스토리지 비용도 상한. Ubuntu 24.04 에 apt 로 aws-cli 가 없어 snap 으로 설치(문서 반영).
컨테이너 로그 상한 — 서비스당 20MB × 3
진수택 PR#35 상세 ▾
디스크 고갈 예방
compose 에 로그 드라이버 옵션(max-size·max-file)을 걸어 컨테이너 로그가 무한히 커지지 않게. 29GB 디스크에서 로그 하나가 수 GB 로 부풀던 사고를 사전 차단.
운영 체인을 Amoy → Ethereum Sepolia 로
진수택 PR#29 상세 ▾
Amoy 무료 가스 공급이 전부 막혀 사용 불가로 판단
제출물 무결성 앵커(ADR-0028)를 매일 게시하려면 소액 가스(수수료)가 필요한데, Amoy(폴리곤 테스트넷) 무료 수도꼭지(faucet) 6곳이 다 막혀 있었다. Sepolia(이더리움 테스트넷)로 전환 — Coinbase 개발자 포털에서 조건 없이 받을 수 있고, 커뮤니티 채굴형 대안(pk910)도 살아 있다. chain.py 익스플로러 두 줄 교체와 문서 개정 단락. 실전송 1건으로 체인 반영 확인.
저장소에 남은 옛 API 주소 정리 — 정본 api.seuk.suvisdev.cloud
진수택 PR#30 상세 ▾
.env.production·모바일 api_config·스크립트에 남아 있던 옛 인프라 주소를 새 도메인으로 일괄 교체.
결정 문서 개정 원칙 확정 · 문서 전체 갱신
진수택 PR#49 PR#51 PR#61 PR#62 PR#53 PR#57 상세 ▾
설계 문서는 잠금이 아니라 오너가 계속 개정하는 것
2026-09-07 운영 변경(서버 확장·백업·경보·체인 전환·예산)을 상세 문서 10개에 반영. 확정 결정 문서(ADR) 23개에 "오너가 개정 ADR 을 쓰면 바뀐다" 표준 한 줄, 지시서 36개 + 로드맵 5개 맨 위에 "작성 시점의 설계·계획" 한 줄. 확정 대기 게이트 폐지 — 도메인 오너가 자유롭게 개정하는 구조로 명문화. 설계 문서 톤을 "이렇게 한다·안 한다" 잠금에서 "현재 구현 + 확장 후보" 로.
테스트 하네스 안전 스위치 · pytest-timeout
진수택 PR#5 PR#8 상세 ▾
회귀 하네스(반복 검증 세트)에 Anthropic 옵트인 가드를 붙여 실수로 유료 AI 를 부르는 상황 차단. pytest 에 60초 타임아웃 도입 — 죽은 테스트가 무한히 걸리던 것 해소.
S3 이력서 업로드 실패 수정 — 리전 엔드포인트 서명
진수택 PR#4 상세 ▾
새 버킷 업로드가 403 이던 것 — 서명 대상 엔드포인트가 리전 URL 이어야 하는 것을 놓쳤다. 수정 후 즉시 정상.
인프라 이전 반영 — 새 계정 주소·CORS·배포 자동화
진수택 PR#2 PR#14 상세 ▾
저장소가 새 인프라를 안다
AWS 계정 이전에 따라 도메인·S3 버킷·브라우저 접근 규칙(CORS)을 정본으로 갱신. 배포 자동화(systemd 2분 폴링) 문서화, 팀 전체가 코드를 push 하면 자동으로 반영되는 흐름 확정.
면접 일정 조율 에이전트 — 면접관 가용 시간 파악→후보 제안→선택→확정
진수택 PR#150 PR#153 PR#157 상세 ▾
일정 도구 4개 + search_users 로 이름→ID 변환 + 지원자 대화형 일정 페이지로 완결
아르가 면접관 가용 시간을 보고 후보를 제안하고, 지원자가 메일 링크의 대화형 페이지에서 고르면 확정되는 흐름 전 구간. 라이브 테스트 통과 · 최종 정리 시점에 done 처리.
지원자 일정 페이지를 아르 대화형으로 재작업
진수택 PR#157 상세 ▾
일정 선택을 대화 속 카드로 + 지원자 채팅 UI + AI 요약 표시 버그 수정
메일 링크(/schedule/:token) 페이지를 카드+정적 안내에서 아르와의 대화형으로 재작업. PC는 아르 캐릭터+일정 카드/채팅 2단, 모바일은 상단 고정 일정 카드(접기·펴기)+채팅. 아르 얼굴은 3D 뷰어 스냅숏(PNG 12KB)으로 대체해 WebGL 부담 제거. 부수로 지원자 상세 패널이 요약 JSON 원문을 그대로 노출하던 버그 수정 — 핵심 요약+강점+확인 필요 목록으로 파싱 렌더링. PR #157 머지.
이력서·자소서 파일 텍스트를 AI 요약 입력에 포함
진수택 PR#158 상세 ▾
extractor.py 신설 — pdf·docx·hwpx 추출, 실패 시 None 폴백
요약이 지원폼 필드만 읽어 이력서를 충실히 낸 지원자도 "제출물 부족"이 나던 문제 해소. app/agent/extractor.py 신설 — S3에서 파일 수신 후 텍스트 추출(pdf/docx/hwpx, 구형 hwp 스킵), 어떤 실패도 None 폴백으로 요약 자체는 죽지 않음. 로컬 처리라 LLM 비용 없음, 프롬프트 주입 8천 자 상한. 실호출 검증: 가짜 이력서 docx로 강점·확인 필요가 파일에서만 나온 내용임을 확인. PR #158 머지.
지원자 채팅 FAQ 응답 API
진수택 PR#159 상세 ▾
공고 기반 stateless 응답 + 프롬프트 차단 규칙 v3
POST /api/v1/public/schedule/{token}/faq — 로그인 없이 토큰 인증, stateless 1문1답. 담당자용 아르와 완전 별개 경로. 답변 범위·차단은 키워드 블랙리스트 대신 프롬프트가 맥락 판단(연봉 문의 차단, 프롬프트 주입 무시 실호출 확인). v2에서 지원자 본인 상태(현재 단계·확정 일정) 반영, v3에서 "답을 알면 확신 있게" 명시. 실호출 5개 시나리오 전부 정상. PR #159 머지.
search_users 읽기 도구 + 권한 분리
진수택 PR#153 상세 ▾
내부 사용자 검색 도구 + 프롬프트 user_role 주입
면접관을 이름으로 찾을 수 없던 문제 해결. search_users 읽기 도구 추가(이름/이메일 ILIKE + role 필터). 프롬프트에 user_role 주입하여 멤버가 어드민 전용 도구(assign_interviewer) 요청 시 사전 차단. 라이브 테스트: 어드민→확인 카드 정상, 멤버→"어드민 권한이 필요해요" 차단 확인. PR #153 squash merge.
API TestClient 엣지 케이스 41개
진수택 PR#141 상세 ▾
4개 엔드포인트 HTTP 레벨 테스트 + 경계값·보안 패턴
에이전트 4개 엔드포인트(summarize·chat·confirm·stt)를 HTTP 레벨에서 검증. 기본 동작 20개 + 엣지 21개 — 경계값, SQL injection, XSS, 권한 없는 접근, 빈 입력. PR #141로 squash merge.
E2E 엣지 케이스 8개 시나리오 실호출 검증
진수택 W1 상세 ▾
검색 0건, 모호한 요청, 잘못된 단계명, 삭제 요청, 공고 조회, 멀티턴 ID 추적, 특수문자
검색 0건("검색 결과 없음"+대안 제시) · 모호한 요청(도구 호출 없이 명확화 질문) · 잘못된 단계명(동명이인 확인 후 선택 유도) · 범위 밖 삭제 요청(미지원 안내) · 공고 목록 조회 · 멀티턴 3단계 ID 추적 · 특수문자(O'Brien) 검색. 8종 전부 PASS, 비용 실측 $0.083.
프롬프트 튜닝 — ID 혼동 수정
진수택 PR#136 상세 ▾
agent.v1.md에 ID 참조 규칙 2줄 추가
E2E에서 대화가 길어지면 application_id를 엉뚱한 값(id=1)으로 참조하는 문제 발견. agent.v1.md에 규칙 2줄 추가 — ① 직전 도구 결과에서 확인된 ID만 사용, ② "이 지원자" 지시어는 최근 조회 지원자 기준. 수정 후 정확한 ID(id=52) 참조 확인.
한글 수사 오탐 방지 + 텍스트 채팅 재연결
진수택 PR#130 상세 ▾
entity_resolver 오탐 수정 + ADR-0015
entity_resolver가 한글 수사("첫 번째")를 오탐하던 문제 수정 후, 텍스트 채팅 경로에도 resolve_entities 재연결(A안). 결정 근거는 ADR-0015로 기록, PR #130 squash merge.
E2E 데모 4단계 시나리오 (검색→조회→상태 변경→이메일 초안)
진수택 W1 상세 ▾
4단계 전부 실호출 성공, 비용 실측 $0.045
로컬 서버 실호출: ① "김도현 찾아줘"→동명이인 2명 안내 ② 상세 조회 ③ "서류심사로 옮겨줘"→후퇴 불가 안내+대안 ④ 이메일 초안→pending_action 반환(사람 확인 대기). 4단계 전부 정상, 비용 실측 합계 $0.045(Haiku).
테스트 커버리지 보강 — 전체 185개
진수택 PR#133+#141 상세 ▾
prompts 12 + summarizer 10 + api_agent 41 등
신규: test_prompts 12(로더 resolve/render/variables) · test_summarizer 10 · api_agent TestClient 41. 전체 구성: entity_resolver 35, write_tools 19, stages 15, stt 15, cost 13 등 — 185개 전부 통과.
STT 비용 로깅 통일 (채팅·요약·STT)
진수택 W1 상세 ▾
STT(Whisper)에 비용 로깅이 빠져 있던 것 발견 — _estimate_stt_cost($0.006/분×오디오 길이) 구현, transcribe() 반환에 audio_duration_sec·cost_usd 추가. 채팅·요약·STT 3기능의 AI 원가 관측 체계 통일, ADR-0011에 실측 기록.
목업 테스트 → 프론트 전달
진수택 W2 상세 ▾
목업 검토 결과를 프론트에 전달 · 09/04 초기 버전 게이트 시점에 종결. 최종 정리 시점에 done 처리.
opus-5 실측 · 운영 STT 테스트
진수택 W3 → ADR-0038 상세 ▾
opus 는 미채택(haiku 기본 유지) · STT — 업로드는 API, 실시간은 로컬(ADR-0038 · 09-28 정정)
비용상 채팅·요약 기본 모델은 claude-haiku-4-5 로 유지(ADR-0011 개정은 후속). 운영 STT 는 09-15 실측 — t3.large CPU 에서 로컬 large-v3-turbo 가 44초 발화를 180초 안에 못 끝내 뒤 답변까지 연쇄로 지연 → ADR-0038 에서 실시간 전사 기본을 OpenAI whisper-1 API 로 정했다(분당 $0.006 · 면접당 ≈ $0.06). 다만 09-17 운영 실측 STT_BACKEND 가 빈 값이라 업로드 답변·재전사·아르 음성 = whisper-1 API, 실시간 면접 전사 = CPU 로컬 faster-whisper 로 갈려 돌았다(「같은 변수, 두 해석」 · 09-18 이후 값은 미확인). 무음 hallucination 은 no_speech_prob 게이트로 완화(API 경로에만 적용).
파이프 안정화 — 스킬 exact 최상위 · FAQ 하네스 15 · regenerate 사유 분리
진수택 09-03 상세 ▾
스킬 배열(기술 스택 문자열)의 정확 일치를 시맨틱 랭킹 최상위로 올려 "Kubernetes" 같은 고유명사 오답을 원천 차단. 지원자 채팅 FAQ 실측 하네스 15 시나리오 신설, regenerate_summary 응답 코드를 백엔드 불가(503)와 처리 실패(422)로 분리, pytest 실행 시 .env 스위치를 선점하도록 conftest 정리.
인적성 설문(사전 성향) 도입 — 발송·응답·AI 관찰 요약 (ADR-0027)
진수택 PR#163 PR#164 상세 ▾
AI 는 관찰 요약만, 성격 판정 금지
담당자가 사전 성향 설문을 보내면 지원자가 공개 링크로 응답, 결과 통계 + 아르의 관찰 요약이 지원자 상세에 붙는 흐름 전 구간. 결정 문서: AI 는 관찰만, 성격 판정·합격 여부 판단에 안 쓴다.
로컬 sLLM 안정화 — 도구 폭주 가드 + 의도 라우터 LLM 분류 + 회귀 하네스
진수택 PR#161 PR#162 상세 ▾
작은 모델이 도구를 무한 호출하는 것을 사전 차단하는 가드, 실행 로그의 도구 세부 정보는 UI 에서 감추기. 의도 라우터를 LLM 분류 + 코드 실행 방식으로 바꿔 변형 30/30 통과. 확인 응답("응 변경해줘")도 규칙 라우터로 뽑아 저장된 인자로 바로 실행.
채팅 품질 개선 · 이력서 텍스트 요약 입력 · 요약·임베딩 독립 실행
진수택 PR#156 PR#158 PR#160 상세 ▾
확인 카드에 이름 표시·일정 제안 카드·서식 가이드·첫 인사 통일. 이력서·자기소개서 파일 텍스트를 AI 요약 입력에 포함(pdf·docx·hwpx 추출, 프롬프트 8천 자 상한). 요약과 임베딩을 독립적으로 재실행할 수 있게 라벨 중복 제거·스키마 상한 정리.
RAG 시맨틱 검색 + 프롬프트 체이닝 (ADR-0021·0022)
진수택 PR#151 상세 ▾
임베딩 + pgvector
지원자 통합 검색에 임베딩(문장을 숫자 벡터로 만들어 의미로 찾기) 기반 시맨틱 검색을 붙였다. 프롬프트 체이닝(작업을 여러 단계 프롬프트로 나눠 정확도를 높이는 방법)으로 요약→평가→추천을 단계별 파이프라인화.
면접 일정 도구 4개 — ADR-0016 에이전트 연동
진수택 PR#150 상세 ▾
아르가 면접 일정을 스스로 다룰 수 있도록 조회·제안·확정·취소 도구 4개 추가. 결정 문서 ADR-0016(면접 일정 자동화) 을 코드에 연결.
에이전트 v2 — 요약 스키마·엔티티 해석·프롬프트 v2·TOOLS.md v1.1
진수택 PR#88 PR#103 PR#104 PR#107 상세 ▾
요약 출력 스키마와 프롬프트 v2 마커, 엔티티 해석 레이어(음성 전사에서 이름·시간 등을 걸러내는 단계), 단위 테스트 정식 배치. 도구 명세서(TOOLS.md)를 초안에서 v1.1 로 — 코드와 문서 불일치 6건 수정.
에이전트 뼈대 착수 — 도구 스펙·프롬프트·PoC·M2~M4 요약·읽기·쓰기
진수택 PR#33 PR#34 PR#35 PR#36 PR#76 PR#83 상세 ▾
결정 문서 ADR-0009·0011
도구 명세와 이력서 텍스트 추출 개념 증명(한글 PDF), 프롬프트 뼈대와 요약 출력 규약, M2~M4 요약·읽기·쓰기 도구. 결정 문서 ADR-0009(에이전트 UI 위치 시안 3안)·ADR-0011(모델·비용 제안) 함께 확정.
평가·면접관 배정 API + ADR-0012·0013 확정
진수택 PR#50 PR#57 PR#69 상세 ▾
평가 작성·목록·평균 API(E1·E2), 면접관 배정 API(E3). 결정 문서 ADR-0012(서류심사 AI 분류 기준)·ADR-0013(면접관 배정 정책 v1) 확정.
면접 링크를 지원자에게 메일로 · 회사명 DB 값 통일 · 로그인 소개 영상 안내 팝업 · PC 카메라 박스 fix
이우정 PR#354 외 09-18 상세 ▾
면접 링크를 인적성 설문과 같은 방식으로 지원자에게 메일 발송. 면접 링크 메일·설문 메일·보낸 사람 이름의 회사명을 DB 값으로 통일(#323 후속). 로그인 화면에 「시작 전 소개 영상 시청」 안내 팝업 · PC 에서 AI 면접 카메라가 얼굴만 확대돼 보이던 것 수정(도메인 밖 편집 · 공지).
면접 중 실시간 분석을 수치로 요약 → 종합 평가 표시 · n8n 죽어도 5분마다 SMTP 재발송 · 폴백 질문으로 422 제거
이우정 09-17 백엔드 상세 ▾
면접 중 실시간 분석 신호를 세어 AI 가 수치로 요약해 종합 평가에 표시(수치에 없는 숫자·사람을 단정하는 단어가 나오면 문장을 버리고 고정 틀로). n8n 이 받고 죽어 queued 로 남은 메일을 API 가 5분마다 SMTP 로 재발송(최대 3회). 면접 링크를 만들자마자 시작해도 422 가 나지 않게 기본 질문 3개를 세션과 같은 커밋에 넣는다.
운영 DB 권한 분리 준비 · 모델↔이행 비교 스크립트 + CI · 판정 난 지원자 재심사 덮어쓰기 방지
이우정 #7 · 잔여 R2 상세 ▾
09-22 DB 권한 분리 전 안전장치
매 배포 권한 스크립트 · 이행 관리자 연결 · 적용 절차서(#7). 모델↔이행 결과 비교 스크립트로 CI 가 이행 누락을 못 잡던 틈을 막고 CI 스텝으로 올림 · 인덱스 이름까지 비교. 판정 난 지원자에게 자동 심사를 다시 불러도 통과/불합격 표시를 덮지 않는다.
문서 정비 — 깨진 링크 35개 · 옛 코드 경로 11곳 · ERD v2.8 · STT_BACKEND 빈 값 해석 4곳
이우정 docs 09-17~18 상세 ▾
09-12 폴더 재편으로 옮겨진 파일을 따라가 깨진 링크 35개 수정 · 기준 문서에 남은 옛 코드 경로 11곳 · #309 뒤 틀린 AI 면접 문구. ERD·API 문서에 빠져 있던 것 채워 ERD v2.8. STT_BACKEND 빈 값을 두 컨테이너가 다르게 읽는다는 것을 4곳에 적음 + ai/ ruff F 5건.
테스트·AI 안정화 — 판정 중계 60초 멈춤 · 얼굴 출처 단일화 · 끝난 면접 첫 시각 -inf
이우정 09-17 fix 상세 ▾
판정 중계 시험이 가끔 60초 멈추던 것 — 연결들이 루프 하나를 쓰게. 얼굴 출처는 한 면접에 하나(웹 지원자가 보내면 담당자 방 얼굴은 버린다). 막 켜진 기계에서 테스트가 가끔 깨지던 첫 시각 -inf 처리.
면접 답변 카메라 녹화 + 진위 분석 호출
이우정 PR#56 상세 ▾
ADR-0029 후속 — 프론트 녹화와 분석 서비스를 연결
면접 답변 시 카메라 녹화를 받아 진위 판별 서비스로 넘기는 경로를 붙였다.
SES MessageId 를 email_logs 행에 남긴다
이우정 PR#58 상세 ▾
보냈다는데 안 왔다를 확인할 자리
메일 전송 결과(공급자 발급 식별자)를 로그 행에 저장 — 이후 반송 조사 시 근거로.
면접 답변 음성 → 전사(STT) — audio_duration_sec 채움
이우정 PR#40 PR#44 상세 ▾
면접 설계 §5-4 · 발화 속도 진행 보조까지
지원자 음성 답변을 텍스트로 옮기는 경로(STT)와, 말이 유난히 느리면 질문을 바꿔 보자고 하는 진행 보조 규칙까지.
지원 현황 조회 — 이메일 링크로 지원자 포털
이우정 PR#52 상세 ▾
신-1 지원자 포털
로그인 없이 이메일로 받은 링크(토큰)로 자기 지원 현황을 확인하는 경로. 담당자 화면과 분리된 지원자 전용.
면접 진행 보조 — 짧은 답이면 되묻기, 두 번 짧으면 쉬어가기 권유
이우정 PR#33 상세 ▾
답변 길이가 유난히 짧으면 되묻고, 두 번 연속이면 잠시 쉬는 것을 권한다.
앵커 게시 자동화 안정화 — 토큰 재발급·실패 시 이슈·체인 사전 검증
이우정 PR#21 PR#25 PR#31 상세 ▾
이틀 동안 아무도 모르던 실패를 눈에 보이게
앵커 크론이 12시간 만료 토큰으로 죽던 문제 해결(매 실행마다 새로 로그인), 실패 시 GitHub 이슈로 알림. 이름표(CHAIN_NETWORK)와 실제 RPC 체인 식별자가 어긋나면 전송 전에 멈춰 잘못된 체인 오염 차단.
배포 이미지가 스스로 스키마 이행 — 호스트 마운트 불필요
이우정 PR#20 상세 ▾
DB 스키마 이행(alembic)을 컨테이너 이미지 자체가 실행하게 해서, 서버 호스트에 코드 마운트가 필요 없게.
로컬 pytest 함정 2개 수정 — .env 미로드·시드 이름 충돌
이우정 PR#24 상세 ▾
새 개발자가 clone 후 바로 실행 가능
로컬 pytest 가 .env 의 DATABASE_URL 을 못 읽어 옛 DB 로 붙던 것과, 시드 이름이 겹쳐 실패하던 것을 코드에서 봉인.
폴리곤 서명을 Actions 로 · OpenTimestamps 병행 (ADR-0028)
이우정 PR#15 PR#13 상세 ▾
서버에 개인키 없음
앵커 게시 개인키를 서버에서 빼서 GitHub Actions 로 이관, 시간 증명(OpenTimestamps) 병행. 결정 문서 개정에 관리 권한 2인·팀장 리뷰 게이트 삭제 반영.
JWT 인증 · 역할 3종 (A1~A3)
이우정 A ~2026-09-04
단계 전환 로직 (후퇴 불가 정책)
이우정 D3
지원자 검색·필터 — 더미 10만 건 튜닝
이우정 H
지원서 제출 API (공개 폼)
이우정 C1·C3·C6
S3 presigned 업로드·다운로드 + 파일 검증
이우정 F1~F3
메일 큐 — SES 발송 + SQS 워커·재시도
이우정 G1~G3
접수 확인 메일
이우정 C4
담당자 메모 API
이우정 D7
정렬 + 커서 페이지네이션
이우정 H4·H5
마감일 자동 마감 + 공개 링크
이우정 B4·B6
불합격 사유 + 일괄 단계 변경
이우정 D8·D9
구조화 로깅 + 에러 코드 표준화
이우정 J5·J6
재배포 반영 확인 — 코어 API + GET 13개 무인증 대조 재실행
이우정 W2
이후 main 머지 → 2분 자동 CD 로 상시 반영 · 최종 정리 시점에 done 처리
수직 슬라이스 관통 확인 (게이트 조건)
이우정 W2
공개 지원 폼(08-31)까지 붙어 09/04 초기 버전 게이트에서 관통 확인 · 최종 정리 시점에 done 처리
무인증 대조 스크립트화 → J8 전달
이우정 J8
PR#122 무인증 GET 대조 스크립트로 완결 · 지금까지 나온 결함이 전부 이 대조에서 나왔다
AI 면접 백엔드 3단계 — 테이블·세션 링크·질문 설정·답변 제출·종료 (ADR-0026)
이우정 설계 §5 상세 ▾
결정 문서 ADR-0026(AI 면접은 한다 — 음성으로 긴장도·거짓말은 판별하지 않는다) 확정과 함께 백엔드 3단계 착수. 면접 관련 테이블 3종 + 스키마 이행 · 세션 생성과 지원자 공개 링크 · 질문 설정·답변 제출·종료.
main 상태 자동 표시 CI — pytest + 프론트 빌드
이우정 09-02 ci 상세 ▾
손으로 물어보지 않아도 됨
main 이 깨졌는지 자동으로 보이도록 CI(자동 실행 워크플로) 구성 — 백엔드 pytest + 프론트 빌드. 첫 실행 실측 51초.
alembic 도입 · dev 의존 · 08/31 셋업 안내 정정
이우정 09-01 09-02 상세 ▾
스키마 변경을 손 SQL 에서 자동화로
alembic(스키마 이행 도구)을 도입해 손 SQL 시대 종료. 의존을 개발 그룹으로 선언(이전엔 버전이 어디에도 안 박혀 있었다), 08/31 셋업 안내 문서의 순서·전환 절차 정정.
AI 요약 잘림·아르 요약 앰버 블록 정리·큐 20 D8·D9 완료 확인
이우정 09-01 09-02 상세 ▾
AI 요약이 매번 잘려 "제출물 부족" 으로 저장되던 것 수정, 프론트 요약 표시를 아르의 정보 블록으로. 큐 20(D8·D9)에 빠져 있던 완료 표시를 코드 대조 결과로 정리.
공개 지원 폼(C1) + files[] 연결(C2·F1) + 면접관 가용 시간 화면
이우정 PR#150 부속 상세 ▾
로그인 없이 지원자가 접속하는 공개 지원 폼과, 접수 시 업로드 파일을 지원 행에 files[] 로 연결. 면접관이 자기 가용 시간을 등록하는 설정 화면(ADR-0016).
무인증 GET 대조 스크립트 + APP_ENV 잠금
이우정 PR#122 J8 상세 ▾
지금까지 결함이 전부 이 대조에서 나왔다
02-api.md 계약과 실제 배포본을 무인증 GET 으로 대조하는 스크립트 신설. APP_ENV 오타·미설정을 production 으로 잠가 개발용 설정이 운영에 새는 것을 물리적으로 차단.
마감일 자동 마감 + 공개 지원 링크 + 불합격 사유 + 일괄 단계 변경
이우정 PR#108 PR#109 상세 ▾
마감일 지나면 공고 자동 마감(B4·B6), 지원자 일괄 단계 변경과 불합격 시 사유 필수 저장(D8·D9).
Dockerfile 안정화 · 기동 로그에 APP_ENV 표시
이우정 PR#122 PR#123 PR#124 PR#125 상세 ▾
Dockerfile 에 scripts/ COPY 추가, .dockerignore 중첩 경로 처리, 기동 로그에 APP_ENV 모드 표시.
📖 사용 규칙 보기 (카드 편집 방법 · 충돌 방지)

카드는 _data/kanban/<자기 GitHub 아이디>.yml에서만 편집한다 — 한 사람이 파일 하나를 소유하므로 4명이 동시에 작업해도 git 충돌이 나지 않는다.

  1. 자기 파일만 수정한다. 본인 소유 파일 외에는 손대지 않는다. 남의 카드에 할 말이 있으면 팀 채널로.
  2. 카드 형식은 파일 안 기존 항목을 복사해서 쓴다. status는 todo | doing | done 세 값만. ```yaml
    • title: “카드 제목” feature: “D3” # 기능 번호 또는 주차 (선택) status: todo # todo | doing | done done: 2026-09-02 # 완료일 — done으로 바꿀 때 함께 기입 (개발 로그 자동 집계용) due: 2026-09-04 # 마감 (선택) note: “” # 한 줄 메모 (선택 — 제목·메모·상세에 ¦ 문자는 금지) detail: | # 상세 요약 (선택) — 개발 로그에서 클릭해 들어가는 상세 페이지에 표시 무엇을 어떻게 바꿨는지 2~4줄 ```
  3. push 전 git pull --rebase. 서로 다른 파일이라 rebase가 항상 깨끗하게 통과한다. 충돌이 났다면 파일 소유자 버전 우선, push --force 금지.
  4. 포스트(_posts/)도 같은 원칙: 파일명을 YYYY-MM-DD-<아이디>-<주제>.markdown으로 만들어 한 파일을 한 사람만 만지게 한다.
  5. done으로 바꿀 때 done: 날짜를 함께 기입한다 — 개발 로그 완료 타임라인이 이 날짜로 자동 집계된다. 카드 정리(삭제)는 주간 다이제스트(금요일) 이후 각자 판단 — 단, 삭제하면 개발 로그에서도 사라지므로 기록을 남기려면 유지를 권장.
  6. 팀 채널에 공유된 Arda-칸반-클로드-지시서.md를 Claude에게 읽히면 위 전부를 말로 대신 시킬 수 있다.