2026.05.13 작업일지 v1.0.3
D09 fleet-director 사이클에서 review-before-push 룰을 4회 연속으로 위반한 끝에, 가드 + parity + sequential verification 룰 3종을 박제한 사이클. 아침 08:36 ~ 11:15 KST.
오늘의 궤적
새벽엔 /loop 잡일 트랙 12 iter (v1.0.0/1/2 박제됨). 그 다음 아침 08:36 KST 에 “뭐할까” 한 마디로 시작해 D09 fleet-director 사이클을 4시간에 걸쳐 진행했다. plan §Day 9 의 13 fleet shell primitive 를 만들고, bats 4 PASS 받고, push side-effect 로 source commit 이 origin 에 끌려나간 걸 감지하고, 가드를 박고, 또 가드 적용 전에 baseline bats 가 또 push 하고, 또 reviewer parity 가 가드 없는 source 위에서 검증해서 또 push 하고… 같은 family 사고를 4번 반복한 끝에 룰을 세 개 박제했다.
후속으로 P1 fix-now (plan §9.8 sync) 처리하고, WSL 이 별도 디렉티브로 보낸 session-clear v2.4 keepalive PR 머지 + 4기기 회수까지 진행했다. desktop3060ti 에서 ~/.claude/automations/ repo 자체가 부재라는 gap 도 발견.
D09 fleet-director 사이클
컨텍스트
전날 D08 (gate A+B+C + bats-core + 5필드 evidence) 클로즈된 상태. D09 plan = 13 fleet shell primitive (fleet-status / ack / reject / pause / resume / abort / abort-mission / promote / log / budget / devices / mission / kill) + tests/primitives.bats 4 케이스 + Mac mini scp.
sweep family 4회 사고 chain
| sweep | noise commit | revert | 직접 원인 |
|---|---|---|---|
| 1차 (4) | f14bba6 + 11b7dce + 306ed02 + 64a111a | 개별 4 revert (55a5269..c4b5a55) | implementer 첫 bats — plan §9.8 mission cleanup git push + fleet-kill/mission primitive 내부 push 가 unpushed D09 source 3680caf 끌고 origin 박힘 |
| 2차 (8) | 27b21a6..cf2014b | combined empty revert d8bf73a | FLEET_NO_PUSH guard fix-attempt subagent 가 guard 적용 전 baseline bats 실행, 가드 없는 primitive 가 push 발화 (2 라운드) |
| 3차 (8) | a13fbce..4ec8fad | combined empty revert efe5d4d | spec-reviewer 가 mac-mini parity 단계에서 git format-patch -1 3680caf 로 D09 source 단일 패치를 apply — 가드 빠진 bats setup. apply 후 bats 실행 시 setup() FLEET_NO_PUSH=1 export 없음. 병렬 reviewer 2 라운드 |
| 4차 (4) | eda8f33..95beb9e | combined empty revert b0343d2 | 원인 가설 — mac-mini SSH-경유 FLEET_NO_PUSH propagate 미흡 또는 본진 BEFORE/AFTER race. 사후 empirical 검증 시 PUSH BLOCKED OK 일관 — 정확한 원인 미확정 |
총 24 noise commit + 24 audit-trail revert. tree 영향 모두 net 0 (KILL/—release + mission_proposed/cleanup 쌍 self-cancel). 강대종 force-push 금지 룰 따라 forward-only revert chain.
D09 fix 1b2c08b — FLEET_NO_PUSH 가드
10 primitive (fleet-{ack,reject,abort,abort-mission,promote,pause,resume,mission,kill[2]}.sh) + tests/primitives.bats setup() 에 가드 패턴:
... && { [ "${FLEET_NO_PUSH:-0}" = "1" ] || git push --quiet origin main; }
bats setup() 가 export FLEET_NO_PUSH=1 → child bash 가 inherit → primitive 가 push 스킵. set -euo pipefail 하에서 || short-circuit 안전 (code-quality-reviewer empirical 3 케이스 검증 PASS).
박제된 룰 3종 (D10+ 영구 적용)
~/.claude/projects/-/memory/feedback_subagent_no_push_isolation.md 에 박힘. D10+ 모든 subagent prompt 에 inline 의무.
- 룰 1: push-capable primitive/bats 실행 전
export FLEET_NO_PUSH=1또는 격리 throwaway repo. baseline/smoke/verify/debug 어떤 명목이든 예외 X. - 룰 2: reviewer parity patch-apply 시 source commit 단독 금지. 최종 guarded range 또는
git pull --ff-only기준. - 룰 3: 최종 verification 병렬 reviewer 금지. sequential + 실행 전후
git rev-parse origin/main비교 필수.
검증
- Mac 본진: bats 4 PASS + origin 3955b08 변화 0 (PUSH BLOCKED OK).
- mac-mini: 한 번 divergence 발견 (reviewer parity 시점에 mac-mini local 만 fixture commit 4개 누적) →
git reset --hard origin/main후 재실행 → bats 4 PASS + origin 변화 0.
시간 비용
- 시작: 08:36 KST (“뭐할까”)
- 종료: 11:15 KST (P1 fix-now 완료, plan §9.8 sync)
- 약 4 시간
P1 fix-now — plan §9.8 sync
D09 사이클 root cause 가 plan §9.8 본문에 그대로 남아있으면 D10/D11 implementer 가 같은 함정 재발. plan 본문 자체를 sync.
- plan §Day 9 헤더에 D09 사후 학습 5-rule annotation 박음 (라인 2118-2125)
- plan §9.8 setup() 에
export FLEET_NO_PUSH=1추가 (라인 2340) - plan §9.8 mission cleanup 라인:
git add .→git add mission.json queue/+ 가드 패턴 (라인 2365-2368)
D09 follow-up queue P1 → ✅ CLOSED 표시 (project_fleet_d09_followup_queue.md).
plan 파일은 ~/.claude/plans/ 위치 (git untracked) → 로컬 edit 만. origin/main 3955b08 무변화 verified.
WSL session-clear v2.4 keepalive 회수
D09 close 직후 WSL 가 별도 디렉티브 보냄 (tmux paste 경유). 강대종 명시 ack 받고 진행.
머지 디렉티브 (1/2)
- PR #14 (claude-automations)
hook: session-clear-trigger.sh v2.4 — WSL idle keepalive (#14)→ squash mergeb921190 - PR #34 (claude-skills)
session-clear v2.0: WSL idle keepalive 절차 추가 (#34)→ squash merge0ba9ae3
본진 self pull + 검증:
~/.claude/automationsmain =b921190~/claude-skillsmain =0ba9ae3bash -n hooks/session-clear-trigger.shPASSgrep -F 'wsl keepalive 3600s armed'→ 1 match
회수 디렉티브 (2/2) — 4기기 분배
| 기기 | claude-automations | claude-skills | 결과 |
|---|---|---|---|
| 🍎 Mac 본진 | b921190 ✅ | 0ba9ae3 ✅ | bats -n PASS, grep 1 |
| 🏭 Mac mini | b921190 ✅ | 0ba9ae3 ✅ | scope respected, syntax PASS |
| 🖥 desktop3060ti | ❌ repo 미설치 | 0ba9ae3 ✅ | 본진 결정 보류 (gap surface) |
| 💻 hermes | (미회신) | (미회신) | 회신 대기 중 |
desktop3060ti gap — ~/.claude/automations/ repo 부재
scripts/ 디렉토리만 (mac-report.sh / macmini-report.sh / wsl-directive.sh) 있고 hooks/ 자체 없음. WSL 디렉티브 “타 OS 는 코드만 박힘 (no-op)” 가정이 이 기기엔 안 맞음 (코드 자체 부재). issue 박제 (2026-05-13-desktop3060ti-claude-automations-absent.md). case A (clone 필요) / case B (chatbot 노드만이라 hooks 불필요) 결정 미정.
cross-bot ack 채널 함정
WSL 봇 (@Myclaude2) 이 본진 봇 (@MyClaude) 으로 디렉티브 paste 시 “강대종 명시 승인 텔레그램 msg NNNN” 클레임. 그러나 본진 챗봇은 다른 봇 채팅 메시지 verify 불가 (Telegram Bot API 한계). 본진 봇 채팅에서 강대종 직접 ack (“WSL 디렉티브 머지 + 회수 OK”) 받기 전엔 외부 영향 행위 hold. 후일 인프라 보강 후보 3 case 등재 (project_cross_bot_ack_channel_followup.md).
박제된 issue 3건
~/.claude/skills/issues/ (claude-skills 자동 commit+push hook 작동):
2026-05-13-d09-fleet-sweep-family-4-rounds.md— high severity, 사이클 전체 박제2026-05-13-fleet-state-mac-mini-divergence.md— low, reset 한 줄로 해결2026-05-13-desktop3060ti-claude-automations-absent.md— medium, 결정 보류
박제된 메모리
feedback_subagent_no_push_isolation.md— 룰 3종project_fleet_d09_followup_queue.md— 7 follow-up (P1 CLOSED + P2 2 + P3 4)fleet_director_d01_trigger.md— D09 close 갱신 (D10 trigger)project_cross_bot_ack_channel_followup.md— 인프라 보강 후보 3 case- MEMORY.md 인덱스 3 라인 추가
todo 자동 매칭
todos line 18 (🚨 fleet-state test harness push 격리, D07 cron 전 blocker) → ✅ 완료 처리. 이유: D09 fix 1b2c08b (FLEET_NO_PUSH guard) 가 같은 root cause mechanism 차단. 단 D07 코드 (run-worker.sh / task-picker.sh / tests/*.test.sh) 같은 가드 적용은 D07 system install ack 별도 트랙으로 분리.
관련 커밋
| repo | SHA | 메시지 |
|---|---|---|
| agent-fleet-state | 3955b08 | D09 housekeeping: README sweep 4회 분리 기록 + 박제된 새 룰 명시 |
| agent-fleet-state | b0343d2 | Revert 4 D09 4차 ambiguous-source bats noise commits |
| agent-fleet-state | efe5d4d | Revert 8 D09 reviewer bats noise commits (3차 sweep) |
| agent-fleet-state | 12867c3 | D09 housekeeping: README D09 row 추가 |
| agent-fleet-state | d8bf73a | Revert 8 D09 fix-attempt bats noise commits |
| agent-fleet-state | 1b2c08b | fix(D09): FLEET_NO_PUSH guard — bats push side-effect 차단 (condition #6) |
| agent-fleet-state | c4b5a55 | Revert “fleet: KILL human_emergency by user” (1차 4-revert 끝) |
| agent-fleet-state | 91355d1 | D08 housekeeping: README 구현 히스토리 D08 row 추가 |
| agent-fleet-state | 36108d8 | feat(D08): gate A+B+C 3-layer + 5-field evidence + bats tests |
| agent-fleet-state | 3680caf | feat(D09): 13 fleet shell primitives + bats tests |
| claude-automations | b921190 | hook: session-clear-trigger.sh v2.4 — WSL idle keepalive (#14) |
| claude-skills | 0ba9ae3 | session-clear v2.0: WSL idle keepalive 절차 추가 (#34) |
| claude-skills | 442e00e | auto: issues/2026-05-13-d09-fleet-sweep-family-4-rounds.md |
| claude-skills | efb0fd0 | auto: issues/2026-05-13-fleet-state-mac-mini-divergence.md |
| claude-skills | 2af8337 | auto: issues/2026-05-13-desktop3060ti-claude-automations-absent.md |
| todo | (auto-sync) | todo: 완료 - fleet-state test harness push 격리 (D09 fix 1b2c08b mechanism 차단) |
남은 작업
- desktop3060ti claude-automations case A/B 결정 (강대종 ack 대기)
- hermes reverse reply 회신 (안 옴) — WSL 디렉티브 회수 phase 3 종합 보고 보류 (강대종이 “여기까지 하고 굿나잇” 명시)
- D07 system install ack (별도 트랙, 여전히 미진행)
- D09 follow-up queue P2 2건 + P3 4건 (D10+ 또는 별 사이클)
- D10 시작 결정 (scope read 완료, main 직접 push 룰 vs branch+PR 절차 결정 필요)
학습·교훈
- plan 본문 자체에 push 라인이 박혀있으면 implementer 가 따라도 사고 — plan 검수 단계에서 push-capable 라인은 가드 패턴 default 로 박을 것. P1 fix-now 로 §Day 9 본문 sync 완료.
- subagent 가 baseline 검증을 가드 없이 돌리면 또 사고 — 룰 1 박제 (any 명목, 어떤 단계든 가드 강제).
- reviewer parity 가 source 단일 commit 패치만 보면 또 사고 — 룰 2 박제 (range 또는 pull —ff-only 기준).
- 병렬 reviewer 가 같은 함정을 동시에 두 번 발화 — 룰 3 박제 (sequential + origin BEFORE/AFTER 비교).
- forward-only revert chain 이 정직한 audit-trail — force-push 금지 룰 따라 history 박힘이 어수선해도 review-before-push 룰 위반 사실은 다 시각화됨.
- cross-bot 사이의 강대종 ack 가 본진 봇 채팅으로 안 오면 본진 챗봇이 verify 불가 — 인프라 follow-up 후보 3 case 등재.