{"actions":{"bootstrapAndRun":{"effect":"installs rote if missing, inspects, prepares, and asks before running","href":"https://play.modiqo.ai/install?play=sakshamsai26/test-gap-mapper@100.100.100","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/sakshamsai26/test-gap-mapper@100.100.100","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/sakshamsai26/test-gap-mapper@100.100.100","effect":"executes the play locally after consent","headless":{"approvalAssertion":"--yes","approvalRequiredBeforeInvocation":true,"commandTemplate":"rote play run https://play.modiqo.ai/sakshamsai26/test-gap-mapper@100.100.100 <name=value...> --yes","stdinPolicy":"never pipe input to automate the interactive Ready selector"},"requiresConsent":true}},"authenticationPreflight":{"credentialValues":"local_only","enforcedBeforeAdapterCalls":true,"mode":"declared","readiness":"inspect_locally","steps":[{"endpoint":"adapter/github","name":"auth_github","onExpired":"refresh","onMissing":"authorize","onUnreadable":"reauthorize"}]},"description":"Before a change is reviewed or merged, it is easy to mistake a nearby test filename for evidence that the changed behavior is covered. Test Gap Mapper turns one local Git range into a conservative, inspectable test-impact brief, writes that report as a new artifact, and can optionally create a GitHub issue containing it. It never runs tests, installs packages, edits the repository, fetches, pushes, or overwrites an existing artifact.","distribution":{"digest":"sha256:af04ded5df340a6ce5e7707b74dfa9abf4ebb8a5d7b1e34b956aecbb625f125a","mediaType":"application/vnd.modiqo.rote-flow","size":6736,"verifiedBy":"rote verifies the downloaded archive against this digest before it runs"},"effects":{"credentialsProvidedBy":"runner","credentialsRemainLocal":true,"declaredWrites":[{"adapter":"github","mode":"audit","tool":"issues/create"}],"publisherReceivesCredentials":false},"id":"https://play.modiqo.ai/sakshamsai26/test-gap-mapper@100.100.100","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/sakshamsai26/test-gap-mapper@100.100.100","protocol":"https://play.modiqo.ai/.well-known/rote","self":"https://play.modiqo.ai/sakshamsai26/test-gap-mapper@100.100.100.json"},"name":"test-gap-mapper","owner":{"kind":"user","slug":"sakshamsai26"},"parameters":[{"description":"Absolute path to a local Git repository you are authorized to inspect. Only tracked paths are read.","input":{"allowCustom":true,"choices":[],"label":"Root"},"name":"root","required":true,"type":"string"},{"description":"Existing local Git range, such as HEAD~5..HEAD. Invalid ranges return UNKNOWN.","input":{"allowCustom":true,"choices":[],"label":"Change range"},"name":"change_range","required":true,"type":"string"},{"default":"80","description":"Maximum changed source files to correlate, from 1 through 300. Files beyond the cap are excluded and never silently treated as covered.","input":{"allowCustom":true,"choices":[],"label":"Max changed files"},"name":"max_changed_files","required":true,"type":"string"},{"default":"false","description":"Whether to add non-ignored untracked paths to the inventory. Default false analyzes only the supplied Git range.","input":{"allowCustom":true,"choices":[],"label":"Include untracked"},"name":"include_untracked","required":true,"type":"string"},{"default":"findings","description":"findings prints the audit brief; all also prints each changed local path used by the analysis.","input":{"allowCustom":true,"choices":[],"label":"Report"},"name":"report","required":true,"type":"string"},{"description":"Absolute directory for the newly written test-gap-plan.md artifact. Existing artifacts are never overwritten.","input":{"allowCustom":true,"choices":[],"label":"Output dir"},"name":"output_dir","required":true,"type":"string"},{"description":"GitHub repository owner, required only when publish_issue is true.","input":{"allowCustom":true,"choices":[],"label":"Github owner"},"name":"github_owner","required":true,"type":"string"},{"description":"GitHub repository name, required only when publish_issue is true.","input":{"allowCustom":true,"choices":[],"label":"Github repo"},"name":"github_repo","required":true,"type":"string"},{"default":false,"description":"Create a GitHub issue containing the generated test-impact report. Defaults to false.","input":{"allowCustom":true,"choices":[],"label":"Publish issue"},"name":"publish_issue","required":true,"type":"boolean"}],"preparation":[{"action":{"command":"rote play inspect https://play.modiqo.ai/sakshamsai26/test-gap-mapper@100.100.100 --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/sakshamsai26/test-gap-mapper@100.100.100","headlessCommandTemplate":"rote play run https://play.modiqo.ai/sakshamsai26/test-gap-mapper@100.100.100 <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-07T12:26:01.652008+00:00","reference":"sakshamsai26/test-gap-mapper@100.100.100","requirements":{"adapters":[{"bindingStatus":"resolved","credentialDemand":{"requirements":[{"description":"Auto-detected from specification","kind":"bearer","name":"GITHUB_API_TOKEN","protocol":"static","protocolSource":"inferred","setup":{"configure":{"command":"rote token set GITHUB_API_TOKEN","input":"hidden"},"href":"https://github.com/settings/tokens","source":"adapter_catalog","type":"vendor_token_page","verifiedHost":"github.com"}}],"status":"required"},"displayName":"GitHub","fingerprint":"mcp_uogxetWJ9s2mSDiBKftmvwkDfu","id":"github","purpose":"github adapter","requirement":"sakshamsai26/github@1.0.0","version":"1.0.0"}],"browser":{"dependencies":[],"runtime":false,"signIn":false},"hostToolRequirements":[{"command":"python3","required":true,"versionRequirement":null}],"localTools":["python3"],"roteCli":{"minimumVersion":"0.62.0"},"sessions":true},"resolution":"pinned","schema":"rote.play.v1","stats":{"downloads":1,"installs":0},"steps":{"count":6,"names":["boundary","create_issue","inventory","map","preflight","write_plan"]},"title":"test-gap-mapper","type":"play","version":"100.100.100","visibility":"public"}