Repository navigation
feat(install)!: always delegate play install, update, and repair to rote - #22
Open
roberts-pumpurs wants to merge 4 commits into
Open
roberts-pumpurs wants to merge 4 commits into
roberts-pumpurs wants to merge 4 commits into
Conversation
roberts-pumpurs
requested review from
conikeec,
debasishg and
hubertp
as code owners
October 6, 2026 09:40
…ges play
When ${ROTE_HOME:-~/.rote}/play/install.json exists (a nonempty ROTE_HOME
wins), or Play runs from a rote play/versions/ release, rote owns the
installation:
- play update prints "Play is managed by rote. Running: rote install play"
and execs rote; it rejects legacy installer options and reports the record
and command when rote is not on PATH. It never falls back to install.sh.
- install.sh, play-bootstrap install/apply, install-all install,
play-profile install/play-activate, and recovery restore refuse before
writing and name rote install play. Preflight repair hints do the same.
- New scripts/bin/play-setup [--json] idempotently seeds the routing policy,
journal settings, and Journey model assets and prints play.setup/v1.
- play-intercept prompt --harness cursor answers beforeSubmitPrompt with
{"continue": true}; Cursor cannot receive injected context there.
- The Grok pointer prefers ${ROTE_HOME:-$HOME/.rote}/play/current/SKILL.md.
- Drop the call to the nonexistent rote telemetry record-play-install.
rote owns Play under ${ROTE_HOME:-~/.rote}/play/{versions,current,install.json},
so Play no longer decides whether rote manages it.
- play update runs `rote install play` with its arguments; without rote on
PATH it names the rote installer (curl -fsSL https://getrote.dev/install | bash).
- install.sh is a shim: no rote -> rote's installer (which installs Play);
rote without `install play --from` -> `rote update`, then check again;
then `rote install play "$@"`. It never falls back to an old installer.
- just install runs `rote install play --from .` (live dev install).
- Preflight repair hints always say `rote install play`; its install-target
prompt is gone. The Grok pointer reads only
${ROTE_HOME:-$HOME/.rote}/play/current/SKILL.md.
Delete Play's installer and recovery machinery, which has no runtime caller:
play-bootstrap (install/plan/apply/backup/restore, guided UI, marketplace
convergence, snapshots, receipts), play-activate, scripts/harness/install-all,
scripts/harness/play-profile, rote_ownership, `play backup`/`play restore`,
the install-marker package-index record, hosted-harness and installer-only
harness metadata, their tests, and the obsolete justfile recipes. README,
SKILL.md, and references describe install and update through rote.
BREAKING CHANGE: play backup, play restore, play-bootstrap, play-activate,
install-all, play-profile, and the just plan/update/uninstall/status recipes
are removed; use `rote install play` and `play update`.
roberts-pumpurs
force-pushed
the
rob/rote-managed-install
branch
from
October 6, 2026 12:35
2571db4 to
5f7ce2d
Compare
The play@play-skills plugin now ships only a pointer skill (root SKILL.md frontmatter plus agents/openai.yaml) that reads ${ROTE_HOME:-~/.rote}/play/current/SKILL.md or gives the rote install command. package-plugin generates and checks the pointer instead of mirroring the repository.
roberts-pumpurs
force-pushed
the
rob/rote-managed-install
branch
from
October 8, 2026 09:07
d4c9dd6 to
f9494e7
Compare
rote install play has no --pinned flag and no pinned Play version: it installs the latest stable release and never downgrades. play update --pinned failed with an unknown-flag error. The play update help, the README, and the pass-through test now use flags rote accepts. The README also stops claiming rote registers a Tulving MCP server; it installs Tulving and uv into ~/.rote/bin.
This branch has not been deployed
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.
Play ships its own installer and repair commands, and they fight
rote install playover the same launchers and skill links.This is the Play side of the rote install stack (modiqo/rote#2819 to modiqo/rote#2845). Merge it after the rote release that ships that stack, because every entry point here calls
rote install play.Before
play update,play restore,play-activate, andinstall-allinstall a second copy under~/.local/share/modiqo/playand repoint the~/.local/binlaunchers and<skills root>/playlinks at it. The nextrote updatepoints them back, so the active Play flips between copies with no message. Theplay@play-skillsplugin carries a third copy, a full repo mirror.rote's install also finds no
play-setupto run, andplay-interceptrejects the--harness cursorthat rote's Cursor hook passes (inferred from code, not reproduced).After
Run the same commands. Only rote places Play.
play updaterunsrote install playwith its arguments. Without rote onPATHit printscurl -fsSL https://getrote.dev/install | bashand exits 1.install.shis a shim: no rote runs the rote installer, a rote withoutinstall play --fromrunsrote updatefirst, then it runsrote install play.just installrunsrote install play --from ..SKILL.mdthat reads~/.rote/play/current/SKILL.md, or tells the user to runrote install play.play-setupseeds the routing policy, journal settings, and model assets and printsplay.setup/v1. rote runs it after placing Play and rolls back a release whosemodel_assetsstep fails.play-intercept prompt --harness cursorprints{"continue": true}.rote install playand read~/.rote/play/current.Grey dashed parts are removed. Green parts now hand off to rote's single copy at
~/.rote/play/current.Compatibility
play backupandplay restoreare removed. Runrote install playto repair an install.play-bootstrap,play-activate,install-all, andplay-profileare removed, with thejustrecipes that wrapped them (bootstrap-plan,bootstrap-apply,install-copy,update,plan,uninstall,status,status-roots,verify-profile).play updaterequires rote.play@play-skillsis still published so marketplaces list Play; rote removes it once it links the real skill.Validation
In a sandboxed home on macOS arm64, rote at the stack tip installed this branch with
just barebones-install-sh --non-tty --play-from <checkout>. Setup reported READY, Play LOCAL CHECKOUT.~/.rote/play/verify.logshowedplay-setupcreatingrouting_policy,journal_settings, andmodel_assets. The Cursor hook rote wrote to~/.cursor/hooks.jsonprinted{"continue": true}.BREAKING CHANGE:
play backup,play restore,play-bootstrap,play-activate,install-all,play-profile, and theirjustrecipes are removed, andplay updatenow requires rote. Install, update, and repair Play withrote install play.