release(v1.12.2): pi 1.4.0, pi-studio v0.11.1, Node 24.22.1 + git-lfs 3.8.1 security
Lint / skill-floor (push) Successful in 8s
Lint / hadolint (push) Successful in 10s
Lint / actionlint (push) Successful in 23s
Lint / doc-drift (push) Successful in 14s
Publish Docker Image / lint-gate (push) Successful in 24s
Publish Docker Image / resolve-versions (push) Successful in 12s
Publish Docker Image / base-decide (push) Successful in 10s
Publish Docker Image / build-base (push) Successful in 42m52s
Publish Docker Image / smoke (push) Successful in 5m33s
Publish Docker Image / build-variant (push) Successful in 21m39s
Publish Docker Image / promote-base-latest (push) Successful in 11s
Publish Docker Image / update-description (push) Successful in 12s
Publish Docker Image / smoke-studio (push) Successful in 5m19s
Publish Docker Image / build-variant-studio (push) Successful in 22m9s
Lint / skill-floor (push) Successful in 8s
Lint / hadolint (push) Successful in 10s
Lint / actionlint (push) Successful in 23s
Lint / doc-drift (push) Successful in 14s
Publish Docker Image / lint-gate (push) Successful in 24s
Publish Docker Image / resolve-versions (push) Successful in 12s
Publish Docker Image / base-decide (push) Successful in 10s
Publish Docker Image / build-base (push) Successful in 42m52s
Publish Docker Image / smoke (push) Successful in 5m33s
Publish Docker Image / build-variant (push) Successful in 21m39s
Publish Docker Image / promote-base-latest (push) Successful in 11s
Publish Docker Image / update-description (push) Successful in 12s
Publish Docker Image / smoke-studio (push) Successful in 5m19s
Publish Docker Image / build-variant-studio (push) Successful in 22m9s
Patch release. pi 1.3.0 -> 1.4.0 (audited, notes next to ARG PI_VERSION in
Dockerfile.variant). pi-studio v0.10.2 -> v0.11.1 (-studio tags; pane echo
now defaults to Summary, see Upgrade notes). The base rebuilds because
rootfs/ changed (8ae1659), so Node v24.22.1 (8 CVEs), git-lfs v3.8.1
(4 CVEs), uv 0.13.5 and agent-browser 0.39.2 come in from latest.
BASE_REBUILD_DATE marker refreshed while the base rebuilds anyway.
check-doc-drift.sh: OK (pi-version and pi-studio named above v1.12.1).
This commit is contained in:
+106
-15
@@ -11,24 +11,115 @@ Pre-v1.0.0 tags followed the pi npm version (`v{pi_version}[letter]`).
|
||||
|
||||
---
|
||||
|
||||
## Unreleased
|
||||
## v1.12.2 — 2026-10-22
|
||||
|
||||
Patch release. Headline: **pi `1.4.0`** (audited, see *Changed* below), plus
|
||||
two upstream **security releases** baked into the base image: **Node
|
||||
`v24.22.1`** (8 CVEs) and **git-lfs `v3.8.1`** (4 CVEs). Also **pi-studio
|
||||
`v0.11.1`** (`-studio` tags only), uv `0.13.5`, agent-browser `0.39.2`, and
|
||||
`~/.ssh/config` is Included even if it appears after start (*Fixed*, below).
|
||||
Surveyed 2026-10-22. Unchanged since v1.12.1: mempalace `3.11.0` (PyPI
|
||||
`latest`), pi-atelier `v0.16.0` (`3b42825`, newest tag),
|
||||
pi-observational-memory `022da5e` (= `master`), pi-toolkit `7c05901`,
|
||||
pi-extensions `4c1d28d`, pi-fork `e69725c`, mempalace-toolkit `d5a03f4`. The
|
||||
skillset snapshot needs no refresh (`vendor-mempalace-skill.sh --check`: OK,
|
||||
still `96b840e`). The base image is rebuilt because `rootfs/` changed, so apt
|
||||
and the base tools pinned to `latest` re-resolve. Of those, Node, git-lfs, uv
|
||||
and agent-browser moved upstream (*Changed*, below). gitea-mcp `v1.10.0`, nvim
|
||||
`0.12.6`, fzf `0.74.5`, gitleaks `8.30.1`, bat `0.26.1`, eza `0.23.5`, zoxide
|
||||
`0.10.0`, gosu `1.19`, micro `2.0.15`, tealdeer `1.9.0`, typst `0.15.1`, yq
|
||||
`4.54.1` and playwright `1.64.1` match their newest releases. Each was compared
|
||||
against the v1.12.1 image on tor-ms22.
|
||||
|
||||
### Components that move with this release
|
||||
|
||||
| Component | Baked in v1.12.1 | v1.12.2 | Why |
|
||||
|---|---|---|---|
|
||||
| **pi** | `1.3.0` | **`1.4.0`** | audited, see *Changed* below |
|
||||
| **pi-studio** (`-studio` tags) | `v0.10.2` (`4b4abd1`) | **`v0.11.1`** (`8a410b4`) | newest tag, see *Changed* below |
|
||||
| **Node** (base) | `v24.22.0` | **`v24.22.1`** (or later: NodeSource `node_24.x` at build time) | security release, see *Changed* below |
|
||||
| **git-lfs** (base) | `v3.8.0` | **`v3.8.1`** (or later: `latest` at build time) | security release, see *Changed* below |
|
||||
| uv (base) | `0.13.1` | **`0.13.5`** (or later: `latest` at build time) | see *Changed* below |
|
||||
| agent-browser (base) | `0.39.1` | **`0.39.2`** (or later: `latest` at build time) | see *Changed* below |
|
||||
|
||||
### Upgrade notes
|
||||
|
||||
- **pi-studio's REPL pane now echoes each send by default** (`-studio` tags
|
||||
only). From 0.11.0, *Pane echo* defaults to **Summary**, as in pi-repl: the
|
||||
tmux pane shows each submitted block (up to 20 lines or 2,000 characters)
|
||||
above its output. Before, the default was **Off**. The same default applies
|
||||
to the agent's `studio_repl_send` tool when it passes no `echoMode`. A choice
|
||||
of **Full** made in Studio is kept. To get the old quiet pane back, choose
|
||||
**Off** under the REPL pane's **More**, or set
|
||||
`PI_STUDIO_REPL_ECHO_MODE=off` for the agent tool. What Studio *records* is
|
||||
unchanged: only the code and its output.
|
||||
|
||||
### Changed
|
||||
|
||||
- **pi-studio `v0.10.2` → `v0.10.4`** (`c83940d`, `-studio` tags only). Two
|
||||
upstream patch releases on 2026-10-19. 0.10.3: IPython prints a value once
|
||||
(`Out[5]: …`), not twice, and after a Quick send the cursor returns to the
|
||||
input box. 0.10.4: Stop works again on a Mac that has a process running as
|
||||
`nobody`. That was a 0.10.2 regression: macOS lists that uid as `-2`, and the
|
||||
0.10.2 parser refused to stop anything. **It does not affect the image**:
|
||||
inside the container, `ps` shows only the container's own processes, and none
|
||||
has a negative uid. Measured 2026-10-19 on tor-ms22. 0.10.2's own
|
||||
`readStopProcessTable` parsed the live process table (9 rows, min uid 1000).
|
||||
Control: a macOS-style `-2` row made it throw "Could not parse process
|
||||
ownership data". Dependencies unchanged: `package-lock.json` packages are
|
||||
identical to 0.10.1's, and `ws` is still the only runtime dependency. Loaded
|
||||
into pi `1.3.0` with `pi --no-extensions -e <clone>/index.ts -p`, it registers
|
||||
the same four `studio_*` tools, rc 0.
|
||||
- **pi `1.3.0` → `1.4.0`** (npm `latest`, published 2026-10-21). No breaking
|
||||
changes listed. Fixes that land on how this fleet uses pi: compaction and
|
||||
branch summaries no longer fail with "generation hit the token cap" when
|
||||
reasoning uses most of the old fixed summary limit (#9512, #9075); resumed
|
||||
sessions and `/tree` no longer leave extension tools inactive (#11062); a
|
||||
session no longer breaks after recovering from a reply cut off at the output
|
||||
limit (#11227); codemode scripts wait up to 60 s for a free worker instead
|
||||
of failing (#11184); the terminal is restored when pi exits without its
|
||||
normal teardown (#11170); concurrent extension dialogs no longer lose a
|
||||
promise (#11166); the `grep` tool runs `rg --no-config` (#11203); and
|
||||
extensions can import `@earendil-works/pi-ai/models` (#11156). Audited
|
||||
2026-10-22 on tor-ms22. The only API changes that could reach us are the
|
||||
attribution headers that `before_provider_headers` handlers no longer see,
|
||||
`generateSummary()` ignoring `reserveTokens`, and two removed exports
|
||||
(`mergeProviderAttributionHeaders`, `getPiUserAgent`). None is used by any
|
||||
companion, fleet extension or mempalace-toolkit. pi-agent-core changes only
|
||||
by the new optional `identity` field, so obsmem's `finishTurn` turn cap is
|
||||
untouched. All 58 names our extensions import from pi resolve in 1.4.0.
|
||||
With a copy of tor-ms22's real `~/.pi/agent`, `pi -p` exits 0 with nothing
|
||||
on stderr. The TUI loads the same extensions as on 1.3.0, with no
|
||||
extension issues. Atelier paints in both renderers, and the bridge registers
|
||||
its 45 tools. Full audit next to `ARG PI_VERSION` in `Dockerfile.variant`.
|
||||
- **pi-studio `v0.10.2` → `v0.11.1`** (`8a410b4`, `-studio` tags only). Five
|
||||
upstream releases, 2026-10-19 to 2026-10-22. 0.10.3: IPython prints a value
|
||||
once (`Out[5]: …`), not twice, and after a Quick send the cursor returns to
|
||||
the input box. 0.10.4: Stop works again on a Mac that has a process running
|
||||
as `nobody`. That was a 0.10.2 regression: macOS lists that uid as `-2`, and
|
||||
the 0.10.2 parser refused to stop anything. **It does not affect the
|
||||
image**: inside the container, `ps` shows only the container's own
|
||||
processes, and none has a negative uid. Measured 2026-10-19 on tor-ms22.
|
||||
0.10.2's own `readStopProcessTable` parsed the live process table (9 rows,
|
||||
min uid 1000). Control: a macOS-style `-2` row made it throw "Could not parse
|
||||
process ownership data". 0.10.5: the Quick-send result shows while the
|
||||
cursor stays in the box, and the Prompt toolbar fits on one row on a
|
||||
13-inch screen. 0.11.0: the REPL pane runs Ruby (irb), Java (JShell), Octave,
|
||||
MATLAB, gnuplot and C++ (Cling) when they are on `PATH` (none is baked into
|
||||
this image), a send ends within seconds when its runtime crashes instead of
|
||||
waiting out the 20 s timeout, and the pane-echo default changes (see
|
||||
*Upgrade notes*). 0.11.1: a shorter run status beside **Stop**, and the line
|
||||
above a response shows which one you are on ("9/9"). Dependencies are
|
||||
unchanged: `package-lock.json` differs from 0.10.2's only in the package's
|
||||
own version, and `ws` is still the only runtime dependency. Loaded into pi
|
||||
`1.4.0` with `pi --no-extensions -e <clone>/index.ts -p`, it registers the
|
||||
same four tools (`studio_repl_status`, `studio_repl_send`,
|
||||
`studio_export_pdf`, `studio_export_html`), rc 0, nothing on stderr.
|
||||
Control: without `-e`, none.
|
||||
- **Node `v24.22.0` → `v24.22.1`** (base, NodeSource `node_24.x`). An LTS
|
||||
security release with 8 CVEs in http, dns, tls, permission, crypto and
|
||||
brotli. On 2026-10-21 NodeSource still served only `24.22.0`, so a rebuild
|
||||
then would not have picked it up. On 2026-10-22 it serves
|
||||
`24.22.1-1nodesource1` for both arm64 and amd64.
|
||||
- **git-lfs `v3.8.0` → `v3.8.1`** (base). A security release (2026-10-22)
|
||||
with 4 CVEs. Among them: remote commands sent over SSH are now fully quoted
|
||||
(CVE-2026-69260), and Cookie headers are no longer forwarded to another host
|
||||
after a redirect (CVE-2026-69261).
|
||||
- **uv `0.13.1` → `0.13.5`** (base). Bundled root certificates updated,
|
||||
dropped GET and HEAD requests retried, `uv export` faster with extras, lower
|
||||
peak memory when resolving, and new CPython builds (3.15.1, 3.14.9, 3.13.17).
|
||||
No breaking changes.
|
||||
- **agent-browser `0.39.1` → `0.39.2`** (base). Bug fixes only. The ones an
|
||||
agent notices: a click or double-click on a hidden, disabled or off-viewport
|
||||
element now returns an error instead of reporting success, an ambiguous
|
||||
stale element reference fails instead of picking another element, and an
|
||||
unreadable or invalid policy file denies actions instead of being ignored.
|
||||
|
||||
### Fixed
|
||||
|
||||
|
||||
+1
-1
@@ -14,7 +14,7 @@
|
||||
# content-addressed over this file, so any byte change invalidates the
|
||||
# cache. Recommended cadence: once per release for security updates.
|
||||
#
|
||||
# BASE_REBUILD_DATE: 2026-10-19 (v1.12.1 — setup-lan-access.sh always Includes ssh-lan.conf; apt and base tools re-resolve (upstream on 2026-10-19: gitea-mcp 1.10.0; uv 0.13.1, Node v24.22.0, nvim 0.12.6, fzf 0.74.5 unchanged); previous marker 2026-10-18 / v1.12.0)
|
||||
# BASE_REBUILD_DATE: 2026-10-22 (v1.12.2 — setup-lan-access.sh always Includes ~/.ssh/config; apt and base tools re-resolve (upstream on 2026-10-22: Node v24.22.1 and git-lfs 3.8.1 security releases, uv 0.13.5, agent-browser 0.39.2; gitea-mcp 1.10.0, nvim 0.12.6, fzf 0.74.5 unchanged); previous marker 2026-10-19 / v1.12.1)
|
||||
#
|
||||
# ── Lineage note ─────────────────────────────────────────────────────
|
||||
# Adapted from opencode-devbox/Dockerfile.base (commit before v1.16.2).
|
||||
|
||||
+36
-1
@@ -317,7 +317,42 @@ ARG USER_NAME=developer
|
||||
# extension with no [Extension issues], the bridge registers its 45 tools,
|
||||
# /om:status, /om:view and the /studio commands are offered, and atelier
|
||||
# paints ACTIVITY/READY/TOOLS in both renderers (controls with -ne: none).
|
||||
ARG PI_VERSION=1.3.0
|
||||
#
|
||||
# v1.12.2: 1.3.0 -> 1.4.0 (npm latest, published 2026-10-21T22:48Z). MEASURED
|
||||
# 2026-10-22 on tor-ms22 from isolated npm prefixes for 1.3.0 and 1.4.0, with
|
||||
# the published tarballs unpacked side by side:
|
||||
# 1. NO `### Breaking Changes` section in 1.4.0. Behaviour changes, none of
|
||||
# which reaches us: attribution headers come from pi-ai's client identity,
|
||||
# so `before_provider_headers` handlers no longer see them, and
|
||||
# `generateSummary()` ignores `reserveTokens`. 0 uses of either
|
||||
# (`before_provider_headers`, `generateSummary`, `reserveTokens`) in
|
||||
# pi-extensions, pi-fork, obsmem, pi-atelier and pi-studio. Control: the
|
||||
# same grep finds `registerTool` in 18 files.
|
||||
# 2. pi-agent-core 1.3.0 -> 1.4.0 is NOT byte-identical this time, but every
|
||||
# changed line in dist (4 files) is the new optional `identity` field and
|
||||
# `DEFAULT_AGENT_IDENTITY`; 0 changed lines mention finishTurn, so obsmem's
|
||||
# turn cap is untouched. pi-tui adds only exit-restore methods
|
||||
# (`restoreOnExit`, `getExitRestorePrefix/Suffix`, #11170); atelier's
|
||||
# internals TuiMainScreen / renderLayoutFrame are in the same 10 dist
|
||||
# files. The extension loader only gains the `@earendil-works/pi-ai/models`
|
||||
# alias (#11156). pi-mcp and pi-codemode dist are byte-identical.
|
||||
# 3. Public API: the only removed .d.ts exports are
|
||||
# `mergeProviderAttributionHeaders` (pi-coding-agent) and `getPiUserAgent`
|
||||
# (pi-ai). 0 consumers. All 58 runtime-imported names across pi-toolkit,
|
||||
# pi-extensions, pi-fork, obsmem, pi-studio (0.10.2 and 0.11.1),
|
||||
# pi-atelier, mempalace-toolkit, ~/.pi/agent/extensions and /opt/fleet-pi
|
||||
# resolve in 1.4.0, and in 1.3.0 (control: an injected fake name is
|
||||
# reported missing).
|
||||
# 4. engines.node is still `>=22.19.0`. Peer ranges: atelier >=0.84.0, fork
|
||||
# >=0.75.0, obsmem and studio `*`.
|
||||
# Exercised before tagging, with a copy of tor-ms22's real ~/.pi/agent
|
||||
# (pi-studio swapped for v0.11.1): `pi -p` answers PONG, rc 0 in 10 s (1.3.0:
|
||||
# 9 s), nothing on stderr. In the TUI the [Extensions] list is the same as on
|
||||
# 1.3.0, with no [Extension issues]. The bridge registers its 45 tools, and
|
||||
# TOOLS shows 58 / 64 on both. /om:status, /om:view and the /studio commands
|
||||
# are offered, and atelier paints ACTIVITY/READY/TOOLS in both renderers
|
||||
# (control with -ne: none).
|
||||
ARG PI_VERSION=1.4.0
|
||||
ARG PI_TOOLKIT_REF=main
|
||||
ARG PI_EXTENSIONS_REF=main
|
||||
# Repo URLs default to the canonical gitea origin but are overridable so a
|
||||
|
||||
@@ -1297,7 +1297,7 @@ persisted volumes survived, and pi runtime wiring is intact:
|
||||
```bash
|
||||
./scripts/recreate-sanity-check.sh # auto-detects variant
|
||||
./scripts/recreate-sanity-check.sh --expected-image-version 1.8.9 # assert the pi-devbox release tag
|
||||
./scripts/recreate-sanity-check.sh --expected-version 1.3.0 # assert the pi coding agent version
|
||||
./scripts/recreate-sanity-check.sh --expected-version 1.4.0 # assert the pi coding agent version
|
||||
```
|
||||
|
||||
Those are **two different versions**, and the flags are not interchangeable:
|
||||
@@ -1336,7 +1336,7 @@ resolved to `latest` at build time:
|
||||
|
||||
| Component | Pin | Where |
|
||||
|---|---|---|
|
||||
| pi | `1.3.0` | `ARG PI_VERSION` — `Dockerfile.variant` |
|
||||
| pi | `1.4.0` | `ARG PI_VERSION` — `Dockerfile.variant` |
|
||||
| pi-obsmem | `022da5e5554d04dfdc876ed7dac4a42c6b83dfd4` | `ARG PI_OBSMEM_REF` — `Dockerfile.variant` |
|
||||
| pi-atelier | `v0.16.0` | `ARG PI_ATELIER_REF` — `Dockerfile.variant` |
|
||||
| mempalace | `3.11.0` | `ARG MEMPALACE_VERSION` — `Dockerfile.base` |
|
||||
|
||||
Reference in New Issue
Block a user