From e17b07f0e5e9def366033818ab40db0045fc535c Mon Sep 17 00:00:00 2001 From: Tom Ballard Date: Mon, 21 Sep 2026 07:35:12 +0100 Subject: [PATCH] Prepare formal v0.0.1 publication and tagged install instructions --- .github/workflows/publish-v0.0.1.yml | 61 ++++++++++++++++++++++++++++ README.md | 13 +++--- docs/v0.0.1.md | 16 +++----- release/v0.0.1.md | 33 +++++++++++++++ 4 files changed, 107 insertions(+), 16 deletions(-) create mode 100644 .github/workflows/publish-v0.0.1.yml create mode 100644 release/v0.0.1.md diff --git a/.github/workflows/publish-v0.0.1.yml b/.github/workflows/publish-v0.0.1.yml new file mode 100644 index 0000000..4ee9a13 --- /dev/null +++ b/.github/workflows/publish-v0.0.1.yml @@ -0,0 +1,61 @@ +name: Publish v0.0.1 +on: + push: + branches: [main] + paths: [release/v0.0.1.md] + workflow_dispatch: +permissions: + contents: read +concurrency: + group: publish-v0.0.1 + cancel-in-progress: false +jobs: + publish: + if: github.ref == 'refs/heads/main' + runs-on: ubuntu-22.04 + timeout-minutes: 15 + permissions: + contents: write + steps: + - uses: actions/checkout@v4 + with: + fetch-depth: 0 + - uses: dtolnay/rust-toolchain@stable + with: + components: rustfmt, clippy + - name: Verify version and immutable tag + run: | + test "$(cargo metadata --no-deps --format-version 1 | jq -r '.packages[0].version')" = 0.0.1 + if git rev-parse --verify refs/tags/v0.0.1 >/dev/null 2>&1; then + test "$(git rev-parse 'v0.0.1^{commit}')" = "$GITHUB_SHA" + fi + - run: cargo fmt --check + - run: cargo clippy --all-targets --locked -- -D warnings + - run: cargo test --locked + - run: sudo apt-get update && sudo apt-get install -y bubblewrap + - name: Verify sandbox + env: + SPOOL_SECRET: must-not-reach-the-sandbox + run: cargo test --locked --test sandbox -- --ignored + - run: bash scripts/package.sh + - name: Publish preview with checked assets + env: + GH_TOKEN: ${{ github.token }} + GH_REPO: ${{ github.repository }} + run: | + cd dist + sha256sum -c spool-v0.0.1-linux-x86_64.tar.gz.sha256 + cd .. + cp release/v0.0.1.md /tmp/spool-release-notes.md + printf '\nSource commit: `%s`\n' "$GITHUB_SHA" >> /tmp/spool-release-notes.md + if gh release view v0.0.1 >/dev/null 2>&1; then + echo 'Release already exists; leaving it unchanged.' + exit 0 + fi + gh release create v0.0.1 \ + dist/spool-v0.0.1-linux-x86_64.tar.gz \ + dist/spool-v0.0.1-linux-x86_64.tar.gz.sha256 \ + --target "$GITHUB_SHA" \ + --title 'Spool v0.0.1 — Pick up where you left off' \ + --notes-file /tmp/spool-release-notes.md \ + --prerelease diff --git a/README.md b/README.md index 5ec0c02..8aa4cfc 100644 --- a/README.md +++ b/README.md @@ -12,11 +12,11 @@ Omarchy is a target platform; this badge is a community identity label. No live ## Install on your Omarchy XPS -From a checkout of this candidate (Rust 1.89+): +Install the tagged release directly, from any directory (Rust 1.89+): ```bash sudo pacman -S --needed rust base-devel bubblewrap git -cargo install --path . --locked +cargo install --git https://github.com/asdecided/spool.git --tag v0.0.1 --locked asdecided-spool export PATH="$HOME/.cargo/bin:$PATH" spool --version spool doctor @@ -24,15 +24,16 @@ spool doctor `doctor` must pass before trying execution. Spool does not fall back to unsandboxed commands. Run it as your normal user, never with sudo. -For a fresh checkout before publication, fetch the candidate branch: +A [Linux x86_64 binary and SHA-256 checksum](https://github.com/asdecided/spool/releases/tag/v0.0.1) are also available. See [archive installation](docs/v0.0.1.md#installation-from-the-release-archive). + +To get the source and smoke-test script: ```bash -git clone --branch feat/v0.0.1-recovery https://github.com/asdecided/spool.git +git clone --branch v0.0.1 https://github.com/asdecided/spool.git cd spool +bash scripts/xps-smoke.sh ``` -Once v0.0.1 is published, use `--branch v0.0.1` instead. Source installation avoids prebuilt glibc compatibility assumptions. CI also produces an x86_64 Linux archive and checksum for release preparation. - ## Try a persistent job In a new empty directory: diff --git a/docs/v0.0.1.md b/docs/v0.0.1.md index e944ae2..8406202 100644 --- a/docs/v0.0.1.md +++ b/docs/v0.0.1.md @@ -1,4 +1,4 @@ -# v0.0.1 acceptance and release candidate +# v0.0.1 acceptance ## Purpose @@ -15,9 +15,9 @@ Test a small local durable execution foundation on Tom's Omarchy XPS. No model a Keep this testing separate from valuable work. Never put secrets in arguments, checkpoints or output. Tests do not need access to your source tree or home directory. -## Installation from the CI archive +## Installation from the release archive -Download `spool-v0.0.1-linux-x86_64.tar.gz` and its `.sha256` from the candidate's GitHub Actions artifact (or published release later). In their download directory: +Download `spool-v0.0.1-linux-x86_64.tar.gz` and its `.sha256` from [the v0.0.1 release](https://github.com/asdecided/spool/releases/tag/v0.0.1). In their download directory: ```bash sha256sum -c spool-v0.0.1-linux-x86_64.tar.gz.sha256 @@ -31,15 +31,11 @@ spool doctor Runtime dependency: bubblewrap at `/usr/bin/bwrap`; Linux with enabled unprivileged namespaces. The executable uses bundled SQLite but dynamically links glibc. Only x86_64 Linux is packaged. Use source installation if the binary is incompatible. Remove `~/.local/bin/spool` to uninstall; preserve `.spool/` directories. -## Publication gate +## Publication -- Required GitHub CI and sandbox test green on the exact candidate commit. -- Review the PR and confirm no unexpected changes. -- Record XPS acceptance results; if publishing before XPS acceptance, label that limitation explicitly. -- Merge and create tag `v0.0.1` only when authorized. This candidate does not create a release automatically. -- Attach the matching CI archive and checksum to a prerelease, along with the source commit and known limitations. +The version-specific publication workflow tests and builds the release commit before creating a GitHub prerelease. The release includes the source revision and sandbox/Omarchy testing limits. See [published notes](../release/v0.0.1.md). -## Suggested release notes +## Release scope Spool v0.0.1 is a local Linux execution preview. Queue explicit commands, keep their workspace between runs, and inspect what happened after an interruption. Completed operations are skipped; uncertain ones stop for review. diff --git a/release/v0.0.1.md b/release/v0.0.1.md new file mode 100644 index 0000000..28faa12 --- /dev/null +++ b/release/v0.0.1.md @@ -0,0 +1,33 @@ +Spool v0.0.1 is the first local Linux preview. Queue commands, keep their files between runs, and inspect what happened when work stops halfway through. + +Completed commands stay completed. If Spool cannot establish an interrupted command's outcome, it stops for review instead of blindly running it again. + +### Included + +- Persistent jobs, JSON checkpoints and an SQLite operation journal. +- Offline bubblewrap execution with a separate workspace for each job. +- Queue, run, resume, inspect and explicit recovery commands. +- A 60-second default timeout and captured output capped at 64 KiB per stream. +- Linux x86_64 binary, SHA-256 checksum and an XPS smoke-test script. + +### Install on Omarchy + +```bash +sudo pacman -S --needed rust base-devel bubblewrap git +cargo install --git https://github.com/asdecided/spool.git --tag v0.0.1 --locked asdecided-spool +export PATH="$HOME/.cargo/bin:$PATH" +spool --version +spool doctor +``` + +This installs from any directory. For the prebuilt binary, download the archive and matching checksum below; follow the [archive instructions](https://github.com/asdecided/spool/blob/v0.0.1/docs/v0.0.1.md#installation-from-the-release-archive). + +### What has been checked + +Linux CI covers persistence, migration, exclusive ownership, four subprocess interruption points and real sandbox execution. Formatting and Clippy also pass. Live Omarchy XPS acceptance has not yet been confirmed. + +### Early limits + +This is an explicit-command execution foundation. Model-driven work, MCP and AsDecided decision integration are still to come. It has no disk, memory or process-count quotas; use trusted commands in disposable workspaces. Journal and output data are plaintext. Interrupted actions can leave partial files, and recovery does not roll them back. + +Report install, sandbox or recovery problems in [Issues](https://github.com/asdecided/spool/issues), including `spool --version`, `bwrap --version`, `omarchy-version` and the error output.