{"actions":{"bootstrapAndRun":{"effect":"installs rote if missing, inspects, prepares, and asks before running","href":"https://play.modiqo.ai/install?play=lgoyal6/runtime-drift@0.1.0","method":"GET","rel":"https://rote.dev/rels/bootstrap-and-run","requiresConsent":true,"responseMediaType":"text/x-shellscript"},"inspect":{"command":"rote play inspect https://play.modiqo.ai/lgoyal6/runtime-drift@0.1.0","effect":"read-only"},"installCliOnly":{"effect":"installs the rote CLI, nothing else","href":"https://play.modiqo.ai/install","method":"GET","rel":"https://rote.dev/rels/install-cli","requiresConsent":true,"responseMediaType":"text/x-shellscript"},"run":{"command":"rote play run https://play.modiqo.ai/lgoyal6/runtime-drift@0.1.0","effect":"executes the play locally after consent","headless":{"approvalAssertion":"--yes","approvalRequiredBeforeInvocation":true,"commandTemplate":"rote play run https://play.modiqo.ai/lgoyal6/runtime-drift@0.1.0 <name=value...> --yes","stdinPolicy":"never pipe input to automate the interactive Ready selector"},"requiresConsent":true}},"description":"Four systems each hold an opinion about which runtime version this machine uses, and they disagree silently until something breaks in CI and not locally. This answers one question per runtime: what does the project DECLARE, what does the version MANAGER select, what is actually first on PATH, and what does CI use. The reconciliation table across those four columns is the deliverable, not a list of rule violations. Declarations are read from .nvmrc, .node-version, package.json engines and volta, .python-version, pyproject.toml requires-python, the go.mod go and toolchain directives, rust-toolchain.toml, .ruby-version, .tool-versions and Dockerfile FROM tags. Manager selection is read from the managers OWN STATE FILES - nvm, fnm, nodenv, volta, pyenv, rbenv, asdf and mise - and never by executing a manager, which is also the only way to read nvm at all, since nvm is a shell function with no binary to run. Reality is what command resolution and a version probe actually report, including every other copy of the s","distribution":{"digest":"sha256:61672abcad9ce91c64887d3f62a4dd13a093fb16f921cff0202214c039da7eb5","mediaType":"application/vnd.modiqo.rote-flow","size":47107,"verifiedBy":"rote verifies the downloaded archive against this digest before it runs"},"effects":{"credentialsProvidedBy":"runner","credentialsRemainLocal":true,"declaredWrites":[],"publisherReceivesCredentials":false},"id":"https://play.modiqo.ai/lgoyal6/runtime-drift@0.1.0","inputPolicy":{"optionalWithDefault":"show_default_and_accept_override","optionalWithoutDefault":"omit_unless_supplied","required":"ask","secrets":"collect_locally_outside_conversation"},"links":{"docs":"https://rote.dev","page":"https://play.modiqo.ai/lgoyal6/runtime-drift@0.1.0","protocol":"https://play.modiqo.ai/.well-known/rote","self":"https://play.modiqo.ai/lgoyal6/runtime-drift@0.1.0.json"},"name":"runtime-drift","owner":{"kind":"user","slug":"lgoyal6"},"parameters":[{"description":"ABSOLUTE path to scan for runtime declarations - one project directory, or a parent such as your home directory. A relative path is REFUSED, because a process.exec step runs in rote's own workspace and would scan that instead of your tree.","example":"/Users/you/myrepo","input":{"allowCustom":true,"choices":[],"label":"Root"},"name":"root","required":true,"type":"string"},{"default":"2","description":"How many directory levels below root to search for declaration files. Workflow files are searched two levels deeper so a project at the requested depth still has its .github/workflows read.","example":"3","input":{"allowCustom":true,"choices":[],"label":"Depth"},"name":"depth","required":false,"type":"string"},{"default":"40","description":"Upper bound on how many project directories are analysed, so a wide scan cannot grow the fan-out without limit. When the enumeration finds more, the report says so and names the cut.","example":"80","input":{"allowCustom":true,"choices":[],"label":"Max projects"},"name":"max_projects","required":false,"type":"string"}],"preparation":[{"action":{"command":"rote play inspect https://play.modiqo.ai/lgoyal6/runtime-drift@0.1.0 --json","effect":"read-only"},"step":1,"type":"inspect_local_readiness"},{"references":["/parameters"],"step":2,"type":"collect_parameters"},{"references":["/parameters","/requirements","/effects"],"step":3,"type":"review"},{"consentBoundary":"the user approves the exact play and parameter values","references":["/parameters","/requirements","/effects"],"step":4,"type":"obtain_run_consent"},{"action":{"command":"rote play run https://play.modiqo.ai/lgoyal6/runtime-drift@0.1.0","headlessCommandTemplate":"rote play run https://play.modiqo.ai/lgoyal6/runtime-drift@0.1.0 <name=value...> --yes"},"preservesAcquisitionBoundaries":["adapter_selection","oauth_dcr","google_discovery","static_token_setup","runtime_security_checks"],"requiresConsent":true,"step":5,"type":"run"}],"producedBy":{"roteVersion":"0.79.0"},"publishedAt":"2026-09-04T06:43:44.599183+00:00","reference":"lgoyal6/runtime-drift@0.1.0","requirements":{"adapters":[],"browser":{"dependencies":[],"runtime":false,"signIn":false},"localTools":["bash","python3","find","sed","sort","tr","wc","head","mktemp","rm","printf"],"roteCli":{"minimumVersion":"0.62.0"},"sessions":false},"resolution":"pinned","schema":"rote.play.v1","stats":{"downloads":2,"installs":0},"steps":{"count":3,"names":["analyze","discover","verify"]},"title":"runtime-drift","type":"play","version":"0.1.0","visibility":"public"}