diff --git a/CHANGELOG.md b/CHANGELOG.md index 95a91ce..088da6d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,7 +11,62 @@ Pre-v1.0.0 tags followed the pi npm version (`v{pi_version}[letter]`). --- -## v1.10.0 — 2026-10-02 +## v1.10.1 — 2026-10-02 + +**v1.10.0 was tagged and never published.** Its tag build (run 704) failed one +assertion out of 104 — a smoke check that required a pi dependency upstream had +deliberately deleted — so every publish job skipped and no image, no `latest`, +no Hub description was ever written. v1.10.1 is that same release plus the fix +to the assertion: **everything described under v1.10.0 below ships here**, and +that section remains the content record for this release. Nothing in it changed. + +The tag number moves rather than being re-pointed because CI had already +consumed v1.10.0; a version that failed its build should stay failed and +readable, not be quietly overwritten with different bytes. + +### Fixed + +- **The smoke suite asserted a pi dependency that upstream deleted, and it cost + this release its first tag build** — `scripts/smoke-test.sh` required + `@mariozechner/clipboard` to be installed and `require()`-able at every install + site. pi **0.86.0** (`#9163`) *"Replaced the external native clipboard + dependency with bundled asynchronous macOS, Windows, and X11 helpers while + preserving platform command and OSC 52 fallbacks"*. Measured in the published + tarballs: pi `0.85.1` declares `@mariozechner/clipboard@0.3.9`; `0.87.1` and + `1.0.0` declare no `@mariozechner/*` at all. So on a correct v1.10.0 image the + package is legitimately absent, the assertion's `if [ -z "$sites" ]; then exit + 1` fired, and run 704 ended **100 passed / 1 failed** on `smoke` and **103 + passed / 1 failed** on `smoke-studio` — same single assertion, every + studio-specific check green. `build-variant`, `build-variant-studio`, + `promote-base-latest` and `update-description` were all skipped, so **nothing + was published**: the gate behaved exactly as designed, against a stale + expectation rather than a real defect. + + The fix does not delete the guard, because the guard was right: "fail when the + family is absent" is what stops `prune_foreign_natives()` from silently + deleting the binding instead of the surplus platform copies. It now **derives + its expectation from what the image's pi actually declares** — if pi declares + the dependency an install must exist and load; if pi does not, no install may + linger. That re-arms by itself should a future pi re-add it, and it still + catches an orphaned install. Verified as a four-quadrant truth table with the + command string extracted verbatim from the file and run through `sh -c` the way + `run()` invokes it: declared+present → rc=0, declared+absent → rc=1, + undeclared+absent → rc=0, undeclared+present → rc=1. + + Worth stating plainly, since it is the whole value of the round: pi 1.0.0, + pi-atelier v0.13.0 and pi-studio v0.9.61 passed **103 of 104** assertions on a + pi MAJOR bump. The one red was the suite describing pi 0.85.1's dependency + graph, not the image. + +--- + +## v1.10.0 — 2026-10-02 (tagged, never published — superseded by v1.10.1) + +> Tagged 2026-10-02 at commit `12f99c4`. Its build (run 704) went red on the +> stale clipboard assertion described under v1.10.1, so `build-variant`, +> `build-variant-studio`, `promote-base-latest` and `update-description` all +> skipped and nothing reached the Hub. No image carries this tag. The content +> below is accurate and shipped as **v1.10.1**. Three small fixes found by the v1.9.4 first-boot acceptance and the CI base hash prediction, plus one boot-time wiring fix that stops a recurring `git push` @@ -209,38 +264,6 @@ jump, four new base packages and a new mailbox feature. The release carrying a ### Fixed -- **The smoke suite asserted a pi dependency that upstream deleted, and it cost - this release its first tag build** — `scripts/smoke-test.sh` required - `@mariozechner/clipboard` to be installed and `require()`-able at every install - site. pi **0.86.0** (`#9163`) *"Replaced the external native clipboard - dependency with bundled asynchronous macOS, Windows, and X11 helpers while - preserving platform command and OSC 52 fallbacks"*. Measured in the published - tarballs: pi `0.85.1` declares `@mariozechner/clipboard@0.3.9`; `0.87.1` and - `1.0.0` declare no `@mariozechner/*` at all. So on a correct v1.10.0 image the - package is legitimately absent, the assertion's `if [ -z "$sites" ]; then exit - 1` fired, and run 704 ended **100 passed / 1 failed** on `smoke` and **103 - passed / 1 failed** on `smoke-studio` — same single assertion, every - studio-specific check green. `build-variant`, `build-variant-studio`, - `promote-base-latest` and `update-description` were all skipped, so **nothing - was published**: the gate behaved exactly as designed, against a stale - expectation rather than a real defect. - - The fix does not delete the guard, because the guard was right: "fail when the - family is absent" is what stops `prune_foreign_natives()` from silently - deleting the binding instead of the surplus platform copies. It now **derives - its expectation from what the image's pi actually declares** — if pi declares - the dependency an install must exist and load; if pi does not, no install may - linger. That re-arms by itself should a future pi re-add it, and it still - catches an orphaned install. Verified as a four-quadrant truth table with the - command string extracted verbatim from the file and run through `sh -c` the way - `run()` invokes it: declared+present → rc=0, declared+absent → rc=1, - undeclared+absent → rc=0, undeclared+present → rc=1. - - Worth stating plainly, since it is the whole value of the round: pi 1.0.0, - pi-atelier v0.13.0 and pi-studio v0.9.61 passed **103 of 104** assertions on a - pi MAJOR bump. The one red was the suite describing pi 0.85.1's dependency - graph, not the image. - - **`git push` from inside the container dies on a read-only ControlPath, and no amount of documentation was fixing it** — `entrypoint-user.sh` now sets `core.sshCommand` to `ssh -F $HOME/.ssh-local/config` when that sidecar exists. diff --git a/Dockerfile.variant b/Dockerfile.variant index 161ead6..dc133a7 100644 --- a/Dockerfile.variant +++ b/Dockerfile.variant @@ -154,11 +154,11 @@ ARG USER_NAME=developer # (e7d77dc -> 1529e14 -> 731c3d4 in the nine days to 2026-10-01), so waiting for # a tag means holding pi indefinitely. A full SHA keeps the one property # `master` does not have: rebuilding this tag later produces the SAME image. -# v1.9.5 SKIPPED 0.99.x and 1.0.0 for lack of evidence. v1.10.0 went and got the +# v1.9.5 SKIPPED 0.99.x and 1.0.0 for lack of evidence. v1.10.1 went and got the # evidence instead of waiting for obsmem to mention a version, because "no issue # names 1.0" is an absence of a statement, not a measurement. # -# v1.10.0: 0.87.1 -> 1.0.0. MEASURED 2026-10-02 against the published npm +# v1.10.1: 0.87.1 -> 1.0.0. MEASURED 2026-10-02 against the published npm # tarballs for 0.87.1 and 1.0.0, unpacked side by side: # 1. NO `### Breaking Changes` SECTION IN 1.0.0 AT ALL. The changelog's # breaking sections belong to 0.87.0, 0.86.0, 0.84.3, 0.84.0, 0.83.0, @@ -273,7 +273,7 @@ ARG PI_ATELIER_REPO=https://github.com/michaelmjhhhh/pi-atelier.git # pi >=0.84.0, so it still spans the pinned 0.85.1. 13 commits v0.10.1..v0.10.3, # all under src/ tests/ docs/ scripts/ plus metadata; no entry-point move. # -# v1.10.0: v0.10.3 -> v0.13.0, closing the two-minor gap v1.9.5 flagged as the +# v1.10.1: v0.10.3 -> v0.13.0, closing the two-minor gap v1.9.5 flagged as the # residual risk of the pi bump. peerDependencies are UNCHANGED at pi >=0.84.0 # across v0.10.3, v0.12.1 and v0.13.0 — still a FLOOR, so still not evidence of # anything; the floor is satisfied by 1.0.0 either way. What was actually diff --git a/README.md b/README.md index 5ca14d3..68f4dae 100644 --- a/README.md +++ b/README.md @@ -358,7 +358,7 @@ DOT syntax errors instead of crashing. Then in Studio: open the PNG (or a `.md` that embeds it) and hit **refresh-from-disk** after each edit. Note: SVG is **not** in Studio's local-image-link allowlist — use PNG. -## Terminal UI mode: fullscreen is the default (since v1.10.0) +## Terminal UI mode: fullscreen is the default (since v1.10.1) pi **1.0.0** changed the default terminal UI mode to **fullscreen**, and this image adopts upstream's default rather than overriding it. Fullscreen draws into