install: codex refresh-on-present + compatible-but-behind upgrade hint#351
Merged
Merged
Conversation
runInit's codex arm short-circuited to doctor on a resolved manifest and never reached an install call, so `spacedock install --host codex` on a present-but-behind plugin was a doctor-only no-op (the 0.19.8 field report). Drive the install seam before doctor on a present plugin, mirroring the claude arm; --check keeps its no-install report. Replaces TestInitCodexInstallReadiness/compatible-installed (which codified the no-op) with a seam-recorded install assertion (AC-1), and adds a live codex smoke that the resolved on-disk manifest advances 0.0.1->0.0.2 on the wired path (AC-2). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
When the binary display semver is strictly newer than the plugin's while
the contract stays compatible, append an opt-in upgrade hint to the
Compatible message naming the host-specific `spacedock install --host
{host}` refresh. The verdict stays Compatible and the OK line is
preserved (additive). A contract-local dotted-int semver compare gates
it: an unstamped `dev` binary, a non-semver, or an equal/older binary
emits nothing — no false 'you must upgrade'. (AC-3)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
gateHost was silent on Compatible, so a launching user with a contract-compatible-but-behind plugin saw nothing. Expose the hint as a Result.Hint field (doctor still folds it into Message); gateHost prints Hint alone to stderr on Compatible — never the bare OK line — then the caller proceeds to launch unchanged. Silent on equal versions / dev binary via the same contract gate. (AC-4) Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…ffix The hint tests all used versions that agree lexically and numerically (0.20.0 vs 0.19.8/0.12.1/0.19.4), so a lexical-compare swap of semverCompare stayed green — the integer comparison was unpinned. Add boundary cases that cross the single-vs-double-digit threshold: binary 0.10.0 vs plugin 0.9.0 MUST hint (lexical wrongly suppresses) and binary 0.9.0 vs plugin 0.10.0 MUST NOT hint (lexical wrongly fires); together they RED any lexical regression. Add a pre-release case (0.20.0-rc1 → no hint) pinning that parseDottedInts rejects rather than strips a suffix. Discrimination proven by temporarily swapping semverCompare to lexical (both boundary cases RED) and stripping the -rc1 suffix (pre-release case RED), then reverting — zero production change. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
clkao
added a commit
that referenced
this pull request
Jun 13, 2026
clkao
added a commit
that referenced
this pull request
Jun 13, 2026
clkao
added a commit
that referenced
this pull request
Jun 13, 2026
clkao
added a commit
that referenced
this pull request
Jun 13, 2026
…w] (#355) * docs: slim README to front door + drop banned prose-grep test [yw] Wave 1 structural cleanup for the site-is-canonical doc architecture: - Remove internal/release/install_doc_test.go — a banned prose-grep that os.ReadFile'd docs/site/get-started/install.md and asserted author substrings. readInstallJourney was file-local; executableShellCommands stays (defined in workflow_exec_guard_test.go, 9 other call sites). - Slim README.md to the front-door skeleton: keep title + Why hook, What's different, Install, License, Contributing. Drop Quick start, How it works, Usage (now on the canonical site). - Install now links the published site https://spacedock.md/docs/ (site_url in mkdocs.yml), keeping the in-repo install.md as secondary. go test ./... green; install-journey grep-clean over live docs/code. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * docs: land the five 0.20.1 behaviors on canonical site pages [yw] Wave 2 behavior-doc pass — yw is the sole doc-owner; the five members shipped zero .md. Each behavior documented on its reverified anchor: - gj (#350): new `## --version` section in command-reference.md showing the version+contract line, the Sandbox: posture, and the per-runtime install/enablement block (wording exercised from `spacedock --version`). - te (#351): command-reference `## Setup` names the contract-compatible- but-behind opt-in upgrade hint (doctor + front-door print it; never blocks). - zrc (#349): command-reference `## Launch` names the unsandboxed posture — claude `--permission-mode auto`, codex `--ask-for-approval on-request`, vs the sandboxed skip/bypass. Scoped to claude/codex; pi injects none. - gp (#352): releasing.md made decouple-accurate — marketplace manifest moved to the standalone spacedock-dev/marketplace repo, no plugin-branch manifest, marketplace.json dropped from the release steps; build-from- source.md adds a spacedock-edge edge-channel user pointer. - 8p (#347): install.md Homebrew tab notes brew also installs agentsview; safehouse is installed separately. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * docs: rewrite --version section to match version-forward output (#354) [yw] #354 (da) replaced the enablement-jargon per-runtime block with a version-forward one. Rewrite the `## --version` section to match: - `<host>: spacedock <version>` when a plugin is installed - ` (disabled)` appended only when the host reports it disabled - `pi: spacedock ready` (pi launches from skills, no versioned plugin) - `<host>: spacedock not installed` when host present but no plugin - `<host>: not installed` when the host binary is absent Drops the obsolete "installed, spacedock enabled" / "enablement unknown" phrasing. Wording read from runtimeLine in internal/cli/host_runtime.go; example output built and exercised via `go build && ./spacedock --version`. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
A tag-fresh binary running
spacedock install --host codexnow actually refreshes a present plugin, and a contract-compatible-but-behind plugin surfaces an opt-in upgrade hint.What changed
runInit's codex arm reinstalls an already-present plugin (was a doctor-only no-op that left it stale).devversions.Evidence
internal/cli+internal/contract352/352 (whole package, on the merge result); full repo green.Review guidance
Front-door change (
gateHost+runInit): the hint never blocks or changes the exit/launch path.te