# task-2688 — PR_149_X1_R7_THREAD_1_2_3_BUNDLE (★ 회장 verbatim 2026-05-26 발사 승인)

- Level: Lv.3 (★ 3 thread 묶음 X1 자동수렴 + regression 4종 추가 / 코드 변경 있음 · merge 0)
- 담당: **dev2 오딘** (★ task/task-2662-dev2 branch 본인 작업자 · context 보존)
- 제외: dev4 비슈누 · dev5 마르둑 (★ self-key 사고) / dev1 헤르메스 · dev8 라 (★ task-2686 영역 분리)
- chair_authorization_id: **`CHAIR-AUTH-PR149-X1-R7-THREAD-1-2-3-20260526-JJONGS-IMPLEMENT-001`**
- 완료 상태: **`PR_149_X1_R7_THREAD_1_2_3_PUSHED_AND_RESOLVED`**

## 배경

PR #149 head `afb37bd3` Gemini 3 unresolved (★ 2026-05-25 19:02 UTC 작성 · ~12분 후에도 미해결).
- Thread 1 (medium · line 198): `_path_matches_any` cross-platform path separator
- Thread 2 (security-medium · line 198): `fnmatch *` 가 `/` 암묵 매칭
- Thread 3 (medium · line 289): `_build_hold_packet` `critical_7_flag` consistency

회장 verbatim 2026-05-26 결정 3: Thread 1+2+3 묶음 X1 R7 진행 승인 (★ Thread 2 X1 R7 포함 허용 · glob semantic 표준 적용 강제).

## 회장 verbatim glob semantic 표준 (★ 4 anchor)

1. `*` = **same-directory-only** (★ POSIX glob 표준)
2. `**` = **recursive**
3. **path separator 는 `*` 로 암묵 매칭하지 않는다** (★ Thread 2 fix 핵심)
4. cross-platform separator 는 정규화하되 recursive 여부는 `**` 로만 표현

## 회장 verbatim 필수 regression 4

1. `*` 가 path separator 를 넘지 않는 케이스 (★ `schemas/anu_v3_1_*.json` 가 `schemas/anu_v3_1_sub/test.json` 매칭 X)
2. `**` 가 recursive match 하는 케이스
3. Windows / POSIX separator 정규화 케이스
4. **기존 PASS 경로 회귀 0** (★ 모든 기존 regression 통과 유지)

## 회장 verbatim 금지 11

1. PR #149 merge 0
2. auto-merge 0
3. PR #151 코드 혼합 0
4. task-2686 코드 혼합 0
5. branch sync 0
6. rebase 0
7. merge-main 0
8. expected_files 밖 수정 0
9. dispatch.py 변경 0
10. live settings.json 변경 0
11. hooks live 변경 0 / Axis runtime 변경 0 / HARNESS_ENFORCED 전체 선언 0

## 회장 verbatim 허용

- PR #149 expected_files 내부 수정 (★ utils/anu_codex_micro_refinement_loop.py · tests/anu_codex_micro_refinement_loop/**)
- regression 추가 / 재실행
- commit + push (★ PR #149 head 갱신 · branch task/task-2662-dev2)
- thread resolve (★ Thread 1+2+3)

## allowed_resources

```yaml
allowed_resources:
  paths:
    - "utils/anu_codex_micro_refinement_loop.py"
    - "tests/anu_codex_micro_refinement_loop/**"
    - "schemas/anu_v3_1_*.json (★ glob semantic 참조만 · 수정은 task-2662 spec 정합 시만)"
    - "memory/events/task-2688.*"
    - "memory/reports/task-2688.md"
    - "memory/tasks/task-2688.md"
    - "INDEX.md"
  forbidden_paths:
    - "/home/jay/.claude/**"
    - "/usr/local/bin/cokacdir"
    - ".github/**"
    - "**/.env*"
    - "**/credentials*"
    - "settings.json"
    - "hooks/**"
    - "dispatch.py"
    - "Axis/**"
    - "dispatch/normal_fallback_callback_helper.py (★ PR #151 / task-2686 영역)"
    - "dispatch/prompt.py (★ task-2686 영역)"
    - "scripts/finish-task.sh (★ task-2686 영역)"
    - "schemas/anu_normal_callback_envelope_v1.json (★ task-2686 영역)"
    - "utils/callback_authority_4source_validator.py (★ PR #151 영역)"
    - "utils/anu_callback_registrar.py (★ PR #151 영역)"
    - "utils/callback_collector_helper_integration.py (★ PR #151 영역)"
    - "utils/pr_watcher_terminal_state_classifier.py (★ PR #150 영역)"
  commands:
    - "git log"
    - "git diff"
    - "git show"
    - "git add"
    - "git commit"
    - "git push"
    - "python3 -m pytest"
    - "python3 -c"
    - "python3 -m json.tool"
    - "gh pr view"
    - "gh api graphql"
    - "gh api"
    - "ls / cat / wc / grep / find / tail / head / printf / sha256sum"
    - "cokacdir --currenttime"
    - "cokacdir --cron-history"
  merge_policy: "x1_r7_push_only_no_merge_no_sync"
  ttl_hours: 12
```

## 완료 7 보고 필드

1. Thread 1+2+3 fix diff (★ git diff utils/anu_codex_micro_refinement_loop.py)
2. glob semantic 4 anchor 적용 evidence (★ `*` same-dir / `**` recursive / path separator no-cross / cross-platform 정규화)
3. regression 4종 추가 + 통과 count (★ pytest report)
4. 기존 regression 통과 유지 (★ count 명시)
5. commit + push SHA (★ new head)
6. thread resolve confirmation (★ Thread 1+2+3 isResolved=true via gh api)
7. forbidden_action_count 0 + per-head new head SHA (★ watcher 재부착용 input)

## expected_files (~5)

- `utils/anu_codex_micro_refinement_loop.py` (★ Thread 1+2+3 fix)
- `tests/anu_codex_micro_refinement_loop/test_*.py` (★ regression 4종 추가)
- `memory/events/task-2688.pr-149-x1-r7-result-260526.json` (★ new head SHA · thread resolve)
- `memory/events/task-2688.done`
- `memory/reports/task-2688.md`

## ANU normal callback (★ self-key 금지 + session propagation 적용)

- envelope: `memory/events/anu_callback/task-2688-normal-completion.json`
- owner key: ANU `c119085addb0f8b7` (★ self-key 금지)
- **★ cokacdir --cron --session `53e89540-5bed-4692-a726-ed857820758a` 옵션 강제** (★ chair-facing session resume)
- envelope ≤ 3900 bytes hard limit
- absolute fire timestamp: now+30s
- 필수 필드: chair_facing_session_id / collector_session_id / delivery_session_id (★ task-2686 schema 적용 전이라도 envelope 텍스트 명기)
- 보고 envelope 에 new_head_sha 포함 (★ watcher 재부착 input)

## frozen anchors

- ANCHOR-1: "Thread 1+2+3 묶음 X1 R7 · 분리 처리 금지"
- ANCHOR-2: "glob semantic 4 anchor · `*` same-dir / `**` recursive / path separator 암묵 매칭 금지"
- ANCHOR-3: "regression 4종 필수 + 기존 PASS 회귀 0"
- ANCHOR-4: "PR #149 merge 0 · branch sync 0 · BEHIND 해소는 별도 결정"
- ANCHOR-5: "PR #151 / task-2686 / PR #150 파일 충돌 0"
- ANCHOR-6: "ANU callback --session 53e89540... 강제 (dogfood 보조)"

## 종결

성공: **`PR_149_X1_R7_THREAD_1_2_3_PUSHED_AND_RESOLVED`**

후속: ANU callback 도착 후 회장이 watcher task-2689 (★ dev3 다그다 read-only) 발사 결정.

끝