release(v4.9.4): the audit log follows a moved registry (Issue #57, PR #58) - archive the review reports and bump the lockstep version
Review loop (--review-only, --all-reviewer, focused on this Mac: macOS, /usr/bin/python3 3.9.6, bash 3.2): round 1 (@63d8164) agy and grok PASS, claude and codex NOT PASS (F1 paho via the /usr/bin/python3 fallback, F2 logs default path, R1 disk-fallback redispatch interleaving, R2 symlinked registry), sent as a PR comment and fixed by the author in four commits; round 2 (@a7cb90e) 4/4 PASS. Full suite on macOS / Python 3.9.6 @a7cb90e: 1867 passed, 56 skipped, 1 error (the known #55 false positive: WAL/SHM of an agy conversation running in another workspace). Real herdr panes and ~/.claude/projects unchanged. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01VCgu9Fa9iT7TbJUSzdq4Ff
This commit is contained in:
1 parent
a7cb90e63a
commit
7cf728e9f8
28 files changed
+619
-26
No files matched your search
+27
-11
@@ -6,8 +6,8 @@
|
||||
|
||||
## 📌 현재 버전 개요 (Current Release)
|
||||
|
||||
- **프레임워크 버전**: `v4.9.3`
|
||||
- **최신 릴리스 일시**: 2026-10-13 (KST)
|
||||
- **프레임워크 버전**: `v4.9.4`
|
||||
- **최신 릴리스 일시**: 2026-10-15 (KST)
|
||||
- **기준 브랜치**: `main`
|
||||
- **핵심 아키텍처**:
|
||||
- **Terminal 상태 단방향 불변성 (`engine.py`, Issue #6 Phase 1)**: `completed`, `error`, `cancelled` 터미널 상태 진입 후 후속 이벤트나 업데이트에 의한 덮어쓰기를 엄격히 차단(Terminal Immutability). `registry.py close` 서브커맨드 및 fail-closed 조기 종료 도입.
|
||||
@@ -24,23 +24,39 @@
|
||||
|
||||
## 🧭 스킬 패키지 버전 매트릭스 (Skills Version Matrix)
|
||||
|
||||
모든 8개 스킬은 YAML frontmatter 메타데이터(`author`, `version`, `platforms`, `environments`) 표준화를 통해 `v4.9.3`로 동기화되어 배포됩니다.
|
||||
모든 8개 스킬은 YAML frontmatter 메타데이터(`author`, `version`, `platforms`, `environments`) 표준화를 통해 `v4.9.4`로 동기화되어 배포됩니다.
|
||||
|
||||
| 스킬명 | 버전 | 역할 및 주요 책임 | 상태 |
|
||||
| :--- | :---: | :--- | :---: |
|
||||
| **`multi-agent-mux-create`** | `4.9.3` | 에이전트 세션 신규 생성 및 Herdr 컨테이너 격리 스폰 | ✅ 배포 |
|
||||
| **`multi-agent-mux-stop`** | `4.9.3` | 대화 UUID 원자적 캡처 및 세션 안전 종료 (Graceful Stop) | ✅ 배포 |
|
||||
| **`multi-agent-mux-resume`** | `4.9.3` | 온디스크 대화 컨텍스트 기반 Tier-1 초고속 세션 복원 | ✅ 배포 |
|
||||
| **`multi-agent-mux-status`** | `4.9.3` | 실시간 Herdr 세션 및 레지스트리 드리프트 스냅샷 조회 | ✅ 배포 |
|
||||
| **`multi-agent-mux-monitor`** | `4.9.3` | YAML ↔ 런타임 상태 간 자율 조정자 (Reconciler Loop) | ✅ 배포 |
|
||||
| **`multi-agent-mux-delegate-job`** | `4.9.3` | MQTT 이벤트 채널 기반 비동기 단위 작업 위임 | ✅ 배포 |
|
||||
| **`multi-agent-mux-loop`** | `4.9.3` | Planner-Creator-Reviewer 3자 자율 계획·실행·피어리뷰 루프 | ✅ 배포 |
|
||||
| **`multi-agent-mux-orc-onboard`** | `4.9.3` | 오케스트레이터 UUID 격리 등록 및 서브 세션 오염 방지 | ✅ 배포 |
|
||||
| **`multi-agent-mux-create`** | `4.9.4` | 에이전트 세션 신규 생성 및 Herdr 컨테이너 격리 스폰 | ✅ 배포 |
|
||||
| **`multi-agent-mux-stop`** | `4.9.4` | 대화 UUID 원자적 캡처 및 세션 안전 종료 (Graceful Stop) | ✅ 배포 |
|
||||
| **`multi-agent-mux-resume`** | `4.9.4` | 온디스크 대화 컨텍스트 기반 Tier-1 초고속 세션 복원 | ✅ 배포 |
|
||||
| **`multi-agent-mux-status`** | `4.9.4` | 실시간 Herdr 세션 및 레지스트리 드리프트 스냅샷 조회 | ✅ 배포 |
|
||||
| **`multi-agent-mux-monitor`** | `4.9.4` | YAML ↔ 런타임 상태 간 자율 조정자 (Reconciler Loop) | ✅ 배포 |
|
||||
| **`multi-agent-mux-delegate-job`** | `4.9.4` | MQTT 이벤트 채널 기반 비동기 단위 작업 위임 | ✅ 배포 |
|
||||
| **`multi-agent-mux-loop`** | `4.9.4` | Planner-Creator-Reviewer 3자 자율 계획·실행·피어리뷰 루프 | ✅ 배포 |
|
||||
| **`multi-agent-mux-orc-onboard`** | `4.9.4` | 오케스트레이터 UUID 격리 등록 및 서브 세션 오염 방지 | ✅ 배포 |
|
||||
|
||||
---
|
||||
|
||||
## 📋 버전별 상세 변경 내역 (Changelog)
|
||||
|
||||
### 🚀 `v4.9.4` — 감사 로그가 옮긴 레지스트리를 따라간다 (Issue #57, PR #58) (2026-10-15)
|
||||
|
||||
> **패치 (PATCH Release)**: `--registry-dir`·`MAM_JOBS_DIR` 로 레지스트리만 옮긴 실행이 실제 `.mam/delegate_job_logs` 에 레지스트리 없는 감사 로그를 남기던 결함. 레지스트리를 옮기지 않은 평소 실행의 경로는 바뀌지 않는다.
|
||||
|
||||
#### 🌟 주요 개선 사항
|
||||
1. **형제 규칙 하나**: `DELEGATE_JOB_LOGS_DIR` 가 없으면 감사 로그 루트는 사용 중인 레지스트리(realpath)의 형제 `delegate_job_logs` 다. 규칙은 stdlib 전용 `lib_py/delegation/logroot.py` 한 곳에 있고(`mqtt_common.get_logs_dir(registry_dir)` 가 재노출), 감사 로그를 쓰고 읽는 모든 지점(register·pick·상태 미러·충돌 거부·publish_event·subscriber·remote·reconcile·루프 러너)이 레지스트리를 넘긴다.
|
||||
2. **bash 기본값 제거**: 래퍼의 `${DELEGATE_JOB_LOGS_DIR:-$WORKDIR/delegate_job_logs}` 16 곳과 `lib.sh` 사본을 없앴다. 래퍼는 루트를 한 번 해석해 자식에게 export 하고(해석 실패 시 fail-closed), `logs` 는 `--registry-dir` 를 받았을 때만 넘긴다.
|
||||
3. **세션 바인딩**: `control_plane.from_env()` 는 로그 루트를 `mam_jobs_dir` 에서 파생하고, `forwarded_keys()` 는 파생 가능한 형제 루트를 행에만 기록하고 pane 에 넘기지 않는다. `worktree_prepare.sh` 는 호출자가 준 경우만 넘긴다. `status.sh` 는 레지스트리 옆 감사 로그도 조회한다.
|
||||
4. **디스크 폴백**: `job_subscriber._check_disk_fallback` 이 `status.json` 의 `status` 를 읽고(이전엔 dict 를 비교해 아무것도 맞지 않음), 버전 있는 레코드는 감사 `transition_seq` 가 같거나 새로울 때만, 그리고 채택 직전에 레코드를 다시 읽어 같은 dispatch 일 때만 감사 상태를 받아들인다.
|
||||
5. **결정**: `submit --dry-run` 의 의미(등록 + 감사 로그 시드)는 유지, 쓰기 시 레지스트리 레코드 존재 가드는 두지 않는다(#20 가드가 실제 루트의 레지스트리 없는 감사 로그를 잡는다).
|
||||
|
||||
#### ✅ 품질 검증
|
||||
- **회귀**: 새 `tests/test_issue57_logs_follow_registry.py`(19 tests)는 명시적 `DELEGATE_JOB_LOGS_DIR` 우선 불변식 하나를 빼고 수정 전 트리에서 실패하며, 모든 테스트가 워크스페이스의 `.mam/delegate_job_logs` 가 생기지 않았음을 단언한다. 기존 테스트 5개의 단언을 새 규칙에 맞췄다(PR #58 본문).
|
||||
- **리뷰 (`--review-only`, `--all-reviewer`, 이 Mac 정합성 중심)**: 1회차(@63d8164) agy·grok PASS, claude·codex NOT PASS — paho 없는 `/usr/bin/python3` 폴백에서 바인딩·status 실패(F1), `logs` 기본 경로 변경(F2), 디스크 폴백의 재디스패치 interleaving(R1), 심볼릭 링크 레지스트리(R2). PR 댓글로 전달했고 작성자가 커밋 4개로 수정했다. 2회차(@a7cb90e) **4/4 PASS**(1회차 재현이 모두 해소). 리포트는 `.agents/reports/<session>/`.
|
||||
- **전체 스위트 (macOS, Python 3.9.6, @a7cb90e)**: 1867 passed, 56 skipped(tomllib·서브모듈·Linux 전용), 1 error — #55 가드가 다른 워크스페이스에서 돌던 agy 의 대화 WAL/SHM 을 잡은 알려진 오탐. 실제 herdr 서버 pane 목록·`~/.claude/projects` 불변, 실제 감사 로그에는 리뷰 잡 것만 생겼다.
|
||||
|
||||
### 🚀 `v4.9.3` — u1e 테스트가 체크아웃의 `.mam/shim/herdr` 를 쓰지 않는다 (2026-10-13)
|
||||
|
||||
> **패치 (PATCH Release, 테스트 전용)**: v4.9.2 README 리뷰(claude 38a64423)가 재현한 결함. 제품 코드는 버전 줄 외에 바뀌지 않았다.
|
||||
|
||||
Reference in new issue
Block a user