fix(opencode): Mac review of the Linux fixes - a clean db has no sidecars on Mac either, the placeholder needs its example, a home install must run, status and reconcile read the db read-only (Issue #60, PR #62)

- tests: macOS SQLite keeps -wal/-shm after the last close (persistent WAL);
  the `clean` state removes them after the checkpointing close
- the 2.x placeholder pattern requires the quoted example, so a typed
  `Ask anything…` is read as a draft
- auth_ok takes ~/.opencode/bin/opencode only as an executable file
- status.sh and reconcile.sh (drift C) open opencode.db with _ro_connect

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VCgu9Fa9iT7TbJUSzdq4Ff
This commit is contained in:
GodopuandClaude Opus 5.5 committed 2026-10-19 10:57:40 +09:00
1 parent 6a4e385a78
commit 6a37c0019b
4 files changed
+40 -7

No files matched your search

+27
View File
@@ -81,6 +81,8 @@ def test_the_narrow_screen_stops_at_its_status_line_and_reads_ready():
'Ask anything… "x" and fix it',
"Ask anything about the build",
'Ask anything… "a"b',
"Ask anything…",
"Ask anything...",
])
def test_typed_text_is_read_as_typed(name, typed):
text, n = PLACEHOLDER_LINE.subn(lambda m: m.group(1) + typed, _pane(name), count=1)
@@ -153,6 +155,11 @@ def wal_home(tmp_path, monkeypatch):
def make(state):
if state == "clean":
_wal_writer(db, ws).close()
# macOS SQLite keeps both sidecars after the last close (persistent
# WAL); the close checkpointed them, so the Linux state is the same rows.
for suffix in ("-wal", "-shm"):
if os.path.exists(str(db) + suffix):
os.remove(str(db) + suffix)
elif state in ("leftover", "walonly"):
src = tmp_path / "src" / "opencode.db"
src.parent.mkdir()
@@ -184,6 +191,16 @@ def test_a_query_reads_right_and_leaves_the_sidecars_alone(wal_home, state, list
assert sorted(os.listdir(os.path.dirname(db))) == listing
@pytest.mark.parametrize("script,count", [
("multi-agent-mux-status/scripts/status.sh", 2),
("multi-agent-mux-monitor/scripts/reconcile.sh", 1),
])
def test_status_and_reconcile_open_the_database_read_only(script, count):
text = (SKILLS / script).read_text()
assert text.count("_ro_connect(odb)") == count
assert "sqlite3.connect(odb)" not in text
# ---------------------------------------------------------------------------
# 6. `debug paths` once per (binary, HOME, XDG_DATA_HOME)
# ---------------------------------------------------------------------------
@@ -314,6 +331,16 @@ def test_keys_and_auth_json_without_the_binary_are_not_enough(bare_home, monkeyp
assert opencode.auth_ok() is False
def test_a_home_install_that_cannot_run_is_not_enough(bare_home):
local = bare_home / "home" / ".opencode" / "bin" / "opencode"
_executable(local).chmod(0o644)
assert get_adapter("opencode").auth_ok() is False
local.unlink()
local.mkdir()
local.chmod(0o755)
assert get_adapter("opencode").auth_ok() is False
@pytest.mark.parametrize("where", ["path", "home"])
def test_the_binary_alone_is_enough(bare_home, monkeypatch, where):
if where == "path":