{"actions":{"bootstrapAndRun":{"effect":"installs rote if missing, inspects, prepares, and asks before running","href":"https://play.modiqo.ai/install?play=lgoyal6/makefile-audit@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/makefile-audit@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/makefile-audit@0.1.0","effect":"executes the play locally after consent","headless":{"approvalAssertion":"--yes","approvalRequiredBeforeInvocation":true,"commandTemplate":"rote play run https://play.modiqo.ai/lgoyal6/makefile-audit@0.1.0 <name=value...> --yes","stdinPolicy":"never pipe input to automate the interactive Ready selector"},"requiresConsent":true}},"description":"Finds the Makefile problems that make a build silently wrong rather than loudly broken, with make syntax actually parsed instead of grepped. Reports targets that are not .PHONY but produce no file of their own name, so \u0060make test\u0060 turns into a no-op the moment a directory named test exists; targets declared .PHONY that no rule defines, so make prints Nothing to be done and exits 0; duplicate recipes where the later one silently wins; bash-only syntax in a recipe while SHELL is still /bin/sh; a cd on one recipe line that is thrown away before the next, because each line is its own shell; a shell variable read back empty across that same boundary; \u0024(shell ...) in a := over a path this Makefile itself builds; undefined variables that expand to nothing, which is what turns rm -rf \u0024(BUILD_DIR)/ into rm -rf /; prerequisites nothing defines; and sibling prerequisites that write the same path, so make -j races them. It knows where make's rules do not apply, so it does not invent findings: recipe lines start with a TA","distribution":{"digest":"sha256:bd42d31fbcdace0c771c7a004c9cc46324026080da12256349d9839c3ae2f46b","mediaType":"application/vnd.modiqo.rote-flow","size":25548,"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/makefile-audit@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/makefile-audit@0.1.0","protocol":"https://play.modiqo.ai/.well-known/rote","self":"https://play.modiqo.ai/lgoyal6/makefile-audit@0.1.0.json"},"name":"makefile-audit","owner":{"kind":"user","slug":"lgoyal6"},"parameters":[{"description":"Directory to search for Makefiles","example":".","input":{"allowCustom":true,"choices":[],"label":"Root"},"name":"root","required":true,"type":"string"},{"default":"4","description":"How many directory levels below root to search","example":"3","input":{"allowCustom":true,"choices":[],"label":"Depth"},"name":"depth","required":false,"type":"string"}],"preparation":[{"action":{"command":"rote play inspect https://play.modiqo.ai/lgoyal6/makefile-audit@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/makefile-audit@0.1.0","headlessCommandTemplate":"rote play run https://play.modiqo.ai/lgoyal6/makefile-audit@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-03T00:45:37.801356+00:00","reference":"lgoyal6/makefile-audit@0.1.0","requirements":{"adapters":[],"browser":{"dependencies":[],"runtime":false,"signIn":false},"localTools":["bash","python3","find","sort","mktemp","wc","tr"],"roteCli":{"minimumVersion":"0.62.0"},"sessions":false},"resolution":"pinned","schema":"rote.play.v1","stats":{"downloads":0,"installs":0},"steps":{"count":2,"names":["analyze","discover"]},"title":"makefile-audit","type":"play","version":"0.1.0","visibility":"public"}