Primary finding
Target-hit dedup is global across all targets; later target hits within 4h (even same run) will be suppressed
- skills/price-threshold-alert/SKILL.md:138
- skills/price-threshold-alert/SKILL.md:16
- skills/price-threshold-alert/SKILL.md:256-257
The spec stores a single last_alerts.target_hit timestamp and applies a 4h dedup to all target-crossing notifications. This contradicts the earlier promise of “One alert per target per direction” and will drop notifications for additional targets crossed within 4h (and within the same run after the first target updates the dedup clock).
Recommendation
Make target-crossing dedup per target, not global. Options: (a) Track per-target dedup timestamps (e.g., last_alerts.target_hit_by_target[normalized_target]); (b) Aggregate multiple target hits into a single message for the run; (c) At minimum, do not advance a global target_hit dedup clock multiple times within one run so multiple target hits in the same run can notify.