release(v4.9.9): the side that verifies a completed pins post-discovered session ids; agy never takes another workspace's conversation (Issue #40) - 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:
1 parent
84af709bb3
commit
0d5f10a546
25 files changed
+492
-26
No files matched your search
+49
-11
@@ -6,8 +6,8 @@
|
||||
|
||||
## 📌 현재 버전 개요 (Current Release)
|
||||
|
||||
- **프레임워크 버전**: `v4.9.8`
|
||||
- **최신 릴리스 일시**: 2026-10-20 (KST)
|
||||
- **프레임워크 버전**: `v4.9.9`
|
||||
- **최신 릴리스 일시**: 2026-10-21 (KST)
|
||||
- **기준 브랜치**: `main`
|
||||
- **핵심 아키텍처**:
|
||||
- **Terminal 상태 단방향 불변성 (`engine.py`, Issue #6 Phase 1)**: `completed`, `error`, `cancelled` 터미널 상태 진입 후 후속 이벤트나 업데이트에 의한 덮어쓰기를 엄격히 차단(Terminal Immutability). `registry.py close` 서브커맨드 및 fail-closed 조기 종료 도입.
|
||||
@@ -24,23 +24,61 @@
|
||||
|
||||
## 🧭 스킬 패키지 버전 매트릭스 (Skills Version Matrix)
|
||||
|
||||
모든 8개 스킬은 YAML frontmatter 메타데이터(`author`, `version`, `platforms`, `environments`) 표준화를 통해 `v4.9.8`로 동기화되어 배포됩니다.
|
||||
모든 8개 스킬은 YAML frontmatter 메타데이터(`author`, `version`, `platforms`, `environments`) 표준화를 통해 `v4.9.9`로 동기화되어 배포됩니다.
|
||||
|
||||
| 스킬명 | 버전 | 역할 및 주요 책임 | 상태 |
|
||||
| :--- | :---: | :--- | :---: |
|
||||
| **`multi-agent-mux-create`** | `4.9.8` | 에이전트 세션 신규 생성 및 Herdr 컨테이너 격리 스폰 | ✅ 배포 |
|
||||
| **`multi-agent-mux-stop`** | `4.9.8` | 대화 UUID 원자적 캡처 및 세션 안전 종료 (Graceful Stop) | ✅ 배포 |
|
||||
| **`multi-agent-mux-resume`** | `4.9.8` | 온디스크 대화 컨텍스트 기반 Tier-1 초고속 세션 복원 | ✅ 배포 |
|
||||
| **`multi-agent-mux-status`** | `4.9.8` | 실시간 Herdr 세션 및 레지스트리 드리프트 스냅샷 조회 | ✅ 배포 |
|
||||
| **`multi-agent-mux-monitor`** | `4.9.8` | YAML ↔ 런타임 상태 간 자율 조정자 (Reconciler Loop) | ✅ 배포 |
|
||||
| **`multi-agent-mux-delegate-job`** | `4.9.8` | MQTT 이벤트 채널 기반 비동기 단위 작업 위임 | ✅ 배포 |
|
||||
| **`multi-agent-mux-loop`** | `4.9.8` | Planner-Creator-Reviewer 3자 자율 계획·실행·피어리뷰 루프 | ✅ 배포 |
|
||||
| **`multi-agent-mux-orc-onboard`** | `4.9.8` | 오케스트레이터 UUID 격리 등록 및 서브 세션 오염 방지 | ✅ 배포 |
|
||||
| **`multi-agent-mux-create`** | `4.9.9` | 에이전트 세션 신규 생성 및 Herdr 컨테이너 격리 스폰 | ✅ 배포 |
|
||||
| **`multi-agent-mux-stop`** | `4.9.9` | 대화 UUID 원자적 캡처 및 세션 안전 종료 (Graceful Stop) | ✅ 배포 |
|
||||
| **`multi-agent-mux-resume`** | `4.9.9` | 온디스크 대화 컨텍스트 기반 Tier-1 초고속 세션 복원 | ✅ 배포 |
|
||||
| **`multi-agent-mux-status`** | `4.9.9` | 실시간 Herdr 세션 및 레지스트리 드리프트 스냅샷 조회 | ✅ 배포 |
|
||||
| **`multi-agent-mux-monitor`** | `4.9.9` | YAML ↔ 런타임 상태 간 자율 조정자 (Reconciler Loop) | ✅ 배포 |
|
||||
| **`multi-agent-mux-delegate-job`** | `4.9.9` | MQTT 이벤트 채널 기반 비동기 단위 작업 위임 | ✅ 배포 |
|
||||
| **`multi-agent-mux-loop`** | `4.9.9` | Planner-Creator-Reviewer 3자 자율 계획·실행·피어리뷰 루프 | ✅ 배포 |
|
||||
| **`multi-agent-mux-orc-onboard`** | `4.9.9` | 오케스트레이터 UUID 격리 등록 및 서브 세션 오염 방지 | ✅ 배포 |
|
||||
|
||||
---
|
||||
|
||||
## 📋 버전별 상세 변경 내역 (Changelog)
|
||||
|
||||
### 🚀 `v4.9.9` — completed 를 확인한 쪽이 세션 ID 를 등록하고, agy 는 다른 작업 공간의 대화를 받지 않는다 (Issue #40) (2026-10-21)
|
||||
|
||||
> **패치 (PATCH Release)**: 세션 ID 가 생성 뒤에야 생기는 에이전트(agy·opencode·codex·hermes)는 지금까지 모니터 데몬의 reconcile 이 찾아 등록했다. 데몬이 없는 워크트리 creator 는 등록되지 않았고, agy 의 drift C 는 호스트 공용 대화 폴더의 모든 `*.db` 를 후보로 보아 다른 작업 공간의 대화 ID 를 등록할 수 있었다. 이제 잡의 completed 를 확인한 쪽이 같은 판정으로 한 번 등록하고, reconcile 도 그 판정을 쓴다.
|
||||
|
||||
#### 🌟 주요 개선 사항
|
||||
1. **어댑터 규격**: `BaseAgentAdapter.id_lifecycle`(`pre_assigned`: claude·grok / `post_discovered`: 나머지)과 `capture_active_session_id`. 세션 시작 뒤 갱신되고, 검증을 통과하고, 다른 행이 기록하지 않은 후보가 정확히 하나일 때만 ID 를 돌려준다. 아니면 이유(`no-candidate`, `ambiguous`, `unverifiable-owner` 등)를 돌려준다.
|
||||
2. **agy**:
|
||||
- `verify_artifact` 의 discover 모드는 `last_conversations.json` 이 다른 작업 공간에 매핑한 ID 를 거절한다. 다른 행이 기록한 ID 도 항상 제외한다.
|
||||
- capture 는 캐시를 제안으로만 쓴다. 그 대화의 presence lock 이나 DB 를 행의 pane 프로세스(또는 그 자손)가 열고 있음을 `lsof`·`ps` 로 확인해야 등록한다. 확인할 수 없으면 등록하지 않는다.
|
||||
3. **`lib_py/agents/autopin.py`**: `handle_completed` 를 completed 를 확인한 쪽이 부른다.
|
||||
- 위임 래퍼(direct), `create --onboard`, 루프 `wait_for_job`(복구 경로).
|
||||
- 로컬 herdr 잡만 처리한다(remote·human 제외).
|
||||
- (잡, dispatch token, attempt) 하나는 한 번만 처리한다(잡 단위 flock 과 잡 폴더의 마커).
|
||||
- 등록은 `atomic_dump_yaml` 로 쓰고 `session_id_source=discovered`, `session_id_verified=true` 를 남긴다. 실패하면 이유를 행에 남기고, 잡의 결과는 바꾸지 않는다.
|
||||
- 에이전트가 실행하는 `publish_event.py` 에는 쓰기를 넣지 않았다.
|
||||
4. **reconcile**: drift C 의 agy·hermes·opencode·codex 가 같은 capture 를 부른다. agy 의 `*.db` glob 은 없어졌다. `_pin_and_verify_resume` 은 `pin_row` 를 쓴다.
|
||||
|
||||
#### ✅ 품질 검증
|
||||
- **회귀**: `tests/test_issue40_auto_pin.py`(27개). 이슈의 완료 조건 네 가지를 고정한다.
|
||||
1. 다른 작업 공간의 ID 를 등록하지 않는다.
|
||||
2. 데몬 없이(`MAM_NO_SUBSCRIBER_DAEMON=1`) 첫 completed 뒤 agy·opencode·codex·hermes 가 등록된다.
|
||||
3. 래퍼와 루프 복구가 같은 잡을 처리해도 등록은 한 번이고, 후보가 모호하면 등록하지 않고 이유를 남긴다.
|
||||
4. claude·grok 행과 이미 ID 가 있는 행은 바뀌지 않는다.
|
||||
|
||||
base(v4.9.8)에서 실패한다. `tests/test_issue64_ro_connect.py` 의 다른 작업 공간 agy 단언은 이제 거절(False)을 기대한다.
|
||||
- **리뷰 (`--all-reviewer`, `--plan`, 구현은 claude creator)**: 1회차(@feccfd5) **4/4 PASS**. 리포트는 `.agents/reports/<session>/` 에 있다.
|
||||
- **전체 스위트 (macOS, Python 3.9.6, @feccfd5)**: 2068 passed, 56 skipped, 3 failed.
|
||||
- 실패 3개는 모두 `tests/test_issue42_skill_blocks.py` 였다. 이 변경이 옮긴 SKILL.md 블록과 `reconcile.sh` 근거 줄 번호가 목록에 남아 있었다.
|
||||
- `tests/data/skill_code_blocks.json` 을 갱신한 뒤(@84af709) 이 파일은 37 passed, 1 skipped.
|
||||
- 실제 `~/.claude`·`/private/tmp/claude-<uid>`·herdr 서버 pane 목록·opencode 의 data·state·config 에 이 실행이 남긴 것은 없었다.
|
||||
- **알려진 비차단**:
|
||||
- agy 등록은 `lsof`·`ps`, 행의 pane pid, agy 가 presence lock 이나 DB 를 열고 있음에 기댄다. `lsof` 가 없는 환경에서는 agy 가 자동 등록되지 않는다(오등록보다 미등록을 택함). completed 경로는 이유를 행에 남긴다.
|
||||
- reconcile 은 `ambiguous` 만 이유를 남기고 `unverifiable-owner`·`owner-mismatch`·`rejected` 는 조용히 건너뛴다.
|
||||
- id 가 빈 claude 행에서 `pre-assigned` 보호가 걸리는지 확인하는 테스트는 없다.
|
||||
- 중복 마커는 실패 결과도 기록하므로, 래퍼 시점에 `no-candidate` 였던 잡은 루프 복구에서 다시 시도하지 않는다. 다음 잡의 completed 나 reconcile 이 다시 시도한다.
|
||||
- 다른 행이 가진 ID 는 멈춘(stopped) 행의 것이어도 제외한다.
|
||||
- stop 의 캡처 경로 정리는 범위 밖이다.
|
||||
|
||||
### 🚀 `v4.9.8` — agy·codex·hermes DB 조회도 읽기 전용 (Issue #64) (2026-10-20)
|
||||
|
||||
> **패치 (PATCH Release)**: v4.9.7 이 opencode 에 적용한 읽기 전용 열기(`_ro_connect`)를 agy·codex·hermes 의 조회에도 적용한다. macOS 의 시스템 SQLite 는 쓰기 가능으로 열었다 닫기만 해도 `-wal`·`-shm` 을 남긴다(persistent WAL). 그래서 MAM 의 조회가 다른 작업 공간의 agy 대화 DB 옆에 사이드카를 만들 수 있었다. Linux 는 닫을 때 지우므로 Linux 확인은 이슈에서 따로 한다.
|
||||
|
||||
Reference in new issue
Block a user