- HIGH: switch fetch_html() to well-formed bot UA with contact URL
(k-skill-ohou-today-deal/1.0 (+https://github.com/NomaDamas/k-skill)).
ohou.se Akamai bot manager 403s anonymous UAs but allows identified
bot UAs that include a contact URL. Live default workflow now returns
74 deals end-to-end instead of failing with HTTP 403.
- MEDIUM: extract_deals() now explicitly selects React Query entries with
queryKey == ['today-deal-feed'] or ['special-today-deal-feed'] and
reads only state.data.todayDealFeed.slots[type=='DEAL']. Unrelated
DEAL-shaped nodes from navigation/banner modules are excluded.
Legacy fixture/JSON-payload fallback path preserved for tests that
construct simplified payloads.
- LOW: --limit now requires a positive integer; --min-discount is
constrained to 0..100. Both validated via argparse.ArgumentTypeError
so users get a clear CLI error instead of silent slicing or nonsensical
thresholds.
- Tests: add 9 new unit tests covering explicit feed selection,
navigation/GOODS exclusion, fallback compatibility, and argv validators.
Strengthen skill-docs.test.js to lock the special-today-deal-feed
surface and well-formed UA signature.
- Docs: update SKILL.md and feature doc to document the explicit
today-deal-feed + special-today-deal-feed extraction boundary and the
Akamai UA policy.