MAM 은 에이전트와 그 상태(.mam/ 의 레지스트리·잡 기록·로그)를 그 컴퓨터의 로컬 파일로만 관리합니다. NFS·SMB(CIFS)·SSHFS 같은 네트워크 파일 시스템 위의 .mam/ 은 공식 지원하지 않습니다. 다른 컴퓨터에 닿아야 하는 일은 별도 MCP·인터페이스나 원격 에이전트로 풉니다(원격 지원에서 따로 다룹니다).
그런데 지금 코드는 네트워크 파일 시스템을 "지원하되 조심하는" 쪽으로 되어 있습니다.
지금의 동작
lib.sh 의 _check_is_nfs 가 .mam/ 의 마운트를 df·mount 출력으로 판정합니다.
레지스트리 쓰기(atomic_dump_yaml) 때 네트워크 파일 시스템이면 경고를 두 줄 출력하고, MAM_IS_NFS=true 를 넘겨 SQLite 저널을 WAL 대신 DELETE 로 씁니다(lib_py/atomic_yaml.py). 동작은 그대로 계속합니다.
이 판정은 lib.sh 를 거치는 쓰기에만 있습니다. Python 으로 바로 레지스트리를 쓰는 경로(예: #71 의 python -m lib_py.registry_format)는 판정하지 않고 WAL 로 씁니다.
잡 기록(.mam/jobs)의 flock 잠금도 네트워크 파일 시스템에서는 믿을 수 없지만 판정하지 않습니다.
mount | grep -E "$mountpoint..." 는 마운트 경로를 이스케이프 없이 정규식에 넣습니다(IMPROVEMENTS.md B-5 잔여).
README 는 "네트워크 파일 시스템이면 경고하고 DELETE 로 바꾼다" 고 안내합니다(README.md:99, README.ko.md:99).
제안
지원하지 않는 환경은 문서가 아니라 코드로 거부합니다.
판정 한 곳: lib_py 에 "이 경로가 네트워크 파일 시스템 위인가" 를 판정하는 함수를 하나 둡니다. Linux 와 macOS 를 모두 지원하고, 정규식 보간 없이 판정합니다. lib.sh 의 _check_is_nfs 는 이 함수를 부르거나 지웁니다.
거부 지점:
레지스트리 쓰기 함수(lib_py/atomic_yaml.py) 안에서 판정하고, 네트워크 파일 시스템이면 아무것도 쓰지 않고 오류로 멈춥니다. lib.sh 를 거치든 Python 으로 바로 부르든 같은 결과가 됩니다.
잡 기록을 쓰는 곳도 같은 판정을 거칠지 정합니다.
처음 실행하는 단계(설치 deploy/install.sh, multi-agent-mux-orc-onboard)에서 미리 거부해, 쓰는 도중이 아니라 시작할 때 알게 합니다.
DELETE 대체 경로 삭제: 거부하므로 MAM_IS_NFS 와 journal_mode=DELETE 분기는 지웁니다.
문서: README 의 네트워크 파일 시스템 항목을 "지원하지 않으며 거부한다" 로 고칩니다. 바꾸는 줄은 최소로 합니다.
정한 것
우회 수단은 두지 않습니다. 환경 변수 등으로 거부를 끄는 방법을 만들지 않습니다. 공식 지원하지 않는 환경이기 때문입니다.
읽기 전용 명령(status 등)은 거부하지 않습니다. 거부는 쓰기에만 둡니다.
읽기는 아무것도 바꾸지 않으므로 레지스트리를 망가뜨리지 않습니다.
쓰기를 거부하면 create·resume·stop·모니터가 모두 시작부터 멈추므로, 사용자는 바로 알게 됩니다.
네트워크 파일 시스템 위의 레지스트리는 로컬에서 만든 것을 옮긴 경우뿐입니다. 그때 status 로 상태를 볼 수 있으면 로컬로 되돌리는 데 도움이 됩니다.
완료 조건 (회귀 테스트로)
.mam/ 이 네트워크 파일 시스템으로 판정되면 레지스트리 쓰기가 아무것도 바꾸지 않고 0 이 아닌 값으로 끝난다. lib.sh 경로와 Python 직접 호출 경로 모두.
설치와 orc-onboard 가 같은 경우 시작 단계에서 거부한다.
로컬 파일 시스템에서는 동작이 그대로다(WAL).
마운트 경로에 정규식 특수 문자(. 등)가 있어도 판정이 맞다.
journal_mode=DELETE 분기와 MAM_IS_NFS 가 코드에 남지 않고, 거부를 끄는 환경 변수나 옵션이 없다.
같은 경우에도 status 같은 읽기 전용 명령은 거부하지 않는다.
Linux 와 macOS(bash 3.2, Python 3.9)에서 통과한다.
관련
#71: 레지스트리 형식 진입점(python -m lib_py.registry_format)이 이 판정을 거치지 않는다는 리뷰 메모에서 나왔습니다.
## 배경
MAM 은 에이전트와 그 상태(`.mam/` 의 레지스트리·잡 기록·로그)를 **그 컴퓨터의 로컬 파일로만** 관리합니다. NFS·SMB(CIFS)·SSHFS 같은 네트워크 파일 시스템 위의 `.mam/` 은 공식 지원하지 않습니다. 다른 컴퓨터에 닿아야 하는 일은 별도 MCP·인터페이스나 원격 에이전트로 풉니다(원격 지원에서 따로 다룹니다).
그런데 지금 코드는 네트워크 파일 시스템을 "지원하되 조심하는" 쪽으로 되어 있습니다.
## 지금의 동작
- `lib.sh` 의 `_check_is_nfs` 가 `.mam/` 의 마운트를 `df`·`mount` 출력으로 판정합니다.
- 레지스트리 쓰기(`atomic_dump_yaml`) 때 네트워크 파일 시스템이면 경고를 두 줄 출력하고, `MAM_IS_NFS=true` 를 넘겨 SQLite 저널을 `WAL` 대신 `DELETE` 로 씁니다(`lib_py/atomic_yaml.py`). 동작은 그대로 계속합니다.
- 이 판정은 lib.sh 를 거치는 쓰기에만 있습니다. Python 으로 바로 레지스트리를 쓰는 경로(예: #71 의 `python -m lib_py.registry_format`)는 판정하지 않고 `WAL` 로 씁니다.
- 잡 기록(`.mam/jobs`)의 `flock` 잠금도 네트워크 파일 시스템에서는 믿을 수 없지만 판정하지 않습니다.
- `mount | grep -E "$mountpoint..."` 는 마운트 경로를 이스케이프 없이 정규식에 넣습니다(IMPROVEMENTS.md B-5 잔여).
- README 는 "네트워크 파일 시스템이면 경고하고 DELETE 로 바꾼다" 고 안내합니다(`README.md:99`, `README.ko.md:99`).
## 제안
지원하지 않는 환경은 문서가 아니라 코드로 거부합니다.
1. **판정 한 곳**: `lib_py` 에 "이 경로가 네트워크 파일 시스템 위인가" 를 판정하는 함수를 하나 둡니다. Linux 와 macOS 를 모두 지원하고, 정규식 보간 없이 판정합니다. lib.sh 의 `_check_is_nfs` 는 이 함수를 부르거나 지웁니다.
2. **거부 지점**:
- 레지스트리 쓰기 함수(`lib_py/atomic_yaml.py`) 안에서 판정하고, 네트워크 파일 시스템이면 아무것도 쓰지 않고 오류로 멈춥니다. lib.sh 를 거치든 Python 으로 바로 부르든 같은 결과가 됩니다.
- 잡 기록을 쓰는 곳도 같은 판정을 거칠지 정합니다.
- 처음 실행하는 단계(설치 `deploy/install.sh`, `multi-agent-mux-orc-onboard`)에서 미리 거부해, 쓰는 도중이 아니라 시작할 때 알게 합니다.
3. **`DELETE` 대체 경로 삭제**: 거부하므로 `MAM_IS_NFS` 와 `journal_mode=DELETE` 분기는 지웁니다.
4. **문서**: README 의 네트워크 파일 시스템 항목을 "지원하지 않으며 거부한다" 로 고칩니다. 바꾸는 줄은 최소로 합니다.
## 정한 것
- **우회 수단은 두지 않습니다.** 환경 변수 등으로 거부를 끄는 방법을 만들지 않습니다. 공식 지원하지 않는 환경이기 때문입니다.
- **읽기 전용 명령(status 등)은 거부하지 않습니다.** 거부는 쓰기에만 둡니다.
- 읽기는 아무것도 바꾸지 않으므로 레지스트리를 망가뜨리지 않습니다.
- 쓰기를 거부하면 create·resume·stop·모니터가 모두 시작부터 멈추므로, 사용자는 바로 알게 됩니다.
- 네트워크 파일 시스템 위의 레지스트리는 로컬에서 만든 것을 옮긴 경우뿐입니다. 그때 status 로 상태를 볼 수 있으면 로컬로 되돌리는 데 도움이 됩니다.
## 완료 조건 (회귀 테스트로)
1. `.mam/` 이 네트워크 파일 시스템으로 판정되면 레지스트리 쓰기가 아무것도 바꾸지 않고 0 이 아닌 값으로 끝난다. lib.sh 경로와 Python 직접 호출 경로 모두.
2. 설치와 orc-onboard 가 같은 경우 시작 단계에서 거부한다.
3. 로컬 파일 시스템에서는 동작이 그대로다(`WAL`).
4. 마운트 경로에 정규식 특수 문자(`.` 등)가 있어도 판정이 맞다.
5. `journal_mode=DELETE` 분기와 `MAM_IS_NFS` 가 코드에 남지 않고, 거부를 끄는 환경 변수나 옵션이 없다.
6. 같은 경우에도 status 같은 읽기 전용 명령은 거부하지 않는다.
7. Linux 와 macOS(bash 3.2, Python 3.9)에서 통과한다.
## 관련
- #71: 레지스트리 형식 진입점(`python -m lib_py.registry_format`)이 이 판정을 거치지 않는다는 리뷰 메모에서 나왔습니다.
- #72: 업데이트 스킬이 이 진입점을 부릅니다.
- #42: 정해진 절차는 문서보다 코드로.
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.
배경
MAM 은 에이전트와 그 상태(
.mam/의 레지스트리·잡 기록·로그)를 그 컴퓨터의 로컬 파일로만 관리합니다. NFS·SMB(CIFS)·SSHFS 같은 네트워크 파일 시스템 위의.mam/은 공식 지원하지 않습니다. 다른 컴퓨터에 닿아야 하는 일은 별도 MCP·인터페이스나 원격 에이전트로 풉니다(원격 지원에서 따로 다룹니다).그런데 지금 코드는 네트워크 파일 시스템을 "지원하되 조심하는" 쪽으로 되어 있습니다.
지금의 동작
lib.sh의_check_is_nfs가.mam/의 마운트를df·mount출력으로 판정합니다.atomic_dump_yaml) 때 네트워크 파일 시스템이면 경고를 두 줄 출력하고,MAM_IS_NFS=true를 넘겨 SQLite 저널을WAL대신DELETE로 씁니다(lib_py/atomic_yaml.py). 동작은 그대로 계속합니다.python -m lib_py.registry_format)는 판정하지 않고WAL로 씁니다..mam/jobs)의flock잠금도 네트워크 파일 시스템에서는 믿을 수 없지만 판정하지 않습니다.mount | grep -E "$mountpoint..."는 마운트 경로를 이스케이프 없이 정규식에 넣습니다(IMPROVEMENTS.md B-5 잔여).README.md:99,README.ko.md:99).제안
지원하지 않는 환경은 문서가 아니라 코드로 거부합니다.
lib_py에 "이 경로가 네트워크 파일 시스템 위인가" 를 판정하는 함수를 하나 둡니다. Linux 와 macOS 를 모두 지원하고, 정규식 보간 없이 판정합니다. lib.sh 의_check_is_nfs는 이 함수를 부르거나 지웁니다.lib_py/atomic_yaml.py) 안에서 판정하고, 네트워크 파일 시스템이면 아무것도 쓰지 않고 오류로 멈춥니다. lib.sh 를 거치든 Python 으로 바로 부르든 같은 결과가 됩니다.deploy/install.sh,multi-agent-mux-orc-onboard)에서 미리 거부해, 쓰는 도중이 아니라 시작할 때 알게 합니다.DELETE대체 경로 삭제: 거부하므로MAM_IS_NFS와journal_mode=DELETE분기는 지웁니다.정한 것
완료 조건 (회귀 테스트로)
.mam/이 네트워크 파일 시스템으로 판정되면 레지스트리 쓰기가 아무것도 바꾸지 않고 0 이 아닌 값으로 끝난다. lib.sh 경로와 Python 직접 호출 경로 모두.WAL)..등)가 있어도 판정이 맞다.journal_mode=DELETE분기와MAM_IS_NFS가 코드에 남지 않고, 거부를 끄는 환경 변수나 옵션이 없다.관련
python -m lib_py.registry_format)이 이 판정을 거치지 않는다는 리뷰 메모에서 나왔습니다.