Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
61 changes: 61 additions & 0 deletions .github/workflows/publish-v0.0.1.yml
Original file line number Diff line number Diff line change
@@ -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
13 changes: 7 additions & 6 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,27 +12,28 @@ 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
```

`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:
Expand Down
16 changes: 6 additions & 10 deletions docs/v0.0.1.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# v0.0.1 acceptance and release candidate
# v0.0.1 acceptance

## Purpose

Expand All @@ -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
Expand All @@ -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.

Expand Down
33 changes: 33 additions & 0 deletions release/v0.0.1.md
Original file line number Diff line number Diff line change
@@ -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.
Loading