# task-2493 — task-2481R-preflight: GitHub App bot-authored PR 권한 read-only audit

- 작업 유형: **read-only preflight audit / 권한 검증**
- 작업 레벨: **Lv.1** (read-only, 코드/PR 변경 0)

## 레벨

Lv.1 read-only preflight audit. **코드 수정 없음** — read-only API 검증 + 보고서/3문서 작성만. scope guard는 non-code task로 분류되어 SKIP됨.

- 위임팀: **dev3-team (다그다)** — task-2483 BOT 토큰 직전 경험
- 우선순위: **★ medium** — recovery bundle 발행 전 차단 사유 식별
- Track: **internal_doc**
- 일시: 2026-05-08
- 의도된 명명: **task-2481R-preflight** (현재 main task_id parser가 R suffix 미수용으로 임시 ID 사용. task-2491/2492 alias가 아닌 *preflight 사전 점검* 카테고리)
- 후행: task-2485 머지 후 task-2481R+1 / task-2481R+2 정식 발행 (회장 명령)

## ⚠️ 본 task의 본질 — 회장 명시

> task-2481 recovery bundle 발행 *전*에 GitHub App bot-authored PR 권한이 실제로 가능한지 read-only 또는 permission API로 검증한다. **부족 권한이 있으면 R+1 발행 전 차단 사유로 보고**. 코드 변경 / PR 생성 / 실제 머지 / admin override 절대 금지.

## 작업 범위 (회장 명시 7항)

### Step 1. BOT_GITHUB_TOKEN 유효성
- 현재 토큰 살아있는지 (task-2483 머지 후 이미 LIVE 검증됨, 재확인)
- expires_at 미만료 확인

### Step 2. viewer.login 검증
- `gh api graphql -f query='{viewer{login}}'` → `jeon-jonghyuk-taskctl-bot[bot]` 확인

### Step 3. GitHub App permissions 확인
- `gh api /installation/repositories` 응답에서 permissions 추출
- 필요 권한:
  - Contents: write
  - Pull requests: write
  - Metadata: read
  - Checks (필요 시 read 또는 write)
  - Actions (필요 시 read)
- 누락 권한 명시

### Step 4. gh auth status
- bot token으로 gh CLI 실행 시 인증 상태
- API rate limit 잔여

### Step 5. branch push 권한 read-only 검증
- `gh api repos/Jeon-Jonghyuk/dev_workspace/collaborators/<bot_login>/permission` 또는 동등
- 실제 push X — 권한 metadata만

### Step 6. PR creation API 가능성 read-only 검증
- POST `/repos/{owner}/{repo}/pulls` endpoint에 대한 OAuth scope 확인
- 실제 PR 생성 X — endpoint accessibility 또는 permission scope만

### Step 7. 부족 권한 보고 (있다면)
- R+1 발행 전 해소해야 할 권한 항목
- 해소 방법 (GitHub App settings 변경 / installation re-auth 등)

## allowed_resources (read-only)

```yaml
allowed_resources:
  read_only_paths:
    - "memory/events/task-2483*"
    - "memory/events/task-2481*"
    - "memory/orchestration-audit/bot-token-refresh.jsonl"
    - "scripts/refresh_bot_token.py"
    - ".env.keys"  # read만, 토큰값 노출 금지
  paths:
    - "memory/tasks/task-2493*"
    - "memory/reports/task-2493*"
    - "memory/plans/tasks/task-2493/**"
    - "memory/events/task-2493*"
  forbidden_paths:
    - "**/*.py (수정)"
    - "**/*.yml (수정)"
    - "**/*.yaml (수정)"
    - "**/*.sh (수정)"
    - ".secrets/**"
    - ".github/workflows/**"
    - "memory/events/task-2486*"
    - "memory/events/task-2485*"
    - "memory/events/task-2484*"
  forbidden_actions:
    - any_code_modification
    - any_pr_creation
    - real_bot_pr_attempt
    - real_merge_attempt
    - real_branch_push
    - admin_override
    - audit_jsonl_real_write  # 신규 발행 금지, read만
    - token_value_logging  # 토큰 원문 노출 금지 (sha256 prefix만)
```

## 합격 조건

1. ✅ 7개 항목 각각 read-only 검증 결과 보고
2. ✅ 부족 권한 0건 또는 명확히 명시
3. ✅ 코드 변경 0 (git status clean)
4. ✅ PR 생성 0
5. ✅ admin override 0
6. ✅ 토큰 원문 노출 0 (sha256 prefix만)
7. ✅ R+1 발행 가능 여부 final 판정 (GO / NO-GO)

## 금지

- ❌ 어떤 코드 변경도 금지
- ❌ 어떤 PR / branch push / merge 시도 금지
- ❌ admin override / audit jsonl 신규 발행 금지
- ❌ 토큰 원문 노출 / 로그 출력 금지

## 시스템 3문서 참조

- task-2481R audit 결과: `memory/reports/task-2481R.md`
- task-2483 BOT 토큰 evidence: `memory/events/task-2483.followup.txt`, `scripts/refresh_bot_token.py`
- DOGFOODING_PENDING 분류 룰: `memory/feedback/feedback_dogfooding_pending_classification_260507.md`
- GitHub App PEM 위치: `feedback_github_app_key_location_260507.md`
- 시스템 청사진: `/home/jay/.claude/projects/-home-jay--cokacdir-workspace-autoset/memory/system_bot_orchestration_blueprint_260506.md`

## 보고

- SCQA 4섹션
- Step 1~7 각 결과 (PASS / FAIL / N/A)
- R+1 발행 GO/NO-GO 최종 판정
- 헤르메스/아누 통합 요약 경유, 회장 직접 장문 보고 X