{"actions":{"bootstrapAndRun":{"effect":"installs rote if missing, inspects, prepares, and asks before running","href":"https://play.modiqo.ai/install?play=lgoyal6/pipeline-handoff@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/pipeline-handoff@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/pipeline-handoff@0.1.0","effect":"executes the play locally after consent","headless":{"approvalAssertion":"--yes","approvalRequiredBeforeInvocation":true,"commandTemplate":"rote play run https://play.modiqo.ai/lgoyal6/pipeline-handoff@0.1.0 <name=value...> --yes","stdinPolicy":"never pipe input to automate the interactive Ready selector"},"requiresConsent":true}},"description":"A multi-stage pipeline passes state between stages and NOTHING type-checks that handoff. Stage 2 reads a field stage 1 never writes, and on the day the input shape changes it fails silently or processes nothing. This reconciles the data contract BETWEEN stages: for every pipeline under a root, what each stage WRITES against what the next stage READS. Two sources, chosen because in both the stage graph and the values crossing it are written down and statically readable. GitHub Actions: \u0060needs:\u0060 is the graph, \u0060needs.<job>.outputs.x\u0060 and \u0060steps.<id>.outputs.x\u0060 are the reads, a job's \u0060outputs:\u0060 map and \u0060>> \u0024GITHUB_OUTPUT\u0060 are the writes, upload/download-artifact is a file handoff with a name on both ends, and \u0060\u0024{{ env.X }}\u0060 is a read of something the pipeline has to have defined. n8n workflow JSON: \u0060connections\u0060 is the graph, \u0060{{ \u0024json.field }}\u0060 and \u0060{{ \u0024('Node').item.json.field }}\u0060 are the reads, and a Code node's returned object literal is the write. A stage's boundary also extends into the shell script it invo","distribution":{"digest":"sha256:b82c13f344c399c6a1654971bcdc0e521d3f3a1bb99b3b73f868ad7c4ccb3042","mediaType":"application/vnd.modiqo.rote-flow","size":53686,"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/pipeline-handoff@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/pipeline-handoff@0.1.0","protocol":"https://play.modiqo.ai/.well-known/rote","self":"https://play.modiqo.ai/lgoyal6/pipeline-handoff@0.1.0.json"},"name":"pipeline-handoff","owner":{"kind":"user","slug":"lgoyal6"},"parameters":[{"description":"ABSOLUTE path to search for pipelines - GitHub Actions workflow files and n8n workflow exports. A relative path is refused, because a step runs in rote's own workspace rather than your shell directory and would scan the wrong tree and report it clean.","example":"/Users/you","input":{"allowCustom":true,"choices":[],"label":"Root"},"name":"root","required":true,"type":"string"},{"default":"3","description":"How many directory levels below root to look for repositories and workflow exports","example":"3","input":{"allowCustom":true,"choices":[],"label":"Depth"},"name":"depth","required":false,"type":"string"},{"default":"12","description":"How many findings to print per severity section before the rest are summarised as a count","example":"12","input":{"allowCustom":true,"choices":[],"label":"Top"},"name":"top","required":false,"type":"string"}],"preparation":[{"action":{"command":"rote play inspect https://play.modiqo.ai/lgoyal6/pipeline-handoff@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/pipeline-handoff@0.1.0","headlessCommandTemplate":"rote play run https://play.modiqo.ai/lgoyal6/pipeline-handoff@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-04T08:49:22.299956+00:00","reference":"lgoyal6/pipeline-handoff@0.1.0","requirements":{"adapters":[],"browser":{"dependencies":[],"runtime":false,"signIn":false},"localTools":["bash","python3","find","grep","sed","sort","wc","tr","cat","head","mktemp","rm","date"],"roteCli":{"minimumVersion":"0.62.0"},"sessions":false},"resolution":"pinned","schema":"rote.play.v1","stats":{"downloads":1,"installs":0},"steps":{"count":3,"names":["analyze","discover","verify"]},"title":"pipeline-handoff","type":"play","version":"0.1.0","visibility":"public"}