<feed xmlns='http://www.w3.org/2005/Atom'>
<title>sl0ppi.git/packaging/stage.sh, branch main</title>
<subtitle>a sl0p.foo repository</subtitle>
<id>https://git.sl0p.foo/sl0ppi.git/atom/packaging/stage.sh?h=main</id>
<link rel='self' href='https://git.sl0p.foo/sl0ppi.git/atom/packaging/stage.sh?h=main'/>
<link rel='alternate' type='text/html' href='https://git.sl0p.foo/sl0ppi.git/'/>
<updated>2026-08-12T21:51:34Z</updated>
<entry>
<title>release: 0.1.1, and stop the CLI carrying a second version</title>
<updated>2026-08-12T21:51:34Z</updated>
<author>
<name>user</name>
<email>user@clank</email>
</author>
<published>2026-08-12T21:51:34Z</published>
<link rel='alternate' type='text/html' href='https://git.sl0p.foo/sl0ppi.git/commit/?id=8f5dc3904093c402c16eca835528f59fbb9851b3'/>
<id>urn:sha1:8f5dc3904093c402c16eca835528f59fbb9851b3</id>
<content type='text'>
Published 0.1.1 with the dead-session and flaky-read fixes.

Also removes the `sl0ppi-cli` line from MANIFEST and the version field from
cli/package.json: the CLI ships as part of the product, so a version of its own
only drifts -- a 0.1.1 release shipped a MANIFEST claiming sl0ppi-cli 0.1.0.

Records the terminal-level flakiness as a known issue with the measurements, so
it is a tracked defect rather than folklore: list-tabs/list-panes fail ~60% of
the time against a detached live session on a 2-vCPU box, ~25% with a client
attached, and the action client blames "no active session" for what is really a
transient enumeration failure.
</content>
</entry>
<entry>
<title>build: ship the sl0ppi CLI in the tarball</title>
<updated>2026-08-12T20:51:23Z</updated>
<author>
<name>user</name>
<email>user@clank</email>
</author>
<published>2026-08-12T20:51:23Z</published>
<link rel='alternate' type='text/html' href='https://git.sl0p.foo/sl0ppi.git/commit/?id=f8f035713f29676348602246036aba840468cc5f'/>
<id>urn:sha1:f8f035713f29676348602246036aba840468cc5f</id>
<content type='text'>
The artifact was stale twice over: it predated the protobuf fix and did not
contain the CLI at all. Both fixed, and the whole chain re-verified from the
tarball rather than assumed.

The CLI ships as a single 31K file (`bun build --target=bun`) run by the bundled
bun, rather than a source tree or a second `--compile`d binary that would embed
another 90M copy of bun. `install.sh` generates the wrapper and pins
SL0PPI_BIN to the sl0ppij it just installed, so the orchestrator can never end
up driving some other zellij that happens to come first on PATH.

Verified in a throwaway HOME with node, npm, bun, cargo, rustc and python3 all
replaced by poison stubs that fail loudly if invoked:

  sl0ppij --version   -&gt; 0.45.0+sl0p1        (static musl, no libc dependency)
  pi --version        -&gt; 0.84.1              (bundled bun)
  sl0ppi doctor       -&gt; all good
  sl0ppi init x2      -&gt; two projects scaffolded
  sl0ppi up           -&gt; session "dev", 2 tabs, agents suspended
  sl0ppi ls           -&gt; agent:suspended, 1 pane each
  sl0ppi up (again)   -&gt; "up to date"

And the promise the whole thing exists for, end to end: attach a client, press
Enter in the suspended agent pane, and pi starts on the bundled runtime -- while
the other project's agent stays suspended, because only the focused pane got the
key.

`make test` now runs the CLI suite alongside the Rust ones, so the two halves
cannot drift apart unnoticed.
</content>
</entry>
<entry>
<title>build: ship a static musl binary instead of a glibc-2.39 one</title>
<updated>2026-08-12T19:12:08Z</updated>
<author>
<name>user</name>
<email>user@clank</email>
</author>
<published>2026-08-12T19:12:08Z</published>
<link rel='alternate' type='text/html' href='https://git.sl0p.foo/sl0ppi.git/commit/?id=03a2a8a8cbe30d8acf76420ba5143080cbf65d9e'/>
<id>urn:sha1:03a2a8a8cbe30d8acf76420ba5143080cbf65d9e</id>
<content type='text'>
The gnu release build required GLIBC_2.39 (Jan 2024), so the "install it on
another machine" artifact would have failed on Debian 12, Ubuntu 22.04 and
RHEL 9. That is the whole premise of this repo, so it is a defect, not a nit.

  make build   -&gt; cargo zigbuild --target x86_64-unknown-linux-musl
  result       -&gt; ELF, statically linked, 0 GLIBC_ symbols, 51M
  make build-gnu kept for fast local use

A musl build needs a musl C toolchain: isahc/curl pulls libz-sys and
libnghttp2-sys unconditionally (confirmed: --no-default-features does not drop
them). cargo-zigbuild + the ziglang python module were already installed here,
so this needs no sudo, no docker daemon and no system packages.

stage.sh now refuses to be quiet about it: it reports "statically linked" or
warns loudly that the artifact inherits the build box's libc.

Re-verified from the tarball in a throwaway HOME with node/npm/bun/cargo
replaced by poison stubs: static binary, pi 0.84.1 on the bundled bun, both wasm
plugins installed, session starts under a pty with no errors.

Remaining libc floor is bun's own glibc 2.17 (2012); bun publishes a musl build
if Alpine ever matters.
</content>
</entry>
<entry>
<title>build: ship sl0pstatus, and install every plugin the package carries</title>
<updated>2026-08-12T18:46:39Z</updated>
<author>
<name>user</name>
<email>user@clank</email>
</author>
<published>2026-08-12T18:46:39Z</published>
<link rel='alternate' type='text/html' href='https://git.sl0p.foo/sl0ppi.git/commit/?id=045ed6a48a4f65abdafe8222e548b758fb6626a0'/>
<id>urn:sha1:045ed6a48a4f65abdafe8222e548b758fb6626a0</id>
<content type='text'>
Phase 3: `make package` now produces a tarball that provably works on a machine
with no node, npm, bun or rust.

Two bugs the clean-room test found, neither visible until a session actually
started:

  - the default layout builds its status bar out of zjstatus, which we were not
    shipping at all (vendored as sl0pstatus/ in the preceding commits)
  - install.sh installed a hardcoded plugin list, so zjstatus.wasm would not
    have reached the config dir even once staged

Also: layouts/*.kdl still pointed at ~/.config/zellij, missed by the rename pass
because that pass only rewrote config.kdl.

Verified end to end, from the tarball, in a throwaway HOME with node/npm/bun/
cargo shadowed by stubs that fail loudly if invoked:

  sl0ppij --version        -&gt; sl0ppij 0.45.0+sl0p1
  pi --version             -&gt; 0.84.1        (on the bundled bun)
  pir --help               -&gt; ok
  sl0ppij -s realtest      -&gt; session starts under a pty, config "Well defined",
                              fork pane titles render, both wasm plugins load,
                              no errors beyond the first-run permission cache

Artifact: sl0ppi-0.1.0-x86_64-linux.tar.gz, 83M, + .sha256.
</content>
</entry>
<entry>
<title>build: follow the rename through config, packaging and docs</title>
<updated>2026-08-12T18:03:19Z</updated>
<author>
<name>user</name>
<email>user@clank</email>
</author>
<published>2026-08-12T18:03:19Z</published>
<link rel='alternate' type='text/html' href='https://git.sl0p.foo/sl0ppi.git/commit/?id=04ce010651a73a99d57e8b1c30bcc4f1346c9c52'/>
<id>urn:sha1:04ce010651a73a99d57e8b1c30bcc4f1346c9c52</id>
<content type='text'>
  config/config.kdl   plugin path -&gt; ~/.config/sl0ppij/plugins, builtin plugins
                      -&gt; the sl0ppij: URL scheme. Verified to load under the
                      renamed binary ("[CONFIG FILE]: Well defined.").
  install-config.sh   syncs to ~/.config/sl0ppij
  install.sh          a stock zellij on the target is no longer a warning, it is
                      just a fact: the two coexist
  stage.sh            drops the "renaming at package time is a fig leaf" note
  Makefile            builds `-p zellij` (package) and ships `sl0ppij` (binary);
                      `make check` now also gates the root package, using the
                      prebuilt asset plugins so it does not need debug wasm
  docs/               rename.md records what was done, what was deliberately
                      left (plugin-internal strings live in prebuilt wasm), and
                      the verification actually performed
</content>
</entry>
<entry>
<title>build: scaffold versioning, docs and the packaging pipeline</title>
<updated>2026-08-12T17:39:44Z</updated>
<author>
<name>user</name>
<email>user@clank</email>
</author>
<published>2026-08-12T17:39:44Z</published>
<link rel='alternate' type='text/html' href='https://git.sl0p.foo/sl0ppi.git/commit/?id=4b77895ba0e8498e29dffdfce61f7d2b329e3e26'/>
<id>urn:sha1:4b77895ba0e8498e29dffdfce61f7d2b329e3e26</id>
<content type='text'>
Adds the layer that makes this a distributable product rather than three
directories:

  VERSION      one sl0ppi version for the whole monorepo
  FORKS.md     what each component is based on, and how to rebase the fork
  Makefile     build / vendor / stage / package, plus dev-box helpers
  packaging/   fetch pinned payloads, assemble an install tree, install it
  docs/        architecture, the rename plan, the roadmap

The self-contained runtime question is settled and verified: pi upstream builds
its own release binary with `bun build --compile`, and a vendored bun runs the
vendored pi dist unmodified, so the tarball carries bun + pi and needs no system
node, npm or rust on the target machine.

packaging/install.sh does a per-user install under ~/.local, never clobbers an
existing config (writes .new alongside, or backs up under --force-config), and
warns loudly when a stock zellij is present -- because until docs/rename.md is
implemented the binary is still zellij underneath and would collide with it.
</content>
</entry>
</feed>
