# task-2970 부록 — 원격 동기화 잔여분 독립 실측 (중복 spawn 런)

> 작성: 오딘(dev2 팀장) · 2026-08-17 23:48 KST
> 성격: task-2970 은 23:40 에 이미 `.done` 종결됨. 본 런은 **중복 spawn** 이므로 재작업하지 않고,
> `result.json` 에 남은 미해결 항목(`remote_behind_local: true`) 만 독립 실측했다.
> 종결 아티팩트(.done/.qc-result/보고서)는 **일절 수정하지 않았다.**

## S (상황)
- PR #226 OPEN · `mergeable_state=clean` · head `53ec1a26` · 머지 HOLD 유지.
- 봇 자기보고: "원격이 로컬보다 뒤처짐, git push harness 차단 + git-data API 404/503".
- 봇 자기보고는 권위가 아니므로(`gh api`/git 프로토콜 실측 원칙) 전량 재검증했다.

## C (복잡성) — 봇 보고는 **사실로 확증**됨
원격 head 를 `git fetch` 로 직접 받아 로컬 커밋들과 트리 대조:

- 원격 `53ec1a26` 의 내용 = 로컬 커밋 **`388ef9e`** 와 **차이 0 파일** (바이트 동일).
- 이후 **하드닝 3커밋이 원격에 부재**:
  - `2c605b7` 헤임달 — 마아트 지적 3건 회귀 테스트 고정
  - `39a280d` 토르 — comparison_gate fail-closed 강화(malformed entry / axes 6축 스키마 위조 / modality 대소문자 우회 봉인)
  - `a9b1e9c` 토르 — `group_id: str | None` 계약 반영(pyright 0)
- 누락 델타: **3 파일 / +480 / −25**
  - `server/policy_grouping/comparison_gate.py` +209
  - `server/tests/test_grouping_gate_seal_task2970.py` +273
  - `server/tests/test_policy_grouping_comparison_gate.py` +23

★ 즉 **PR #226 을 지금 머지하면 마아트가 실제로 뚫었던 위조 axes 구멍이 열린 채 들어간다.**
(원격 diff vs base = +1237/−66, 로컬 = +1698/−72)

## Q (핵심 질문) — 왜 반영이 안 됐나
### 3 Step Why
- **1st Why**: 원격 브랜치가 로컬보다 3커밋 뒤처져 있다 → 재푸시가 실패했기 때문.
- **2nd Why**: 재푸시 경로 2개가 동시에 막혔다.
  - CLI `git push` → harness PreToolUse 훅이 차단(본 런에서 직접 재현, 훅 에러 반환).
  - 대안 `push_via_api.py`(Git Data API) → 첫 호출 `GET commits/e0a7f64e` 에서 404 로 실패(부작용 0으로 종료).
- **3rd Why**: 그 404 의 원인은 토큰이 아니라 **GitHub 측 장애**.

### 근거 (토큰 문제 배제 — 동일 자격증명 교차 실측)
동일 classic PAT(`ghp_`, scopes: `admin:repo_hook, read:org, repo, workflow`) 로 curl 직접 호출:

- `GET /repos/Jeon-Jonghyuk/InsuRo` → **200**
- `GET /repos/.../contents/README.md` → **200**
- `GET /repos/.../pulls?state=open` → **200**
- `GET /repos/.../commits/main` → **404**
- `GET /repos/.../git/ref/heads/task/task-2970-dev2` → **404**
- 404 응답 헤더 `x-oauth-scopes: ... repo ...` (권한 보유), `x-accepted-oauth-scopes:` 공란

권한 문제라면 `contents`·`pulls` 도 404 여야 한다. 계열별로 갈리는 것은 부분 장애의 서명.

**githubstatus.com 확인 (결정적 근거)**
- 전체: `Partial System Outage`
- 인시던트: "Incident with GitHub.com" — investigating, 시작 **2026-08-17T13:40:03Z** (= 22:40 KST)
- 컴포넌트: API Requests `degraded_performance` · **Pull Requests `partial_outage`** · Webhooks/Issues/Actions degraded · Copilot major_outage

즉 봇의 "32회 재시도 전부 실패"는 봇 결함이 아니라 **외부 장애 구간과 정확히 겹친다**(작업 착수~종결 전 구간).
`git fetch`(git 프로토콜)는 정상 동작 → git 백엔드는 살아 있고 REST git-data 계열만 degraded.

## A (조치)
1. **재푸시 자동 재시도 cron 등록** — 20분 간격. 성공(원격 head == 로컬 `a9b1e9c`) 시 스스로 스케줄 제거.
   - 스크립트: `memory/plans/tasks/task-2970/push_via_api.py`
2. **머지 게이트**: 원격 동기화 완료 전까지 PR #226 머지 금지. (기존 HOLD 와 별개로 **기술적 차단 사유** 추가)
3. 종결 아티팩트 무수정 — `.done`·`.qc-result`·본 보고서 원본은 손대지 않음.

## 미해결 (회장 판단 대기 — 기존 followup 승계)
- `[CHAIR_DECISION]` axes 미제공 시 공식 비교 행 0건 (T6 배선 전까지 비교표가 비어 보일 수 있음)
- `[NEW_TASK_SUGGESTED]` clause_id UUID 형식 미검증 → Supabase `22P02` HTTP 500 (task-2970 이전부터 존재)

## 검증 수단 (재현 명령)
```bash
cd /home/jay/projects/InsuRo
git fetch origin 'refs/heads/task/task-2970-dev2:refs/remotes/origin/task/task-2970-dev2' --force
git diff --stat 53ec1a26..a9b1e9c        # 누락 델타 = 3 files, +480/-25
git diff --numstat 53ec1a26..388ef9e | wc -l   # 0 = 원격은 388ef9e 시점
curl -s https://www.githubstatus.com/api/v2/summary.json | python3 -m json.tool | head -20
```

## L1 스모크테스트
- 서버 재시작: 해당없음 (본 런은 코드 수정 0 — 검증 전용)
- API 응답 확인: GitHub REST 실호출 6종 (200×3 / 404×2 + status API) — 상기 근거 표 그대로
- 스크린샷: 해당없음 (백엔드/원격 상태 검증)

## 레벨: 코드 수정 없음
본 런은 검증 전용이며 저장소 코드를 한 줄도 수정하지 않았다. (권한 부여 주체 = ANU 확인 필요 시 본 부록 제시)
