Skip to content

feat: a surface you can ask, and the rollback the vision named - #23

Merged
rldyourmnd merged 3 commits into
mainfrom
feat/a-surface-you-can-ask
Aug 26, 2026
Merged

feat: a surface you can ask, and the rollback the vision named#23
rldyourmnd merged 3 commits into
mainfrom
feat/a-surface-you-can-ask

Conversation

@rldyourmnd

Copy link
Copy Markdown
Contributor

Rendered from NDDev-it-com/setup-systems@9180548. Two things a caller could not do.

You could not ask what a command takes

$ <tool>-setup-system plan-operation --help
provider_unavailable: --help has no value

The flag parser read every --flag as taking a value, so the one question a caller could ask was met with a complaint about its grammar. And every missing argument surfaced singly, so learning plan-operation cost seven invocations — measured by a peer building the consumer half who already knew the shape.

Now --help answers, and one refusal names everything missing at once.

One table read by both --help and the parser, bound by a test that removes each flag it calls required and requires the refusal to name it. Observed red in both directions.

And rollback existed in the vision and in no code

grep -rn rollback crates/ returned zero. Installing a new version leaves the old tree in place and moves only the exposed command, so the bytes were always there and nothing pointed back at them.

software  --prefix <dir>                 what is installed, and which runs
rollback  --to <version> --prefix <dir>  point the command at one of them

Both need no network, which is why they are commands you type rather than the three-phase exchange install and update must be. The version is named, never inferred — there is no record of which was previous, only what is on disk, and cursor's 2026.08.11-e8db854 sorts by string, not by release.

Exercised against a real vendor install of opencode.

pi answered the wrong absence

Its software is Some with an npm delivery, so software --prefix said no version of pi is installed — an invitation to install one this build cannot. Three states, not two; pi is the middle one and now says so.

Gate

347 tests, clippy -D warnings, conformance 23/23 on all seven, three-OS matrix.

https://claude.ai/code/session_012UZkeU7yQhyZqKAaDaQEjA

Two things a caller could not do.

`<command> --help` answered `--help has no value`, and every missing argument
surfaced singly, so learning `plan-operation` cost seven invocations. One table
is now read by both `--help` and the parser, bound by a test that removes each
flag it calls required and requires the refusal to name it.

And `rollback` existed in the vision and in no code. Installing a new version
leaves the old tree in place and moves only the exposed command, so the bytes
were always there and nothing pointed back at them. `software --prefix` reads
the program directory; `rollback --to <version> --prefix` points the command at
one of the versions in it. Both need no network, which is why they are commands
you type rather than the three-phase exchange install and update must be.

The version is named, never inferred: there is no record of which was previous,
only what is on disk, and these strings do not order reliably.

Rendered from NDDev-it-com/setup-systems@9180548.

Claude-Session: https://claude.ai/code/session_012UZkeU7yQhyZqKAaDaQEjA
Comment thread crates/harness-runtime/src/human.rs
On Windows a rooted path is not an absolute path: Path::new("/tmp") answers
is_absolute() == false, because absolute means a drive letter or a UNC prefix.
The new argv table test built its complete invocations from /tmp, so launch --
whose --prefix is checked for absoluteness at parse time -- refused the fixture
before it reached its assertion.

The product code is right. The fixture proved the right thing on two systems and
nothing at all on the third.

Rendered from NDDev-it-com/setup-systems@d233a90.

Claude-Session: https://claude.ai/code/session_012UZkeU7yQhyZqKAaDaQEjA
…date

Present::exposed answered by resolving bin/<command>. Windows reserves symlink
creation for privileged processes, so expose writes a hard link or a copy there
and canonicalizing one returns its own path -- the answer was always "no
version is exposed" on a prefix where one plainly was.

Not cosmetic: that reading is what separates an install from an update, so every
software_update on Windows refused as an update of nothing while the version it
would have updated sat right there.

The version is recorded beside the command and read back now. A dangling link
still exposes nothing, whatever the record says.

Rendered from NDDev-it-com/setup-systems@fa233ff.

Claude-Session: https://claude.ai/code/session_012UZkeU7yQhyZqKAaDaQEjA
@rldyourmnd
rldyourmnd merged commit c1dc5bf into main Aug 26, 2026
24 checks passed
@rldyourmnd
rldyourmnd deleted the feat/a-surface-you-can-ask branch August 26, 2026 14:26
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants