# task-132.1: OpenClaw GLM 코딩 품질 강제 시스템 구축

## 배경
3팀(라+GLM-5)이 반복적으로 오류 코드를 생산하고 있음. task-130.1에서 확인된 문제:
- 경로 오류: `/home/j/projects/` (실제: `/home/jay/`)
- 파일 누락: 프론트에서 fetch하는 API 5개를 아예 미생성
- XSS 취약점: `dangerouslySetInnerHTML`에 escapeHtml 없음
- TypeScript 타입 오류: Next.js 16 params Promise 타입 미반영
- 구조 오류: page.tsx에 'use client' 붙여서 서버 컴포넌트 패턴 위반

현재 OpenClaw 워크스페이스에는 AGENTS.md, SOUL.md, QC 문서가 있지만 "지시"만 있고 "강제 메커니즘"이 없음.

## 작업 범위

### 1. 코딩 표준 문서 생성
**파일**: `/home/jay/.openclaw/workspace/memory/CODING-STANDARDS.md`

다음 섹션 필수 포함:
- **경로 규칙**: 절대경로 기준 `/home/jay/`, 프로젝트는 `/home/jay/projects/<name>/`
- **TypeScript/Next.js 규칙**: strict mode, `params`는 `Promise<{...}>` (Next.js 15+), page.tsx는 서버 컴포넌트, 'use client'는 client.tsx로 분리
- **보안 규칙**: `dangerouslySetInnerHTML` 사용 시 반드시 escapeHtml 적용, eval/exec 금지, 사용자 입력 sanitize 필수
- **완성도 규칙**: 프론트엔드에서 fetch하는 API는 반드시 함께 생성, 누락 금지. 컴포넌트에서 import하는 모듈도 반드시 존재해야 함
- **에러 처리 규칙**: try/catch 필수, 사용자에게 의미 있는 에러 메시지 반환
- **테스트 규칙**: 작업 완료 전 `npx tsc --noEmit` 빌드 체크 필수

### 2. Pre-Completion 체크리스트 스크립트 생성
**파일**: `/home/jay/.openclaw/workspace/memory/glm-checklist.py`

CLI 사용법:
```bash
python3 memory/glm-checklist.py --project <project_path> --files <file1> <file2> ...
```

체크 항목:
1. **경로 검증**: 모든 생성/수정 파일이 허용된 경로 내에 있는지 (`/home/jay/` 하위)
2. **파일 존재 검증**: 생성했다고 주장하는 파일이 실제 존재하는지
3. **TypeScript 빌드**: 프로젝트에 tsconfig.json이 있으면 `npx tsc --noEmit` 실행
4. **보안 패턴 스캔**: dangerouslySetInnerHTML(escapeHtml 없이), eval(), exec(), innerHTML 직접 할당 감지
5. **API 완성도**: 프론트 코드에서 fetch/axios 호출하는 경로와 실제 API 라우트 파일 매칭 (Next.js app router 기준)
6. **import 검증**: 생성된 파일의 import 경로가 실제 존재하는 파일을 가리키는지

출력 형식:
```json
{
  "all_passed": true/false,
  "checks": {
    "path_validation": {"passed": true, "details": []},
    "file_exists": {"passed": true, "details": []},
    "typescript_build": {"passed": true, "details": "..."},
    "security_scan": {"passed": false, "details": ["Level3Search.tsx:45 dangerouslySetInnerHTML without escapeHtml"]},
    "api_completeness": {"passed": false, "details": ["fetch('/api/admin/insurance/terms') -> route NOT FOUND"]},
    "import_validation": {"passed": true, "details": []}
  }
}
```

### 3. GLM 프롬프트 강화
**파일**: `/home/jay/workspace/prompts/team_prompts.py`의 `_build_glm_prompt()` 수정

추가할 내용:
- GLM에게 전달하는 메시지에 "먼저 memory/CODING-STANDARDS.md를 읽으세요" 삽입
- 작업 완료 전 반드시 `python3 memory/glm-checklist.py --project <path> --files <생성파일들>` 실행 지시
- **체크리스트 all_passed: true 없이 .done 파일 생성 금지** 문구 삽입
- 체크리스트 실행 결과를 보고서에 포함하도록 지시

### 4. AGENTS.md 업데이트
**파일**: `/home/jay/.openclaw/workspace/AGENTS.md`

"Every Session" 섹션에 추가:
```
5. Read: memory/CODING-STANDARDS.md — 코딩 표준 (모든 코드 작성 전 필수)
```

## 수정 파일 요약
- 신규: `/home/jay/.openclaw/workspace/memory/CODING-STANDARDS.md`
- 신규: `/home/jay/.openclaw/workspace/memory/glm-checklist.py`
- 수정: `/home/jay/workspace/prompts/team_prompts.py` (`_build_glm_prompt()` 부분만)
- 수정: `/home/jay/.openclaw/workspace/AGENTS.md` ("Every Session" 섹션만)

## 제약 조건
- glm-checklist.py는 외부 의존성 없이 Python 표준 라이브러리 + subprocess만 사용
- CODING-STANDARDS.md는 200줄 이내 (GLM 컨텍스트 절약)
- team_prompts.py 수정은 `_build_glm_prompt()` 함수 내부 glm_message 변수만 수정. 다른 함수 건드리지 말 것
- AGENTS.md 수정은 "Every Session" 섹션에 1줄 추가만. 다른 섹션 건드리지 말 것
- 기존 code-validator.py는 수정하지 말 것 (OpenClaw 소유)

## 테스트
- glm-checklist.py: 테스트용 파일 세트로 각 체크 항목 PASS/FAIL 검증
- team_prompts.py: 기존 테스트 깨지지 않는지 확인
