회기 무발화 0턴 분리, 자기예측 락 불변식 및 TDD 회귀 검증 완료
Some checks failed
API contract / OpenAPI type drift (push) Failing after 3m27s

This commit is contained in:
Yun Chan 2026-09-08 23:28:06 +09:00
parent a479db7a5a
commit a0311c5957
100 changed files with 4884 additions and 11210 deletions

View file

@ -0,0 +1,77 @@
# 에이전트 작업 패킷·판정 기록 양식
> [`AGENTS.md`](../../AGENTS.md) **B절(오케스트레이션 바이블)** B.5·B.6의 실행 양식이다.
> 오케스트레이터(Codex Astra/Sol, Claude Code Fable 5.1/Opus 5)는 워커를 스폰할 때 §1 패킷을 채워 넘기고,
> 워커가 끝나면 §2 판정을 기록한다. **패킷 없이 스폰하지 않고, 판정 없이 수용하지 않는다.**
## 1. 작업 패킷 (오케스트레이터 → 워커)
```text
[작업 패킷] <제목>
워커: researcher | explorer | implementer(worker) | verifier (모델은 항상 하위 티어)
1. 목표:
비목표:
2. 확정 설계·계약·불변량 (바꾸면 안 되는 것):
3. 건드릴 파일·모듈 경계:
건드리면 안 되는 영역:
4. 완료 기준(DoD):
검증 명령 (AGENTS.md B.10 표준 세트에서 선택):
5. 보고 형식: 변경 파일 / diff 요약 / 실행 명령과 결과 원문(통과·실패 수) / 미해결·의문점 / 설계 변경 요청 여부
6. 제약:
- 다른 에이전트 스폰 금지 · 설계 변경 금지(필요하면 멈추고 보고)
- fallback · silent catch · mock · 테스트 스킵 · 조건 완화로 통과 위장 금지
- 임시 주석 · 디버그 출력 · TODO 금지
- 커밋/push: 금지 | 허용 범위: <...>
- 병렬 워커 경계: <다른 워커가 맡은 영역>. 그 변경을 되돌리지 말 것
7. 저장소 공통: AGENTS.md §0(OS·PowerShell 5.1) · §2(검증 기준) · §3(한글·커밋 문구) 준수
```
조사(researcher) 패킷은 2·3 대신 **조사 질문 목록, 출처 우선순위, 확인 날짜 표기 요구, "미확인" 표기 규칙**을 넣는다.
검증(verifier) 패킷은 **실행할 명령 그대로, 작업 디렉터리, 기대 산출물(로그 경로)**만 넣고 판정을 요구하지 않는다.
## 2. 판정 기록 (오케스트레이터)
```text
[판정] <패킷 제목> — 수용 | 반려 후 재작업 | 폐기 후 재배정/직접 수행
(a) 패킷·확정 설계 준수 / 범위 이탈:
(b) 정확성·회귀 위험 (diff를 직접 읽었는가):
(c) 검증 증거 진위 (명령·결과 원문 확인, 스킵·우회·fallback·삼킨 오류 여부, verifier 재실행 여부):
(d) 노이즈 (임시 주석·디버그·TODO·무관 변경):
(e) 워커 의문점·설계 변경 요청에 대한 답:
반려 시 수정 지시 (패킷에 추가):
SSOT 반영: dev_dashboard.html / TODO.md / 핸드오프 중 갱신한 곳과 check-dev-dashboard-ssot 결과:
```
## 3. 병렬 스폰 체크리스트
- 조사는 주제·출처·기간별로 나눠 researcher 여러 개를 **한 번에** 스폰한다. 순서대로 하나씩 돌리지 않는다.
- 구현은 파일·모듈 경계가 겹치지 않게 나눈다(기본: `apps/api``apps/web``docs`/`scripts`). 겹치면 순차로.
- 구현 워커의 검증 보고가 의심되면 verifier에게 같은 명령을 다시 실행시켜 원문을 받는다.
- 오케스트레이터 모델(Astra/Sol/Fable/Opus)을 워커로 쓰지 않는다. Claude Code `fork`는 부모 모델을 상속하므로 대량 작업에 쓰지 않는다.
- 같은 워커가 같은 이유로 2회 실패하면 워커가 아니라 패킷(설계·지시·완료 기준)을 먼저 의심한다.
## 4. 짧은 예시
```text
[작업 패킷] 회기 종료 API 409 응답에 active_session_id 필드 추가
워커: implementer
1. 목표: POST /sessions 409 `active_session_exists` 응답 본문에 `active_session_id`(UUID) 포함.
비목표: 409 조건 자체·row lock 순서·프론트 UI 변경.
2. 불변량: 응답 코드·에러 코드 문자열 유지. 기존 필드 삭제·이름 변경 금지. migration 없음.
3. 경계: apps/api/app/routers/sessions.py, apps/api/app/test_sessions*.py 만. apps/web 금지.
4. DoD: 신규 테스트 1건 이상 추가, `cd apps/api && python -m pytest app/ -q` 전체 통과.
5. 보고: 변경 파일 / diff 요약 / pytest 결과 원문(passed·failed 수) / 의문점.
6. 제약: 스폰 금지 · 설계 변경 금지 · 스킵/완화 금지 · 커밋 금지 · 병렬 워커 없음.
7. AGENTS.md §0·§2·§3 준수.
```
```text
[판정] 회기 종료 API 409 응답 필드 추가 — 수용
(a) 경계 내 2파일만 변경, 범위 이탈 없음.
(b) diff 확인: 응답 dict에 필드 1개 추가, 기존 경로 영향 없음.
(c) pytest 원문 1075 passed / 1 skipped 확인, 스킵은 기존 1건과 동일.
(d) 노이즈 없음.
(e) 의문점 없음.
SSOT 반영: TODO REQ-007 행에 필드 추가 사실 1줄, check-dev-dashboard-ssot 통과.
```