Four changes since beta.1, all on the beta channel. Does not advance stable.
Unavailable products explain themselves (#73, now closed)
Previously a stalled product gave no explanation. A page that is genuinely gone, a retailer that is temporarily unreachable, and a product you paused yourself all looked identical.
- Products record why they could not be reached, shown on the product page alongside whether monitoring is still running.
- Timeouts, DNS failures and refused connections no longer pass silently. They were producing
unknown, which kept the old status and recorded nothing — a retailer could be down for a week leaving no trace. - Retry Now and Resume Monitoring actions, and a notification when a product becomes reachable again.
- A pause you set is no longer silently undone by the system when a page comes back.
- A retailer serving a bot check is treated as temporarily unreachable, not as a deleted product — which is how a bot wall could previously make a product disappear from tracking.
Notifications say what happened (#93, #92)
- A product going missing, a retailer being unreachable and a product coming back were all stored as "Tracking Issue". Each event is now recorded as itself; existing notifications are relabelled on upgrade.
- History filters (All / Unread / Price / Availability) now search your whole history rather than the twenty notifications on screen, so a filter no longer reports "none" when it means "none on this page".
- Email describes the event. Every alert used one price-shaped template, so a back-in-stock email arrived as a bare price line. A template you configured yourself is still used exactly as written.
Search (#94)
Results are ordered by how likely each is to be a product page, so retailer listings come before videos, forum threads and buying guides. Nothing is removed from the results.
Migrations
Two, both safe to roll an image back over:
- 016 adds four nullable/defaulted columns to
products. - 017 relabels notification rows to the event each actually was. Each legacy type had exactly one producer, so the mapping is exact.
Running it
PRICESTALKER_TAG=v2.1.0-beta.2 docker stack deploy -c deploy/swarm-stack.yml pricestalker
# or track the rolling beta channel
PRICESTALKER_TAG=beta docker stack deploy -c deploy/swarm-stack.yml pricestalkerLeaving PRICESTALKER_TAG unset keeps you on stable (v2.0.0).