diff --git a/README.md b/README.md index 0521698..6c453fd 100644 --- a/README.md +++ b/README.md @@ -15,29 +15,25 @@ takes arguments, does its work, and stores no credential, ever. ## Install ```sh -curl -fsSL https://raw.githubusercontent.com/heavy-duty/rig/main/install.sh | bash +curl -fsSL https://raw.githubusercontent.com/heavy-duty/rig/main/install.sh | RIG_REF=main bash ``` -That installs the **latest release**: the installer resolves the newest tag -by following GitHub's `releases/latest` redirect (no API, no token) and -downloads that tag's source tarball — which, for a pure-bash tree, *is* the -package. Three channels from the same script; `RIG_REF` picks: +This README tracks `main`, so the quick start installs that same development +tree. To install a stable version instead, use the latest-release or pinned-tag +channel and read the documentation shipped with it at +`$RIG_HOME/current/README.md` (`~/.local/share/rig/current/README.md` with the +default install root). Three channels come from the same script; `RIG_REF` +picks: ```sh curl -fsSL .../install.sh | bash # the latest release -curl -fsSL .../install.sh | RIG_REF=0.1.0 bash # pinned to a release +curl -fsSL .../install.sh | RIG_REF=0.2.0 bash # pinned to a release curl -fsSL .../install.sh | RIG_REF=main bash # the development tree ``` A tag outranks a branch of the same name (the pin must win); anything that is not a tag falls back to `refs/heads/`. -> **Transitional, until 0.1.0 is cut** (right after rig#32 lands): rig has -> no GitHub release yet, so the default channel has nothing to resolve — -> it **fails loudly** naming `RIG_REF=main` as the way to install today, -> and never silently falls back to main. Once 0.1.0 exists, the plain -> `curl | bash` above is the normal path. - The layout, under the install root (`~/.local/share/rig`): ``` @@ -464,9 +460,9 @@ command is exactly who that refusal catches (it names the new spelling). > above.** The seed preinstalls rig via its curl installer, which resolves > `RIG_REPO`/`RIG_REF` — and since rig#32 the installer defaults to the > **latest release**, with `RIG_REF=` the pin and `RIG_REF=main` the -> dev channel. Until rig cuts 0.1.0 there is no release to resolve, so the -> seed must set `RIG_REF=main` explicitly (the default channel fails loudly -> rather than falling back). That inverts the install edge on this page: +> dev channel. A seed that needs main must set `RIG_REF=main` explicitly; +> the default channel never silently falls back to a development branch. +> That inverts the install edge on this page: > rig installs box on VM-hosting machines, and box guests now install rig. > `RIG_REPO`/`RIG_REF` are the pin points, or point them at a frozen branch > of your own fork. The seed side of this edge is box#81's to document. diff --git a/test/cli.sh b/test/cli.sh index f7b6695..a0af5ab 100644 --- a/test/cli.sh +++ b/test/cli.sh @@ -427,6 +427,24 @@ check "bootstrap: --users does not reach the tenant roles" 2 "unknown flag" \ "$ROOT/commands/bootstrap.sh" claude-box --users "$BOOT_USERS/ok" check "bootstrap: usage explains why tenants take no --users" 0 "box-minted GUEST" \ "$ROOT/commands/bootstrap.sh" --help +# --- README: install channels (#89) ------------------------------------------ +# The README on main documents main's CLI, so its FIRST full install command +# must opt into that tree instead of silently selecting an older release. +readme_first_full_install="$(grep -m1 -F 'curl -fsSL https://raw.githubusercontent.com/heavy-duty/rig/main/install.sh' "$ROOT/README.md")" +check "README: the main-branch quick start installs the documented tree" 0 "" \ + test "$readme_first_full_install" = \ + 'curl -fsSL https://raw.githubusercontent.com/heavy-duty/rig/main/install.sh | RIG_REF=main bash' +check "README: no stale pre-0.1.0 release notice" 1 "" \ + grep -qF 'Until rig cuts 0.1.0' "$ROOT/README.md" +check "README: still documents the latest-release channel" 0 "" \ + grep -qF 'curl -fsSL .../install.sh | bash # the latest release' "$ROOT/README.md" +# $RIG_HOME is the literal path spelling the README must show operators. +# shellcheck disable=SC2016 +check "README: names the stable channel's installed documentation" 0 "" \ + grep -qF '$RIG_HOME/current/README.md' "$ROOT/README.md" +check "README: still documents a pinned semver-tag channel" 0 "" \ + grep -Eq '^curl -fsSL \.\.\./install\.sh \| RIG_REF=[0-9]+\.[0-9]+\.[0-9]+ bash +# pinned to a release$' "$ROOT/README.md" + # --- README: the box rename (#12) -------------------------------------------- # The philosophy line must point at heavy-duty/box — the old claudebox slug # only works through a GitHub redirect that one squatted rename away from