v1.8.3: mempalace 3.7.1, refreshed skill snapshot, census on PATH
Lint / actionlint (push) Successful in 23s
Lint / hadolint (push) Successful in 8s
Publish Docker Image / resolve-versions (push) Successful in 13s
Publish Docker Image / base-decide (push) Successful in 11s
Publish Docker Image / build-base (push) Successful in 53m49s
Publish Docker Image / smoke (push) Successful in 7m22s
Publish Docker Image / smoke-studio (push) Successful in 18m6s
Publish Docker Image / build-variant (push) Successful in 19m6s
Publish Docker Image / update-description (push) Successful in 6s
Publish Docker Image / promote-base-latest (push) Successful in 11s
Publish Docker Image / build-variant-studio (push) Successful in 27m5s

mempalace 3.6.0 -> 3.7.1. Verified against the 3.7.1 source rather than its
changelog, because the risk lands on palaces users cannot reconstruct: legacy
drawers lack the new chunk_total marker and both decision sites trust them, so
no mass re-mine; NORMALIZE_VERSION is 2 in both; chromadb stays <2 so no
index-format migration; no auto-migration exists; logstream.sqlite3 is created
lazily. Downgrade remains possible (3.6.0 has zero references to chunk_total).

Two behaviour changes documented in the CHANGELOG: ALLOW_PEER_WRITER no longer
works on local/chroma palaces, and writer-lock setup failures fail closed.
Neither affects this image's MCP-server-plus-CLI-feeder pattern, which already
serialised on the same lock under 3.6.0 -- the upstream "process-lifetime
single-writer" entry describes tightened escape hatches, not a new lease.

The motivation is the shared central palace: 3.7.1 drops the stale chromadb
SharedSystemClient cache on reconnect (3.6.0 could let a stale in-memory HNSW
segment overwrite a peer's writes, "index count going backwards"), releases the
writer lease on SIGTERM/SIGHUP, and stops treating an interrupted mine as
complete. The fleet primary was upgraded to 3.7.1 and restarted before this tag,
because 3.7.1 refuses writes when the served library drifts and reconnect cannot
clear that. opencode-devbox still pins 3.6.0, so the lockstep is broken until it
cuts its own release.

Vendored mempalace skill snapshot refreshed to skillset 936fed8 (was 63f3bf5).
This closes a gap that had been invisible for two commits: ~/.agents/skills/
mempalace symlinks to the IMAGE-BAKED copy, entrypoint-user.sh creates that link
first, and the skillset deploy never clobbers an existing name -- so in a devbox
container the vendored snapshot always wins and editing skillset alone changes
nothing a container reads. Brings the multi-machine shared-palace section and
the hand-crafted-provenance guard.

pi-global-AGENTS.append.md already carried the three shared-palace damage rules
(a55f636); this tags them into a release.

mempalace-census gets the /usr/local/bin symlink its three siblings have had all
along, plus chmod and a build-time --help smoke check, so RFC-002 Phase A
censuses no longer need an absolute path.

Two new smoke assertions, both confirmed to FAIL against a v1.8.2 container so
they are not tautological: the vendored snapshot must contain the multi-machine
section (a stale manual snapshot is otherwise invisible), and mempalace-census
must be on PATH.

No other pins move: pi stays 0.84.2 (npm latest), pi-atelier v0.8.1, and every
git-ref component was checked against its upstream head and is unchanged.
This commit is contained in:
Joakim Persson
2026-08-16 23:30:01 +02:00
parent a55f6369b3
commit 3a509077c2
5 changed files with 119 additions and 6 deletions
+78
View File
@@ -11,6 +11,84 @@ Pre-v1.0.0 tags followed the pi npm version (`v{pi_version}[letter]`).
---
## v1.8.3 — 2026-08-16
Patch release. **Bumps mempalace to `3.7.1`** and closes the gap that made the
baked mempalace skill go stale for four commits. `pi` stays `0.84.2` (still the
npm latest) and pi-atelier stays `v0.8.1`; every git-ref component
(pi-toolkit, pi-extensions, pi-fork, pi-observational-memory, pi-studio,
mempalace-toolkit) was checked against its upstream head and is unchanged.
- **`MEMPALACE_VERSION` `3.6.0``3.7.1`.** Verified against the 3.7.1 source
rather than its changelog, because the risk is to palaces users cannot
reconstruct: legacy drawers lack the new `chunk_total` completion marker and
**both** decision sites trust them (`if chunk_total is None: ... trust the
match as before`), so there is **no mass re-mine**; `NORMALIZE_VERSION` is `2`
in both versions, so the "pre-v2 drawers are stale" gate does not fire either;
`chromadb<2,>=1.5.4` keeps the same major, so no index-format migration; there
is no auto-migration (the source says *"We do NOT auto-migrate"* twice) and
`rebuild_index` has exactly one call site, the explicit `repair rebuild`; the
single new palace file (`logstream.sqlite3`) is created lazily on first
logstream use. Downgrade stays possible — 3.6.0 has zero references to
`chunk_total` and ignores it as unknown metadata.
Two behaviour changes worth knowing, both turning a silent condition into a
hard refusal: `MEMPALACE_MCP_ALLOW_PEER_WRITER` **no longer works on
local/chroma palaces** (it is now gated on `backend_requires_single_writer()`,
and `_MULTI_PROCESS_WRITER_BACKENDS` is `{pgvector, qdrant}`), and writer-lock
*setup* failures now **fail closed** (`refusing this mutating tool`) instead of
proceeding with a warning. Neither affects this image's normal
MCP-server-plus-CLI-feeder pattern, which already serialised on the same
`mine_palace_*.lock` under 3.6.0 — "process-lifetime single-writer ownership"
in the upstream changelog describes tightened escape hatches, not a new lease.
What 3.7.1 buys a **shared central** palace is the real motivation: the stale
chromadb `SharedSystemClient` cache is now dropped on reconnect (under 3.6.0 a
peer's writes could be overwritten by a stale in-memory HNSW segment, *"index
count going backwards"*), the writer lease is released on SIGTERM/SIGHUP
instead of leaking a lock naming a dead PID, and an interrupted mine is no
longer permanently skipped as though complete.
**Upgrading a server requires restarting it** — 3.7.1 refuses mutating tools
when the served library drifts from what is installed, and `mempalace_reconnect`
cannot clear that (it reopens the database but cannot reload Python modules).
The fleet primary was upgraded and restarted before this image was tagged.
Note: opencode-devbox still pins `3.6.0`. The two images are meant to move in
lockstep, so that pin diverges until opencode-devbox cuts its own release.
- **Vendored `mempalace` skill snapshot refreshed** to skillset `936fed8` (was
`63f3bf5`). This is the gap worth naming: `~/.agents/skills/mempalace`
symlinks to the **image-baked** copy under
`/usr/local/share/pi-devbox/skills/`, and `entrypoint-user.sh` creates that
link *first* while the skillset deploy never clobbers an existing name — so in
a devbox container the vendored snapshot always wins, and editing the skillset
repo alone changes nothing a container reads. Two commits' worth of guidance
had been invisible here: the multi-machine shared-palace section (device
provenance in `source_path`, mined drawers carrying the *mine* date with
UUIDv7 recovery, the naive-local vs UTC timestamp mismatch, `agent_name` not
being device-scoped, single-writer/no-queue semantics) and the
hand-crafted-provenance guard.
- **`pi-global-AGENTS.append.md`** gains `### If the palace is central, it is
shared — three rules`: never run `mempalace sync` against a shared palace (it
prunes drawers whose sources look missing, which on a central palace is most
of the content, including other machines' — compounded by RFC-001 §7.2, since
feeders stage *inside* the palace root); a client-side timeout is not a
failure (single writer, one large mine blocks everyone, so
`mine timed out after 30000ms` usually means the mine completed — verify
before retrying or you file a duplicate); and the `mempalace` CLI is not
remote-aware, so it always opens a local-disk palace and can silently
disagree with the MCP tools.
- **`mempalace-census` is now on `PATH`.** It shipped inside the image at
`/opt/mempalace-toolkit/bin/` but was never symlinked into `/usr/local/bin`
like its three siblings, so RFC-002 Phase A censuses had to be invoked by
absolute path. Added to the symlink set, the `chmod +x` set, and the
build-time `--help` smoke chain.
---
## v1.8.2 — 2026-08-16
Patch release. **Ships the fix for a silent transcript-feed failure**, plus the