1. Phantom dependency: APScheduler
pyproject.toml still declares apscheduler>=4.0.0a,<5, but no module imports it. Scheduling uses monitor.py and asyncio.sleep.
2. Encapsulation: WG21Index._max_rev
ISOProber reads the private attribute self.index._max_rev in two places (src/paperscout/sources.py, roughly _hot_numbers and _build_cold_slice) to build known_p_nums.
3. Stringly-typed probe tier
ProbeHit.tier is a plain str with values "watchlist", "frontier", "recent", and "cold". Consumers such as notify_channel() in src/paperscout/scout.py route on string equality (e.g. h.tier == "frontier"), so typos can silently misroute notifications.
1. Phantom dependency: APScheduler
pyproject.tomlstill declaresapscheduler>=4.0.0a,<5, but no module imports it. Scheduling usesmonitor.pyandasyncio.sleep.2. Encapsulation:
WG21Index._max_revISOProberreads the private attributeself.index._max_revin two places (src/paperscout/sources.py, roughly_hot_numbersand_build_cold_slice) to buildknown_p_nums.3. Stringly-typed probe tier
ProbeHit.tieris a plainstrwith values"watchlist","frontier","recent", and"cold". Consumers such asnotify_channel()insrc/paperscout/scout.pyroute on string equality (e.g.h.tier == "frontier"), so typos can silently misroute notifications.