docs: CHANGELOG for v1.8.2 — the silent transcript-feed failure and its guard
Publish Docker Image / resolve-versions (push) Successful in 25s
Lint / actionlint (push) Successful in 30s
Publish Docker Image / base-decide (push) Successful in 8s
Lint / hadolint (push) Successful in 46s
Publish Docker Image / build-base (push) Successful in 41m26s
Publish Docker Image / smoke (push) Successful in 4m45s
Publish Docker Image / smoke-studio (push) Successful in 5m11s
Publish Docker Image / build-variant-studio (push) Successful in 17m44s
Publish Docker Image / build-variant (push) Successful in 23m41s
Publish Docker Image / update-description (push) Successful in 6s
Publish Docker Image / promote-base-latest (push) Successful in 10s
Publish Docker Image / resolve-versions (push) Successful in 25s
Lint / actionlint (push) Successful in 30s
Publish Docker Image / base-decide (push) Successful in 8s
Lint / hadolint (push) Successful in 46s
Publish Docker Image / build-base (push) Successful in 41m26s
Publish Docker Image / smoke (push) Successful in 4m45s
Publish Docker Image / smoke-studio (push) Successful in 5m11s
Publish Docker Image / build-variant-studio (push) Successful in 17m44s
Publish Docker Image / build-variant (push) Successful in 23m41s
Publish Docker Image / update-description (push) Successful in 6s
Publish Docker Image / promote-base-latest (push) Successful in 10s
This commit is contained in:
@@ -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/<device>` — 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
|
## v1.8.1 — 2026-08-15
|
||||||
|
|
||||||
Patch release. **Unblocks v1.8.0, which never shipped.** Its `smoke` and
|
Patch release. **Unblocks v1.8.0, which never shipped.** Its `smoke` and
|
||||||
|
|||||||
Reference in New Issue
Block a user