aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authoruser <user@clank>2026-08-13 22:51:59 +0200
committeruser <user@clank>2026-08-13 22:51:59 +0200
commit7a50cd9f09a6ed1ca65ffccc84dab6023bb59446 (patch)
tree8b8d36e0ccd6eb4594d2e8ff8c288f4b3561b9d3
parentchecks: kill sessions with the form that actually kills them (diff)
downloadsl0ppi-main.tar.gz
sl0ppi-main.tar.xz
sl0ppi-main.zip
release: 0.1.9, with a bun that runs without AVX2HEADmain
The tarball shipped bun's default x64 build, which requires AVX2 -- so sl0ppi installed cleanly on a plain KVM guest and then died with "Illegal instruction" the first time anything ran pi. Known since 0.1.7 and carried as an open item; not something to ship a third time. packaging/fetch-vendor.sh now fetches bun-linux-x64-baseline.zip. Verified without needing such a machine, on an emulated CPU that has none: qemu-x86_64 -cpu Nehalem <baseline>/bun --version -> 1.3.14 qemu-x86_64 -cpu Nehalem <default>/bun --version -> Illegal instruction Also drops the installer's closing note about the status bar asking for permissions on first launch: shipped plugins are granted implicitly now, so the prompt it told people to expect no longer appears. (That text is baked into the 0.1.9 tarball; it is wrong but harmless, and corrected for the next one.) And gitignores *.core -- qemu writes one where you stand when it kills a target on an illegal instruction, and a 100MB core dump nearly went into this commit. 0.1.9 contains everything since 0.1.8: the split button actually visible and clickable where it is drawn, including on stacked panes; shipped plugins not asking for permission; the status bar as a framed box in the pane style with a new-tab button and margins matching the pane gap, collapsing to a single line in the mobile layout; and runtime tabs keeping a status bar without losing the purpose the CLI uses for identity.
-rw-r--r--.gitignore3
-rw-r--r--FORKS.md1
-rw-r--r--VERSION2
-rw-r--r--docs/HANDOVER.md10
-rw-r--r--docs/roadmap.md21
-rwxr-xr-xpackaging/fetch-vendor.sh11
-rwxr-xr-xpackaging/install.sh4
-rw-r--r--packaging/pins.sha2561
8 files changed, 40 insertions, 13 deletions
diff --git a/.gitignore b/.gitignore
index 22dd580..80ac396 100644
--- a/.gitignore
+++ b/.gitignore
@@ -24,3 +24,6 @@
# CLI bundle (a build output of `make cli`)
/cli/dist/
__pycache__/
+
+# core dumps (qemu writes one when it kills a target on an illegal instruction)
+*.core
diff --git a/FORKS.md b/FORKS.md
index 9bb7332..7ad390a 100644
--- a/FORKS.md
+++ b/FORKS.md
@@ -109,6 +109,7 @@ forked; it is pinned and redistributed as-is.
| upstream | https://bun.sh |
| pinned version | `1.3.14` |
| why | pi is a Node/TS program; bun runs `dist/cli.js` directly (verified) and is a single static binary, so the tarball needs no system Node |
+| which build | `bun-linux-x64-**baseline**.zip`. The default build needs AVX2 and dies with `Illegal instruction` on a plain KVM guest — measured under `qemu-x86_64 -cpu Nehalem`, where baseline prints its version and the default one crashes. |
pi upstream builds its own release binary with `bun build --compile`, so bun is
a supported runtime for it rather than a gamble.
diff --git a/VERSION b/VERSION
index 699c6c6..1a03094 100644
--- a/VERSION
+++ b/VERSION
@@ -1 +1 @@
-0.1.8
+0.1.9
diff --git a/docs/HANDOVER.md b/docs/HANDOVER.md
index 1e3fe96..eb0e467 100644
--- a/docs/HANDOVER.md
+++ b/docs/HANDOVER.md
@@ -107,7 +107,7 @@ directory rather than to widen the rule.
## Where the project is
Everything is committed and pushed to `ssh://git@git.sl0p.foo:39327/srv/git/sl0ppi.git`.
-Released artifacts are at <https://sl0ppi.sl0p.foo> (currently 0.1.8).
+Released artifacts are at <https://sl0ppi.sl0p.foo> (currently 0.1.9).
| phase | state |
|---|---|
@@ -134,13 +134,11 @@ URL afterwards.
`ScreenInstruction::RemoveClient` on a debug build to find where it is lost.
Cheap alternative: give the headless path its own pty (`script -qec`) and
kill the client afterwards — killed clients demonstrably do not leak.
-2. **bun is the AVX2 build.** Caused `Illegal instruction` on a plain KVM guest.
- One line in `packaging/fetch-vendor.sh`: `bun-linux-x64-baseline.zip`.
-3. **`pir` needs python3 + fzf**, neither shipped. The fix is folding it into
+2. **`pir` needs python3 + fzf**, neither shipped. The fix is folding it into
`sl0ppi agent --resume` (already designed in `docs/cli-design.md`).
-4. **Tab overflow.** `sl0ppi open <name>` wants to be a fuzzy picker once a root
+3. **Tab overflow.** `sl0ppi open <name>` wants to be a fuzzy picker once a root
has a dozen projects.
-5. Button polish: shift/right-click for the other split direction; reuse
+4. Button polish: shift/right-click for the other split direction; reuse
`status_bar_button_style` so it looks pressable. Extend `make check-live`
rather than trusting a snapshot.
diff --git a/docs/roadmap.md b/docs/roadmap.md
index 675f82d..18c057c 100644
--- a/docs/roadmap.md
+++ b/docs/roadmap.md
@@ -457,6 +457,27 @@ Content and further click targets: a close-`x` per tab, session name → session
manager, mode indicator → unlock, drag-to-reorder tabs. Also: the pane-split `+`
and the new-tab `+` are currently the same glyph for different verbs.
+## Fixed: the vendored bun required AVX2
+
+The tarball shipped bun's default x64 build, which needs AVX2 — so on a plain
+KVM guest sl0ppi installed cleanly and then died with `Illegal instruction` the
+first time anything ran pi. `packaging/fetch-vendor.sh` now fetches
+`bun-linux-x64-baseline.zip`.
+
+Verified without needing such a machine, under an emulated CPU that has no AVX2:
+
+```bash
+qemu-x86_64 -cpu Nehalem vendor/cache/bun-*/bun --version # baseline: 1.3.14
+qemu-x86_64 -cpu Nehalem /tmp/bun-linux-x64/bun --version # default: Illegal instruction
+```
+
+(That qemu-user binary is the one the tenet tracer builds, at
+`~/dev/tenet/tenet-original/tracers/qemu-user/qemu-build/build/qemu-x86_64`.)
+
+The baseline binary still contains 641 AVX2-only instructions against the
+default's 10980 — those are runtime-dispatched paths in bundled libraries,
+which is why running it is the check that matters rather than counting opcodes.
+
## Standing risks
**`sl0ppij/target` is a symlink to `~/lol/zellij/target`.** Introduced when the
diff --git a/packaging/fetch-vendor.sh b/packaging/fetch-vendor.sh
index 07eafe2..2d34b55 100755
--- a/packaging/fetch-vendor.sh
+++ b/packaging/fetch-vendor.sh
@@ -50,12 +50,17 @@ if [ ! -x "$BUN_DIR/bun" ]; then
log "fetching bun $BUN_VERSION"
tmp="$(mktemp -d)"
trap 'rm -rf "$tmp"' EXIT
+ # BASELINE, not the default build: bun-linux-x64.zip requires AVX2, and a
+ # plain KVM guest without it dies with "Illegal instruction" the first time
+ # anything runs pi -- i.e. the tarball installs fine and then does not work,
+ # on exactly the kind of machine this project exists to install on. Baseline
+ # costs some JS throughput we do not notice and runs everywhere.
curl -fsSL -o "$tmp/bun.zip" \
- "https://github.com/oven-sh/bun/releases/download/bun-v$BUN_VERSION/bun-linux-x64.zip"
- record_or_verify "bun-linux-x64-$BUN_VERSION.zip" "$tmp/bun.zip"
+ "https://github.com/oven-sh/bun/releases/download/bun-v$BUN_VERSION/bun-linux-x64-baseline.zip"
+ record_or_verify "bun-linux-x64-baseline-$BUN_VERSION.zip" "$tmp/bun.zip"
unzip -q -d "$tmp" "$tmp/bun.zip"
mkdir -p "$BUN_DIR"
- install -m755 "$tmp"/bun-linux-x64/bun "$BUN_DIR/bun"
+ install -m755 "$tmp"/bun-linux-x64-baseline/bun "$BUN_DIR/bun"
rm -rf "$tmp"; trap - EXIT
else
log "bun $BUN_VERSION already vendored"
diff --git a/packaging/install.sh b/packaging/install.sh
index 657085a..97f53f4 100755
--- a/packaging/install.sh
+++ b/packaging/install.sh
@@ -148,6 +148,4 @@ say "start with: sl0ppi up (in a directory that holds your projects)"
echo " sl0ppi doctor check this installation"
echo " sl0ppi init make the current directory a project"
echo " sl0ppij the multiplexer on its own, if you prefer"
-echo
-echo " On the very first launch the status bar plugin asks for permissions"
-echo " (\"... Allow? (y/n)\") -- press y once and it is remembered."
+
diff --git a/packaging/pins.sha256 b/packaging/pins.sha256
index cbb73a7..9e8b140 100644
--- a/packaging/pins.sha256
+++ b/packaging/pins.sha256
@@ -1 +1,2 @@
951ee2aee855f08595aeec6225226a298d3fea83a3dcd6465c09cbccdf7e848f bun-linux-x64-1.3.14.zip
+a063908ae08b7852ca10939bbdc6ceed3ddabce8fb9402dce83d65d73b36e6c7 bun-linux-x64-baseline-1.3.14.zip