{"actions":{"bootstrapAndRun":{"effect":"installs rote if missing, inspects, prepares, and asks before running","href":"https://play.modiqo.ai/install?play=cyh7789/merged-branch-evidence@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/cyh7789/merged-branch-evidence@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/cyh7789/merged-branch-evidence@0.1.0","effect":"executes the play locally after consent","headless":{"approvalAssertion":"--yes","approvalRequiredBeforeInvocation":true,"commandTemplate":"rote play run https://play.modiqo.ai/cyh7789/merged-branch-evidence@0.1.0 <name=value...> --yes","stdinPolicy":"never pipe input to automate the interactive Ready selector"},"requiresConsent":true}},"description":"Decides which local branches are safe to delete, and says why for each one. \u0060git branch --merged\u0060 answers a narrower question than the one you are asking: it reports whether the base branch contains the branch tip as an ancestor, which is true after a merge commit or a fast-forward and false after every squash and every rebase. On a repository that squashes, branches whose work shipped weeks ago keep reporting as unmerged, and \u0060git cherry\u0060 agrees with it because a squash rewrites the patch ids too. This play gathers four independent sources instead: reachability, the pull request number GitHub appends to a squash commit subject, the pull request state from gh, and whether the branch still holds commits the base does not. It then names a verdict per branch with the evidence behind it. Two failure directions matter and both appear here: a branch that merged invisibly and gets kept forever, and a branch whose pull request merged but which has kept receiving commits since, where deleting on the strength of \u0060merge","distribution":{"digest":"sha256:cd0619ec9c58bbeea267cf59d6c7cc8c81404b47b2e455da4d7f458d417b73cc","mediaType":"application/vnd.modiqo.rote-flow","size":29556,"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/cyh7789/merged-branch-evidence@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/cyh7789/merged-branch-evidence@0.1.0","protocol":"https://play.modiqo.ai/.well-known/rote","self":"https://play.modiqo.ai/cyh7789/merged-branch-evidence@0.1.0.json"},"name":"merged-branch-evidence","owner":{"kind":"user","slug":"cyh7789"},"parameters":[{"description":"Path to the git repository to inspect. Steps run in the play workspace rather than your shell, so pass the path you mean rather than a relative one.","example":"/Users/me/src/my-project","input":{"allowCustom":true,"choices":[],"label":"Repo"},"name":"repo","required":true,"type":"string"},{"default":"main","description":"The branch work lands on, without the origin/ prefix.","example":"develop","input":{"allowCustom":true,"choices":[],"label":"Base"},"name":"base","required":false,"type":"string"},{"default":600,"description":"How far back on the base branch to look for squash commit subjects. A branch whose squash is older than this window falls back to the pull request lookup.","example":2000,"input":{"allowCustom":true,"choices":[],"label":"Scan commits"},"name":"scan_commits","required":false,"type":"integer"}],"preparation":[{"action":{"command":"rote play inspect https://play.modiqo.ai/cyh7789/merged-branch-evidence@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/cyh7789/merged-branch-evidence@0.1.0","headlessCommandTemplate":"rote play run https://play.modiqo.ai/cyh7789/merged-branch-evidence@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.78.0"},"publishedAt":"2026-09-02T15:22:50.849962+00:00","reference":"cyh7789/merged-branch-evidence@0.1.0","requirements":{"adapters":[],"browser":{"dependencies":[],"runtime":false,"signIn":false},"localTools":["git","python3","gh"],"roteCli":{"minimumVersion":"0.62.0"},"sessions":false},"resolution":"pinned","schema":"rote.play.v1","stats":{"downloads":2,"installs":0},"steps":{"count":6,"names":["ancestor_merged","forge_status","list_branches","residual_work","squash_footprint","verdict"]},"title":"merged-branch-evidence","type":"play","version":"0.1.0","visibility":"public"}