# task-133.1 보고서: OpenClaw GLM 코딩 품질 강제 시스템 구축

**팀**: dev2-team (오딘 팀장)
**일시**: 2026-03-02
**상태**: 완료

## 작업 내용
3팀(GLM-5)의 반복 코딩 오류(경로 오류, 파일 누락, XSS, 타입 오류, 'use client' 패턴 위반)를 방지하기 위한 강제 메커니즘 구축.

## 생성/수정 파일 목록

### 신규 생성
- `/home/jay/.openclaw/workspace/memory/CODING-STANDARDS.md` — 코딩 표준 문서 (131줄, 200줄 제한 준수)
- `/home/jay/.openclaw/workspace/memory/glm-checklist.py` — Pre-Completion 체크리스트 스크립트 (6개 체크 항목)

### 수정
- `/home/jay/workspace/prompts/team_prompts.py` — `_build_glm_prompt()` 내 glm_message 수정 (CODING-STANDARDS 읽기 지시, 체크리스트 실행 강제, all_passed 조건 삽입)
- `/home/jay/.openclaw/workspace/AGENTS.md` — "Every Session" 섹션에 5번 항목 추가

### 변경 사유
- CODING-STANDARDS.md: GLM에 코딩 규칙 강제 전달 (경로, TS/Next.js, 보안, 완성도, 에러처리, 테스트)
- glm-checklist.py: 규칙 위반 자동 탐지 (코드 완성 전 필수 실행)
- team_prompts.py: GLM 프롬프트에 체크리스트 실행을 강제로 포함
- AGENTS.md: 매 세션 시작 시 코딩 표준 읽기를 필수화

## 테스트 결과

| 테스트 | 항목 | 결과 |
|--------|------|------|
| T1 | CODING-STANDARDS.md 줄 수 (131 ≤ 200) | PASS |
| T2-1 | glm-checklist PASS 케이스 | PASS (오탐 버그 수정 후) |
| T2-2 | 보안 FAIL (dangerouslySetInnerHTML) | PASS |
| T2-3 | 경로 FAIL (/tmp 경로) | PASS |
| T2-4 | 파일 미존재 FAIL | PASS |
| T2-5 | 인수 없이 실행 (argparse) | PASS |
| T3 | team_prompts.py 어설션 | PASS |
| T4 | AGENTS.md 5번 항목 | PASS |

## 버그 발견 및 수정

**[BUG-001] 보안 스캔 오탐 (수정 완료)**
- 증상: `.md` 파일 내 `eval()` 설명 텍스트를 실제 코드로 오탐
- 원인: 보안 스캔이 파일 확장자 구분 없이 모든 파일 대상
- 수정: `check_security_scan()`에 `scannable_exts` 필터 추가, 코드 파일(.ts/.tsx/.js/.jsx/.py/.html/.vue/.svelte)만 스캔
- 검증: 수정 후 오탐 해소 + XSS 탐지 정상 작동 확인

## 팀장 검토 결과

### 미미르(UX/UI) — CODING-STANDARDS.md
- 1차 결과: 270줄 (200줄 제한 초과)
- **수정 요청**: 200줄 이내로 축소 필요
- 팀장이 직접 131줄로 리라이트 → 재검토 통과

### 토르(백엔드) — glm-checklist.py
- 1차 검토: 6개 체크 항목 모두 구현, JSON 출력 형식 정확, 표준 라이브러리만 사용
- 오탐 버그 발견 (T2-1): 팀장이 `.md` 파일 제외 필터 추가 수정
- **수정 후 통과**

### 프레이야(프론트엔드) — team_prompts.py 수정
- 1차 결과: glm_message에 4개 항목 추가 확인
- 문제 발견: `--project` 경로를 `glm_code_path.split('/')[-2]`로 추출 → 한국어 설명문에서 올바른 경로 추출 불가
- **수정 요청**: `glm_checklist_project` 변수 도입으로 정확한 경로 전달
- 팀장이 직접 수정 → 재검토 통과

### AGENTS.md — 팀장 직접
- 1차 검토 통과, 수정 사항 없음

## 검토한 대안과 기각 사유
- **대안1**: code-validator.py에 체크 항목 통합 → 기각 (제약 조건: 기존 code-validator.py 수정 금지)
- **대안2**: CODING-STANDARDS를 JSON으로 작성 → 기각 (마크다운이 GLM 이해도 더 높고 가독성 우수)
- **대안3**: 체크리스트를 GLM 프롬프트 내에 인라인으로 삽입 → 기각 (토큰 낭비, 별도 스크립트가 재사용성 높음)

## 셀프 QC

1. **이 변경이 다른 파일에 영향을 미치는가?** — team_prompts.py 수정은 `_build_glm_prompt()` 내 glm_message만 변경. dev1/dev2 프롬프트(`_build_direct_prompt()`)에 영향 없음.
2. **엣지 케이스?** — 빈 파일 리스트, 바이너리 파일(`errors="replace"` 처리), tsc timeout(60초), 잘못된 인수(argparse 에러) 모두 처리됨.
3. **작업 지시와 정확히 일치하는가?** — 4개 파일 모두 지시대로 생성/수정. 제약 조건(200줄, 표준 라이브러리, glm_message만 수정, 1줄 추가) 모두 준수.
4. **에러 처리와 보안?** — subprocess timeout, 경로 트래버설 방지, 파일 읽기 에러 처리 완료.
5. **테스트가 모든 경로를 커버하는가?** — PASS/FAIL 양면 검증(8개 테스트), 프롬프트 함수 호출 검증, 오탐 버그 발견/수정/재검증 완료.
