{"actions":{"bootstrapAndRun":{"effect":"installs rote if missing, inspects, prepares, and asks before running","href":"https://play.modiqo.ai/install?play=chinmoy/venv-rot@0.2.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/chinmoy/venv-rot@0.2.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/chinmoy/venv-rot@0.2.0","effect":"executes the play locally after consent","headless":{"approvalAssertion":"--yes","approvalRequiredBeforeInvocation":true,"commandTemplate":"rote play run https://play.modiqo.ai/chinmoy/venv-rot@0.2.0 <name=value...> --yes","stdinPolicy":"never pipe input to automate the interactive Ready selector"},"requiresConsent":true}},"description":"Answers which Python actually runs the repository you are standing in, which pip installs into it, and whether the virtualenv beside it is already dead. 7 probes read what the project declares in .python-version, runtime.txt, requires-python and Pipfile, resolve every python3, pyenv shim and conda prefix through its symlink chain to a real prefix, and census every pyvenv.cfg to say whether the interpreter it names still exists on disk. It pairs declared dependencies against the imports the code makes, opencv-python against cv2, and names the standard library module a script directory shadows. Tests, docstrings and vendored trees are never read for a finding, an import inside try/except ImportError is never reported, and it does not install, activate or delete anything. PEP 668 has no marker on Windows, so error: externally-managed-environment cannot fire there. With no Python marker the answer is UNKNOWN, never a pass. Catches the ModuleNotFoundError that follows a successful install.","distribution":{"digest":"sha256:373a12a6a9d2859fa4250f915b4dc39cda6d57eda9fbf9c9a1499b1050d1ca90","mediaType":"application/vnd.modiqo.rote-flow","size":45318,"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/chinmoy/venv-rot@0.2.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/chinmoy/venv-rot@0.2.0","protocol":"https://play.modiqo.ai/.well-known/rote","self":"https://play.modiqo.ai/chinmoy/venv-rot@0.2.0.json"},"name":"venv-rot","owner":{"kind":"user","slug":"chinmoy"},"parameters":[{"default":".","description":"Work tree to answer for. The default '.' resolves to the directory the run started in, so a zero-argument run answers for the repository you are standing in; pass an absolute path to answer for a checkout somewhere else. The project is read from the git index, because an untracked scratch requirements file is not what a teammate or a deploy will get.","input":{"allowCustom":true,"choices":[],"label":"Path"},"name":"path","required":false,"type":"string"},{"default":true,"description":"Whether virtualenvs outside the project are censused as well. The default true also walks the home directory, because the environment that is actually activated in your shell is very often not the one beside the project, and a dead environment three directories away is still occupying disk and still confusing which python answers. Set false to answer only about environments inside this repository, which is the right setting on a shared or unfamiliar machine.","input":{"allowCustom":true,"choices":[],"label":"Scan home"},"name":"scan_home","required":false,"type":"boolean"},{"default":4,"description":"How many directory levels below the project root, and below the home directory, the search for a pyvenv.cfg descends. The default 4 reaches ~/projects/thing/.venv and ~/.virtualenvs/name without walking an entire disk, and it visited 2250 directories in a fifth of a second on the machine this was built on. Raise it when your checkouts are nested deeper than that; the number of directories actually visited is always reported.","input":{"allowCustom":true,"choices":[],"label":"Max depth"},"name":"max_depth","required":false,"type":"integer"},{"default":90,"description":"How old an environment must be, in days since anything inside it was last written, before it is called dormant. The default 90 marks an environment that has survived a quarter without an install as holding whatever was current then rather than what the declarations ask for now. Dormancy is only ever reported as an observation, never as a failure, because an environment that has not changed is not thereby broken.","input":{"allowCustom":true,"choices":[],"label":"Dormant days"},"name":"dormant_days","required":false,"type":"integer"},{"default":true,"description":"Whether conda and mamba prefixes are counted among the interpreters on this machine. The default true lists them, because a conda base environment on PATH ahead of everything else is a common reason a bare python3 is not the python anyone expected. Set false on a machine where conda is deliberately parked and you want the inventory to show only what your shell would otherwise reach.","input":{"allowCustom":true,"choices":[],"label":"Include conda"},"name":"include_conda","required":false,"type":"boolean"},{"default":true,"description":"Whether application source is parsed for imports whose distribution is spelled differently from the module. The default true parses each file with the ast module and compares only a fixed table of known pairs such as cv2 for opencv-python and yaml for PyYAML. Set false on a very large repository, or when you want an answer about the interpreter and its environments alone; the file count that was parsed is always reported either way.","input":{"allowCustom":true,"choices":[],"label":"Check imports"},"name":"check_imports","required":false,"type":"boolean"},{"default":1500,"description":"Upper bound on how many application files are read and parsed. The default 1500 covered every repository tested, including one with 1974 tracked .py files, and keeps a run on a large monorepo to a few seconds. The number of files actually parsed is always printed, so a bound that was reached is visible in the report rather than silently narrowing the answer.","input":{"allowCustom":true,"choices":[],"label":"Max files"},"name":"max_files","required":false,"type":"integer"},{"default":"all","description":"Which findings reach the report: all, or critical. The default all keeps the warnings, because an import whose distribution nobody declared and an interpreter that refuses a bare pip install are both worth seeing once even though neither stops the code running today. Use critical for only what will stop this project running, and the count withheld is always printed.","input":{"allowCustom":true,"choices":[],"label":"Severity"},"name":"severity","required":false,"type":"string"},{"default":"node_modules,.git,vendor","description":"Comma-separated directory names the environment search never descends into. The default skips node_modules, .git and vendor, which hold no virtualenv anyone maintains and are the three largest directories in a typical checkout. Add a name here when a build cache or a data directory is making the scan slow; an empty value keeps only the built-in skips for caches and package directories.","input":{"allowCustom":true,"choices":[],"label":"Ignore"},"name":"ignore","required":false,"type":"string"},{"default":10,"description":"How many findings are listed, worst first. The default 10 keeps the report readable on one screen, and the count of findings not listed is always printed so nothing is silently dropped. Raise it when auditing a repository you expect to be in poor shape and you want the whole list rather than the head of it.","input":{"allowCustom":true,"choices":[],"label":"Max findings"},"name":"max_findings","required":false,"type":"integer"}],"preparation":[{"action":{"command":"rote play inspect https://play.modiqo.ai/chinmoy/venv-rot@0.2.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/chinmoy/venv-rot@0.2.0","headlessCommandTemplate":"rote play run https://play.modiqo.ai/chinmoy/venv-rot@0.2.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-04T05:57:52.155795+00:00","reference":"chinmoy/venv-rot@0.2.0","requirements":{"adapters":[],"browser":{"dependencies":[],"runtime":false,"signIn":false},"localTools":["git","python3"],"roteCli":{"minimumVersion":"0.62.0"},"sessions":false},"resolution":"pinned","schema":"rote.play.v1","stats":{"downloads":3,"installs":0},"steps":{"count":7,"names":["declared_deps","import_traps","interpreter_map","project_python","resolve","venv_census","verdict"]},"title":"venv-rot","type":"play","version":"0.2.0","visibility":"public"}