From b43fa3857489f98220928d3251bfb8a063eb6bdb Mon Sep 17 00:00:00 2001 From: BitmapAsset Date: Wed, 14 Oct 2026 03:24:38 -0700 Subject: [PATCH] Release probbit 0.8.2 --- .github/workflows/bench.yml | 2 +- CHANGELOG.md | 4 +++- Cargo.lock | 10 +++++----- Cargo.toml | 2 +- README.md | 2 +- docs/CHEATSHEET.md | 2 +- docs/persona.md | 2 +- docs/probbit.1 | 2 +- install.ps1 | 6 +++--- install.sh | 6 +++--- npm/package.json | 2 +- probbit-cli/Cargo.toml | 6 +++--- probbit-decide/Cargo.toml | 4 ++-- probbit-ir/Cargo.toml | 2 +- scripts/bench/test_install_ps1.ps1 | 2 +- scripts/tests/test_install_contract.py | 4 ++-- 16 files changed, 30 insertions(+), 28 deletions(-) diff --git a/.github/workflows/bench.yml b/.github/workflows/bench.yml index bda4003..62b4d6d 100644 --- a/.github/workflows/bench.yml +++ b/.github/workflows/bench.yml @@ -19,7 +19,7 @@ permissions: contents: read env: CARGO_TERM_COLOR: never - TAG: v0.8.1 + TAG: v0.8.2 jobs: bench: diff --git a/CHANGELOG.md b/CHANGELOG.md index 37ae746..97b23e6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,7 +3,7 @@ All notable changes to this project are documented here. The format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/). -## 0.8.2 - unreleased +## 0.8.2 - 2026-10-14 ### Added - `probbit monitor STRAND --open` (and `--serve`) shows an Activity Monitor for one individual: a sortable, filterable table of @@ -30,6 +30,8 @@ All notable changes to this project are documented here. The format follows document gains `"unproven": [{id, rule, seeds_unknown, searched}]`, `ok` is false, stderr says "unproven, not broken", and the exit code is the new **3** (0: every rule held or proved; 1: an unresolved contradiction or a counterexample, which wins over 3; 2: bad input, as before). Up to 0.8.1 the same case exited 0 with `ok: true`. docs/persona.md ยง5.5. + **Upgrade note:** `persona lint` now exits 3 on unproven rules, so a CI gate that treats any non-zero exit as a failure goes + red on rules that passed silently before. Accept exit 3 explicitly if unproven rules are acceptable to you. - `persona fuzz`, MCP `probbit_persona_fuzz` and `lint`'s search add every threshold the rule's `when` and the habits' `when` read on a number input to the grid (as a fraction of that input's max, after the given points, each once; `search.grid` lists them). A rule in force only between two default grid points (for example stakes 0.7 to 0.8) is now reached by the random diff --git a/Cargo.lock b/Cargo.lock index 2f28dbf..5e06679 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4,7 +4,7 @@ version = 3 [[package]] name = "probbit-cli" -version = "0.8.1" +version = "0.8.2" dependencies = [ "probbit-core", "probbit-decide", @@ -13,11 +13,11 @@ dependencies = [ [[package]] name = "probbit-core" -version = "0.8.1" +version = "0.8.2" [[package]] name = "probbit-decide" -version = "0.8.1" +version = "0.8.2" dependencies = [ "probbit-core", "probbit-ir", @@ -25,14 +25,14 @@ dependencies = [ [[package]] name = "probbit-ir" -version = "0.8.1" +version = "0.8.2" dependencies = [ "probbit-core", ] [[package]] name = "probbit-wasm" -version = "0.8.1" +version = "0.8.2" dependencies = [ "probbit-core", "probbit-decide", diff --git a/Cargo.toml b/Cargo.toml index e83f01c..8b631fd 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -3,7 +3,7 @@ resolver = "2" members = ["probbit-core", "probbit-ir", "probbit-decide", "probbit-cli", "probbit-wasm"] [workspace.package] -version = "0.8.1" +version = "0.8.2" edition = "2021" license = "Apache-2.0" rust-version = "1.78" diff --git a/README.md b/README.md index ccd8a76..b07a8f4 100644 --- a/README.md +++ b/README.md @@ -105,7 +105,7 @@ modes"). The tables are in [BENCHMARKS.md](BENCHMARKS.md). ## Install -One line, no sudo, the archive's SHA-256 checked before anything is installed. The current release is v0.8.1. +One line, no sudo, the archive's SHA-256 checked before anything is installed. The current release is v0.8.2. | how | command | |---|---| diff --git a/docs/CHEATSHEET.md b/docs/CHEATSHEET.md index 6e59500..9e8a984 100644 --- a/docs/CHEATSHEET.md +++ b/docs/CHEATSHEET.md @@ -1,4 +1,4 @@ -# probbit cheat sheet (0.8.1) +# probbit cheat sheet (0.8.2) The CLI's own help and docs, shortened; `probbit --help` has every flag. diff --git a/docs/persona.md b/docs/persona.md index 4612fdf..9758f70 100644 --- a/docs/persona.md +++ b/docs/persona.md @@ -711,7 +711,7 @@ credits every learned trait with the level it took, so a reward aimed at one tra demo below, praise for short answers also raised the light joke the tutor was making): learn the traits the feedback judges. **The strand.** `--strand FILE` logs the life. Line 1 is the header, compact JSON: -`{"probbit_strand":1,"engine":"probbit 0.8.1","persona":{"name","version","digest"},"seed":N,"state":{...},"document":{...}}`, +`{"probbit_strand":1,"engine":"probbit 0.8.2","persona":{"name","version","digest"},"seed":N,"state":{...},"document":{...}}`, with the initial state as canonical JSON (one individual has one header, whether it comes from `init` or from a state file) and the persona document in its own key order (the compiled program, and `engine.program` with it, follows the document's key order). Then one line per event, canonical JSON: `{"inputs":{...,"elapsed_hours":h},"n":k,"prev":"sha256:...","stance":"sha256:...", diff --git a/docs/probbit.1 b/docs/probbit.1 index 4561c5b..e351d2c 100644 --- a/docs/probbit.1 +++ b/docs/probbit.1 @@ -1,4 +1,4 @@ -.TH PROBBIT 1 "" "probbit 0.8.1" "probbit manual" +.TH PROBBIT 1 "" "probbit 0.8.2" "probbit manual" .SH NAME probbit \- a virtual probabilistic (p\-bit) processor: joint decisions under hard rules, with gated odds .SH SYNOPSIS diff --git a/install.ps1 b/install.ps1 index b77af05..3ec8239 100644 --- a/install.ps1 +++ b/install.ps1 @@ -2,10 +2,10 @@ # and installs probbit.exe. No administrator rights needed. # # irm https://raw.githubusercontent.com/BitmapAsset/probbit/main/install.ps1 | iex -# & ([scriptblock]::Create((irm https://raw.githubusercontent.com/BitmapAsset/probbit/main/install.ps1))) -Version v0.8.1 +# & ([scriptblock]::Create((irm https://raw.githubusercontent.com/BitmapAsset/probbit/main/install.ps1))) -Version v0.8.2 # # Parameters (each also read from the environment variable named after it): -# -Version PROBBIT_VERSION release tag, e.g. v0.8.1 (default: the latest release) +# -Version PROBBIT_VERSION release tag, e.g. v0.8.2 (default: the latest release) # -InstallDir PROBBIT_INSTALL_DIR where probbit.exe goes (default: $HOME\.local\bin) # -DownloadBase PROBBIT_DOWNLOAD_BASE the archive is fetched from //probbit--.zip # (default: https://github.com/BitmapAsset/probbit/releases/download); needs -Version @@ -37,7 +37,7 @@ $customBase = [bool]$DownloadBase if (-not $DownloadBase) { $DownloadBase = "https://github.com/$Repo/releases/download" } $DownloadBase = $DownloadBase.TrimEnd('/') if (-not $Version) { - if ($customBase) { throw 'probbit install: set -Version (or PROBBIT_VERSION), e.g. v0.8.1, together with -DownloadBase' } + if ($customBase) { throw 'probbit install: set -Version (or PROBBIT_VERSION), e.g. v0.8.2, together with -DownloadBase' } $Version = (Invoke-RestMethod -UseBasicParsing -Uri "https://api.github.com/repos/$Repo/releases/latest").tag_name if (-not $Version) { throw 'probbit install: no published release found (set -Version)' } } diff --git a/install.sh b/install.sh index 8cd2435..02c8999 100755 --- a/install.sh +++ b/install.sh @@ -2,10 +2,10 @@ # probbit installer: fetches a prebuilt release archive, checks its SHA-256 and installs the `probbit` binary. Never uses sudo. # # curl -fsSL https://raw.githubusercontent.com/BitmapAsset/probbit/main/install.sh | sh -# curl -fsSL https://raw.githubusercontent.com/BitmapAsset/probbit/main/install.sh | PROBBIT_VERSION=v0.8.1 sh +# curl -fsSL https://raw.githubusercontent.com/BitmapAsset/probbit/main/install.sh | PROBBIT_VERSION=v0.8.2 sh # # Environment (all optional): -# PROBBIT_VERSION release tag, e.g. v0.8.1 (default: the latest release) +# PROBBIT_VERSION release tag, e.g. v0.8.2 (default: the latest release) # PROBBIT_INSTALL_DIR where `probbit` goes (default: ~/.local/bin; never overwrites a system-wide install implicitly) # PROBBIT_DOWNLOAD_BASE the archive is fetched from $PROBBIT_DOWNLOAD_BASE//probbit--.tar.gz # (default: https://github.com/BitmapAsset/probbit/releases/download); needs PROBBIT_VERSION @@ -92,7 +92,7 @@ main() { version="${PROBBIT_VERSION:-}" if [ -z "$version" ]; then - [ -z "${PROBBIT_DOWNLOAD_BASE:-}" ] || die "set PROBBIT_VERSION (e.g. v0.8.1) together with PROBBIT_DOWNLOAD_BASE" + [ -z "${PROBBIT_DOWNLOAD_BASE:-}" ] || die "set PROBBIT_VERSION (e.g. v0.8.2) together with PROBBIT_DOWNLOAD_BASE" version=$(latest_tag) || exit 1 [ -n "$version" ] || die "no published release found (set PROBBIT_VERSION)" fi diff --git a/npm/package.json b/npm/package.json index b2f3dc5..b3b615a 100644 --- a/npm/package.json +++ b/npm/package.json @@ -1,6 +1,6 @@ { "name": "probbit", - "version": "0.8.1", + "version": "0.8.2", "description": "probbit, a virtual p-bit processor for joint decisions under hard rules: installs the prebuilt probbit CLI (JSON in, JSON out).", "license": "Apache-2.0", "repository": { diff --git a/probbit-cli/Cargo.toml b/probbit-cli/Cargo.toml index 89a0ff3..79aad26 100644 --- a/probbit-cli/Cargo.toml +++ b/probbit-cli/Cargo.toml @@ -15,6 +15,6 @@ name = "probbit" path = "src/main.rs" [dependencies] -probbit-core = { path = "../probbit-core", version = "0.8.1" } -probbit-decide = { path = "../probbit-decide", version = "0.8.1" } -probbit-ir = { path = "../probbit-ir", version = "0.8.1" } +probbit-core = { path = "../probbit-core", version = "0.8.2" } +probbit-decide = { path = "../probbit-decide", version = "0.8.2" } +probbit-ir = { path = "../probbit-ir", version = "0.8.2" } diff --git a/probbit-decide/Cargo.toml b/probbit-decide/Cargo.toml index d9caedc..14e26df 100644 --- a/probbit-decide/Cargo.toml +++ b/probbit-decide/Cargo.toml @@ -11,5 +11,5 @@ keywords = ["p-bit", "assignment", "routing", "constraints", "probabilistic"] categories = ["algorithms", "science"] [dependencies] -probbit-core = { path = "../probbit-core", version = "0.8.1" } -probbit-ir = { path = "../probbit-ir", version = "0.8.1" } +probbit-core = { path = "../probbit-core", version = "0.8.2" } +probbit-ir = { path = "../probbit-ir", version = "0.8.2" } diff --git a/probbit-ir/Cargo.toml b/probbit-ir/Cargo.toml index f6a1ff2..2d8ab4a 100644 --- a/probbit-ir/Cargo.toml +++ b/probbit-ir/Cargo.toml @@ -11,4 +11,4 @@ keywords = ["p-bit", "constraints", "gibbs-sampling", "probabilistic", "ising"] categories = ["algorithms", "science", "mathematics"] [dependencies] -probbit-core = { path = "../probbit-core", version = "0.8.1" } +probbit-core = { path = "../probbit-core", version = "0.8.2" } diff --git a/scripts/bench/test_install_ps1.ps1 b/scripts/bench/test_install_ps1.ps1 index b10434b..6793155 100644 --- a/scripts/bench/test_install_ps1.ps1 +++ b/scripts/bench/test_install_ps1.ps1 @@ -3,7 +3,7 @@ # installs it with -DownloadBase, then the `irm | iex` form (environment variables), then the tampered copy (must fail). # pwsh -File scripts/bench/test_install_ps1.ps1 -Srv [-Tag v0.2.0] [-AddToPath] # powershell -ExecutionPolicy Bypass -File scripts/bench/test_install_ps1.ps1 -Srv -param([Parameter(Mandatory = $true)][string]$Srv, [string]$Tag = 'v0.8.1', [switch]$AddToPath) +param([Parameter(Mandatory = $true)][string]$Srv, [string]$Tag = 'v0.8.2', [switch]$AddToPath) $ErrorActionPreference = 'Stop' "PowerShell $($PSVersionTable.PSVersion) ($($PSVersionTable.PSEdition))" $oldPath = $env:Path diff --git a/scripts/tests/test_install_contract.py b/scripts/tests/test_install_contract.py index afe11b6..6b69597 100644 --- a/scripts/tests/test_install_contract.py +++ b/scripts/tests/test_install_contract.py @@ -24,7 +24,7 @@ def run_fixture(self, os_name, arch, libc, **extra): script.chmod(0o755) env = dict(os.environ, PATH=str(root) + os.pathsep + os.environ["PATH"], FIXTURE_OS=os_name, FIXTURE_ARCH=arch, FIXTURE_LIBC=libc, - PROBBIT_VERSION="v0.8.1", PROBBIT_INSTALL_DIR=str(root / "bin")) + PROBBIT_VERSION="v0.8.2", PROBBIT_INSTALL_DIR=str(root / "bin")) for key in ["PROBBIT_TARGET", "PROBBIT_DOWNLOAD_BASE"]: env.pop(key, None) env.update(extra) @@ -45,7 +45,7 @@ def test_supported_target_selection(self): with self.subTest(target=target): output = self.run_fixture(os_name, arch, libc) self.assertIn("FIXTURE_FETCH", output) - self.assertIn("probbit-v0.8.1-" + target + ".tar.gz", output) + self.assertIn("probbit-v0.8.2-" + target + ".tar.gz", output) def test_unsupported_architecture_never_fetches(self): output = self.run_fixture("Linux", "riscv64", "glibc")