{"actions":{"bootstrapAndRun":{"effect":"installs rote if missing, inspects, prepares, and asks before running","href":"https://play.modiqo.ai/install?play=dotisacat/python-ssl-doctor@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/dotisacat/python-ssl-doctor@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/dotisacat/python-ssl-doctor@0.1.0","effect":"executes the play locally after consent","headless":{"approvalAssertion":"--yes","approvalRequiredBeforeInvocation":true,"commandTemplate":"rote play run https://play.modiqo.ai/dotisacat/python-ssl-doctor@0.1.0 <name=value...> --yes","stdinPolicy":"never pipe input to automate the interactive Ready selector"},"requiresConsent":true}},"description":"One HTTPS request fails with CERTIFICATE_VERIFY_FAILED and silently breaks every tool built on that python -- the real-incident hook here: a single shadowed interpreter failing exactly that way once quietly broke four separate downstream tools before anyone thought to check which python each one was actually running. Five jobs, in order: finds EVERY python3 (and bare python) executable on THIS machine's PATH -- all hits, not just the one a bare \u0060python3\u0060 would resolve to, since shadowing means the broken interpreter may be exactly the one a cron job or background tool runs, never the one a human happens to test by hand; fingerprints each install's SOURCE from its path and, when available, its own sys.prefix -- python.org framework build, homebrew, conda-anaconda, pyenv, uv-managed, system Command Line Tools, or unknown; runs exactly ONE bounded TLS handshake per discovered python against a fixed, well-known host (pypi.org:443 -- socket connect then an SSL wrap_socket() handshake, no HTTP request line, nothing","distribution":{"digest":"sha256:ae68ea21e73dcac290525a41a083cbd6e11540bdd6eb2d49cfc26375888645cd","mediaType":"application/vnd.modiqo.rote-flow","size":31502,"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/dotisacat/python-ssl-doctor@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/dotisacat/python-ssl-doctor@0.1.0","protocol":"https://play.modiqo.ai/.well-known/rote","self":"https://play.modiqo.ai/dotisacat/python-ssl-doctor@0.1.0.json"},"name":"python-ssl-doctor","owner":{"kind":"user","slug":"dotisacat"},"parameters":[{"default":5,"description":"TLS handshake timeout per python (1-30)","example":5,"input":{"allowCustom":true,"choices":[],"label":"Timeout s"},"name":"timeout_s","required":false,"type":"integer"}],"preparation":[{"action":{"command":"rote play inspect https://play.modiqo.ai/dotisacat/python-ssl-doctor@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/dotisacat/python-ssl-doctor@0.1.0","headlessCommandTemplate":"rote play run https://play.modiqo.ai/dotisacat/python-ssl-doctor@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.77.0"},"publishedAt":"2026-09-02T21:19:10.430906+00:00","reference":"dotisacat/python-ssl-doctor@0.1.0","requirements":{"adapters":[],"browser":{"dependencies":[],"runtime":false,"signIn":false},"localTools":["python3"],"roteCli":{"minimumVersion":"0.62.0"},"sessions":false},"resolution":"pinned","schema":"rote.play.v1","stats":{"downloads":1,"installs":0},"steps":{"count":2,"names":["find_pythons","probe_ssl"]},"title":"python-ssl-doctor","type":"play","version":"0.1.0","visibility":"public"}