fix: improve status maintenance prompt clarity (#520)

- add CLAUDE.md with instructions for getting workflow summary URLs
- fix pronunciation: tell model to WRITE "player FM" not "plyr.fm" (TTS mispronounces plyr)
- add guidance to distinguish major feature launches from polish/fixes
- explicitly forbid vague time references like "last week" - require specific dates

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-authored-by: Claude <noreply@anthropic.com>

authored by zzstoatzz.io Claude and committed by GitHub c8dfec6a 525ba641

Changed files
+64 -19
.github
+25
.github/workflows/CLAUDE.md
···
··· 1 + # workflows 2 + 3 + GitHub Actions workflows. 4 + 5 + ## debugging workflow runs 6 + 7 + to get the Claude Code summary/report from a workflow run: 8 + 9 + ```bash 10 + # get the summary URL for a specific run 11 + # format: https://github.com/{owner}/{repo}/actions/runs/{run_id}/jobs/{job_id}/summary_raw 12 + 13 + # step 1: get the job ID from the run 14 + gh run view {run_id} --json jobs -q '.jobs[0].databaseId' 15 + 16 + # step 2: construct the URL 17 + # https://github.com/zzstoatzz/plyr.fm/actions/runs/{run_id}/jobs/{job_id}/summary_raw 18 + 19 + # example for run 20017464306: 20 + gh run view 20017464306 --json jobs -q '.jobs[0].databaseId' 21 + # returns: 44812821179 22 + # URL: https://github.com/zzstoatzz/plyr.fm/actions/runs/20017464306/jobs/44812821179/summary_raw 23 + ``` 24 + 25 + the summary contains Claude's full reasoning, tool calls, and outputs - much more useful than grepping through logs.
+39 -19
.github/workflows/status-maintenance.yml
··· 119 120 this context helps you explain things accurately, and accessibly without over-simplifying. 121 122 - ### determine episode type 123 124 - check if .status_history/ directory exists: 125 - - if NO .status_history/ exists: this is the INAUGURAL episode 126 - - if .status_history/ exists: this is a SUBSEQUENT episode 127 128 - ### write the podcast script 129 130 - write to podcast_script.txt with "Host: ..." and "Cohost: ..." lines. 131 132 - INAUGURAL EPISODE (ignore this if its not the first episode): 133 - - introduce what plyr.fm is: decentralized music streaming on ATProto 134 - - explain the core value prop: your music data lives in your PDS, portable between apps (open social) 135 - - cover the technical foundation that's been built (summarize from STATUS.md) 136 - - set expectations: this is an early-stage project, rough edges exist 137 - - tone: "here's what is being built and why it could matter" 138 - - work chronologically from beginning to end, don't heavily bias towards nascent or recent work 139 140 - SUBSEQUENT EPISODES (ignore this if its the first episode): 141 - - focus on what actually shipped since the last status-maintenance PR was MERGED 142 - - use the mergedAt date from task 1 as your starting point, NOT "last week" 143 - - reference git commits since that merge date to determine what shipped 144 - - don't re-explain the whole project - listeners already know 145 - tone: "here's what changed since last time" 146 147 ### tone requirements (CRITICAL) ··· 157 - "the team has done", "they've really", "fantastic work" 158 - any variation of over-congratulating or over-sensationalizing the project 159 160 - pronunciation: "plyr.fm" is pronounced "player FM" (not "plir" or spelled out) 161 162 target length: 2-3 minutes spoken (~300-400 words) (it should be 4-5 if its the first episode) 163
··· 119 120 this context helps you explain things accurately, and accessibly without over-simplifying. 121 122 + ### write the podcast script 123 124 + write to podcast_script.txt with "Host: ..." and "Cohost: ..." lines. 125 126 + focus on what shipped since the last status-maintenance PR was MERGED (the mergedAt date from task 1). 127 + that merge date is when the last podcast was generated, so everything after that is new. 128 129 + use `git log --since="{mergedAt date}" --reverse` to see commits in CHRONOLOGICAL order (oldest first). 130 131 + **narrative structure**: tell the story chronologically - start with what shipped first in the time period, 132 + then work forward to the most recent changes. this creates a natural narrative arc. 133 + (note: STATUS.md is reverse-chronological, but your script should be chronological) 134 135 + - don't re-explain the whole project - listeners already know what player FM is 136 + - focus on what's new: features that launched, bugs that got fixed, improvements that shipped 137 - tone: "here's what changed since last time" 138 139 ### tone requirements (CRITICAL) ··· 149 - "the team has done", "they've really", "fantastic work" 150 - any variation of over-congratulating or over-sensationalizing the project 151 152 + ### pronunciation (CRITICAL - READ THIS CAREFULLY) 153 + 154 + the project name "plyr.fm" is pronounced "player FM" (like "music player"). 155 + 156 + **in your script, ALWAYS write "player FM" or "player dot FM" - NEVER write "plyr.fm" or "plyr".** 157 + 158 + the TTS engine will mispronounce "plyr" as "plir" or "p-l-y-r" if you write it that way. 159 + write phonetically for correct pronunciation: "player FM", "player dot FM". 160 + 161 + ### identifying what actually shipped 162 + 163 + read the commit messages and STATUS.md carefully to understand what changed. 164 + 165 + - if something is completely NEW (didn't exist before), say it "shipped" or "launched" 166 + - if something existing got improved or fixed, call it what it is: fixes, improvements, polish 167 + 168 + don't rely on commit message prefixes like `feat:` or `fix:` - they're not always accurate. 169 + read the actual content to understand the scope of what changed. 170 + 171 + ### time references (CRITICAL) 172 + 173 + NEVER say "last week", "this week", "recently", or vague time references. 174 + 175 + ALWAYS use specific date ranges based on the mergedAt date from task 1: 176 + - "since December 2nd" or "from December 3rd to today" 177 + - "in the past six days" (if that's accurate) 178 + - "since the last update" 179 + 180 + the listener doesn't know when "last week" was - be specific. 181 182 target length: 2-3 minutes spoken (~300-400 words) (it should be 4-5 if its the first episode) 183