# task-1918_c 완료 보고서: 대시보드/API 관련 테스트 16건 실패 수정

## SCQA

**S**: 대시보드 프로젝트의 4개 테스트 파일에서 총 16건의 테스트가 실패하고 있었다. 실패 원인은 미구현 함수, 테스트 fixture 불일치, Playwright 로케이터 중복, 스크립트 status 키 누락 등 4가지 유형이었다.

**C**: 테스트 실패가 CI를 차단하고 신규 작업의 품질 검증을 방해하고 있었다. 원인별로 코드 구현 추가, 테스트 수정, 스크립트 버그 수정이 혼합으로 필요한 상황이었다.

**Q**: 16건의 테스트 실패를 모두 수정하여 해당 테스트 파일 전체 PASS + 대시보드 서버 정상 기동을 달성할 수 있는가?

**A**: 5건의 수정으로 16건 → 0건 실패를 달성했다. 최종 결과: 102 passed, 0 failed. 서버 기동 정상 확인(API /api/records 1876건 응답, 제목 추출 정상).

## 수정 내역

| 파일 | 변경 내용 | grep 검증 | 상태 |
|------|-----------|-----------|------|
| dashboard/server.py:50 | get_records_list re-export 추가 | grep "get_records_list" OK | verified |
| dashboard/helpers.py:147-160 | YAML frontmatter 건너뛰기 로직 추가 | grep "YAML frontmatter" OK | verified |
| tests/test_banner_versions.py:121-134 | routes_post/routes_get __file__ monkeypatch 추가 | grep "routes_post_mod" OK | verified |
| tests/test_absorption_health_check.py:913-915 | status 합산을 전체 숫자 키 대상으로 변경 | grep "k != .total." OK | verified |
| scripts/absorption-health-check.py:261 | STATUS_KEYS에 implementing/skipped 추가 | grep "implementing" OK | verified |
| tests/test_dashboard_todo_tabs.py:52,85 | Playwright 로케이터 exact match 적용 | grep "exact=True" OK | verified |

## 발견 이슈 및 해결

1. **get_records_list 미노출** (8건): `dashboard/helpers.py`에 이미 구현되어 있었으나 `server.py`에서 re-export하지 않아 테스트가 접근 불가. → `server.py`에 import 추가로 해결.

2. **YAML frontmatter 제목 추출 실패** (1건): `meetings/` 디렉토리의 `.md` 파일에 YAML frontmatter가 있으면 첫 줄이 `---`라서 H1을 찾지 못함. → frontmatter 건너뛰기 로직 추가.

3. **banner-versions cell_id 검증 실패** (4건): 테스트 fixture가 `server.__file__`만 tmp_path로 패치하고 `routes_post.__file__`은 패치하지 않아, `handle_post_banner_versions_select`가 실제 `banner-versions.json`을 읽음. → `routes_post`, `routes_get` 모듈의 `__file__`도 패치 추가.

4. **absorption status 합산 불일치** (1건): 스크립트에 `implementing`, `skipped` status가 추가되었으나 `STATUS_KEYS`에 미포함 + 테스트가 5개 고정 키만 합산. → 스크립트 버그 수정 + 테스트를 동적 합산으로 변경.

5. **Playwright strict mode violation** (2건): `button:has-text("전체")`가 "전체"와 "전체 (20)" 두 버튼에 매칭. → `get_by_role("button", name="전체", exact=True)`로 교체.

## 테스트 결과

- test_task_1044_1_archive_title_time.py: 14/14 PASSED
- test_banner_versions.py: 6/6 PASSED
- test_dashboard_todo_tabs.py: 9/9 PASSED (Playwright 포함)
- test_absorption_health_check.py: 73/73 PASSED
- **합계: 102/102 PASSED (0 failed)**

## L1 스모크테스트

- 서버 API `GET /api/status`: 200 OK
- `GET /api/records?type=all`: 1876건 응답, 제목/end_time 필드 정상
- YAML frontmatter 파일 제목 추출: "Agent 미팅: 교차검증 풀스택 워크플로우 설계 — 레벨별 적용 전략" (정상)

## 머지 판단

- **머지 필요**: Yes
- **브랜치**: task/task-1918_c-dev6
- **워크트리 경로**: /home/jay/workspace/.worktrees/task-1918_c-dev6
- **머지 의견**: 102건 전체 테스트 PASS, 서버 정상 기동 확인. 기존 코드 기능에 대한 회귀 없음.

## 모델 사용 기록

- 스바로그(백엔드): sonnet × 2회 (server.py re-export + helpers.py frontmatter)
- 라다(프론트엔드): sonnet × 1회 (banner-versions 테스트 fixture)
- 벨레스(테스터): sonnet × 1회 (absorption 테스트 + 스크립트 수정)
- 모코시(UX/UI): sonnet × 1회 (Playwright 로케이터)

## QC 셀프 체크

- [x] 1. 영향 파일: server.py, helpers.py, routes_post.py(간접), 3개 테스트 파일, absorption-health-check.py
- [x] 2. 엣지 케이스: YAML frontmatter 없는 파일 정상 동작 확인, 빈 summary 처리 확인
- [x] 3. 작업 지시와 정확히 일치: 16건 실패 모두 수정
- [x] 4. 에러 처리/보안: 변경 없음 (기존 로직 유지)
- [x] 5. 테스트 커버리지: 102/102 PASS
- [x] 6. 발견 이슈 모두 직접 해결
- [x] 7. SOLID/DRY 위반 없음
- [x] 8. 인터페이스 변경: server.py에 get_records_list 추가 (하위호환)
- [x] 13. L1 스모크테스트: 서버 API 정상 응답 확인

## 세션 통계
- 총 도구 호출: 0회

