release: adopt pi 0.84.4 + pi-atelier v0.10.0, and fix the doc claim the pi bump invalidates
Lint / hadolint (push) Successful in 11s
Lint / actionlint (push) Successful in 21s
Publish Docker Image / resolve-versions (push) Successful in 19s
Publish Docker Image / base-decide (push) Successful in 16s
Publish Docker Image / build-base (push) Successful in 59m39s
Publish Docker Image / smoke-studio (push) Successful in 5m22s
Publish Docker Image / smoke (push) Successful in 17m53s
Publish Docker Image / build-variant-studio (push) Successful in 17m14s
Publish Docker Image / build-variant (push) Successful in 18m22s
Publish Docker Image / promote-base-latest (push) Successful in 12s
Publish Docker Image / update-description (push) Successful in 20s
Lint / hadolint (push) Successful in 11s
Lint / actionlint (push) Successful in 21s
Publish Docker Image / resolve-versions (push) Successful in 19s
Publish Docker Image / base-decide (push) Successful in 16s
Publish Docker Image / build-base (push) Successful in 59m39s
Publish Docker Image / smoke-studio (push) Successful in 5m22s
Publish Docker Image / smoke (push) Successful in 17m53s
Publish Docker Image / build-variant-studio (push) Successful in 17m14s
Publish Docker Image / build-variant (push) Successful in 18m22s
Publish Docker Image / promote-base-latest (push) Successful in 12s
Publish Docker Image / update-description (push) Successful in 20s
pi 0.84.3 -> 0.84.4 (no Breaking Changes / Removed heading in that section,
grepped). Adopted for three fixes that land on machinery this fleet runs:
#6879 (large tool results crossing the auto-compaction threshold were sent to
the provider before compacting), #8345 (a resumed session corrupted its next
appended entry when the JSONL lacked a trailing newline -- that file is the
memory feeder's input; measured 49/49 clean here beforehand), and #8537
(triggerTurn:false messages sent mid-run were inserted between a tool call and
its result). The mempalace mailbox is outside #8537's precondition: it delivers
at agent_settled with deliverAs:"steer" and no triggerTurn, and 0.84.4 leaves
the documented steer semantics unchanged.
pi-atelier v0.8.2 -> v0.10.0: two minor releases, both UI-only, no BREAKING
notice. v0.9.0 raises its minimum pi to 0.84.0 and, unlike the
0.7.1-under-pi-0.84 startup-hang precedent, encodes it in peerDependencies
(>=0.84.0). Satisfied by PI_VERSION=0.84.4. Both executable floors compare with
sort -V, so 0.10.0 >= 0.7.1 evaluates correctly.
docs/observational-memory.md: pi's own compaction.md gained one paragraph in
0.84.4 -- autoCompact is now also checked mid-run, after a tool batch's results
are appended. Our text said compaction is checked only when pi goes idle and so
"never interrupts a turn"; that was only ever true of the OM trigger. The
section now states both entry points into session_before_compact and the
diagram carries the second edge (mermaid checker re-run: 6 blocks, 44 labels,
0 soft-wrapped, no cut glyphs at 1280px and 800px).
README: the version-pin table had been wrong since v1.8.6 -- 93f986e moved
ARG PI_VERSION to 0.84.3 and MEMPALACE_VERSION to 3.8.0 and neither table row,
so it advertised pi 0.84.2 / mempalace 3.7.1. Corrected, plus the
--expected-version example that would now fail against a 0.84.4 image.
CHANGELOG: Unreleased retitled v1.8.12 (2026-08-31) with the audits above and a
dependency-audit table -- every other component measured SAME (skillset
snapshot --check OK at a12fe5e, 0 commits since baked).
This commit is contained in:
+122
-1
@@ -11,7 +11,94 @@ Pre-v1.0.0 tags followed the pi npm version (`v{pi_version}[letter]`).
|
||||
|
||||
---
|
||||
|
||||
## Unreleased
|
||||
## v1.8.12 — 2026-08-31
|
||||
|
||||
**`pi` `0.84.3` → `0.84.4`, and `pi-atelier` `v0.8.2` → `v0.10.0`.** Both audited
|
||||
by the routine in `Dockerfile.variant` rather than adopted on sight, and the
|
||||
audit notes live next to the pins where the next reader will meet them.
|
||||
|
||||
**pi 0.84.4 (published 2026-08-28) carries no `Breaking Changes` and no
|
||||
`Removed` heading** — checked by grepping the section, 0 matches, which is worth
|
||||
stating because 0.84.3 *did* have one. It was adopted for three fixes that land
|
||||
on machinery this fleet runs every day, not for the feature list:
|
||||
|
||||
- **#6879** — a large tool result crossing the auto-compaction threshold used to
|
||||
be sent to the provider *before* compaction. Pi now compacts between tool
|
||||
execution and the next assistant response inside the same run. That is the
|
||||
shape of nearly every session on these boxes, where a single `event_list` or
|
||||
palace search returns hundreds of KB.
|
||||
- **#8345** — a resumed session corrupted its next appended entry when the JSONL
|
||||
file lacked a trailing newline. That file is the memory feeder's *input*, so
|
||||
the failure would have surfaced as unexplained gaps in `wing_conversations`
|
||||
rather than as an error. Measured on tor-ms22 before bumping: 49/49
|
||||
transcripts end in a newline and 0 lines fail `json.loads` — this corpus was
|
||||
never bitten, and we now know that rather than hope it.
|
||||
- **#8537** — extension messages sent with `triggerTurn: false` *while the agent
|
||||
is running* were inserted between a tool call and its result, so
|
||||
order-validating providers rejected the replayed history. **The mempalace
|
||||
mailbox is outside that precondition**: it delivers at `agent_settled`, when
|
||||
no inference is in flight, with `{deliverAs: "steer"}` and deliberately no
|
||||
`triggerTurn`. 0.84.4 also leaves the documented steer semantics untouched
|
||||
("delivered after the current assistant turn finishes executing its tool
|
||||
calls, before the next LLM call"), so RFC 003 §7.11 stands as written. Recorded
|
||||
because this fix is precisely what would make a *mid-run* delivery safe, which
|
||||
is the only reason we would ever change that call.
|
||||
|
||||
Also new and relevant, though nothing here uses them yet: `ui_prompt_start` /
|
||||
`ui_prompt_end` extension events (the `docs/extensions.md` diff is add-only — no
|
||||
steer or `triggerTurn` semantics moved), and an RPC `clear_queue` that returns
|
||||
and removes queued steering messages. The second one can discard an
|
||||
already-delivered but unconsumed mailbox steer; that is survivable because the
|
||||
mailbox re-delivers on `MEMPALACE_MAILBOX_RESURFACE_MS` (default 3600000), and it
|
||||
is written down here so a future "the mailbox lost a message" report has a
|
||||
candidate cause. The three new `PI_HYPERLINKS` / `PI_IMAGE_PROTOCOL` /
|
||||
`PI_TRUE_COLOR` environment variables were grepped against this whole repo: no
|
||||
collisions with anything the image sets.
|
||||
|
||||
**The bump moved one documented mechanism, so `docs/observational-memory.md` §3
|
||||
moved with it.** Pi's own `docs/compaction.md` gained exactly one paragraph in
|
||||
0.84.4: the `autoCompact` threshold is now *also* checked mid-run, after a tool
|
||||
batch's results are appended and before the next assistant response, skipped only
|
||||
when that batch ends the run and no queued message needs another response. Our
|
||||
doc said compaction is "checked when pi goes idle, so it never interrupts a
|
||||
turn". That was only ever true of observational-memory's **own** trigger
|
||||
(`compaction-trigger.ts` hooks `agent_settled`); read as a statement about pi it
|
||||
is now false. `session_before_compact` (`compaction-hook.ts`) therefore has
|
||||
**two** entry points and the second can fire inside a turn — harmless for the
|
||||
ledger fold, which makes no model call, but a doc that ships a false promise
|
||||
about when a hook runs is worse than one that admits two paths. The §3 mermaid
|
||||
diagram gained the second edge, and the whole file re-passes the bundled mermaid
|
||||
checker (6 blocks, 44 labels, 0 soft-wrapped, no cut glyphs at 1280px and
|
||||
800px).
|
||||
|
||||
**pi-atelier `v0.8.2` → `v0.10.0` is two minor releases and both are UI-only** —
|
||||
Sidebar kept calm during an active Turn, composer frame and Status Rail polish,
|
||||
fullscreen-copy-safe Sidebar, Windows path normalisation, Workspace Pulse
|
||||
deferred until pi trusts the project. Neither release carries a BREAKING notice.
|
||||
The coupling that matters runs the *opposite* way to this pin's hard-earned
|
||||
floor: v0.9.0 renders the Sidebar as a separate split-layout child and therefore
|
||||
"raises the minimum supported Pi version to 0.84.0", and — unlike the
|
||||
0.7.1-under-pi-0.84 startup-hang precedent, which its metadata never encoded —
|
||||
this time `peerDependencies` says so (`>=0.84.0`, up from `>=0.80.7`). Satisfied
|
||||
with room to spare by `PI_VERSION=0.84.4`. It also pairs deliberately with a
|
||||
0.84.4 feature: atelier keeps Sidebar content out of the fullscreen transcript
|
||||
selection while pi adds `fullscreenCopyOnSelect` and Ctrl+X for the selection
|
||||
itself. Both executable floors (`scripts/smoke-test.sh`,
|
||||
`scripts/recreate-sanity-check.sh`) compare with `sort -V`, so `0.10.0 >= 0.7.1`
|
||||
is evaluated correctly — verified by running the comparison, because the string
|
||||
form of that test reads `0.10.0` as *older* than `0.7.1`.
|
||||
|
||||
**While bumping the pins, the README's own pin table turned out to have been
|
||||
wrong since v1.8.6.** It advertised pi `0.84.2` and mempalace `3.7.1` in the very
|
||||
table whose purpose is to tell a reader what is pinned and where. Both rows went
|
||||
stale in the *same* commit — `93f986e` (v1.8.6, "adopt pi 0.84.3 + mempalace
|
||||
3.8.0") moved both `ARG`s and neither table row; the rows themselves date from
|
||||
`29b6209` (v1.8.0) and `2ebf00d` (v1.8.4). Only atelier's row was still true.
|
||||
All three corrected now, and the `--expected-version 0.84.3` example in the
|
||||
recreate-sanity section updated too, since that one is a copy-pasteable command
|
||||
that would now fail against a 0.84.4 image. Worth noting how it survived two
|
||||
releases: nothing checks prose against the `ARG`s, so this table has to be
|
||||
remembered by hand on every pin bump, and once it was not.
|
||||
|
||||
**`credential-incident-response` gained the section its own guidance had been
|
||||
missing, and §2 gained a precondition it should always have carried.** Docs only;
|
||||
@@ -190,6 +277,40 @@ while `~/.bashrc` carries the image's), so the skel file is re-seeded on every
|
||||
recreate. A `$HOME/.bash_aliases` that is bind-mounted from the host is still
|
||||
never overwritten, which is the existing contract.
|
||||
|
||||
### Dependency audit (2026-08-31)
|
||||
|
||||
Every component checked against upstream by direct command, not assumed:
|
||||
|
||||
| Component | Baked in v1.8.11 | Upstream now | Action |
|
||||
|---|---|---|---|
|
||||
| **pi** | `0.84.3` (pinned) | **`0.84.4`** is npm latest | bumped + audited (above) |
|
||||
| **pi-atelier** | `v0.8.2` (pinned) | **`v0.10.0`** highest tag | bumped + audited (above) |
|
||||
| mempalace | `3.8.0` (pinned) | `3.8.0` is PyPI latest | none |
|
||||
| skillset (mempalace fallback snapshot) | `a12fe5e` | `a12fe5e` == `origin/main`, 0 commits since | none — `--check` reports OK, no NOTICE |
|
||||
| mempalace-toolkit | `21023e7` | `21023e7` | none |
|
||||
| pi-toolkit | `0e1369e` | `0e1369e` | none |
|
||||
| pi-extensions | `2022887` | `2022887` | none |
|
||||
| pi-fork | `bf702b4` | `bf702b4` | none |
|
||||
| pi-observational-memory | `ce9fc98` | `ce9fc98` (v3.0.4, peerDeps `*` → no pi floor to clear) | none |
|
||||
| pi-studio (studio variant) | `3328b3d` | `3328b3d` | none |
|
||||
| floating `*_VERSION=latest` tools (16) | — | 14 already at latest; `git-lfs` `3.7.1`→`3.8.0` (feature, no breaking section), `uv` `0.12.6`→`0.12.7` (patch) | adopted implicitly by the rebuild; named here per this repo's floating-ref rule |
|
||||
| node | major pin `22`, installed `v22.23.2` | `v22.23.2` is the newest 22.x | none — a newer LTS *line* (24.x) exists and is deliberately not tracked |
|
||||
|
||||
Two method notes, because both would have produced a confident wrong answer:
|
||||
|
||||
- **An annotated tag's `ls-remote` SHA is the tag object, not the commit.**
|
||||
`refs/tags/v0.8.2` is `6e07bf85` while `refs/tags/v0.8.2^{}` is `159f34cf` —
|
||||
the value actually baked. Comparing the un-dereferenced form reported
|
||||
`pi-atelier` as *drifted from its own pin*, which would have been a false
|
||||
integrity alarm about the one component whose pin is load-bearing. Always
|
||||
deref with `^{}` before calling a pin broken.
|
||||
- **`git ls-remote --tags | sort -V | tail` is not a "latest release" proxy.**
|
||||
`typst/typst` carries date-style tags (`v23-03-28`) and `mikefarah/yq` carries
|
||||
`vTestA`/`vTestB`; both sort *after* the real releases. `Dockerfile.base`
|
||||
itself resolves `latest` by reading the `Location` of
|
||||
`curl -sI …/releases/latest`, so replaying that exact step is both
|
||||
noise-immune and the same source of truth the build will see.
|
||||
|
||||
---
|
||||
|
||||
## v1.8.11 — 2026-08-27
|
||||
|
||||
Reference in New Issue
Block a user