diff --git a/CHANGELOG.md b/CHANGELOG.md index 67097b5..c0f80ea 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -20,6 +20,23 @@ sibling project the same week this note was added. ## [Unreleased] +## [0.0.53] - 2026-09-01 + +The other two readers of the exposed name, and the boundary that +stops a third. `0.0.52` moved the wire path — plan, apply's answer, launch, +remove, rollback — onto this platform's member; the human `software` and +`rollback` surfaces still derived the name from the table's first row, so on +Windows they answered *"Nothing is exposed"* over a prefix holding a working +cursor install. Found by this repository's own evidence matrix within the +hour of `0.0.52` shipping: the wire legs went green and the human legs went +red, which is the two halves of one defect being fixed one wave apart. + +Both surfaces read this platform's member now, and the first-row hint is +**private to the kernel crate**: the fallback inside the platform accessor +and the deliberately-ordered candidate list for older trees are its only +callers, and a new reader reaching for it does not compile. A grep sweep +missed two call sites once; a crate boundary cannot. + ## [0.0.52] - 2026-09-01 An operation that reads no bundle refuses one by name. Only diff --git a/Cargo.lock b/Cargo.lock index 578cb69..00e2107 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -66,7 +66,7 @@ checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" [[package]] name = "harness-runtime" -version = "0.0.52" +version = "0.0.53" dependencies = [ "provider-v3", "serde", @@ -128,7 +128,7 @@ dependencies = [ [[package]] name = "opencode-setup-system" -version = "0.0.52" +version = "0.0.53" dependencies = [ "harness-runtime", "provider-v3", @@ -147,7 +147,7 @@ dependencies = [ [[package]] name = "provider-v3" -version = "0.0.52" +version = "0.0.53" dependencies = [ "serde", "serde_json", @@ -209,7 +209,7 @@ dependencies = [ [[package]] name = "setup-core" -version = "0.0.52" +version = "0.0.53" dependencies = [ "miniz_oxide", "serde", diff --git a/Cargo.toml b/Cargo.toml index df7c020..ba422b8 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -8,7 +8,7 @@ members = [ ] [workspace.package] -version = "0.0.52" +version = "0.0.53" edition = "2024" rust-version = "1.89" license = "AGPL-3.0-or-later" @@ -23,9 +23,9 @@ sha2 = "0.11" # `setup-core::archive`); an inflate loop is not, because its bugs are # memory-safety bugs and it is not improved by being hand-written here. miniz_oxide = "0.9" -setup-core = { path = "crates/setup-core", version = "0.0.52" } -provider-v3 = { path = "crates/provider-v3", version = "0.0.52" } -harness-runtime = { path = "crates/harness-runtime", version = "0.0.52" } +setup-core = { path = "crates/setup-core", version = "0.0.53" } +provider-v3 = { path = "crates/provider-v3", version = "0.0.53" } +harness-runtime = { path = "crates/harness-runtime", version = "0.0.53" } [workspace.lints.rust] unsafe_code = "forbid" diff --git a/README.md b/README.md index 07dbb80..4021bad 100644 --- a/README.md +++ b/README.md @@ -179,7 +179,7 @@ release is a convenience, not the authorised copy. ```bash docker run --rm -v "$HOME/.config:/config" \ - ghcr.io/nddev-opennetwork/opencode-setup-system:0.0.52 \ + ghcr.io/nddev-opennetwork/opencode-setup-system:0.0.53 \ status --target /config/ --json ``` diff --git a/crates/harness-runtime/src/human.rs b/crates/harness-runtime/src/human.rs index 093ced5..95d083c 100644 --- a/crates/harness-runtime/src/human.rs +++ b/crates/harness-runtime/src/human.rs @@ -530,10 +530,14 @@ fn named_slot( /// can be commands someone types. fn software(harness: &Harness, prefix: &Path) -> Result<()> { let declared = declared_software(harness)?; + // This platform's member, not the table's first row: the hint said `agent` + // where Windows holds `agent.cmd`, so this surface answered "Nothing is + // exposed" over a prefix with a working install -- found by our own + // evidence the day the wire half of the same defect shipped as fixed. let present = setup_core::software::Present::under_named( prefix, declared.command, - declared.member_hint(), + declared.member_here(), ); if present.versions.is_empty() { @@ -584,10 +588,11 @@ fn software(harness: &Harness, prefix: &Path) -> Result<()> { /// Point the exposed command back at a version that is already on disk. fn rollback(harness: &Harness, prefix: &Path, to: Option<&str>) -> Result<()> { let declared = declared_software(harness)?; + // Same fact as `software` above: the member Windows actually gets. let present = setup_core::software::Present::under_named( prefix, declared.command, - declared.member_hint(), + declared.member_here(), ); // Named, never inferred. There is no record of what was previous -- only diff --git a/crates/setup-core/src/software.rs b/crates/setup-core/src/software.rs index 5bc2831..2ee4878 100644 --- a/crates/setup-core/src/software.rs +++ b/crates/setup-core/src/software.rs @@ -357,7 +357,7 @@ impl Software { /// wrote. [`rollback`] tries it, then the flat shape, and refuses naming /// both rather than pointing a command at a path it did not verify. #[must_use] - pub fn member_hint(&self) -> &'static str { + fn member_hint(&self) -> &'static str { match self.delivery { Delivery::Artifacts(artifacts) => { artifacts.first().map_or(self.command, |entry| entry.member) diff --git a/install.ps1 b/install.ps1 index e4b379f..a3614c9 100644 --- a/install.ps1 +++ b/install.ps1 @@ -7,7 +7,7 @@ # powershell -ExecutionPolicy Bypass -File install.ps1 -Version 0.1.0 [CmdletBinding()] param( - [string]$Version = "0.0.52", + [string]$Version = "0.0.53", [string]$InstallDir = "$env:LOCALAPPDATA\Programs\opencode-setup-system" ) $ErrorActionPreference = "Stop" diff --git a/install.sh b/install.sh index 491fee4..00a1717 100644 --- a/install.sh +++ b/install.sh @@ -14,7 +14,7 @@ set -eu REPO="NDDev-OpenNetwork/opencode-setup-system" BINARY="opencode-setup-system" -VERSION="${1:-0.0.52}" +VERSION="${1:-0.0.53}" PREFIX="${OPENCODE_INSTALL_DIR:-$HOME/.local/bin}" case "$(uname -s)" in