agy·codex·hermes 의 조회 전용 SQLite 열기를 공용 _ro_connect 로 바꿨다. macOS 시스템 SQLite 는 쓰기 가능으로 열었다 닫기만 해도 -wal·-shm 을 남긴다. 그래서 MAM 의 조회가 다른 작업 공간의 agy 대화 DB 옆에 사이드카를 만들 수 있었다.
원인: reconcile.sh drift C(agy)는 고정되지 않은 agy 행이 있으면 호스트 공용 대화 폴더의 모든 *.db 를 후보로 본다. 이어지는 AgyAgentAdapter.verify_artifact 가 SELECT count(*) FROM steps 를 쓰기 가능 연결로 실행했다. status.sh·create_session.sh 도 reconcile 을 부른다.
공용 helper: _ro_connect 를 opencode 어댑터에서 lib_py/agents/base.py 로 옮겼다. 동작은 그대로이고, opencode 는 같은 함수를 import 한다.
바뀐 조회:
agy verify_artifact
codex _find_rollout_via_db·discover
hermes verify_artifact·discover
status.sh hermes·codex(두 모드)
reconcile.sh drift C hermes·codex
db_rows_naming 기본 열기
그대로 둔 것: purge 의 의도된 쓰기와 MAM 자신의 DB.
검증
회귀 테스트: tests/test_issue64_ro_connect.py(43개). 사이드카 4상태(clean·leftover·walonly·writer)에서 조회 결과와 DB 폴더 목록이 바뀌지 않는지 본다. base(v4.9.7)에서는 23개가 실패한다.
리뷰: --all-reviewer 1회차(@b0eccc5) 4/4 PASS. 구현은 agy creator 가 맡았다.
## 요약
Refs #64 (macOS 확인분. Linux 확인은 이슈에서 계속)
agy·codex·hermes 의 조회 전용 SQLite 열기를 공용 `_ro_connect` 로 바꿨다. macOS 시스템 SQLite 는 쓰기 가능으로 열었다 닫기만 해도 `-wal`·`-shm` 을 남긴다. 그래서 MAM 의 조회가 다른 작업 공간의 agy 대화 DB 옆에 사이드카를 만들 수 있었다.
- **원인**: `reconcile.sh` drift C(agy)는 고정되지 않은 agy 행이 있으면 호스트 공용 대화 폴더의 모든 `*.db` 를 후보로 본다. 이어지는 `AgyAgentAdapter.verify_artifact` 가 `SELECT count(*) FROM steps` 를 쓰기 가능 연결로 실행했다. `status.sh`·`create_session.sh` 도 reconcile 을 부른다.
- **공용 helper**: `_ro_connect` 를 opencode 어댑터에서 `lib_py/agents/base.py` 로 옮겼다. 동작은 그대로이고, opencode 는 같은 함수를 import 한다.
- **바뀐 조회**:
- agy `verify_artifact`
- codex `_find_rollout_via_db`·`discover`
- hermes `verify_artifact`·`discover`
- `status.sh` hermes·codex(두 모드)
- `reconcile.sh` drift C hermes·codex
- `db_rows_naming` 기본 열기
- **그대로 둔 것**: purge 의 의도된 쓰기와 MAM 자신의 DB.
## 검증
- **회귀 테스트**: `tests/test_issue64_ro_connect.py`(43개). 사이드카 4상태(clean·leftover·walonly·writer)에서 조회 결과와 DB 폴더 목록이 바뀌지 않는지 본다. base(v4.9.7)에서는 23개가 실패한다.
- **리뷰**: `--all-reviewer` 1회차(@b0eccc5) 4/4 PASS. 구현은 agy creator 가 맡았다.
- **전체 스위트 (macOS, Python 3.9.6, @b0eccc5)**: 2044 passed, 56 skipped, 실패 0.
- **흔적 점검**: 실제 홈의 claude·opencode 폴더, herdr 서버 pane 목록, agy·codex·hermes 홈의 사이드카에 이 실행이 남긴 것은 없었다.
## 비차단 (리뷰어 지적)
- 새 런타임 테스트의 reconcile 단계는 mock herdr 에 pane 이 없어 drift C 까지 가지 않는다. hermes·codex drift C 는 정적 검사가 지킨다.
- drift C(agy)는 다른 작업 공간에 기록된 대화도 후보로 받는다. 기존 동작이고, 새 테스트가 이를 단언하므로 그 결함을 고칠 때 함께 바꾼다.
- immutable 읽기의 경쟁 창(ms 수준)은 #60 에서 남긴 것이 세 에이전트로 넓어졌다.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
https://claude.ai/code/session_01VCgu9Fa9iT7TbJUSzdq4Ff
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
요약
Refs #64 (macOS 확인분. Linux 확인은 이슈에서 계속)
agy·codex·hermes 의 조회 전용 SQLite 열기를 공용
_ro_connect로 바꿨다. macOS 시스템 SQLite 는 쓰기 가능으로 열었다 닫기만 해도-wal·-shm을 남긴다. 그래서 MAM 의 조회가 다른 작업 공간의 agy 대화 DB 옆에 사이드카를 만들 수 있었다.reconcile.shdrift C(agy)는 고정되지 않은 agy 행이 있으면 호스트 공용 대화 폴더의 모든*.db를 후보로 본다. 이어지는AgyAgentAdapter.verify_artifact가SELECT count(*) FROM steps를 쓰기 가능 연결로 실행했다.status.sh·create_session.sh도 reconcile 을 부른다._ro_connect를 opencode 어댑터에서lib_py/agents/base.py로 옮겼다. 동작은 그대로이고, opencode 는 같은 함수를 import 한다.verify_artifact_find_rollout_via_db·discoververify_artifact·discoverstatus.shhermes·codex(두 모드)reconcile.shdrift C hermes·codexdb_rows_naming기본 열기검증
tests/test_issue64_ro_connect.py(43개). 사이드카 4상태(clean·leftover·walonly·writer)에서 조회 결과와 DB 폴더 목록이 바뀌지 않는지 본다. base(v4.9.7)에서는 23개가 실패한다.--all-reviewer1회차(@b0eccc5) 4/4 PASS. 구현은 agy creator 가 맡았다.비차단 (리뷰어 지적)
🤖 Generated with Claude Code
https://claude.ai/code/session_01VCgu9Fa9iT7TbJUSzdq4Ff