release(v4.7.3): bump framework and eight skills to 4.7.3 in lockstep; archive PR #37 merge-side reviews
Issue #36: delegated prompts travel by file, a delegation that fails ends the loop with rc 1. VERSIONS.md carries the entry; the merge-side reports (round 1 @59be1c8 and round 2 @708262a with identity sidecars, base59be1c8-> head708262a, evidence review-tree) are archived under .agents/reports/<session>/. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01VCgu9Fa9iT7TbJUSzdq4Ff
This commit is contained in:
1 parent
708262a598
commit
c3e6a7e96d
28 files changed
+740
-26
No files matched your search
@@ -0,0 +1,44 @@
|
||||
# 🔍 Review Report — Job 93408cd8 (PR #37 @ `59be1c8`)
|
||||
|
||||
- **Reviewer**: `reviewer-grok-01` · 2026-09-24
|
||||
- **검증 경로**: `/var/folders/q_/68sxgw3j073dgjg8wl9s08vw0000gn/T/mam-review/loop-20260924T080014Z-2b3df0/1`
|
||||
- **identity**: base `1debc7d` head `59be1c8` tree `a009c90` (일치)
|
||||
- **본 체크아웃**: `main` `1debc7d` 유지
|
||||
|
||||
`git diff --check` 클린. 6커밋.
|
||||
|
||||
## NOT PASS
|
||||
|
||||
### N1. S9 가 macOS 에서 실패한다
|
||||
|
||||
`tests/test_issue36_prompt_transport.py:602` 가 stderr 에 리터럴 `File too large` 를 요구한다. 이 호스트(Darwin)에서 `ulimit -f 1` 로 `delegate_job_safe` 쓰기가 실패하면 rc 는 1 이고 stderr 는 이식 가능한 문장뿐이다:
|
||||
|
||||
`delegate_job_safe: cannot write the prompt file under …/.mam`
|
||||
|
||||
bash 가 libc 문구 `File too large` 를 찍지 않아 단언이 깨진다. 같은 스위트는 **1 failed, 99 passed, 1 skipped** (`s1b` 는 `linux_only`).
|
||||
|
||||
**대안**: 잔여 파일 없음과 `cannot write the prompt file` 은 모든 플랫폼에서 단언하고, `File too large` 는 Linux 에서만 보거나 빼라. 제품 경로(`run_loop.sh` 의 `rm -f` + stderr)는 이미 그 계약이다.
|
||||
|
||||
## 그 외 (N1 만 막음)
|
||||
|
||||
**(1) 전달.** 러너 `_run_cmd` 는 `--prompt-file` 만 (`runner.py:485`). 래퍼는 파일이면 그 경로를 registry 에 넘기고, 그 전에 읽는다 (`multi-agent-mux-delegate-job:188-199`). `cli.py` / `registry.py` 는 `--prompt` 와 `--prompt-file` 상호 배타. `lib.sh` 제출 두 곳과 `delegate_job_safe` 가 `--prompt` 를 파일로 바꾼다. 옛 셸 러너의 `--prompt` 호출은 모두 `delegate_job_safe` 를 탄다. 문서의 `--prompt` 예시는 하위 호환. 임시 파일은 제어 루트 `.mam/prompt-*`, 래퍼 반환 후 삭제. 셸 쓰기 실패는 `rm -f`.
|
||||
|
||||
**(2) 실패.** OSError → rc 126, 재시도도 같은 처리, 등록 실패면 `None` → 루프 rc 1. 재심·중재 **미등록** 은 rc 1. 순응 잡은 미등록뿐 아니라 `wait_for_job` 실패도 rc 1 (`runner.py:1393-1395`). 코드가 안 고쳐진 채 다음 라운드로 가면 안 되므로 강화가 맞다. 로그 문장이 wait 실패에도 “Failed to register” 인 것은 비차단.
|
||||
|
||||
**(3) diff 상한.** `diff_collect.sh` 주석: 증거만 자르고 전달은 파일. 잘린 diff 의 diff-only 원격 거부는 `runner.py:1204` 그대로.
|
||||
|
||||
**(4) create.** 주입문은 brief 절대경로만. `delegate_publish_cmd` 와 `--expect-dispatch-token` 유지. S8(100·130500) 통과.
|
||||
|
||||
**(5) 테스트.** 140KB 는 실제 wrapper/registry subprocess. S1b(E2BIG)는 Linux 전용 — macOS 는 커널 상한이 없어 skip 이 맞다. 경로는 파일을 검증한다. S8/S9 는 mock 이 아님.
|
||||
|
||||
**(6)–(8).** `--prompt` 짧은 문자열은 그대로. 4.7.3 bump 는 오케스트레이터 예정.
|
||||
|
||||
## 테스트
|
||||
|
||||
검증 경로, `AGENT_PYTHON_BIN` = 컨트롤 `.venv`, basetemp `/tmp`:
|
||||
|
||||
`test_issue36_prompt_transport.py` + `test_issue23_24_startup_path.py` + `test_loop_cli.py`
|
||||
|
||||
**1 failed, 99 passed, 1 skipped in 237.33s.**
|
||||
|
||||
[VERDICT: NOT PASS]
|
||||
@@ -0,0 +1,14 @@
|
||||
{
|
||||
"loop_id": "loop-20260924T085626Z-b8987e",
|
||||
"base_sha": "59be1c89209a232059aec0c5aeecc2329929cb49",
|
||||
"head_sha": "708262a598c4301c0ccc70efba5401093b4b1e30",
|
||||
"tree_sha": "d601c2d01bb4c09931e5e1989e140b01d51f5b96",
|
||||
"review_commit": "708262a598c4301c0ccc70efba5401093b4b1e30",
|
||||
"reviewer": "reviewer-grok-01",
|
||||
"job_id": "e44ac99c",
|
||||
"verdict": "PASS",
|
||||
"transport": "herdr",
|
||||
"evidence": "review-tree",
|
||||
"isolation": "worktree",
|
||||
"verified_at": "2026-09-24T09:09:43Z"
|
||||
}
|
||||
@@ -0,0 +1,36 @@
|
||||
# 🔍 Review Report — Job e44ac99c (PR #37 델타 `59be1c8...708262a`)
|
||||
|
||||
- **Reviewer**: `reviewer-grok-01` · 2026-09-24
|
||||
- **검증 경로**: `/var/folders/q_/68sxgw3j073dgjg8wl9s08vw0000gn/T/mam-review/loop-20260924T085626Z-b8987e/1`
|
||||
- **identity**: head `708262a` tree `d601c2d` (일치). 1회차 grok NOT PASS (S9) 를 이 커밋이 닫음.
|
||||
- **본 체크아웃**: `main` `1debc7d` 유지.
|
||||
|
||||
`git diff --check 59be1c8...HEAD` 클린. 커밋 1개.
|
||||
|
||||
## (1) 세 정정 — 닫힘
|
||||
|
||||
**R1/H1.** `runner.py:472-491`: `prompt_file=""` 로 초기화하고, 이름을 쓰기 **전**에 잡은 뒤 `fh.write`. `OSError` 면 부분 파일을 지우고 rc 126 `CompletedProcess` 를 반환한다. 그 반환은 `subprocess.run` 의 try 에 들어가지 않으므로 래퍼는 실행되지 않고 unlink 는 한 번이다. 정상 경로는 아래 `finally` 가 한 번 지운다. rc 126 은 exec 실패와 같아 busy(5) 재시도가 아니고, stdout 에 job id 가 없으면 `None` → 루프 rc 1. S4c 통과. 임시 사본에서 이 except 를 빼면 S4c 가 `OSError: No space left on device` 로 실패했다.
|
||||
|
||||
**R2/N1.** S9 (`test_issue36_prompt_transport.py`) 는 rc≠0, `prompt-shloop-*` 없음, `cannot write the prompt file` 를 모든 플랫폼에서 보고, `File too large` 는 `sys.platform == "linux"` 일 때만. 이 macOS 에서 S9 포함 **23 passed, 1 skipped**.
|
||||
|
||||
**H3.** 래퍼 `multi-agent-mux-delegate-job:193` `[[ -s "$PROMPT_FILE" ]]` 아니면 exit 1, `is empty`. S1e 통과.
|
||||
|
||||
## (2) 빈 파일 거부
|
||||
|
||||
막힌 것은 내용이 없는 `--prompt-file` 뿐이다. `--prompt` 짧은 문자열과 loop 형 `prompt.md`(본문을 쓴 뒤 넘김)은 그대로다. 빈 파일을 등록해야 하는 호출자는 없다.
|
||||
|
||||
## (3) 1회차·락스텝
|
||||
|
||||
파일 전달, #23 brief 경로, 순응 잡 rc 1 은 이 커밋이 되돌리지 않는다. 4.7.3 bump 는 오케스트레이터 예정. 병합 차단 아님.
|
||||
|
||||
## 테스트
|
||||
|
||||
검증 경로, `AGENT_PYTHON_BIN` = 컨트롤 `.venv`, basetemp `/tmp`:
|
||||
|
||||
`tests/test_issue36_prompt_transport.py` → **23 passed, 1 skipped in 38.74s** (skip 은 Linux `E2BIG` S1b).
|
||||
|
||||
## 종합
|
||||
|
||||
1회차 N1 과 쓰기 실패·빈 파일 지적이 코드·macOS 실행과 맞다. 설계 재작업 불필요.
|
||||
|
||||
[VERDICT: PASS]
|
||||
Reference in new issue
Block a user