feat(loop): complete Issue #5 Phase 4 immutable runtime and freeze removal
- Implement eager module loading (lib_py.loop.eager) to preload all framework dependencies into sys.modules and enforce PYTHONDONTWRITEBYTECODE=1. - Synchronize runtime protocol version with MAM_VERSION constant (4.3.0). - Bypass /tmp/mam-loop-freeze.XXXXXX copy overhead by default in Python mode while preserving legacy rollback fallback (MAM_LOOP_PY=0 / MAM_LOOP_FREEZE=1). - Add tests/test_issue5_phase4_runtime.py verifying eager import completeness, mid-flight code modification immunity (B-13), and freeze bypass. - Pass full test suite (749 tests, 0 failures).
This commit is contained in:
1 parent
8cd256cc7a
commit
f413f6ada6
6 files changed
+390
-11
No files matched your search
@@ -0,0 +1,55 @@
|
||||
# 📑 Issue #5 Phase 4 — 불변 런타임 검증 및 Freeze 제거 명세
|
||||
|
||||
- **문서 버전**: Rev.1
|
||||
- **상태**: Phase 4 설계 및 실행 기준선 (Immutable Runtime & Freeze Removal Specification)
|
||||
- **대상 파일**:
|
||||
- `lib_py/loop/runner.py`, `lib_py/loop/eager.py`
|
||||
- `.agents/skills/multi-agent-mux-loop/scripts/run_loop.sh`
|
||||
- `docs/contracts/issue-5/task.md`
|
||||
- `tests/test_issue5_phase4_runtime.py`
|
||||
|
||||
---
|
||||
|
||||
## 1. 개요 및 한 문장 요약
|
||||
|
||||
**Python 상주 프로세스의 메모리 불변성(Eager Import)을 통해 작업 중 코드 수정 크래시(B-13)를 원천 차단하고, 임시 비계였던 `/tmp/mam-loop-freeze.XXXXXX` 스냅샷 복사 우회책을 안전하게 제거한다.**
|
||||
|
||||
Phase 3에서 `run_loop.sh`가 Python `lib_py.loop`로 위임됨에 따라, Bash가 실행 중 스크립트를 디스크 바이트 오프셋 단위로 재독해하면서 발생하던 크래시(B-13: `unexpected EOF` / 구문 파괴)의 원인이 근본적으로 해소되었습니다. Phase 4에서는 이를 엄밀히 검증하고 불필요한 I/O 복사 오버헤드를 철거합니다.
|
||||
|
||||
---
|
||||
|
||||
## 2. 핵심 설계 요소
|
||||
|
||||
### 2-1. Eager Import 상주 정책 (`eager.py` & `runner.py`)
|
||||
- **지연 로딩(Lazy Import) 금지**:
|
||||
- 루프 실행 도중 디스크 상의 `.py` 파일이 편집되더라도 런타임에 영향을 주지 않도록, 프로세스 기동 시점에 모든 의존 모듈(`delegation`, `loop`, `paho.mqtt` 등)을 메모리에 상주시킵니다.
|
||||
- `eager_load()` 함수를 기동 최우선 단계에서 호출하여 `sys.modules`에 모든 바이트코드와 AST를 고정합니다.
|
||||
- **자식 프로세스 템플릿 격리**:
|
||||
- 서브프로세스로 실행되는 도구 호출(`delegate_job`) 시 `PYTHONDONTWRITEBYTECODE=1`을 유지하여 디스크에 `.pyc` 파편이 남거나 작업 트리가 오염되는 것을 방지합니다.
|
||||
|
||||
### 2-2. B-13 Freeze 스냅샷 제거 및 경량화 (`run_loop.sh`)
|
||||
- **기본 동작 변경**:
|
||||
- Python 루프 모드(`MAM_LOOP_PY=1`, 기본값)에서는 파일 복사 스냅샷(`/tmp/mam-loop-freeze.XXXXXX`)을 생성하지 않고 직접 실행합니다.
|
||||
- 디스크 I/O 절감: 턴당 수백 개 파일 복사 오버헤드(수십~수백 ms) 완전 제거.
|
||||
- **안전 롤백 경로 보존**:
|
||||
- 환경변수 `MAM_LOOP_FREEZE=1` 또는 레거시 셸 루프 모드(`MAM_LOOP_PY=0`)가 명시된 경우에만 레거시 Freeze 스냅샷 로직이 활성화됩니다.
|
||||
- 기존 테스트의 락/가드 해제 계약(`_mam_release_guard`)은 외부 주입 스냅샷 디렉터리가 있을 경우 그대로 안전하게 정리합니다.
|
||||
|
||||
### 2-3. 라이브 헬퍼 버전 호환성 게이트 (`MAM_VERSION`)
|
||||
- `lib.sh`의 `MAM_VERSION`("4.3.0")과 프로세스 런타임의 프로토콜 버전을 동기화하고, 불일치 발생 시 안전하게 fail-closed 거부합니다.
|
||||
|
||||
---
|
||||
|
||||
## 3. 검증 게이트 (P4-01 ~ P4-03)
|
||||
|
||||
### 📌 P4-01: Eager Import 상주 및 불변성 검증
|
||||
- 기동 시 전체 모듈이 메모리에 로드되어 런타임 중 추가 임포트 I/O가 발생하지 않음을 검증.
|
||||
- `tests/test_issue5_phase4_runtime.py`에 모듈 목록 및 바이트코드 상주 테스트 추가.
|
||||
|
||||
### 📌 P4-02: 작업 중 코드 수정(B-13) 내구성 스트레스 테스트
|
||||
- 루프가 실행되는 도중 디스크 상의 소스 코드가 수정되거나 임의의 내용으로 치환되더라도, 이미 상주한 파이썬 프로세스가 에러 없이 끝까지 작업을 완결함을 시뮬레이션 검증.
|
||||
|
||||
### 📌 P4-03: Freeze 우회책 제거, 전면 회귀 및 운영 문서 동기화
|
||||
- `run_loop.sh`의 기본 Freeze 복사 분기를 비활성화.
|
||||
- 전체 회귀 테스트(744개+) 0-Fail 확인.
|
||||
- `task.md` 및 마이그레이션 운영 문서 갱신 완료.
|
||||
@@ -129,7 +129,11 @@
|
||||
|
||||
---
|
||||
|
||||
## Phase 4: 불변 런타임 검증 및 Freeze 제거 (후속)
|
||||
- [ ] **P4-01** eager import+child/helper/template 실행 버전 정책 구현/검증.
|
||||
- [ ] **P4-02** 실행 중 코드 교체와 늦은 재심/승격/rollback 스트레스 검증.
|
||||
- [ ] **P4-03** gate 통과 후에만 Freeze 제거 및 운영 문서 갱신.
|
||||
## Phase 4: 불변 런타임 검증 및 Freeze 제거 (완료)
|
||||
- [x] **P4-01** eager import+child/helper/template 실행 버전 정책 구현/검증.
|
||||
- *증거*: `.agents/skills/lib_py/loop/eager.py` 구현 및 `runner.LoopRunner.__init__`에서 최우선 호출. 모든 표준/프레임워크 코어 모듈(47개+)을 기동 시점에 `sys.modules`에 상주시킴. `sys.dont_write_bytecode = True` 및 `PYTHONDONTWRITEBYTECODE=1` 환경 설정으로 `.pyc` 디스크 오염 원천 차단. `FRAMEWORK_VERSION="4.3.0"`과 `MAM_VERSION` 불일치 시 fail-closed 검증 (`test_p4_01`).
|
||||
- [x] **P4-02** 실행 중 코드 교체와 늦은 재심/승격/rollback 스트레스 검증.
|
||||
- *증거*: `tests/test_issue5_phase4_runtime.py::test_p4_02_midflight_code_replacement_stress`. 실행 중인 서브프로세스의 디스크 상 소스 파일 및 워커 모듈을 문법 오류(`INVALID SYNTAX`, `unexpected EOF`)로 치환/파괴한 상태에서도 메모리 상주 바이트코드와 AST를 통해 판정 파싱(`parser.parse_verdict`), 체크포인트 원자적 기록/복구(`checkpoint.save_checkpoint`/`load_checkpoint`)가 무결하게 완결됨을 실증.
|
||||
- [x] **P4-03** gate 통과 후에만 Freeze 제거 및 운영 문서 갱신.
|
||||
- *증거*: `run_loop.sh`의 기본 Freeze 스냅샷 생성(`/tmp/mam-loop-freeze.XXXXXX`)을 우회(Python 모드 `MAM_LOOP_PY=1` 기본값 시 복사 I/O 완전 제거). 긴급 롤백 경로(`MAM_LOOP_FREEZE=1` 또는 `MAM_LOOP_PY=0`) 정상 보존. 전체 회귀 테스트 스위트 749개(744개 유닛/통합 + 5개 Tier 4 E2E) 100% 0-Fail 통과.
|
||||
|
||||
Reference in new issue
Block a user