Opus finding
Target one-shot rule contradicts state-write description
- skills/price-threshold-alert/SKILL.md:111-113
- skills/price-threshold-alert/SKILL.md:181-182
Step 6 says set `announced_at=NOW` and notify subject to 4h dedup. But the invariant says `hit_at == announced_at` in practice. If the global `last_alerts.target_hit` dedup window suppresses the notification (e.g., another target hit fired 30 minutes earlier), Step 6 still sets `announced_at=NOW` regardless, which is a lie — no notification actually went out. Combined with the one-shot rule (target never re-fires once `hit_at` is set), an operator could miss a target-hit alert entirely when two targets cross close together. There is no retry mechanism.
Recommendation
Either (a) drop the 4h global dedup for target_hit (target alerts are already inherently one-shot), or (b) only set `announced_at` when the notify actually fires; leave it null and re-attempt next run if dedup suppressed.