{"actions":{"bootstrapAndRun":{"effect":"installs rote if missing, inspects, prepares, and asks before running","href":"https://play.modiqo.ai/install?play=rajkaria/punch@0.1.1","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/rajkaria/punch@0.1.1","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/rajkaria/punch@0.1.1","effect":"executes the play locally after consent","headless":{"approvalAssertion":"--yes","approvalRequiredBeforeInvocation":true,"commandTemplate":"rote play run https://play.modiqo.ai/rajkaria/punch@0.1.1 <name=value...> --yes","stdinPolicy":"never pipe input to automate the interactive Ready selector"},"requiresConsent":true}},"description":"Type one line saying what you are doing. That is the whole interaction, and it takes two seconds. Do it five or ten times a day and the Play starts answering a question your calendar cannot: not where the time went, but how many times the day was broken. A punch whose topic differs from the one before it is a context switch. The report gives you today's punches with their times, how many switches there were, how long the block you are currently in has run, the longest block you managed today, a sparkline of the last fortnight, and the streak of days you have kept it up. Pass \u0060tag=api\u0060 and the tag is the topic, so \"fixing the parser\" and \"back on the API\" count as the same thread rather than as a switch. The number worth sharing here is the switch count, and low is good — which makes it a stranger leaderboard than most, and a more honest one. Nothing here judges you for the number; it just tells you what it was, from what you typed. - Reads: only its own log, at \u0060state_dir/punch.jsonl\u0060. It does not read your c","distribution":{"digest":"sha256:f2ba74f4d963df1539020860aabf36248628d2218b6077bc9396bd5033f51e06","mediaType":"application/vnd.modiqo.rote-flow","size":45499,"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/rajkaria/punch@0.1.1","inputPolicy":{"omittedValues":"inspect_full_parameters_before_collecting_values_or_consent","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/rajkaria/punch@0.1.1","protocol":"https://play.modiqo.ai/.well-known/rote","self":"https://play.modiqo.ai/rajkaria/punch@0.1.1.json"},"name":"punch","owner":{"kind":"user","slug":"rajkaria"},"parameters":[{"default":"","description":"One line, written now. Leave it empty to read the day back without adding to it.","example":"back on the API","input":{"allowCustom":true,"choices":[],"label":"Note"},"name":"note","required":false,"type":"string"},{"default":"","description":"Optional. When given it is the topic instead of the note, so two differently worded punches on the same thing are not counted as a switch.","example":"api","input":{"allowCustom":true,"choices":[],"label":"Tag"},"name":"tag","required":false,"type":"string"},{"default":"~/.rote-micro","description":"The one directory this Play writes to. One append-only JSONL file per stream; nothing is ever deleted or rewritten in place.","example":"~/.rote-micro","input":{"allowCustom":true,"choices":[],"label":"State dir"},"name":"state_dir","required":false,"type":"string"},{"default":14,"description":"How many days the sparkline covers.","example":14,"input":{"allowCustom":true,"choices":[],"label":"Days back"},"name":"days_back","required":false,"type":"integer"},{"default":"","description":"Empty uses the machine's zone. A day boundary is a place, not a fact: this decides when today starts.","example":"Asia/Kolkata","input":{"allowCustom":true,"choices":[],"label":"Tz"},"name":"tz","required":false,"type":"string"},{"default":"false","description":"true runs the whole Play against bundled synthetic input, so a first run needs nothing configured and touches nothing of yours.","example":"false","input":{"allowCustom":true,"choices":[],"label":"Demo"},"name":"demo","required":false,"type":"string"},{"default":"","description":"Empty reads the real clock. An ISO-8601 instant makes the run reproducible, which is how the tests and the demo produce the same bytes on every machine.","example":"2026-09-05T14:22:03Z","input":{"allowCustom":true,"choices":[],"label":"Now"},"name":"now","required":false,"type":"string"}],"preparation":[{"action":{"command":"rote play inspect https://play.modiqo.ai/rajkaria/punch@0.1.1 --json","effect":"read-only"},"step":1,"type":"inspect_local_readiness"},{"references":["/parameters"],"step":2,"type":"collect_parameters","whenValuesOmitted":"Run step 1 before collecting inputs or showing defaults; omittedFields are unknown values, not absent defaults or exhaustive choices."},{"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/rajkaria/punch@0.1.1","headlessCommandTemplate":"rote play run https://play.modiqo.ai/rajkaria/punch@0.1.1 <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.80.0"},"publishedAt":"2026-09-05T17:50:03.171994+00:00","reference":"rajkaria/punch@0.1.1","requested":"rajkaria/punch","requirements":{"adapters":[],"browser":{"dependencies":[],"runtime":false,"signIn":false},"hostToolRequirements":[{"command":"python3","required":true,"versionRequirement":null}],"localTools":["python3"],"roteCli":{"minimumVersion":"0.91.0"},"sessions":false},"resolution":"latest","schema":"rote.play.v1","stats":{"downloads":2,"installs":0},"steps":{"count":2,"names":["record","report"]},"title":"punch","type":"play","version":"0.1.1","visibility":"public"}