release(v4.8.8): Issue #17 follow-up - archive the review reports and bump the lockstep version

Merge-workspace review loop (--all-reviewer): round 1 (@d198dd5) claude
agy PASS, grok codex NOT PASS (the same inherited WORKSPACE_ROOT in eleven
more modules; test_orc_onboard's import-time env); fixed in 8b47cc7.
Round 2 claude grok NOT PASS (test_o2_race_free_lock, test_o1_rebuttal
missed), agy codex PASS; fixed in ac48cb7. Round 3 (@ac48cb7) 4/4 PASS.
Full suite at ac48cb7 on macOS / Python 3.9 / herdr 0.9.3 with
WORKSPACE_ROOT set to an empty sentinel: 1751 passed / 0 failed / 38
skipped; the sentinel stayed empty and the main checkout's shim was not
touched.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VCgu9Fa9iT7TbJUSzdq4Ff
This commit is contained in:
GodopuandClaude Opus 5.5 committed 2026-10-09 05:01:05 +09:00
1 parent ac48cb7861
commit e0181ea9be
32 files changed
+1192 -26

No files matched your search

+30 -11
View File
@@ -6,8 +6,8 @@
## 📌 현재 버전 개요 (Current Release)
- **프레임워크 버전**: `v4.8.7`
- **최신 릴리스 일시**: 2026-10-08 (KST)
- **프레임워크 버전**: `v4.8.8`
- **최신 릴리스 일시**: 2026-10-09 (KST)
- **기준 브랜치**: `main`
- **핵심 아키텍처**:
- **Terminal 상태 단방향 불변성 (`engine.py`, Issue #6 Phase 1)**: `completed`, `error`, `cancelled` 터미널 상태 진입 후 후속 이벤트나 업데이트에 의한 덮어쓰기를 엄격히 차단(Terminal Immutability). `registry.py close` 서브커맨드 및 fail-closed 조기 종료 도입.
@@ -24,23 +24,42 @@
## 🧭 스킬 패키지 버전 매트릭스 (Skills Version Matrix)
모든 8개 스킬은 YAML frontmatter 메타데이터(`author`, `version`, `platforms`, `environments`) 표준화를 통해 `v4.8.7`로 동기화되어 배포됩니다.
모든 8개 스킬은 YAML frontmatter 메타데이터(`author`, `version`, `platforms`, `environments`) 표준화를 통해 `v4.8.8`로 동기화되어 배포됩니다.
| 스킬명 | 버전 | 역할 및 주요 책임 | 상태 |
| :--- | :---: | :--- | :---: |
| **`multi-agent-mux-create`** | `4.8.7` | 에이전트 세션 신규 생성 및 Herdr 컨테이너 격리 스폰 | ✅ 배포 |
| **`multi-agent-mux-stop`** | `4.8.7` | 대화 UUID 원자적 캡처 및 세션 안전 종료 (Graceful Stop) | ✅ 배포 |
| **`multi-agent-mux-resume`** | `4.8.7` | 온디스크 대화 컨텍스트 기반 Tier-1 초고속 세션 복원 | ✅ 배포 |
| **`multi-agent-mux-status`** | `4.8.7` | 실시간 Herdr 세션 및 레지스트리 드리프트 스냅샷 조회 | ✅ 배포 |
| **`multi-agent-mux-monitor`** | `4.8.7` | YAML ↔ 런타임 상태 간 자율 조정자 (Reconciler Loop) | ✅ 배포 |
| **`multi-agent-mux-delegate-job`** | `4.8.7` | MQTT 이벤트 채널 기반 비동기 단위 작업 위임 | ✅ 배포 |
| **`multi-agent-mux-loop`** | `4.8.7` | Planner-Creator-Reviewer 3자 자율 계획·실행·피어리뷰 루프 | ✅ 배포 |
| **`multi-agent-mux-orc-onboard`** | `4.8.7` | 오케스트레이터 UUID 격리 등록 및 서브 세션 오염 방지 | ✅ 배포 |
| **`multi-agent-mux-create`** | `4.8.8` | 에이전트 세션 신규 생성 및 Herdr 컨테이너 격리 스폰 | ✅ 배포 |
| **`multi-agent-mux-stop`** | `4.8.8` | 대화 UUID 원자적 캡처 및 세션 안전 종료 (Graceful Stop) | ✅ 배포 |
| **`multi-agent-mux-resume`** | `4.8.8` | 온디스크 대화 컨텍스트 기반 Tier-1 초고속 세션 복원 | ✅ 배포 |
| **`multi-agent-mux-status`** | `4.8.8` | 실시간 Herdr 세션 및 레지스트리 드리프트 스냅샷 조회 | ✅ 배포 |
| **`multi-agent-mux-monitor`** | `4.8.8` | YAML ↔ 런타임 상태 간 자율 조정자 (Reconciler Loop) | ✅ 배포 |
| **`multi-agent-mux-delegate-job`** | `4.8.8` | MQTT 이벤트 채널 기반 비동기 단위 작업 위임 | ✅ 배포 |
| **`multi-agent-mux-loop`** | `4.8.8` | Planner-Creator-Reviewer 3자 자율 계획·실행·피어리뷰 루프 | ✅ 배포 |
| **`multi-agent-mux-orc-onboard`** | `4.8.8` | 오케스트레이터 UUID 격리 등록 및 서브 세션 오염 방지 | ✅ 배포 |
---
## 📋 버전별 상세 변경 내역 (Changelog)
### 🚀 `v4.8.8` — Issue #17 후속: lib.sh 를 source 하는 테스트가 상속된 `WORKSPACE_ROOT` 에 쓰지 않는다 (2026-10-09)
> **패치 (PATCH Release, 테스트 전용)**: v4.8.7 리뷰(claude 비차단)가 남긴 후속. 제품 코드(`.agents/skills`)는 바뀌지 않았다. lib.sh 는 source 될 때마다 `$WORKSPACE_ROOT/.mam/shim/herdr` 를 다시 쓰는데(`_init_herdr_isolation`), 셸 환경을 그대로 물려받는 테스트는 그 값이 가리키는 실제 워크스페이스(에이전트 pane 에서는 그 pane 의 워크스페이스, PR #51 리뷰 때는 다른 워크스페이스)의 shim 을 덮어썼다.
#### 🌟 주요 개선 사항
1. **item-4 헬퍼 (`tests/test_issue17_item4_decisions.py`)**: `_env` 가 `WORKSPACE_ROOT` 를 테스트의 임시 디렉터리로 지정한다. 지우기만 하면 lib.sh 가 체크아웃 자신을 루트로 계산하고, conftest 가 이 체크아웃을 가리키는 값을 남겨 두므로 체크아웃의 shim(본 체크아웃이면 실제 shim)을 쓰게 된다.
2. **공통 fixture (`tests/conftest.py`)**: `own_workspace_root` — `WORKSPACE_ROOT` 를 `<tmp_path>/.mam-test-state/workspace` 로 둔다. autouse 가 아니다(runner.py·mqtt_common 은 프로세스 안에서 그 값을 읽고, 일부 테스트는 일부러 지운다). `mam_sandbox` 와 명시 env 가 뒤에서 이긴다.
3. **같은 결함의 모듈들**: `test_version_consistency`, `test_b19_headless_reconcile_fixes`, `test_b8_send_keys_verification`, `test_issue6_fail_closed`, `test_loop_cli`, `test_issue5_phase3_loop`, `test_issue5_phase4_runtime`, `test_o3_scoped_guard`, `test_issue25_plan_reuse`, `test_orc_onboard`(import 시점의 `SCRUBBED_ENV` 가 더는 `WORKSPACE_ROOT` 를 담지 않고 호출마다 그 호출의 루트로 env 를 만든다), `test_o1_rebuttal`, `test_o2_race_free_lock` 은 fixture 를 쓰고, `test_workspace_scope`·`test_issue21_worktree_prereqs._mutate` 는 이미 만든 루트를 고정한다. lib.sh·run_loop.sh·래퍼·스킬 스크립트를 실행하는 나머지 테스트 파일은 표시되었거나 `mam_sandbox`/고정 루트를 쓰거나 lib.sh 를 source 하지 않는다.
#### ✅ 품질 검증
- **회귀 테스트 (`tests/test_issue17_workspace_root_isolation.py` 외)**: 센티널 `WORKSPACE_ROOT` 아래 item-4 헬퍼가 아무것도 만들지 않음; W1 — 체크아웃 복사본에서 위 모듈마다 한 테스트를 그 복사본을 가리키는 `WORKSPACE_ROOT` 로 돌려 복사본에 `.mam` 이 생기지 않음; W2 — `test_orc_onboard` 를 센티널 루트로 import 한 뒤 다른 루트로 호출해도 센티널이 빔. 수정 전 커밋에서는 모두 실패(`.mam/shim/herdr` 생성).
- **리뷰 (병합 워크스페이스, 루프 `--all-reviewer`)**: 1회차(@d198dd5) claude·agy PASS, grok·codex NOT PASS(같은 결함이 다른 모듈 11 곳에 남음, `test_orc_onboard` 의 import 시점 env). 8b47cc7 에서 수정. 2회차 agy·codex PASS, claude·grok NOT PASS(`test_o2_race_free_lock`·`test_o1_rebuttal` 누락). ac48cb7 에서 수정. 3회차(@ac48cb7) **4/4 PASS**. 리포트와 3회차 identity 사이드카는 `.agents/reports/<session>/`.
- **전체 스위트 (병합 워크스페이스, macOS·Python 3.9·herdr 0.9.3, MQTT 환경변수 없이, `WORKSPACE_ROOT` = 빈 센티널 디렉터리)**: ac48cb7 **1751 passed / 0 failed / 38 skipped**(73 분). 실행 뒤 센티널은 비었고, 본 체크아웃의 `.mam/shim/herdr` 수정 시각은 그대로였다. skip 38 건은 v4.8.7 과 같다.
- **codex 리뷰어 환경**: 1·2회차 동안 codex 세션은 공유 app-server 데몬 재시작으로 샌드박스 우회가 풀려(workspace-write, 네트워크 제한) 로컬 브로커 테스트와 MQTT 발행을 하지 못했고, 브로커 없는 실행과 정적 검토로 판정했다. 루프 뒤 `codex resume --no-daemon --dangerously-bypass-approvals-and-sandbox` 로 재기동해 루프백 bind 와 `danger-full-access` 를 확인했다.
#### 📝 후속
- codex 어댑터의 resume 명령에 `--no-daemon` 이 없다: 공유 데몬을 쓰면 재기동이 "Cannot use the shared background server … rerun with --no-daemon" 으로 실패하고, 데몬이 재시작되면 샌드박스 우회가 조용히 풀린다.
- 센티널 실행 뒤 리뷰 워크트리에 빈 `.mam/` 디렉터리가 생겼다(ignore 대상, shim 없음). 어느 테스트가 만드는지는 확인하지 않았다.
### 🚀 `v4.8.7` — Issue #17 후속: 래퍼가 판정을 못 내리면 1 로 끝나고, resume 이 herdr 0.9.3 의 자리표시 pane 을 닫는다 (2026-10-08)
> **패치 (PATCH Release)**: v4.8.6(PR #51) 리뷰가 남긴 후속. 판정 모듈이 실패할 때의 래퍼 종료 코드, herdr 0.9.3 에서 드러난 #45 B 의 빈틈, 문서 두 곳. 정상 경로의 종료 코드·출력·레지스트리·이벤트는 같다.