diff --git a/.env.example b/.env.example index b0fb5ad..470291f 100644 --- a/.env.example +++ b/.env.example @@ -57,9 +57,18 @@ SSH_KEY_PATH=~/.ssh # the server to mine its own local copy. Without MEMPALACE_PI_SSH_TARGET the # feeder is skipped (a remote palace with no inbox has nothing to mine). # MEMPALACE_PI_SSH_TARGET where to rsync to, as user@host:path -# MEMPALACE_PI_REMOTE_PATH what that inbox is called ON THE SERVER — must be -# the container path if the server runs in Docker -# (see docker-compose.mempalace.yml) +# MEMPALACE_PI_REMOTE_PATH what that inbox is called ON THE SERVER — i.e. the +# path the SERVER PROCESS can open. If the palace +# server runs in Docker, that is the container path +# (see docker-compose.mempalace.yml). If it runs +# NATIVELY (systemd unit / uv tool / plain +# `mempalace serve`), it sees host paths, so this +# must equal the path half of +# MEMPALACE_PI_SSH_TARGET. Getting this wrong is +# quiet: rsync still succeeds and only the mine +# fails with "source directory not found", so +# transcripts ship and are filed nowhere. The feeder +# warns in preflight when the two paths disagree. # MEMPALACE_PI_DEVICE inbox subdirectory for this machine (default: hostname) # MEMPALACE_PI_SSH_TARGET=user@palace-host:/srv/mempalace-feed # MEMPALACE_PI_REMOTE_PATH=/data/feed diff --git a/scripts/smoke-test.sh b/scripts/smoke-test.sh index 48016d1..0c864e9 100755 --- a/scripts/smoke-test.sh +++ b/scripts/smoke-test.sh @@ -195,6 +195,16 @@ run_expect "remote-palace-without-inbox skip is announced, not silent" \ "MemPalace catch-up skipped" run "...and the skip notice names the variable that fixes it" \ "grep -A6 'MemPalace catch-up skipped' /usr/local/bin/entrypoint-user.sh | grep -q 'MEMPALACE_PI_SSH_TARGET'" +# A remote mine that FAILS must not report success. MCP answers a hard tool +# failure with HTTP 200 and the tool's own JSON escaped inside +# result.content[].text, so the feeder's old `'\"error\"' in body` check could +# never see it: on 2026-08-15 a mine that died with "source directory not found: +# '/data/feed/...'" logged "Done. Wing updated." and exited 0, and this +# container's transcripts were filed nowhere for a whole session. The feeder +# carries fixtures for that exact body; run them against the baked toolkit so a +# stale/reverted toolkit ref can't reintroduce a silent feed. +run "baked feeder detects a failed remote mine (no silent false success)" \ + "mempalace-pi-session --self-test" # v1.0.0 base additions — verify presence and basic functionality. run "pandoc" "pandoc --version" run "typst" "typst --version"