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
17 changes: 17 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
8 changes: 4 additions & 4 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

8 changes: 4 additions & 4 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand All @@ -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"
Expand Down
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -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/<dir> --json
```

Expand Down
9 changes: 7 additions & 2 deletions crates/harness-runtime/src/human.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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() {
Expand Down Expand Up @@ -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
Expand Down
2 changes: 1 addition & 1 deletion crates/setup-core/src/software.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down
2 changes: 1 addition & 1 deletion install.ps1
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand Down
2 changes: 1 addition & 1 deletion install.sh
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
Loading