v1.8.6: adopt pi 0.84.3 + mempalace 3.8.0, close the v1.8.5 doc/observability gaps
Lint / hadolint (push) Successful in 9s
Publish Docker Image / resolve-versions (push) Successful in 15s
Publish Docker Image / base-decide (push) Successful in 8s
Lint / actionlint (push) Successful in 1m9s
Publish Docker Image / build-base (push) Successful in 41m23s
Publish Docker Image / smoke (push) Successful in 4m50s
Publish Docker Image / smoke-studio (push) Successful in 5m5s
Publish Docker Image / build-variant (push) Successful in 15m46s
Publish Docker Image / update-description (push) Successful in 7s
Publish Docker Image / promote-base-latest (push) Successful in 15s
Publish Docker Image / build-variant-studio (push) Successful in 19m59s

Three coupled pieces of work, all of which ride on the base rebuild that the
mempalace bump forces anyway.

DRIFT ADOPTED
- pi 0.84.2 -> 0.84.3. Its release notes carry a "Breaking Changes" line
  (GoogleThinkingLevel -> GoogleApiThinkingLevel). Audited before adopting:
  zero references across all four vendored companions (pi-fork,
  pi-observational-memory, pi-atelier, pi-studio), so it is inert for us. The
  reason to adopt is two skill-discovery fixes that land directly on v1.8.5's
  vendored-skill work: nested Markdown skills inside grouping directories were
  not discovered, and root README.md/AGENTS.md in skill dirs were reported as
  broken skills.
- mempalace core 3.7.1 -> 3.8.0. Additive/reliability only. Its sync fix
  (#2320/#2322) stops sync --apply deleting drawers whose source_file was
  unreachable *at that moment* -- which does NOT relax the standing landmine
  against sync on the shared palace, because that landmine is about paths
  permanently absent from whichever host runs the sync. Different failure
  shape; the caution stands.

DOCS -- three defects, one of them public
- DOCKER_HUB.md advertised "neovim (LazyVim defaults)". Nothing in the image
  installs LazyVim; the only nvim config is a 19-line sysinit.vim. CI PATCHes
  this file into the Docker Hub description on every release, so this was a
  false claim published to the world. Removed.
- agent-browser + Playwright + Chromium is the single largest addition in the
  image (~625 MB) and had zero mentions in README, DOCKER_HUB or THIRD_PARTY --
  it was documented only to agents, in the AGENTS.md managed block. Now
  documented to humans, including the Chromium licence dimension.
- typst and socat appeared in README prose but not in the "What's inside"
  inventory. Added.

OBSERVABILITY -- the three gaps v1.8.5 listed as still open
- build-manifest.json now records mempalace core, read from the live binary
  (ground truth, not the build ARG). Placed as a sibling of pi_version rather
  than inside components{}, because pi-devbox-version renders that map through
  [0:12] and would truncate a version string.
- smoke asserts the pi-observational-memory clone actually CONTAINS the ce9fc98
  auth fix, pinned to src/runtime.ts. Deliberately not a repo-wide grep: two of
  the three markers also live under tests/, so the repo-wide form stays green
  with the fix site reverted. That is the third false-green of this exact family
  in this repo (canary phrase in both snapshots; reconciler fixture using a
  non-owned name; now this) -- pin containment checks to the fix site.
- smoke asserts the feeder's pi@<device> agent default behaviourally. The
  earlier audit concluded this needed a --print-config added upstream; it does
  not. AGENT is assigned before arg parsing, so `bash -x mempalace-pi-session
  --help` observes the real resolution with no toolkit change. Two-sided:
  device set => pi@<device>, unset => must not be pi@*.
- pi-devbox-version now prints a palace: line with the same live-vs-baked drift
  detection pi already had. This matters more than it looks: mempalace is the
  one component that is both client (here) and server (synlig), so skew between
  them is a real failure mode. Degrades quietly on pre-v1.8.6 images.

Deferred deliberately: a native arm64 act_runner on tor-ms22 (the current
runner is on synlig, x86_64, so every arm64 layer ships QEMU-emulated).
Analysis and caveats filed to the palace rather than actioned here.
This commit is contained in:
2026-08-25 15:29:22 +02:00
parent 26f223568d
commit 93f986e90e
8 changed files with 369 additions and 6 deletions
+169 -1
View File
@@ -11,7 +11,175 @@ Pre-v1.0.0 tags followed the pi npm version (`v{pi_version}[letter]`).
---
## Unreleased
## v1.8.6 — 2026-08-25
Patch release. Adopts the drift that accumulated in the ~2 days since v1.8.5
(pi `0.84.3`, mempalace core `3.8.0`), then closes the documentation and
observability gaps that v1.8.5 itself listed as "Still open". No component
was adopted without an audit note recording *why* it is safe.
All moving refs re-resolved immediately before tagging (2026-08-25T13:28Z):
pi-toolkit `0e1369e6`, pi-extensions `20228878`, mempalace-toolkit `0fe64c48`
and pi-observational-memory `ce9fc982` all unchanged since v1.8.5;
pi-fork `f1ff8087` → `bf702b4c`; pi-atelier holds at `v0.8.2` (floor for
pi ≥0.84 satisfied); pi-studio's CI-resolved newest tag has moved again to
`v0.9.51`. Base rebuild is forced (Dockerfile.base changed), so the 16
floating base-tooling ARGs re-roll — expect ~67 min as for v1.8.5.
### Changed
- **`mempalace` core `3.7.1` → `3.8.0`.** Released 2026-08-23T21:19Z, hours
after this project's own v1.8.5 tag the same day. Additive/reliability only
— reviewed for MCP tool-schema changes before bumping, as always: none.
`sync --apply` (PR #2320/#2322) no longer deletes a drawer solely because
its `source_file` was unreachable *at that moment* — it asks for
corroboration first. **This does not relax the standing landmine** against
running `mempalace_sync` / `mempalace_delete_by_source` beyond dry-run on
the shared central palace: that failure mode is paths *permanently* absent
from whichever host runs the sync, not transient unavailability, and 3.8.0
doesn't touch it. Server-side perf fix PR #2307 (long-running Chroma servers
no longer invalidate their own HNSW cache on their own writes) likewise does
not make `mempalace_reconnect` unnecessary — that tool covers *external*
writes bypassing the in-process client, a different scenario. Full reasoning
lives in the `Dockerfile.base` comment above `ARG MEMPALACE_VERSION`.
**Deployment note:** synlig's central palace currently serves `3.7.1`
server-side via `docker-compose.mempalace.yml` (which reuses this image) —
this client bump introduces version skew until that stack is separately
redeployed; sequence accordingly.
- **`pi` `0.84.2` → `0.84.3`.** Published 2026-08-24T11:09Z. Release notes
carry one "Breaking Changes" line — `GoogleThinkingLevel` renamed to
`GoogleApiThinkingLevel` — checked against all four vendored packages
(`pi-fork`, `pi-observational-memory`, `pi-atelier`, `pi-studio`): zero
references, inert here. 0.84.3 also fixes two skill-discovery bugs that
land directly on this repo's own vendored-skill work: nested Markdown
skills inside `.agents/skills/` grouping directories not being discovered,
and root Markdown files (`README.md`/`AGENTS.md`) in skill directories being
wrongly reported as broken skills.
### Added
- **Browser automation is now documented to humans, not just to agents.**
`agent-browser` + Playwright + a headless Chromium (~625 MB — the single
largest addition in the image) previously had zero mentions in `README.md`,
`DOCKER_HUB.md` or `THIRD_PARTY.md`; it existed only in the agent-facing
`AGENTS.md` managed block. Added a `README.md` "Browser automation"
subsection, a `DOCKER_HUB.md` feature entry, and `THIRD_PARTY.md` license
rows for `agent-browser` (Apache-2.0), Playwright (Apache-2.0), and Chromium
(BSD-3-Clause for Chromium's own code plus a large set of bundled
third-party components under their own licenses; the binary here is not
compiled by this repo — it's Playwright's own "Chrome for Testing" download
via `playwright install --with-deps chromium`).
- **`THIRD_PARTY.md` gains rows for `pi-atelier` (MIT) and `mempalace` core
(MIT per the GitHub repo; noted that the PyPI package's own metadata omits
a license classifier, so verify against the repo's `LICENSE` rather than
sdist/wheel metadata if clearance is needed from the artifact alone).**
- **`typst` and `socat` added to `README.md`'s tooling inventory.** Both were
already used in prose (typst as pandoc's `--pdf-engine`, socat by
`studio-expose`) but missing from the "What's inside" lists, so the
inventory didn't match what the image actually ships.
- **`mempalace` core version recorded in `/etc/pi-devbox/build-manifest.json`.**
Previously absent — a published image couldn't answer "which palace version
shipped?", and a palace bug couldn't be correlated to an image version.
Derived from the live installed binary (matching the manifest's existing
ground-truth-not-build-args philosophy), degrading to `null` rather than
failing the build if the binary is missing or its output format changes.
Verified landed: new top-level `"mempalace_version"` key, sibling to
`pi_version` rather than a member of `components{}` (that map is rendered
truncated to 12 chars by `pi-devbox-version`, which would mangle a longer
version string).
- **New smoke assertions**, all landed in `scripts/smoke-test.sh`: (1) the
`pi-observational-memory` clone is checked for the actual `ce9fc98`
auth-fix markers pinned to their fix site, `src/runtime.ts`
(`availability_recheck`, `providerCredentialConfigured`,
`hasConfiguredAuth`) — not merely clone existence, and deliberately not a
repo-wide grep: all three identifiers also appear under `tests/`, so a
repo-wide search would stay green even with the fix reverted in
`src/runtime.ts` alone; (2) the manifest's new `mempalace_version` field is
asserted present, non-null, and equal to what `mempalace --version` reports
live, so the manifest can't silently drift from the installed package —
expected to fail against any pre-v1.8.6 image, by design; (3) a
behavioural check for the mempalace-toolkit feeder's `--agent` default
(see below — this one turned out to be possible after all).
### Fixed
- **A false claim was being published to Docker Hub on every release.**
`DOCKER_HUB.md` advertised "neovim (LazyVim defaults)". Nothing in this
repo installs LazyVim — the only nvim configuration is a 19-line
`sysinit.vim` that sets `termguicolors`. `update-description` pushes this
file verbatim (with `{{PI_VERSION}}` substituted) to the Hub description, so
the error was public, not internal. Corrected to describe what's actually
there.
### Component audit for this release
Checked against upstream 2026-08-25 (two days after v1.8.5's own audit):
`mempalace` core moved `3.7.1` → `3.8.0` (see Changed, above — timing is
notable: released *hours after* v1.8.5 tagged, so v1.8.5 could not have caught
it no matter how carefully it was audited). `pi` moved `0.84.2` → `0.84.3`
(see Changed). `pi-toolkit` `0e1369e6`, `pi-extensions` `20228878`,
`pi-observational-memory` `ce9fc982`, and `pi-atelier` `v0.8.2` are all
**unchanged** from v1.8.5 — in particular `pi-observational-memory` still sits
exactly at the auth-fix commit with nothing landed upstream since, and
`pi-atelier` is still the newest tag with the `≥0.7.1` floor for `pi ≥ 0.84`
trivially satisfied. `pi-fork` has one upstream commit not adopted this
release: `f1ff8087` → `bf702b4c`, a text-only rewording of the fork task
preamble (no code-path change) — **left un-pulled** for this release since it
is a moving ref CI resolves fresh at every build anyway; it will be adopted
automatically on the next build regardless of this entry. `pi-studio` (studio
variant) has drifted two tags upstream, `v0.9.48` (pinned at build time via
CI's newest-semver-tag resolution) → `v0.9.51` at tag time, purely additive
(watched PDF previews, opening PDFs directly in Studio, Studio header
hide) — nothing to bump in this repo since studio-tag resolution happens in
CI, not the Dockerfile, but note it **will** auto-adopt `v0.9.51` on the next
studio-variant build. `mempalace-toolkit` unchanged — this release's manifest
and pi-bump work in `Dockerfile.variant` stayed within that file's ownership
and did not require a toolkit-side change.
### Still open
- **`MEMPALACE_VERSION` has no CI-side audit equivalent to `PI_VERSION`'s.**
`PI_VERSION` is verified published-on-npm and warns (never silently adopts)
on drift; `MEMPALACE_VERSION` is a literal Dockerfile string with zero
references in `.gitea/workflows/docker-publish.yml`. Flagged in v1.8.5's
audit as a gap; still a gap.
- **`pi-devbox-version`'s human-readable output does not display
`mempalace_version`.** Its render path is a fixed sequence
(`release_tag`, `build_date`, `source_revision`, `pi`, then `components{}`)
and the new top-level field isn't in it — only `--json` mode (which `cat`s
the manifest directly) surfaces it today. One line in
`rootfs/usr/local/bin/pi-devbox-version` would fix this; deferred since the
field's stated purpose (correlating a palace bug to an image) is already
served by `--json`, but worth doing in a follow-up if this becomes a
routine manual check.
**Resolved during this release, not left open:** the feeder `--agent`
default behavioural hook initially looked like it might need a
mempalace-toolkit change (a `--print-config` flag that doesn't exist). It
didn't — `mempalace-pi-session` assigns `AGENT` before argument parsing and
`--help` exits 0 with no side effects, so `bash -x mempalace-pi-session
--help` observes the real resolution (env interpolation and fallback)
without needing a source change. The new smoke assertion exploits exactly
that, checked both ways: with `MEMPALACE_PI_DEVICE` set it must resolve to
`pi@<device>`; with it unset it must NOT be `pi@*` (catches a regression to
the old unconditional `$USER`/`mempalace` default).
`mempalace-toolkit` commit `c64ffa1` changed the feeder's `--agent` default
from `$USER` to `pi@<device>`, but there is still no way for smoke to assert
this default is actually in effect from this repo alone, since
`mempalace-toolkit` is a separate repo this release does not modify. If the
concurrent smoke-test work could not find an honest assertion from the
existing `/opt/mempalace-toolkit` surface (help text, `--self-test`), this
remains open pending a toolkit-side `--print-config`-style hook — a
toolkit-repo change, not a pi-devbox one.
- **16 base-tooling `ARG *_VERSION=latest` pins remain unrecorded.** (Corrected
count — v1.8.5's entry said "~14"; the actual count from `Dockerfile.base`
is 16, plus 5 more that float with no ARG at all: `rustup-init`, AWS CLI v2,
Chromium-via-Playwright, Node's minor version via `setup_22.x`, and
`DEBIAN_VERSION=trixie-slim` itself.) None of these are recorded anywhere
once the build completes — not in the manifest, not in a label — so a
published image cannot answer "which nvim/uv/chromium shipped?" without
exec-ing in and asking the binary.
### Documentation