release(v4.9.6): opencode 2.x only (Issue #60) - archive the review reports, bump the lockstep version

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-18 19:35:48 +09:00
1 parent 0e05b1b677
commit cb2c84ccd7
29 files changed
+835 -25

No files matched your search

+31 -10
View File
@@ -6,7 +6,7 @@
## 📌 현재 버전 개요 (Current Release)
- **프레임워크 버전**: `v4.9.5`
- **프레임워크 버전**: `v4.9.6`
- **최신 릴리스 일시**: 2026-10-18 (KST)
- **기준 브랜치**: `main`
- **핵심 아키텍처**:
@@ -24,23 +24,44 @@
## 🧭 스킬 패키지 버전 매트릭스 (Skills Version Matrix)
모든 8개 스킬은 YAML frontmatter 메타데이터(`author`, `version`, `platforms`, `environments`) 표준화를 통해 `v4.9.5`로 동기화되어 배포됩니다.
모든 8개 스킬은 YAML frontmatter 메타데이터(`author`, `version`, `platforms`, `environments`) 표준화를 통해 `v4.9.6`로 동기화되어 배포됩니다.
| 스킬명 | 버전 | 역할 및 주요 책임 | 상태 |
| :--- | :---: | :--- | :---: |
| **`multi-agent-mux-create`** | `4.9.5` | 에이전트 세션 신규 생성 및 Herdr 컨테이너 격리 스폰 | ✅ 배포 |
| **`multi-agent-mux-stop`** | `4.9.5` | 대화 UUID 원자적 캡처 및 세션 안전 종료 (Graceful Stop) | ✅ 배포 |
| **`multi-agent-mux-resume`** | `4.9.5` | 온디스크 대화 컨텍스트 기반 Tier-1 초고속 세션 복원 | ✅ 배포 |
| **`multi-agent-mux-status`** | `4.9.5` | 실시간 Herdr 세션 및 레지스트리 드리프트 스냅샷 조회 | ✅ 배포 |
| **`multi-agent-mux-monitor`** | `4.9.5` | YAML ↔ 런타임 상태 간 자율 조정자 (Reconciler Loop) | ✅ 배포 |
| **`multi-agent-mux-delegate-job`** | `4.9.5` | MQTT 이벤트 채널 기반 비동기 단위 작업 위임 | ✅ 배포 |
| **`multi-agent-mux-loop`** | `4.9.5` | Planner-Creator-Reviewer 3자 자율 계획·실행·피어리뷰 루프 | ✅ 배포 |
| **`multi-agent-mux-orc-onboard`** | `4.9.5` | 오케스트레이터 UUID 격리 등록 및 서브 세션 오염 방지 | ✅ 배포 |
| **`multi-agent-mux-create`** | `4.9.6` | 에이전트 세션 신규 생성 및 Herdr 컨테이너 격리 스폰 | ✅ 배포 |
| **`multi-agent-mux-stop`** | `4.9.6` | 대화 UUID 원자적 캡처 및 세션 안전 종료 (Graceful Stop) | ✅ 배포 |
| **`multi-agent-mux-resume`** | `4.9.6` | 온디스크 대화 컨텍스트 기반 Tier-1 초고속 세션 복원 | ✅ 배포 |
| **`multi-agent-mux-status`** | `4.9.6` | 실시간 Herdr 세션 및 레지스트리 드리프트 스냅샷 조회 | ✅ 배포 |
| **`multi-agent-mux-monitor`** | `4.9.6` | YAML ↔ 런타임 상태 간 자율 조정자 (Reconciler Loop) | ✅ 배포 |
| **`multi-agent-mux-delegate-job`** | `4.9.6` | MQTT 이벤트 채널 기반 비동기 단위 작업 위임 | ✅ 배포 |
| **`multi-agent-mux-loop`** | `4.9.6` | Planner-Creator-Reviewer 3자 자율 계획·실행·피어리뷰 루프 | ✅ 배포 |
| **`multi-agent-mux-orc-onboard`** | `4.9.6` | 오케스트레이터 UUID 격리 등록 및 서브 세션 오염 방지 | ✅ 배포 |
---
## 📋 버전별 상세 변경 내역 (Changelog)
### 🚀 `v4.9.6` — opencode 2.x 전용 지원 (Issue #60) (2026-10-18)
> **패치 (PATCH Release)**: opencode 가 1.x 에서 2.x 로 올라가면서 TUI 가 `--agent`·`-m` 을 거부하고(실행 즉시 종료), 세션 저장소가 `session_v2` 로 바뀌고, `opencode db path` 가 없어졌다. MAM 은 opencode **2.x 만** 지원한다(1.x 호환 경로 없음). 사실은 이 Mac 에서 opencode 2.0.32 를 임시 HOME·TMPDIR 로 실측해 확인했다.
#### 🌟 주요 개선 사항
1. **실행 명령**: 생성·재개 모두 `opencode --auto --standalone`(재개는 `--session <id>` 추가)이다. 기본 실행은 사용자당 하나인 백그라운드 서비스(`opencode serve --service`, 고정 포트)에 붙는다. `--standalone` 은 세션마다 TUI 의 자식 서버(`serve --stdio`)를 띄우고, 그 서버는 TUI 가 끝나면(SIGKILL·pty 닫힘) 함께 끝난다. 모델은 실행 명령으로 고를 수 없고 opencode 설정을 따른다.
2. **세션 저장소 `session_v2`**: discover·verify·status·reconcile(drift C)이 `session_v2` 를 읽는다. 시각은 ms 단위이고, 자식 세션(`parent_id`)은 대화 세션으로 고르지 않는다.
3. **DB 경로**: `opencode debug paths` 의 `db` 줄로 찾는다. 실패하면 `XDG_DATA_HOME`(호출자 자신의 홈일 때만) 또는 `<home>/.local/share` 아래 `opencode/opencode.db` 를 쓴다. `status.sh` 도 어댑터의 경로를 쓴다.
4. **purge**: `opencode session delete --standalone -- <id>` 로 지운다. 이 명령은 자식 세션까지 2.x 테이블에서 지운다. 1.x 에서 이전된 DB 에 남는 옛 테이블(`session`·`message`·`part`·`todo`·`session_share`)의 행은 본인과 자손 세션 모두 MAM 이 지운다. 삭제가 실패하면 경고를 내고 남은 행을 residual 로 보고한다.
5. **사용 중 판정**: 백그라운드 서비스는 DB 를 늘 열어 두므로 DB 보유자 중 `serve --service` 는 사용 중으로 보지 않는다. 다른 보유자나 argv 에 uuid 를 가진 프로세스는 여전히 사용 중이다. `resident_children` 은 `opencode` 이다.
6. **문서**: `docs/OPENCODE_OLLAMA_GUIDE.md`(TUI 는 `-m`·`--agent` 를 받지 않음, MAM 은 `--standalone` 으로 실행), `docs/NEW_AGENT_INTEGRATION_GUIDE.md` 의 OpenCode 행.
#### ✅ 품질 검증
- **회귀**: `tests/test_issue60_opencode_v2.py`(2.x 스키마·CLI·자식 세션·이전된 DB·삭제 실패·서비스 보유자·XDG 규칙·실행 문자열), 가짜 2.x CLI `tests/_fake_opencode.py`. 설치된 opencode 2.x 가 있으면 임시 HOME 에서 실제 바이너리 계약(세션 생성·discover·purge·residual·없는 id)도 확인한다. 테스트 격리는 `XDG_DATA_HOME` 을 지우고, 홈 가드는 그 경로의 opencode 폴더도 감시한다.
- **리뷰 (`--review-only`, `--all-reviewer`, 이 Mac 정합성 중심)**:
- 1회차(@6b4b96f): claude·agy·grok PASS, codex NOT PASS(자식 세션의 1.x 행 잔존). 오케스트레이터가 수정했다(cb5f439: 자손 정리·residual, 서비스 보유자 제외, `XDG_DATA_HOME`, `resident_children`).
- 2회차(@cb5f439): grok PASS, claude·agy·codex NOT PASS. 공통 지적은 테스트 격리가 `XDG_DATA_HOME` 을 지우지 않아 sandbox 가 실제 data 폴더를 가리킬 수 있다는 것(차단)이다. 비차단으로 `status.sh` 의 고정 경로, 실제 바이너리 확인(`--version`)이 실제 HOME 의 opencode 로그에 기록하는 문제가 있었다. 모두 0e05b1b 에서 수정했다.
- 3회차(@0e05b1b): claude·agy·grok PASS. codex 는 사용 한도로 요청을 받지 못해 같은 head 를 단독으로 다시 리뷰해 PASS. **4/4 PASS**. 리포트는 `.agents/reports/<session>/` 에 있다.
- **전체 스위트 (macOS, Python 3.9.6, @0e05b1b)**: 1949 passed, 56 skipped(tomllib·서브모듈·Linux 전용). 실제 `~/.claude`·`/private/tmp/claude-<uid>`·opencode 의 data·state·config 폴더·opencode 로그·herdr 서버 pane 목록은 바뀌지 않았고, 사용자의 opencode 서비스와 실제 DB 의 세션은 그대로였다.
- **Linux 후속 확인(별도)**: 실제 2.x 화면 캡처로 입력 영역 fixture 갱신, `/exit` 정상 종료, 홈 화면 안내 문구의 입력 판정(stall_watch), `auth_ok`(`auth.json`, 현재 미사용), 실제 바이너리 계약 테스트.
### 🚀 `v4.9.5` — claude purge 가 세션이 소유한 경로를 모두 지우고 남은 것을 보고한다 (Issue #31, PR #59) (2026-10-18)
> **패치 (PATCH Release)**: claude `--purge-conversation` 이 `.jsonl` 만 지우고 `file-history`·`session-env` 등을 남기면서 `residual: none` 으로 보고하던 결함. purge 범위는 정규형 UUID 가 가리키는 세션 소유 경로로 한정된다.