diff options
| author | user <user@clank> | 2026-08-13 22:51:59 +0200 |
|---|---|---|
| committer | user <user@clank> | 2026-08-13 22:51:59 +0200 |
| commit | 7a50cd9f09a6ed1ca65ffccc84dab6023bb59446 (patch) | |
| tree | 8b8d36e0ccd6eb4594d2e8ff8c288f4b3561b9d3 | |
| parent | checks: kill sessions with the form that actually kills them (diff) | |
| download | sl0ppi-main.tar.gz sl0ppi-main.tar.xz sl0ppi-main.zip | |
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-- | .gitignore | 3 | ||||
| -rw-r--r-- | FORKS.md | 1 | ||||
| -rw-r--r-- | VERSION | 2 | ||||
| -rw-r--r-- | docs/HANDOVER.md | 10 | ||||
| -rw-r--r-- | docs/roadmap.md | 21 | ||||
| -rwxr-xr-x | packaging/fetch-vendor.sh | 11 | ||||
| -rwxr-xr-x | packaging/install.sh | 4 | ||||
| -rw-r--r-- | packaging/pins.sha256 | 1 |
8 files changed, 40 insertions, 13 deletions
@@ -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 @@ -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. @@ -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 |
