From ffd54750b9f1ca3225b6770edc877e329db13601 Mon Sep 17 00:00:00 2001 From: Joakim Persson Date: Sun, 16 Aug 2026 00:53:46 +0200 Subject: [PATCH] =?UTF-8?q?docs:=20CHANGELOG=20for=20v1.8.2=20=E2=80=94=20?= =?UTF-8?q?the=20silent=20transcript-feed=20failure=20and=20its=20guard?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CHANGELOG.md | 59 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 59 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index ee5d3b2..1afef25 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,6 +11,65 @@ Pre-v1.0.0 tags followed the pi npm version (`v{pi_version}[letter]`). --- +## v1.8.2 — 2026-08-16 + +Patch release. **Ships the fix for a silent transcript-feed failure**, plus the +smoke assertion that stops it coming back. No image pins changed from v1.8.1 +(pi `0.84.2`, pi-atelier `v0.8.1`); what moves is the baked `mempalace-toolkit` +ref and one new smoke check. + +**The bug this closes** (found on the first boot of the v1.8.1 image, on +EMB-7KJ4VR4G, 2026-08-15): the container-start catch-up rsynced seven pi session +transcripts to the palace host correctly, then asked the server to mine +`/data/feed/` — the feeder's default `MEMPALACE_PI_REMOTE_PATH`, which +assumes a *containerized* palace server. That fleet's primary runs **natively** +(a systemd user unit + uv tool), so it only ever sees host paths and the mine +died with `source directory not found`. rsync had already succeeded, so the +inbox looked healthy. + +It stayed invisible because of the second half: the feeder decided success with +`'"error"' in body`. MCP answers a hard tool failure with HTTP 200 and a +JSON-RPC *result* whose `content[].text` carries the tool's own JSON as an +**escaped string** — the bytes are `\"error\"`, so the substring could never +match. `~/.pi/agent/mempalace-catchup.log` printed +`Done. Wing 'wing_conversations' updated.` directly beneath the error JSON and +exited 0. A feeder whose only artifact claims success is worse than one that +crashes: nothing in the container disagreed with it. + +Shipped here: + +- **`mempalace-toolkit` ≥ `b609cf5`** baked (CI resolves the ref at build time): + `classify()` parses the MCP envelope instead of grepping it (JSON-RPC error, + MCP `isError`, inner `success=false`/`error`), and separates "verified ok" + from "unverified: no JSON tool payload" rather than assuming the good case. + A preflight warning fires when the rsync destination and + `MEMPALACE_PI_REMOTE_PATH` disagree — in *preflight*, so `--dry-run` and + `--prepare` surface it too. Remote mode also stops previewing NEW/SKIP from + the *local* palace, which had been reporting "6 already filed" about a palace + it was not feeding; the tags are now `[?]` and the summary names who decides. +- **New smoke assertion** — `mempalace-pi-session --self-test` run against the + **baked** toolkit. It replays six recorded MCP responses (fixture 1 is the + verbatim 2026-08-15 failure body) plus a regression guard asserting the old + substring check is blind to it. A stale or reverted `MEMPALACE_TOOLKIT_REF` + can therefore no longer ship a feeder that mines nothing while reporting + success. +- **`.env.example`** now spells out that `MEMPALACE_PI_REMOTE_PATH` is the path + the *server process* can open — the container path for a dockerized server, + identical to the ssh-target path for a native one — and that a mismatch fails + quietly, with rsync succeeding and only the mine failing. + +**The `--self-test` assertion is deliberately bare** (`mempalace-pi-session +--self-test`, no `HOME=…` prefix). `run()` invokes +`docker run --entrypoint="" $IMAGE sh -c …` and no Dockerfile sets `USER` or +`ENV HOME`, so it executes with **no `HOME` at all** — the same condition that +made v1.8.0's stage assertion unsatisfiable. The feeder is `set -u` with +HOME-anchored defaults, so it used to die with `HOME: unbound variable` there; +`b609cf5` derives `HOME` from the passwd database (what python's `expanduser()` +falls back to) instead. Keeping the call bare means smoke also proves the feeder +runs in a bare container, rather than papering over it with an env prefix. + +--- + ## v1.8.1 — 2026-08-15 Patch release. **Unblocks v1.8.0, which never shipped.** Its `smoke` and