Files
multi-agent-mux/.agents/reports/reviewer-agy-01/report-fe8fd3b9.md
T

4.4 KiB
Raw Blame History

PR #62 Code Review Report — Round 2 (1d7b7da..6a37c00)

  • Job ID: fe8fd3b9
  • Reviewer: agy (herdr:reviewer-agy-01)
  • Branch: fix/issue-60-linux
  • Base .. Head: 1d7b7dab58a10fe86fd747b7290d47674ca93230 .. 6a37c0019baa31ee28b32a086e57b4c8239413c4 (9 commits; Round 2 delta: 6a37c00)
  • Verification Worktree: /var/folders/q_/68sxgw3j073dgjg8wl9s08vw0000gn/T/mam-review/loop-20261019T015801Z-05463c/1

1. Executive Summary

Commit 6a37c00 resolves all blocking and non-blocking findings from Round 1 (6a4e385):

  1. macOS SQLite persistent WAL in wal_home fixture (tests/test_issue60_linux_fixes.py:155-162):
    • After _wal_writer(db, ws).close() checkpoints the committed WAL rows into opencode.db, make("clean") removes opencode.db-wal and opencode.db-shm if present (which Apple's system libsqlite3.dylib keeps on disk due to SQLITE_FCNTL_PERSIST_WAL=1).
    • All 20 (query × state) combinations in test_a_query_reads_right_and_leaves_the_sidecars_alone now pass on macOS.
  2. Quoted example required in input_placeholder_pattern (.agents/skills/lib_py/agents/adapters/opencode.py:76-79):
    • Pattern updated to r'Ask anything(?:…|\.\.\.) "[^"]*"?' so a bare Ask anything… or Ask anything... typed by a user is preserved as draft input (test_typed_text_is_read_as_typed), while the 2.x home screen placeholder (both full and narrow-truncated) is stripped.
  3. Executable check for ~/.opencode/bin/opencode in auth_ok() (.agents/skills/lib_py/agents/adapters/opencode.py:321-323):
    • auth_ok() now checks os.path.isfile(local) and os.access(local, os.X_OK) for <home>/.opencode/bin/opencode (test_a_home_install_that_cannot_run_is_not_enough).
  4. Read-only _ro_connect in status.sh and reconcile.sh (.agents/skills/multi-agent-mux-status/scripts/status.sh:115-117, 316-318, .agents/skills/multi-agent-mux-monitor/scripts/reconcile.sh:953-955):
    • Both scripts now open opencode.db via _ro_connect(odb) instead of raw sqlite3.connect(odb), pinned by test_status_and_reconcile_open_the_database_read_only.

2. Verification of Cumulative Changes (1d7b7da..6a37c00)

Area Verification Result
_ro_connect (opencode.py:13-36) Verified all 3 branches (wal and shm -> mode=ro, not wal -> mode=ro&immutable=1, wal and not shm -> temp copy + .backup(:memory:)) across all 5 adapter queries and 4 DB states (clean, leftover, walonly, writer) on macOS Python 3.9.6 / Apple SQLite 3.51.0. Sidecars are neither created nor deleted.
_DB_PATHS cache (opencode.py:40, 145-166) Process-local cache keyed by (bin_path, HOME, XDG_DATA_HOME) caches successful debug paths lookups and does not cache failures.
input_placeholder_pattern (opencode.py:75-79, base.py:212-217, input_region.py:80-81) Matches `Ask anything(?:…
auth_ok & auth-ok CLI (opencode.py:319-323, __main__.py:120-127, create_session.sh:146-151) Verifies shutil.which("opencode") or executable <home>/.opencode/bin/opencode without running opencode --version.
status.sh, reconcile.sh, stop_session.sh status.sh and reconcile.sh use _ro_connect(odb); stop_session.sh logs unconfirmed /exit delivery accurately without altering exit codes or kill-chain behavior.

3. Test Execution Summary

Executed in /var/folders/q_/68sxgw3j073dgjg8wl9s08vw0000gn/T/mam-review/loop-20261019T015801Z-05463c/1 with isolated HOME, external --basetemp, PYTHONDONTWRITEBYTECODE=1, and -p no:cacheprovider:

  • tests/test_issue60_linux_fixes.py: 52 passed
  • tests/test_issue60_opencode_v2.py: 15 passed
  • tests/test_a4_adapter_contract.py: 33 passed
  • tests/test_issue50_dispatch.py: 49 passed
  • tests/test_issue55_agent_homes.py: 11 passed
  • tests/test_tier2_component.py: 42 passed
  • Total: 202 passed in 377.34s
  • Post-check: Verification worktree is clean (git status -s empty, git diff --check clean, no .mam directory), and no stray opencode test processes remain.

4. Findings

No blocking or non-blocking issues remaining. PR #62 (fix/issue-60-linux, 1d7b7da..6a37c00) is ready to merge.

[VERDICT: PASS]