# task-2777+2 — PR #257 Gemini MEDIUM micro-fix (epoch dt.timestamp OverflowError/OSError, ACTIVE=false)

상태명: `TASK2777_PR257_GEMINI_MICROFIX2_APPROVED_ACTIVE_FALSE`
담당: dev2-team (PR #257 / branch `task/task-2777-dev2`)
ANU 집행: 2026-06-28 (회장 "너가 진행" 위임) — **bounded +2 micro-fix 1회(초소형).**

## 배경
PR #257 +1 micro-fix(acb10894)로 이전 Gemini HIGH(systemctl/DBus) + MED 2(epoch tz, cron helper)는 **코드로
해소(outdated)**. fresh Gemini 재평가가 **새 MEDIUM 1건**을 지적: `_epoch_age_seconds`의 `dt.timestamp()`가 극단
날짜(예: `0001-01-01`)에서 `OverflowError`/`OSError`로 status command 전체 crash 가능. 조종석은 **어떤 입력에도
crash 0**이어야 하므로 닫는다.

## 범위 (엄수)
- **PR #257 같은 브랜치(`task/task-2777-dev2`) commit 추가. 새 PR 금지** — head 갱신.
- expected_files: `scripts/anu_control_status.py` · `tests/regression/test_anu_control_status_2777.py` ·
  보고서(`memory/reports/task-2777-r2.md` 또는 기존 r1/보고서에 r2 섹션). **코드/테스트 범위 확장 금지.**

## 수정 요구 (Gemini MEDIUM, anu_control_status.py:330 부근)
- `dt.timestamp()` 호출과 `dt.tzinfo` 검사를 **try-except 블록 내부**로 포함.
- **`OverflowError` 및 `OSError`도 함께 캐치** → 안전하게 `EPOCH_WARN_PARSE`(EPOCH_PARSE_UNAVAILABLE) 반환.
- crash 0 · traceback 0 · raw 값 유출 0. 기존 naive/UTC/future 처리 무회귀.

## 테스트 추가/보강 (필수)
- 극단 날짜(예: `0001-01-01T00:00:00`, 또는 platform time_t 범위 밖) 입력 → **crash 0 · EPOCH_PARSE 계열 warning**.
- 기존 epoch numeric/naive/ISO/future/parse-fail 테스트 무회귀.
- **read-only invariant 유지**: 파일 생성 0 · 수정 0 · evidence append 0 · flag write 0 · driver execution 0.
- 기존 2777 전체 PASS · 2776 regression PASS · 가능하면 2775/2760/2721 인접 회귀 PASS · py_compile PASS.

## 금지
OWNER resolve로 finding 닫기(코드 수정으로 해소) / merge / auto-merge / flag ON / driver 실행 / fixture 생성 /
real fire / LIVE_PROCESSED / systemd start·enable / cron 등록 / key rotation / raw key 추가 / production activation /
expected_files 외 수정.

## bounded fix doctrine
이번이 epoch axis 관련 마지막 bounded micro-fix. +2 이후 동일 axis(epoch/timestamp) finding이 또 나오면
미세패치 중단 → 구조 분리 보고(`..._EPOCH_STRUCTURE_REDESIGN_REQUIRED`).

## PR 게이트 (merge candidate 판정 — merge는 ANU/회장)
PR #257 head 갱신 · effective diff expected_files 안 · HIGH 0 · Critical 0 · blocking Medium 0 · Gemini unresolved 0 ·
CI 11/11 PASS · read-only invariant PASS · raw key/secret 0 · ACTIVE=false · flags OFF · real fire 0 · systemd 조작 0 ·
cron 신규 0 · archive 28 보존 · pending fixture quarantine 보존 · code dirty 0.

## 완료 처리 + ANU callback (필수)
- 완료 시 `memory/events/task-2777+2.done` + 보고서(r2).
- 봇 idle 전 **ANU callback 필수**. collector=ANU, owner_key=sealed loader 봉인, self-key 금지. callback prompt
  UTF-8 **≤3900 bytes**, envelope 만(task_id·PR#257·new head sha·result_path·report_path·one-line). **merge 금지.**
- PASS 나와도 머지 금지 — ANU 독립검증 → fresh Gemini → CI → MERGE_CANDIDATE 보고로만.

## 진행
dev2는 dt.timestamp() OverflowError/OSError 안전처리 + 테스트 보강 후 branch push로 **PR #257 갱신**(새 PR 금지),
보고서(r2) + .done + ANU callback. ANU가 이후 독립검증/Gemini/CI/merge candidate 재판정.

## allowed_resources
```yaml
allowed_resources:
  paths:
    - "scripts/anu_control_status.py"
    - "tests/regression/test_anu_control_status_2777.py"
    - "memory/reports/task-2777-r2.md"
    - "memory/events/task-2777+2.done"
  forbidden_paths:
    - ".github/**"
    - "scripts/finish-task.sh"
    - "dispatch/anu_pickup_driver.py"
    - "memory/state/**"
    - "memory/p0b_state/**"
    - "memory/events/p0b_inbox/**"
    - "memory/events/p0b_live_inbox/**"
  commands: ["pytest", "python3 -m py_compile", "git", "gh"]
  merge_policy: "manual"
  ttl_hours: 24
```
