# task-585.1: GLM 세션 ID 충돌 개선

## 배경
3팀(라) 워크플로우에서 GLM(openclaw)을 호출할 때, `--session-id`에 이전 태스크의 session-id가 재사용되는 버그가 반복 발생.
- task-582.1 → session-id `task-550.1` 사용됨 (잘못)
- task-550.1 → session-id `task-546.1` 사용됨 (잘못)

### 원인
Ra(라 팀장)가 `GLM-WORKFLOW.md`의 `{task_id}` 플레이스홀더를 치환할 때, AI가 이전 세션의 값을 재사용. AI의 변수 치환에 의존하는 구조적 문제.

## 해결 방향
AI 변수 치환 의존을 제거하고 **셸 스크립트로 대체**.

## 구현 사항

### 1. 셸 스크립트 생성: `teams/dev3/run-glm.sh`
```bash
#!/usr/bin/env bash
# GLM(openclaw) 실행 래퍼 — session-id를 인자로 받아 확실히 전달
set -euo pipefail

TASK_ID="${1:?Usage: run-glm.sh <task_id>}"
TASK_FILE="${2:?Usage: run-glm.sh <task_id> <task_file_path>}"
CHAT_ID="${3:-6937032012}"
ANU_KEY="${4:-c119085addb0f8b7}"
WORKSPACE_ROOT="/home/jay/workspace"
LOG_DIR="${WORKSPACE_ROOT}/teams/dev3/logs"
DONE_FILE="${WORKSPACE_ROOT}/teams/dev3/${TASK_ID}.done"

mkdir -p "$LOG_DIR"
LOG_FILE="${LOG_DIR}/${TASK_ID}.log"

echo "[$(date '+%Y-%m-%d %H:%M:%S')] [${TASK_ID}] openclaw 호출 시작" >> "$LOG_FILE"

openclaw agent --agent main --session-id "${TASK_ID}" \
  -m "작업 파일 ${TASK_FILE}을 읽고 지시대로 코딩하세요.

⚠️ 필수 확인사항:
1. 작업 완료 후 반드시 테스트 작성 (pytest)
2. black 및 isort 포맷 적용 (black . && isort .)
3. task-file의 모든 요구사항 구현 확인
4. 기존 테스트 깨뜨리지 않을 것

AGENTS.md, SOUL.md, MEMORY.md 등 시스템 파일은 절대 읽지 마세요. spawn 금지.
task-file에 명시된 파일만 읽으세요 (최대 5개).
파일 경로가 없으면 mkdir -p로 디렉토리를 먼저 생성하세요.
모든 작업 완료 후 반드시: echo done > ${DONE_FILE}" \
  --json --deliver --reply-channel telegram --reply-to "${CHAT_ID}" \
  2>&1 | tee -a "$LOG_FILE"

EXIT_CODE=$?
echo "[$(date '+%Y-%m-%d %H:%M:%S')] [${TASK_ID}] openclaw 호출 완료 (exit: ${EXIT_CODE})" >> "$LOG_FILE"
exit $EXIT_CODE
```

### 2. `teams/dev3/GLM-WORKFLOW.md` 수정
기존 openclaw 명령어 직접 호출 부분을 `run-glm.sh` 호출로 교체:
- 기존: `openclaw agent --agent main --session-id {task_id} -m "..." ...` (Ra가 플레이스홀더 치환)
- 변경: `bash /home/jay/workspace/teams/dev3/run-glm.sh {task_id} {task_file_path}` (치환할 값이 2개로 축소, 실수 확률 감소)
- **핵심**: session-id 치환이 셸 스크립트 인자로 이동하므로 AI가 잘못 치환해도 session-id는 올바르게 전달됨

### 3. `prompts/team_prompts.py` `_build_glm_prompt()` 내 워크플로우 지시 조정 (선택)
- 라 팀장에게 "run-glm.sh를 사용하라"는 지시를 더 명확히 추가
- task_file_path 변수를 placeholder_lines에 추가 (현재는 task_id만 있음)

## 주의사항
- `run-glm.sh`는 반드시 `chmod +x` 설정
- 기존 GLM-WORKFLOW.md의 나머지 로직(done 대기, 재시도 등)은 변경하지 말 것
- CHAT_ID, ANU_KEY 기본값을 하드코딩하되, 인자로 오버라이드 가능하게
- 테스트: 스크립트가 인자 없이 호출되면 에러 메시지 출력하는지 확인

## 검증 방법
- `bash run-glm.sh` (인자 없음) → 에러 메시지 출력 확인
- `bash run-glm.sh test-123 /tmp/test.md` → session-id가 `test-123`으로 정확히 전달되는지 로그 확인 (실제 openclaw 호출 없이 dry-run이면 더 좋음)
