Every time the PM assistant's coach/audit gate rejects a drafted reply (e.g. 'talk like a peer, not release notes'), this captures the rejection reason and the offending draft, then weekly clusters them into the top 3 recurring failure modes. It turns scattered one-off corrections into a concrete patch list for the PM system prompt — so the same rejection stops happening instead of being re-corrected forever.
Add a tiny logger hook: in the PM audit-gate path (the 'audit gate for PM' session flow / pm-fleet), append each rejection as one JSON line to ~/.local/state/pm-reject/log.jsonl with {ts, channel, reason, draft_excerpt}. Create ~/bin/pm-reject-miner (under 100 lines): reads the jsonl, sends the rejection reasons to local gemma (`gemma-task`) to cluster into 3 themes with a one-line prompt-fix suggestion each, and emails the digest weekly via send-formatted-email from admin@bys. Per the 'rule buried mid-prompt' learning, each suggested fix names WHERE in the PM prompt to place a top-level `## CRITICAL:` rule. Cron: `0 8 * * 1 ~/bin/pm-reject-miner`. Ship a bats test asserting the miner parses a fixture jsonl and emits 3 themes.