# Changelog ## [0.9.1](https://github.com/oldmoldycake/Snagr/compare/v0.9.0...v0.9.1) (2026-10-02) ### Bug Fixes * **frontend:** keep masthead tabs and hunt pill on one line ([4a8dbdf](https://github.com/oldmoldycake/Snagr/commit/4a8dbdf6b9f6c27c6d16b00ea1a051f8ba993ce1)) * **frontend:** keep masthead tabs and hunt pill on one line ([125bd3e](https://github.com/oldmoldycake/Snagr/commit/125bd3ed627edc475ec2c3224c1d3809badd8587)) ## [0.9.0](https://github.com/oldmoldycake/Snagr/compare/v0.8.0...v0.9.0) (2026-10-02) ### Features * send a test from the Add channel dialog before saving ([96fff97](https://github.com/oldmoldycake/Snagr/commit/96fff975d7f32c5a279382be564fff526aa627a5)) * **settings:** send a test from the Add channel dialog before saving ([60a800d](https://github.com/oldmoldycake/Snagr/commit/60a800d651d8341f4f8ff205bd38bf3354ff3ffe)) * **users:** let an admin change a user's role and issue a password-reset link ([a1fa458](https://github.com/oldmoldycake/Snagr/commit/a1fa45871999577a8b975ac9c7ace776adecd66f)) * **users:** let an admin change a user's role and issue a password-reset link ([b00852b](https://github.com/oldmoldycake/Snagr/commit/b00852b2433d73dbe023e0dc5e29cba17d7e1be9)) ### Bug Fixes * **activity:** label job tokens and pause countdown, and count every rejected candidate ([69e5a09](https://github.com/oldmoldycake/Snagr/commit/69e5a0937813239d64479971f0ea2a748381f0c0)) * **activity:** label job tokens and pause countdown, and count every rejected candidate ([575c02c](https://github.com/oldmoldycake/Snagr/commit/575c02c5a4d8212879502e9457ff63f2e06f2332)) * **backend:** deleting a user takes their items with them instead of refusing ([42f187e](https://github.com/oldmoldycake/Snagr/commit/42f187e173558bf84067329b13daafa525f8d5ba)) * **backend:** deleting a user takes their items with them instead of refusing ([ef37e57](https://github.com/oldmoldycake/Snagr/commit/ef37e57dac33dfe3badb3e71db54fbd6eabfa12d)) * **categories:** count only your items on category chips, the drawer and the ⋯ menu ([4a8a7b9](https://github.com/oldmoldycake/Snagr/commit/4a8a7b9bb133ddfe15cefec34869a1d46d9e2f6b)) * **categories:** count only your items on category chips, the drawer and the ⋯ menu ([e022948](https://github.com/oldmoldycake/Snagr/commit/e022948cd5c2fa66d12793501f3a1a27c7fd0d74)) * **frontend:** ask before a hunt press queues more than ten hunts ([ce7ba2f](https://github.com/oldmoldycake/Snagr/commit/ce7ba2ff0b4568c1d7cd78af243e47bf5627ff6f)) * **frontend:** ask before a hunt press queues more than ten hunts ([414986d](https://github.com/oldmoldycake/Snagr/commit/414986db829d4539eca10bdb6cd853f066d33025)) * **frontend:** ask before discarding a photo from the review queue ([f697628](https://github.com/oldmoldycake/Snagr/commit/f6976283f4bcbc01b6d175603161c4c221104279)) * **frontend:** ask before discarding a photo from the review queue ([4fbd4aa](https://github.com/oldmoldycake/Snagr/commit/4fbd4aab5806c43ded17c393f8f7f96a19a9e6f0)) * **frontend:** ask before leaving unsaved settings, and show thresholds in percent ([3b9246a](https://github.com/oldmoldycake/Snagr/commit/3b9246af6b98391ab7dd8dee3223e10eaa5c0245)) * **frontend:** ask before leaving unsaved settings, and show thresholds in percent ([58bf36a](https://github.com/oldmoldycake/Snagr/commit/58bf36a6e59abf159b09b84cc077ef5eadb12251)) * **frontend:** branded route error screen instead of the router's stack trace ([0c96b0d](https://github.com/oldmoldycake/Snagr/commit/0c96b0d6ff057c3dd6024403ff673ef066600714)) * **frontend:** branded route error screen instead of the router's stack trace ([08e8a82](https://github.com/oldmoldycake/Snagr/commit/08e8a8245b7765dac47b43ac98f10a9e55602b1b)) * **frontend:** call the background worker Snagr in the last two places that didn't ([eddf4ba](https://github.com/oldmoldycake/Snagr/commit/eddf4ba06ef9e98e4dfbaff84541cd10a9599e50)) * **frontend:** call the background worker Snagr in the last two places that didn't ([d1d6bab](https://github.com/oldmoldycake/Snagr/commit/d1d6babde0e3974f1940883feebfdaf5bfd49f28)) * **frontend:** confirm a new item with a toast that links to it ([720bd8f](https://github.com/oldmoldycake/Snagr/commit/720bd8f02a373fe4944b414ff61ddf7bec7dc8cc)) * **frontend:** confirm a new item with a toast that links to it ([721104b](https://github.com/oldmoldycake/Snagr/commit/721104b1fd342c3d06917d09fb41fa8a060edd08)) * **frontend:** confirm before deactivating a user, and say what it did ([a2f8bae](https://github.com/oldmoldycake/Snagr/commit/a2f8baee3fc2674e5c54bf0cae7ab523a6d073eb)) * **frontend:** confirm before deactivating a user, and say what it did ([a41baec](https://github.com/oldmoldycake/Snagr/commit/a41baec790042aa235fbeb293d5ed08c11b2ca51)) * **frontend:** confirm invite revokes and show the invite list loading ([cfac75b](https://github.com/oldmoldycake/Snagr/commit/cfac75b8b0b2b10f0b54c18b6529f13b5bd4b286)) * **frontend:** confirm invite revokes and show the invite list loading ([a597ef2](https://github.com/oldmoldycake/Snagr/commit/a597ef2bb3bd2dafbdaa6a0f2a4d59fcb7265c13)) * **frontend:** count Accept replicas as an unsaved item edit ([c904fd9](https://github.com/oldmoldycake/Snagr/commit/c904fd9bac8e2809e83d2a730d52769c07473317)) * **frontend:** count Accept replicas as an unsaved item edit ([6b1790b](https://github.com/oldmoldycake/Snagr/commit/6b1790b0d86774c779fbe9b2b918a5ca18754ca0)) * **frontend:** date the drop chip so it can't pass for the trend ([662cd3b](https://github.com/oldmoldycake/Snagr/commit/662cd3b5fa4ce39032a8729172926785253f227d)) * **frontend:** date the drop chip so it can't pass for the trend ([44536e7](https://github.com/oldmoldycake/Snagr/commit/44536e772aed52e8d99cb6a5031123569839e16a)) * **frontend:** explain the listing Track switch and keep its row in place ([b601aaf](https://github.com/oldmoldycake/Snagr/commit/b601aaff78d4cb07cf9596e75aa93f2ee4907384)) * **frontend:** explain the listing Track switch and keep its row in place ([0f41971](https://github.com/oldmoldycake/Snagr/commit/0f41971d54abd0170f0a77b1b2803d97172ef22f)) * **frontend:** explain the photo review queue and show its count on the tab ([0d98f0d](https://github.com/oldmoldycake/Snagr/commit/0d98f0dcf52a8036181e37f90f177e70948c648d)) * **frontend:** explain the photo review queue and show its count on the tab ([3319fc1](https://github.com/oldmoldycake/Snagr/commit/3319fc126756d6507f4ee9dcffa4467c2afbfea4)) * **frontend:** give job pages a way back and links to the item and its listings ([455f5cf](https://github.com/oldmoldycake/Snagr/commit/455f5cf2d153bb72102b59350b6a2008701c978e)) * **frontend:** give job pages a way back and links to the item and its listings ([44c45b9](https://github.com/oldmoldycake/Snagr/commit/44c45b9f87c312e56700f21b3dcc4ff4038d452c)) * **frontend:** give not-found pages a way back ([560405e](https://github.com/oldmoldycake/Snagr/commit/560405eed39c9e20483ed67d0fbb80c34d216443)) * **frontend:** give not-found pages a way back ([8b91f0b](https://github.com/oldmoldycake/Snagr/commit/8b91f0b10ceb2c139c3c62d7472d3eb1053eea3d)) * **frontend:** give price charts a text alternative, keyboard scan and touch scrolling ([a1cbd29](https://github.com/oldmoldycake/Snagr/commit/a1cbd299e5d252d703ed1dd60a8b543460723eff)) * **frontend:** give price charts a text alternative, keyboard scan and touch scrolling ([5071530](https://github.com/oldmoldycake/Snagr/commit/5071530a00fbe77055e9ccaf7fdf2b9f17992d7a)) * **frontend:** give small controls a 44px hit area on touch ([d711c4f](https://github.com/oldmoldycake/Snagr/commit/d711c4ffa465339c68e1f7d0b6261fbcb035bb28)) * **frontend:** give small controls a 44px hit area on touch ([521d0b5](https://github.com/oldmoldycake/Snagr/commit/521d0b5e1d849075ca245349dd37ddd8c1e1a2f6)) * **frontend:** hold Retry on a failed hunt while its site is paused ([423f1bd](https://github.com/oldmoldycake/Snagr/commit/423f1bd7d5f2d4a4b8b1b22bddf09994705d57b5)) * **frontend:** hold Retry on a failed hunt while its site is paused ([922dba1](https://github.com/oldmoldycake/Snagr/commit/922dba10a5f5154c4babd3f1585eb69ebc0c153f)) * **frontend:** keep a category's filters when you come back from an item ([442b301](https://github.com/oldmoldycake/Snagr/commit/442b301bec4e97e3207b8762fcecee9c50f36363)) * **frontend:** keep a category's filters when you come back from an item ([cdef55d](https://github.com/oldmoldycake/Snagr/commit/cdef55db1c7c9d4544342bfde5439707671e049f)) * **frontend:** keep a new API token or signing secret on screen until it's saved ([fccb2a0](https://github.com/oldmoldycake/Snagr/commit/fccb2a019a1c3374ddd89103557e56329429ed72)) * **frontend:** keep a new API token or signing secret on screen until it's saved ([fe48a2d](https://github.com/oldmoldycake/Snagr/commit/fe48a2d0074f51134c9dccf78df4d7f2340f3368)) * **frontend:** keep an item's last site ticked instead of re-picking every site ([9c3aa44](https://github.com/oldmoldycake/Snagr/commit/9c3aa44624ddc5431f948127385423eb84a2cf4b)) * **frontend:** keep an item's last site ticked instead of re-picking every site ([a128dfa](https://github.com/oldmoldycake/Snagr/commit/a128dfacf9d935755a5c9e000a63236b4f99b31c)) * **frontend:** keep how a price was read out of the way, and stop ticking out-of-stock checks ([7f4bb31](https://github.com/oldmoldycake/Snagr/commit/7f4bb31013825aead07f832528f62f738a8c5348)) * **frontend:** keep how a price was read out of the way, and stop ticking out-of-stock checks ([0d77ca5](https://github.com/oldmoldycake/Snagr/commit/0d77ca56b3634a8fcf5489920781ce314e2a7289)) * **frontend:** keep price-change labels off item names and chart the biggest rises ([8bd83b2](https://github.com/oldmoldycake/Snagr/commit/8bd83b2fb31d95b5ada6f5da8afebc5d3f9de74a)) * **frontend:** keep price-change labels off item names and chart the biggest rises ([e075cca](https://github.com/oldmoldycake/Snagr/commit/e075ccaf510f7c026d0daecc4df8ec1bd513c58b)) * **frontend:** keep the category menu open while a delete runs and show why it failed ([a42f0a2](https://github.com/oldmoldycake/Snagr/commit/a42f0a2b404bca3d88535ee21804e224bb22b0c9)) * **frontend:** keep the category menu open while a delete runs and show why it failed ([3d32b22](https://github.com/oldmoldycake/Snagr/commit/3d32b228f1d3b3f6d0a647b2b9d736d84e4ae0dc)) * **frontend:** keep the page bottom clear of Safari's toolbar ([fb9e865](https://github.com/oldmoldycake/Snagr/commit/fb9e865861167dcb870198da9686a1cce1fd0beb)) * **frontend:** keep the page bottom clear of Safari's toolbar ([9247282](https://github.com/oldmoldycake/Snagr/commit/9247282461185d09dc74abdcf47de0a4da0f5af3)) * **frontend:** keep the target labels off the chart lines and the range high ([30d44c0](https://github.com/oldmoldycake/Snagr/commit/30d44c0fdee5d6870f39184f0588d9a7bbbd5eb0)) * **frontend:** keep the target labels off the chart lines and the range high ([148a4fc](https://github.com/oldmoldycake/Snagr/commit/148a4fcf04cf668d55e938101fdbce7e33d2bd52)) * **frontend:** lead each listing row with its site and what sets it apart ([7aa0f2a](https://github.com/oldmoldycake/Snagr/commit/7aa0f2a6e58a21e2115938f7670ab13caace0f0f)) * **frontend:** lead each listing row with its site and what sets it apart ([0e2a1aa](https://github.com/oldmoldycake/Snagr/commit/0e2a1aa3340867b93706733fe328463c2c8d7c67)) * **frontend:** let a category with none of your items be opened and managed from its row ([945e6f4](https://github.com/oldmoldycake/Snagr/commit/945e6f4b3f71031b0775768888560d33497ffb7d)) * **frontend:** let a category with none of your items be opened and managed from its row ([50f1ec2](https://github.com/oldmoldycake/Snagr/commit/50f1ec286413af57b2c3c8867b0292e1091c71f1)) * **frontend:** let a queued hunt be cancelled and keep the activity sheet following ([49e56e0](https://github.com/oldmoldycake/Snagr/commit/49e56e0f1003f14bb5b4ed6122c2e57604e0c821)) * **frontend:** let a queued hunt be cancelled and keep the activity sheet following ([3a9177c](https://github.com/oldmoldycake/Snagr/commit/3a9177c8e34720f829a2683e0c52ff78730857b9)) * **frontend:** let Add site take a plain domain and name the site after it ([e116dad](https://github.com/oldmoldycake/Snagr/commit/e116dadcd4e2efb266c40d85b45668a33e625591)) * **frontend:** let Add site take a plain domain and name the site after it ([b335218](https://github.com/oldmoldycake/Snagr/commit/b33521846b9b828c14b50cebac7673e199349977)) * **frontend:** let an item's replicas setting be changed ([e83213c](https://github.com/oldmoldycake/Snagr/commit/e83213c92c6c1cceebd1313bf29eb18ae8f9dfc4)) * **frontend:** let an item's replicas setting be changed ([225fc24](https://github.com/oldmoldycake/Snagr/commit/225fc24cd9c0fa03b1dfa263691260cd5d75e41d)) * **frontend:** let Edit category rename a category that has no sites ([b80aecf](https://github.com/oldmoldycake/Snagr/commit/b80aecf56c2fee3286f324f5bf39c9b54a6e01a6)) * **frontend:** let site chips filter a category and category chips open it ([e793ba3](https://github.com/oldmoldycake/Snagr/commit/e793ba3949597940925d9acddf964f51701b0574)) * **frontend:** let site chips filter a category and category chips open it ([ad7a103](https://github.com/oldmoldycake/Snagr/commit/ad7a1037e81f77e00f482c6befb1bb550c32ee59)) * **frontend:** list upcoming jobs soonest first and fold the rest ([d2316cc](https://github.com/oldmoldycake/Snagr/commit/d2316cca8e73178c7183dc264dcf401a0408c3df)) * **frontend:** list upcoming jobs soonest first and fold the rest ([28aa002](https://github.com/oldmoldycake/Snagr/commit/28aa002dc4543fa536d4d71208815066e4154bda)) * **frontend:** look closely at a review photo beside its references ([29e8c58](https://github.com/oldmoldycake/Snagr/commit/29e8c5839307b205f43ab522e42207a932586219)) * **frontend:** look closely at a review photo beside its references ([8836c17](https://github.com/oldmoldycake/Snagr/commit/8836c17b405d15d45763f13804875fca4c99ddbb)) * **frontend:** make each watch-list item name a real link to its page ([beb47da](https://github.com/oldmoldycake/Snagr/commit/beb47da56510894ce9914b80bef204f10c17b321)) * **frontend:** make each watch-list item name a real link to its page ([0bcf26a](https://github.com/oldmoldycake/Snagr/commit/0bcf26ad4c2aea4b0e56a10fbe5a771480dad7ff)) * **frontend:** make field placeholders read as examples, not typed values ([ee47a68](https://github.com/oldmoldycake/Snagr/commit/ee47a6852e6dfe402f0f2a928b107f4ee9291be3)) * **frontend:** make field placeholders read as examples, not typed values ([2056b41](https://github.com/oldmoldycake/Snagr/commit/2056b414d814720ad38963509aa9dab7a7643249)) * **frontend:** make the dashboard's activity ticker readable on phones ([03245ed](https://github.com/oldmoldycake/Snagr/commit/03245ed8e65da931eaf45ba51c7fa0515531d0c3)) * **frontend:** make the dashboard's activity ticker readable on phones ([a870560](https://github.com/oldmoldycake/Snagr/commit/a87056032a4f5ccb8a0e105d241006f79502bb38)) * **frontend:** make the photo-review call an explicit real or fake choice ([c945cf2](https://github.com/oldmoldycake/Snagr/commit/c945cf2698ec0b402b2ade992d0e70eb08c68de9)) * **frontend:** make the photo-review call an explicit real or fake choice ([da2d273](https://github.com/oldmoldycake/Snagr/commit/da2d273b1854b7f613d7c01f66bae06c028ac6d9)) * **frontend:** mask webhook URLs in the channel list until revealed ([34c7d97](https://github.com/oldmoldycake/Snagr/commit/34c7d977980599073de221df809018ad22ee4469)) * **frontend:** mask webhook URLs in the channel list until revealed ([054c132](https://github.com/oldmoldycake/Snagr/commit/054c1326bb220893e7893336310a8e3dd249b8e7)) * **frontend:** name chart lines site first, like the listing rows ([2bbbc10](https://github.com/oldmoldycake/Snagr/commit/2bbbc10b0a66ffdb78983de23125d1422fd019f8)) * **frontend:** name chart lines site first, like the listing rows ([fed1a0f](https://github.com/oldmoldycake/Snagr/commit/fed1a0ff9c56dcefdf9a5f023a64b0bf821d5d2d)) * **frontend:** name the items at target in the dashboard headline ([d8dc8f2](https://github.com/oldmoldycake/Snagr/commit/d8dc8f2a06b68baa59dcddf90502369fa95ba2b0)) * **frontend:** name the items at target in the dashboard headline ([bad210a](https://github.com/oldmoldycake/Snagr/commit/bad210a2112d61830032fe0626fefe5694302666)) * **frontend:** number the agent setup steps and wrap the config ([f5e3cfc](https://github.com/oldmoldycake/Snagr/commit/f5e3cfc12b0558eea51c7874e57ef1fe2ae99bb0)) * **frontend:** number the agent setup steps and wrap the config ([8b6b701](https://github.com/oldmoldycake/Snagr/commit/8b6b701e4c089f341bb186d2d137cafbffaf8340)) * **frontend:** open Edit tracking with the tracking options expanded and in view ([7919de1](https://github.com/oldmoldycake/Snagr/commit/7919de11c564c847fdc8333f980656fa262a7b2c)) * **frontend:** open Edit tracking with the tracking options expanded and in view ([0a984ed](https://github.com/oldmoldycake/Snagr/commit/0a984ed71ae8e62296037a67a94bfc4f75a3899a)) * **frontend:** open tooltips on tap and focus, show hunt hints inline ([7005af5](https://github.com/oldmoldycake/Snagr/commit/7005af5269809cc98e6eb6a2cdfa32b87194cb36)) * **frontend:** open tooltips on tap and focus, show hunt hints inline ([83245eb](https://github.com/oldmoldycake/Snagr/commit/83245eb86bea5ffcf01ee1d62f3419e1b63a3561)) * **frontend:** print every date and time in the viewer's locale, one clock everywhere ([b8794b2](https://github.com/oldmoldycake/Snagr/commit/b8794b23d62417997540c31e4ada548781c711ef)) * **frontend:** put the settings tabs under the title and hold the page width ([5e23e75](https://github.com/oldmoldycake/Snagr/commit/5e23e7529452a504421cdcda672f7e36e80240e1)) * **frontend:** put the settings tabs under the title and hold the page width ([c5f1f89](https://github.com/oldmoldycake/Snagr/commit/c5f1f89324207df41a2c9d77c9f5d07c02fa98ad)) * **frontend:** raise secondary text and control borders to WCAG AA contrast ([8417d48](https://github.com/oldmoldycake/Snagr/commit/8417d48e108c68cc5797e4b475e498b51b19da59)) * **frontend:** raise secondary text and control borders to WCAG AA contrast ([bb2757f](https://github.com/oldmoldycake/Snagr/commit/bb2757ffa55311c2e350acf405e9d6ca608fd90b)) * **frontend:** raise text to a 12px floor and 14px body, sentence-case small labels ([f78e1d0](https://github.com/oldmoldycake/Snagr/commit/f78e1d08790c6000dbc8a890cc745d45f6f95011)) * **frontend:** raise text to a 12px floor and 14px body, sentence-case small labels ([85675c3](https://github.com/oldmoldycake/Snagr/commit/85675c3cd01b203ae4745d21170f1f676867a68b)) * **frontend:** read target prices as people type them and refuse zero in words ([0394a6a](https://github.com/oldmoldycake/Snagr/commit/0394a6ade42332154b7e753fa6497d3626a04cb9)) * **frontend:** read target prices as people type them and refuse zero in words ([0ab012e](https://github.com/oldmoldycake/Snagr/commit/0ab012e34009f37c9181f313fece43e059549a65)) * **frontend:** restore declarations lost in merges so main builds and tests ([06c711d](https://github.com/oldmoldycake/Snagr/commit/06c711d829db07d2c04ddd3ccd430c17dc163754)) * **frontend:** restore declarations lost in merges so main builds and tests ([2bf108c](https://github.com/oldmoldycake/Snagr/commit/2bf108c78e8564350060e76ced33308b0ec7453c)) * **frontend:** restore scroll position on Back and start new pages at the top ([c655c44](https://github.com/oldmoldycake/Snagr/commit/c655c44653b0e1a1e2a30261e1df13b901691a3d)) * **frontend:** restore scroll position on Back and start new pages at the top ([80001ae](https://github.com/oldmoldycake/Snagr/commit/80001aea67c118673fdd60525f47f334f000632d)) * **frontend:** restore SitesPage imports lost when [#223](https://github.com/oldmoldycake/Snagr/issues/223) and [#227](https://github.com/oldmoldycake/Snagr/issues/227) merged ([d8926f7](https://github.com/oldmoldycake/Snagr/commit/d8926f737b0cd1a1bcd090ca7415547509e21fbd)) * **frontend:** restore SitesPage imports lost when [#223](https://github.com/oldmoldycake/Snagr/issues/223) and [#227](https://github.com/oldmoldycake/Snagr/issues/227) merged ([da6f0b7](https://github.com/oldmoldycake/Snagr/commit/da6f0b7a0145daf9ec08befca7ccd6f561ef96f4)) * **frontend:** run the listing price rail low to high, like the charts ([3e9869d](https://github.com/oldmoldycake/Snagr/commit/3e9869dc614336f0706f8768890dbbca1b4f0892)) * **frontend:** run the listing price rail low to high, like the charts ([d1eb064](https://github.com/oldmoldycake/Snagr/commit/d1eb064065e98513c15ee1778b16c305915e1feb)) * **frontend:** save Edit category with Enter, and keep its edits from Escape ([a34f727](https://github.com/oldmoldycake/Snagr/commit/a34f727975998756d62f8c85331ef7f4f8f13385)) * **frontend:** save Edit category with Enter, and keep its edits from Escape ([457e972](https://github.com/oldmoldycake/Snagr/commit/457e97245bb026849a4685920c5af773b3c21f91)) * **frontend:** save the settings email on Enter and say why it was refused ([ff27557](https://github.com/oldmoldycake/Snagr/commit/ff27557abd9acdb6b8676f674fc7e80905cf46ac)) * **frontend:** save the settings email on Enter and say why it was refused ([da7c0cd](https://github.com/oldmoldycake/Snagr/commit/da7c0cd24c1de84c1b0841d0280683c165580412)) * **frontend:** say in the site dialog that sites are shared with everyone ([a2a28ab](https://github.com/oldmoldycake/Snagr/commit/a2a28ab68fe0186defcd9d05c976f30c8af6f728)) * **frontend:** say in the site dialog that sites are shared with everyone ([eda21c4](https://github.com/oldmoldycake/Snagr/commit/eda21c45a5db0307361d4f0274c4f1973de20b81)) * **frontend:** say so when typing criteria switches an item to Best match ([e030a4e](https://github.com/oldmoldycake/Snagr/commit/e030a4e462ff1758095a66dd3842a8f1b52627bb)) * **frontend:** say so when typing criteria switches an item to Best match ([7e04ea8](https://github.com/oldmoldycake/Snagr/commit/7e04ea87df9eb18137e13a43bb9e969eb6404283)) * **frontend:** say that Full API token access can add to the AI bill ([bd89642](https://github.com/oldmoldycake/Snagr/commit/bd8964227d03c66747f981c3a1e724204544b8a6)) * **frontend:** say that Full API token access can add to the AI bill ([4e254b9](https://github.com/oldmoldycake/Snagr/commit/4e254b9eee5e1bc4e8c875911aeb8dfd2115e0bd)) * **frontend:** say under Hunt for better what it swaps, and only if it finds better ([440bdab](https://github.com/oldmoldycake/Snagr/commit/440bdab10b1b0320d8f0388e78b74055efb35fcc)) * **frontend:** say under Hunt for better what it swaps, and only if it finds better ([7f631c5](https://github.com/oldmoldycake/Snagr/commit/7f631c524619d16234f97ce2752db0811c323dbf)) * **frontend:** say what an item loses without a target price ([11902cf](https://github.com/oldmoldycake/Snagr/commit/11902cfa104b63763aecdb49d8f42fba024bac79)) * **frontend:** say what an item loses without a target price ([8352ef2](https://github.com/oldmoldycake/Snagr/commit/8352ef256f53621cd3d2f947e013e1a3037ee9c5)) * **frontend:** say what Hunt now queued and count only hunts as hunts ([1759521](https://github.com/oldmoldycake/Snagr/commit/17595211c9febd1d5dbb75383d43b9233d28d369)) * **frontend:** say what Hunt now queued and count only hunts as hunts ([af387c1](https://github.com/oldmoldycake/Snagr/commit/af387c1ae02fdcc17bcc7ff66b45fbddfcd0e9a6)) * **frontend:** say when an invite couldn't be checked instead of calling it not valid ([4905c7a](https://github.com/oldmoldycake/Snagr/commit/4905c7a42e8de2019007802e1542da762270caf6)) * **frontend:** say when an invite couldn't be checked instead of calling it not valid ([2c68caf](https://github.com/oldmoldycake/Snagr/commit/2c68cafa9d8df85d067367169c0fe5b745cfa25f)) * **frontend:** say when live updates have stalled and offer a reload ([17e68ec](https://github.com/oldmoldycake/Snagr/commit/17e68ec480e2fa1930b1b0bef721c45c0b22e617)) * **frontend:** say when live updates have stalled and offer a reload ([71e12ce](https://github.com/oldmoldycake/Snagr/commit/71e12ce4b311a60fb0c3e37aacbfa18bfaa63b3d)) * **frontend:** say when prices may be stale and keep the lists current ([d606b31](https://github.com/oldmoldycake/Snagr/commit/d606b3158873d3239f77b70a0b97c1daeb1c30c3)) * **frontend:** say when prices may be stale and keep the lists current ([93afbce](https://github.com/oldmoldycake/Snagr/commit/93afbce21ced9e331d82f517ca21f7d9954590f9)) * **frontend:** say why queued work hasn't started instead of calling it idle ([e26329d](https://github.com/oldmoldycake/Snagr/commit/e26329d55cbc2a3c939eeb0acbce05bcdb3df08f)) * **frontend:** say why queued work hasn't started instead of calling it idle ([c8897af](https://github.com/oldmoldycake/Snagr/commit/c8897afad4b34405c0bba3bf0cd665d4c765c349)) * **frontend:** search from phones, and keep the search box in step with ?search ([b66f728](https://github.com/oldmoldycake/Snagr/commit/b66f7285979b87bb899a1272d476731945a4d9ed)) * **frontend:** search from phones, and keep the search box in step with ?search ([eefc562](https://github.com/oldmoldycake/Snagr/commit/eefc5625a0b7433a2987b07a4e819a60e492b2c1)) * **frontend:** send a visitor whose session expired to sign in ([c8ec889](https://github.com/oldmoldycake/Snagr/commit/c8ec889b839fc31a7b8c97749290ffd7fe5fd2bf)) * **frontend:** send a visitor whose session expired to sign in ([714b0a0](https://github.com/oldmoldycake/Snagr/commit/714b0a065def5f75a3a9dbf3d103b13b46e9c7a7)) * **frontend:** show a failed auto-reference revoke inside its dialog ([47bb2c8](https://github.com/oldmoldycake/Snagr/commit/47bb2c8f139b8a37c9a034ffcc9d4051a6959a31)) * **frontend:** show a failed token or reference revoke inside its dialog ([e7ff3bb](https://github.com/oldmoldycake/Snagr/commit/e7ff3bbb51b3a8a947c861b743532ee30c3c386f)) * **frontend:** show a paused site as paused on the Sites page ([98ee177](https://github.com/oldmoldycake/Snagr/commit/98ee1774d7a913b6a92791f356997afeada50d5c)) * **frontend:** show a paused site as paused on the Sites page ([4276506](https://github.com/oldmoldycake/Snagr/commit/42765066b269e61c2d83bbd9325d3546c5cdc8dd)) * **frontend:** show a visible focus ring on inputs, textareas and selects ([040f000](https://github.com/oldmoldycake/Snagr/commit/040f000436a1256520b7f80484aea301aa4be63c)) * **frontend:** show a visible focus ring on inputs, textareas and selects ([e6270a8](https://github.com/oldmoldycake/Snagr/commit/e6270a8e55a765d8c02f70d135ec522d9e7c9ae5)) * **frontend:** show dates and times in the viewer's locale, with one clock everywhere ([1af43cb](https://github.com/oldmoldycake/Snagr/commit/1af43cb29c6465b71824e90ef035758f8d790254)) * **frontend:** show failed revokes inside their confirm dialogs ([e4f1fa6](https://github.com/oldmoldycake/Snagr/commit/e4f1fa67af01e6aa9339681debe862c8549df24b)) * **frontend:** show one Add photo button on an empty reference photos card ([5222086](https://github.com/oldmoldycake/Snagr/commit/52220861910f0a9d3bf522af95f6a9b7bd2ed836)) * **frontend:** show one Add photo button on an empty reference photos card ([9ad3f5f](https://github.com/oldmoldycake/Snagr/commit/9ad3f5f2555f4fefbfc11d3faa5f4eb8d7f95663)) * **frontend:** show the default check interval as picked in "Check every" ([d924983](https://github.com/oldmoldycake/Snagr/commit/d924983af056c047baa6c31ac906393a2600589d)) * **frontend:** show the default check interval as picked in "Check every" ([3d99963](https://github.com/oldmoldycake/Snagr/commit/3d9996361b8d8fabc49ddde621bf5e137d47f97e)) * **frontend:** show whole site names on the dashboard ([710740e](https://github.com/oldmoldycake/Snagr/commit/710740eefe1ee1cbdf54b86c64f3e88259471878)) * **frontend:** show whole site names on the dashboard ([320626b](https://github.com/oldmoldycake/Snagr/commit/320626bf256f4d8d5d83d72f166529f091460d9e)) * **frontend:** skip the removed item's page on Back after removing it ([2897a70](https://github.com/oldmoldycake/Snagr/commit/2897a7086b8c4feedfe7d5036d7b05d87aa34565)) * **frontend:** skip the removed item's page on Back after removing it ([a0655cc](https://github.com/oldmoldycake/Snagr/commit/a0655cc53c583fbaa06134675858868eb7b12308)) * **frontend:** split the item's status into a price-check line and a tracking line ([26b6f2b](https://github.com/oldmoldycake/Snagr/commit/26b6f2bdd2ea982b3f26cc60b032671ca07a7ab5)) * **frontend:** split the item's status into a price-check line and a tracking line ([ed9e0db](https://github.com/oldmoldycake/Snagr/commit/ed9e0dbbde396bb84d275727cdf4ef029dd724e7)) * **frontend:** stack the drop chip under the item name on phones ([3dc5786](https://github.com/oldmoldycake/Snagr/commit/3dc5786ba00880485f3e30051baa0b7ce22b7ad4)) * **frontend:** stack the drop chip under the item name on phones ([8b8320f](https://github.com/oldmoldycake/Snagr/commit/8b8320f09904ac538e859eedeca8c56a62bfa5b6)) * **frontend:** state the password rule and let a new password be shown ([1215a6f](https://github.com/oldmoldycake/Snagr/commit/1215a6fbdbb1de79fddbb3a82b2d7c6a91a2a570)) * **frontend:** state the password rule and let a new password be shown ([f855e0a](https://github.com/oldmoldycake/Snagr/commit/f855e0afcca58a79f325d14cf6c5ed3c510b4a61)) * **frontend:** step back from an emptied review page and start the photo upload fresh ([2ce47bb](https://github.com/oldmoldycake/Snagr/commit/2ce47bb292c59ef27b3b5b23436a390c2c2e32c1)) * **frontend:** step back from an emptied review page and start the photo upload fresh ([83c3576](https://github.com/oldmoldycake/Snagr/commit/83c35760632e536e4997a872ce4c39814e879ced)) * **frontend:** stop "Track up to" jumping while you type ([d069d03](https://github.com/oldmoldycake/Snagr/commit/d069d0390c466799ed42d513fbbb20eac369a1d5)) * **frontend:** stop "Track up to" jumping while you type ([339966e](https://github.com/oldmoldycake/Snagr/commit/339966e9750eeff76010cdd63adbed6a0a61d1c2)) * **frontend:** stop a category rename from unlinking its sites, and reopen Edit category fresh ([27a1faf](https://github.com/oldmoldycake/Snagr/commit/27a1faf1d98f015ca6fd5aa0af98abd4070caac1)) * **frontend:** stop a category rename from unlinking its sites, and reopen Edit category fresh ([dabd9d9](https://github.com/oldmoldycake/Snagr/commit/dabd9d9c54042a35ecadf5495ab987d2f3440bac)) * **frontend:** stop carrying status by color alone ([e8469da](https://github.com/oldmoldycake/Snagr/commit/e8469daebc4d611bae3811f8553ea273c6aa03a3)) * **frontend:** stop carrying status by color alone ([00883ea](https://github.com/oldmoldycake/Snagr/commit/00883ea1ccaa292c290c21029bc315769f2ab346)) * **frontend:** stop flagging panels busy on background refreshes ([6bd43af](https://github.com/oldmoldycake/Snagr/commit/6bd43af1eb97ed245f7341bbfd93d0b8dc7e5b59)) * **frontend:** stop flagging panels busy on background refreshes ([1adb687](https://github.com/oldmoldycake/Snagr/commit/1adb68701115aec7de08f6c3561057228c40b5c8)) * **frontend:** stop iOS Safari zooming into focused text fields ([6a3e06d](https://github.com/oldmoldycake/Snagr/commit/6a3e06d7fb6b31ac62fe9f644c28c95ce7c7ee6e)) * **frontend:** stop iOS Safari zooming into focused text fields ([7db91f1](https://github.com/oldmoldycake/Snagr/commit/7db91f143280a0117413534fc31203ce6b3568e8)) * **frontend:** stop the dashboard claiming no prices when items only lack a target ([3b3e02e](https://github.com/oldmoldycake/Snagr/commit/3b3e02eb4085d095f7d660bc736efe16ed285762)) * **frontend:** stop the dashboard claiming no prices when items only lack a target ([7b94912](https://github.com/oldmoldycake/Snagr/commit/7b94912cfe2f6b410c96a6c48e56242ffbd9e573)) * **frontend:** stop the dashboard strip reading "Idle" beside a due check ([779cad1](https://github.com/oldmoldycake/Snagr/commit/779cad1bc30208000aa726c75088a2ab8cf48d3b)) * **frontend:** stop the dashboard strip reading "Idle" beside a due check ([67f1cce](https://github.com/oldmoldycake/Snagr/commit/67f1ccedabbe68a57e7e186aba014391343f51cc)) * **frontend:** stop treating a server outage as being signed out ([326cfb2](https://github.com/oldmoldycake/Snagr/commit/326cfb2f3229632d5e179822f925af9a50158654)) * **frontend:** stop treating a server outage as being signed out ([8c67d61](https://github.com/oldmoldycake/Snagr/commit/8c67d61833201746a7047dc03180ad813edfbba6)) * **frontend:** swap internal jargon for plain words and add a glossary ([1770ef1](https://github.com/oldmoldycake/Snagr/commit/1770ef1dda7d96139c4b6275fe67a6c3ab9a64b2)) * **frontend:** swipe dialogs closed by their grab handle on phones ([0dbf9e4](https://github.com/oldmoldycake/Snagr/commit/0dbf9e49dfb198a991dcfce587d067e70541f51c)) * **frontend:** swipe dialogs closed by their grab handle on phones ([0d2120a](https://github.com/oldmoldycake/Snagr/commit/0d2120ae0c21d11c4c1bb6419176e45df24209d6)) * **frontend:** title each tab after its page and focus the heading on navigation ([ec4048a](https://github.com/oldmoldycake/Snagr/commit/ec4048af47969968ecc498f8ee5d280da33eeb7c)) * **frontend:** title each tab after its page and focus the heading on navigation ([4977e6b](https://github.com/oldmoldycake/Snagr/commit/4977e6b53cc5838ff8ebaeb63589eae0a180c1af)) * **frontend:** walk new users to alert channels and warn while alerts go nowhere ([d779628](https://github.com/oldmoldycake/Snagr/commit/d779628e6e2cc879bac0d03217fc643af39da176)) * **frontend:** walk new users to alert channels and warn while alerts go nowhere ([91f3ecb](https://github.com/oldmoldycake/Snagr/commit/91f3ecb895b0fd53a3a0b9dbc3781b50417c8790)) * keep half-filled item dialogs open and show save errors beside their field ([d9ccdc7](https://github.com/oldmoldycake/Snagr/commit/d9ccdc7a85cf92bd06913ed068dc897cdd1f850e)) * keep half-filled item dialogs open and show save errors beside their field ([698f21c](https://github.com/oldmoldycake/Snagr/commit/698f21cbb56d381cd1bc1abf8c43deea0ce1f225)) * return to the deep link after signing in with SSO ([89cdb1c](https://github.com/oldmoldycake/Snagr/commit/89cdb1ce2993627012dd2cda5f6a919d16604c11)) * return to the deep link after signing in with SSO ([4d3270d](https://github.com/oldmoldycake/Snagr/commit/4d3270dc8132665f1f54dcc6b8f8be4d95792ec1)) * say in Edit item whether a rename changes the name for anyone else ([0fb4947](https://github.com/oldmoldycake/Snagr/commit/0fb494723cf8b1ba214d0fae1f08a8a60f54a2c4)) * say in Edit item whether a rename changes the name for anyone else ([f8fd285](https://github.com/oldmoldycake/Snagr/commit/f8fd28557035d6ea8e035a5f3574113a5f8d4ab4)) * say why a job failed in plain words and keep the raw error behind Details ([82d717e](https://github.com/oldmoldycake/Snagr/commit/82d717e0c18643a5a8d72beb762a9bd36cd9c0a1)) * say why a job failed in plain words and keep the raw error behind Details ([c3082b4](https://github.com/oldmoldycake/Snagr/commit/c3082b4676a8cf1b2e515b43d51ad147c7015e17)) * swap internal jargon for plain words and add a glossary ([b056fa1](https://github.com/oldmoldycake/Snagr/commit/b056fa15d66b0bc376b94f81565a72e9b7e5d45f)) ## [0.8.0](https://github.com/oldmoldycake/Snagr/compare/v0.7.0...v0.8.0) (2026-10-01) ### Features * **frontend:** give the tracking site chips the segmented plate look ([6cbccac](https://github.com/oldmoldycake/Snagr/commit/6cbccac81e34f4bac36a6e7ac1d1534cfecc5f63)) * **frontend:** track the active category link with one sliding lume bar ([439bc5b](https://github.com/oldmoldycake/Snagr/commit/439bc5b15d1ead116c0634265e5d1aaa1bcd9305)) * **frontend:** track the active category link with one sliding lume bar ([44ab249](https://github.com/oldmoldycake/Snagr/commit/44ab249688f34abb801d335f093bf5b3cd699a4b)) * **frontend:** track the checked segment with one sliding plate ([c477bfc](https://github.com/oldmoldycake/Snagr/commit/c477bfc695d4fc6f377ca495614aae1c1150a184)) * **frontend:** track the checked segment with one sliding plate ([a541936](https://github.com/oldmoldycake/Snagr/commit/a541936f987a4276a370cb38c2bad4d262108aab)) ### Bug Fixes * accept reference photos up to 10 MB through nginx ([2a0b0a2](https://github.com/oldmoldycake/Snagr/commit/2a0b0a2a7489001632eea91ad2ae61796f2e998d)) * **agent:** anchor the listing-URL guard on the site's own host ([6b436e9](https://github.com/oldmoldycake/Snagr/commit/6b436e988e21581a1f6b0ac8c86f9ba769114f15)) * **agent:** anchor the listing-URL guard on the site's own host ([badc589](https://github.com/oldmoldycake/Snagr/commit/badc58965d781bd657e403d0482503edaa034894)) * **agent:** count the tokens a ground job's model calls spend ([8b5248b](https://github.com/oldmoldycake/Snagr/commit/8b5248b13b15fdac26e6ea07863d81261579e5ef)) * **agent:** count the tokens a ground job's model calls spend ([f06875d](https://github.com/oldmoldycake/Snagr/commit/f06875d2b5daf0b26b5c214bfe0264ad09684210)) * **agent:** keep worker pools alive through database errors and exit non-zero on failure ([559f453](https://github.com/oldmoldycake/Snagr/commit/559f453ab6ffe3b9e624a5e0aba4a1c285f90e7f)) * **agent:** keep worker pools alive through database errors and exit non-zero on failure ([3b3a263](https://github.com/oldmoldycake/Snagr/commit/3b3a263925941b825632f68a081549cda4ada9fe)) * **agent:** let SITE_BREAKER_ERRORS=0 switch the breaker off and stop a reaped worker ending a job it lost ([940a5bc](https://github.com/oldmoldycake/Snagr/commit/940a5bc716cac8ae3743b9153de7f2cc36b6bf82)) * **agent:** let SITE_BREAKER_ERRORS=0 switch the breaker off and stop a reaped worker ending a job it lost ([b5d43bb](https://github.com/oldmoldycake/Snagr/commit/b5d43bb6a903365fedb2f8e8c0d8ea26c558f1ad)) * **agent:** parse grounding prices like page prices and refuse non-positive ones ([e6a3997](https://github.com/oldmoldycake/Snagr/commit/e6a39971b574a089ea3f253e605c4a44dbbb8bdf)) * **agent:** parse grounding prices like page prices and refuse non-positive ones ([6b57c93](https://github.com/oldmoldycake/Snagr/commit/6b57c93f56b8b791ee7be34133e9fd7e247d9a3d)) * **agent:** read a lowercase currency code ahead of a minus sign ([c6b1627](https://github.com/oldmoldycake/Snagr/commit/c6b1627c7153ef3dfe1500199a979e2817af1eb4)) * **agent:** read space- and apostrophe-grouped prices and refuse negatives ([522fe6f](https://github.com/oldmoldycake/Snagr/commit/522fe6ffad9ee4febf6998e6cb43f57c27c4324c)) * **agent:** read space- and apostrophe-grouped prices and refuse negatives ([e512f50](https://github.com/oldmoldycake/Snagr/commit/e512f50bf921137c3e013f3628d6cc76bb38b1eb)) * **agent:** refuse a digit group that runs into more digits ([948f22f](https://github.com/oldmoldycake/Snagr/commit/948f22f873cf4d74c966b3fca37b90f4ec000a3d)) * **agent:** stop a SearXNG suspension from blocking hunts for 15 minutes ([f56c47a](https://github.com/oldmoldycake/Snagr/commit/f56c47a62c886d776267ac0e457544521d28a1e1)) * **agent:** stop a SearXNG suspension from blocking hunts for 15 minutes ([32cc4ab](https://github.com/oldmoldycake/Snagr/commit/32cc4ab3374fe1c60a730c0bdb5c31ed4e6df168)) * **agent:** stop blaming sites for the hunter's own failures ([f7c2466](https://github.com/oldmoldycake/Snagr/commit/f7c2466662b26608d26104c5eee11eeb19f9333a)) * **agent:** stop blaming sites for the hunter's own failures ([2839aaa](https://github.com/oldmoldycake/Snagr/commit/2839aaa6e0a8d84ce8ac8f0e81fb4818649f17f7)) * **agent:** stop new items' hunts from starving the rest of the queue ([465448a](https://github.com/oldmoldycake/Snagr/commit/465448ae88a3eb6e6f21b0a34ab237eb43a5caf7)) * **backend:** answer a lost race for a category or site name with 422 duplicate ([3465edc](https://github.com/oldmoldycake/Snagr/commit/3465edce4f3b4fd5bb56336a8491c5524bd97ab6)) * **backend:** answer bad input with 422 or 409, not db_unavailable or a 500 ([33d62ec](https://github.com/oldmoldycake/Snagr/commit/33d62ecdcd0d465487a96ddf3ca94a06cdfdae00)) * **backend:** answer bad input with 422 or 409, not db_unavailable or a 500 ([4738880](https://github.com/oldmoldycake/Snagr/commit/47388805bf83a39255b2dd172b74926a677520e3)) * **backend:** close SSE streams whose viewer is deactivated, demoted or signed out ([b96bb0d](https://github.com/oldmoldycake/Snagr/commit/b96bb0dd6a7faade3e75029068979f02f7ec5ca8)) * **backend:** close the sign-up races on invites and the first admin ([6d75728](https://github.com/oldmoldycake/Snagr/commit/6d7572888dc4a8e52a449cf3a3e67e7381fcce91)) * **backend:** close the sign-up races on invites and the first admin ([9217886](https://github.com/oldmoldycake/Snagr/commit/921788609fafeede406e6de44f4133a68ce43b85)) * **backend:** delete a site that categories, watches or listings still point at ([432d9ac](https://github.com/oldmoldycake/Snagr/commit/432d9ac7ddf3c757e86254bd99886d4562f76796)) * **backend:** delete market prices with their category's items ([cb93061](https://github.com/oldmoldycake/Snagr/commit/cb930613a513a06a8323dab76fed225f2be4e0b2)) * **backend:** delete market prices with their category's items ([906c50d](https://github.com/oldmoldycake/Snagr/commit/906c50d4332d37915660f6213b6e9f34d67b23f4)) * **backend:** end other sessions on password change and detect refresh-token reuse ([106bd0f](https://github.com/oldmoldycake/Snagr/commit/106bd0f41e77b5c0f1f8becd84b75a8763e5218a)) * **backend:** end other sessions on password change and detect refresh-token reuse ([a376eb9](https://github.com/oldmoldycake/Snagr/commit/a376eb9b62a85cf3c9ea801dac8d7b2012ec10f5)) * **backend:** enforce password length, limit sign-in attempts, hash off the event loop ([42b84c9](https://github.com/oldmoldycake/Snagr/commit/42b84c92a6f3a3d45247c251ab4b7b9ed4a40201)) * **backend:** enforce password length, limit sign-in attempts, hash off the event loop ([c484a3a](https://github.com/oldmoldycake/Snagr/commit/c484a3a21bb9ec96f70b6af5993b7e3b357e0668)) * **backend:** escape search wildcards, keep the last admin, and gate MCP tools by scope ([f55a9bc](https://github.com/oldmoldycake/Snagr/commit/f55a9bc87cadde894c981ed897323dff2d0c5484)) * **backend:** hold category and site names to one rule on create and rename, and never make an empty slug ([95b46d4](https://github.com/oldmoldycake/Snagr/commit/95b46d4c9573d352d96ddbe81016468df41eee7e)) * **backend:** hold category and site names to one rule, and let a site with listings be deleted ([6e55e94](https://github.com/oldmoldycake/Snagr/commit/6e55e94023f96510aeb003158a51755873bb28dc)) * **backend:** keep live updates and notifications alive through a DB drop ([c49c5a9](https://github.com/oldmoldycake/Snagr/commit/c49c5a9e789401130a97bbae234da9806e3c49a2)) * **backend:** keep live updates and notifications alive through a DB drop ([f8b3819](https://github.com/oldmoldycake/Snagr/commit/f8b3819b7f12f1bbe14e7f23348d169f6577b0f0)) * **backend:** keep notification channels off the internal network ([ddb152b](https://github.com/oldmoldycake/Snagr/commit/ddb152bf5e2ab318679db5913da61ae98304820b)) * **backend:** keep notification channels off the internal network ([7266ffb](https://github.com/oldmoldycake/Snagr/commit/7266ffb82a99c0a3f524f42d6f78324a54ab5af2)) * **backend:** keep the instance's last admin and make a first SSO user admin ([847f233](https://github.com/oldmoldycake/Snagr/commit/847f23351cdbe8d87cee8fb6f4e4e0d7c6a634e1)) * **backend:** keep the latest check when thinning price history ([5b47981](https://github.com/oldmoldycake/Snagr/commit/5b47981f23286b8e54c610981eb007864af940e5)) * **backend:** keep the latest check when thinning price history ([d42bec3](https://github.com/oldmoldycake/Snagr/commit/d42bec30584de8d14772352c117fc0a762d4622e)) * **backend:** leave undescribable job events out of the events backfill ([6fe4704](https://github.com/oldmoldycake/Snagr/commit/6fe47042e4d2d54def5d47781686c7ec793bc6af)) * **backend:** let editing an item clear its target and criteria and change its sites ([a3d40b3](https://github.com/oldmoldycake/Snagr/commit/a3d40b3931f9b463cd443895210504dc58881aee)) * **backend:** lock the owner's row before counting channels ([7143867](https://github.com/oldmoldycake/Snagr/commit/71438670b4dd0f4d8b3e91d491e96232d7e9eeca)) * **backend:** make category and site writes admin-only ([593e163](https://github.com/oldmoldycake/Snagr/commit/593e163a1145e92e5e173c3ee3f1c56ad3d7fe99)) * **backend:** match email addresses case-insensitively ([a6b9899](https://github.com/oldmoldycake/Snagr/commit/a6b989973d88b9702cccdc4ce0b0cedaf4d9aaa7)) * **backend:** match email addresses case-insensitively ([339bb78](https://github.com/oldmoldycake/Snagr/commit/339bb7800069dfb15724a1c7661c8e37205d55d4)) * **backend:** match item search wildcards literally ([76fa96e](https://github.com/oldmoldycake/Snagr/commit/76fa96e86c47b293c93de91abcef0fb6a67b41c4)) * **backend:** percent-encode the listing URL in ntfy's Click header ([845064d](https://github.com/oldmoldycake/Snagr/commit/845064d7af486fcea3365bcfb99e6f9da437f1dd)) * **backend:** percent-encode the listing URL in ntfy's Click header ([c449e01](https://github.com/oldmoldycake/Snagr/commit/c449e011724883e23891d29b06a974210371ecef)) * **backend:** refuse target prices that are not an amount in cents ([f2efdc3](https://github.com/oldmoldycake/Snagr/commit/f2efdc3df34e00d7c425f0bf5f70f1e4baa70a0a)) * **backend:** refuse to start on a placeholder or short JWT_SECRET ([bd6325e](https://github.com/oldmoldycake/Snagr/commit/bd6325ea7be522d5c26da6f763d691b757df100f)) * **backend:** refuse to start on a placeholder or short JWT_SECRET ([e908091](https://github.com/oldmoldycake/Snagr/commit/e9080912ac9ed3f74388ea63f902ee6d1d5ad38f)) * **backend:** send notifications concurrently, capped per host and per user ([5792a2e](https://github.com/oldmoldycake/Snagr/commit/5792a2e1d07717ec52d802eabf2b53e56eabd15b)) * **backend:** send notifications concurrently, capped per host and per user ([64b0435](https://github.com/oldmoldycake/Snagr/commit/64b0435b07fff9f0ebe3c458fc7447c57e163c13)) * **backend:** stop a self-chosen email capturing someone else's first SSO login ([62fcc9e](https://github.com/oldmoldycake/Snagr/commit/62fcc9e83c26ab2cd9d189f122c7b3d40b1e47ad)) * **backend:** stop a self-chosen email capturing someone else's first SSO login ([ced43aa](https://github.com/oldmoldycake/Snagr/commit/ced43aad39a1211fd9428581dbe058f5618d680b)) * **backend:** stop one watcher's rename changing a shared item, and keep item names unique ([9617d39](https://github.com/oldmoldycake/Snagr/commit/9617d39dbff331ffd09b3e9cf39562b3a40ca3fe)) * **backend:** stop one watcher's rename changing a shared item, and keep item names unique ([d698fd5](https://github.com/oldmoldycake/Snagr/commit/d698fd53b5b67130c9693914a25a9dfd131d7c0c)) * **backend:** take the next free slug when a concurrent create takes this one ([8895483](https://github.com/oldmoldycake/Snagr/commit/88954832941b5ee0e8ce51f25ef33ba1edc9b0c9)) * **deps:** require sqlalchemy's asyncio extra in agent and backend ([a4fb8a8](https://github.com/oldmoldycake/Snagr/commit/a4fb8a8497e3661c030adfd514582a0d3eee5682)) * **deps:** require sqlalchemy's asyncio extra in agent and backend ([494633d](https://github.com/oldmoldycake/Snagr/commit/494633dd0ff8dce546476885412c170842a1d978)) * **frontend:** allow 10 MB reference uploads through nginx ([245fa75](https://github.com/oldmoldycake/Snagr/commit/245fa7568f742de116aebce91fc7271b35cb7c8f)) * **frontend:** copy buttons fall back to selection on plain HTTP ([9414a72](https://github.com/oldmoldycake/Snagr/commit/9414a72615db2427a89dd4275d0b5627c346edc8)) * **frontend:** copy buttons fall back to selection on plain HTTP ([3fad269](https://github.com/oldmoldycake/Snagr/commit/3fad269800d6099810a9057912454be7f1dcee57)) * **frontend:** correct five small copy bugs ([18ef947](https://github.com/oldmoldycake/Snagr/commit/18ef947ea762124732f61d80a6dc786d6d8a7c80)) * **frontend:** count a hunt as live only in its own item's category ([e98bbd1](https://github.com/oldmoldycake/Snagr/commit/e98bbd1b4fce577a62544c72dd0669bde0b72a01)) * **frontend:** count a hunt as live only in its own item's category ([2f0083a](https://github.com/oldmoldycake/Snagr/commit/2f0083acb08bd501eb94d414143d72c37a32c462)) * **frontend:** drop a hunt's held log once it stops running ([c64ab06](https://github.com/oldmoldycake/Snagr/commit/c64ab06621b760f9924503b30189ce5da5a2ec68)) * **frontend:** drop a hunt's held log once it stops running ([22250b3](https://github.com/oldmoldycake/Snagr/commit/22250b356930e60f2d630b203867aa46a1b8345a)) * **frontend:** encode the invite token in its API paths ([8b446e7](https://github.com/oldmoldycake/Snagr/commit/8b446e7eef6f75dd72907d51302a3f8334362bf5)) * **frontend:** encode the invite token in its API paths ([feef8d1](https://github.com/oldmoldycake/Snagr/commit/feef8d1af786ae0a0494dee99f43d023a3ea98dd)) * **frontend:** keep the price chart and rulers usable with a very large target ([cdb819d](https://github.com/oldmoldycake/Snagr/commit/cdb819d226ee94ff080c3c6252f07a5d15bf8143)) * **frontend:** keep the price chart's ruler to a handful of ticks at any span ([1cdf382](https://github.com/oldmoldycake/Snagr/commit/1cdf382a4541e897fc8d808d20145a51d31ed1a5)) * **frontend:** keep the price rulers' target label off its neighbours ([c36de27](https://github.com/oldmoldycake/Snagr/commit/c36de27dfa33cc036e667d0d43a98e2124213f27)) * **frontend:** label a price chart's large y axis compactly so it isn't clipped ([5c65c83](https://github.com/oldmoldycake/Snagr/commit/5c65c837f62a111263984b705c4b21024a23c3c8)) * **frontend:** let the price history header wrap on phones ([d279a5a](https://github.com/oldmoldycake/Snagr/commit/d279a5a0cf001198714a745fed2fd99ec525fa46)) * **frontend:** load every page of items on the dashboard and category pages ([3a31844](https://github.com/oldmoldycake/Snagr/commit/3a31844b1cb5852568eac72473f235d3451c883f)) * **frontend:** load every page of items on the dashboard and category pages ([d9760ff](https://github.com/oldmoldycake/Snagr/commit/d9760ff41e5ecd9c2f9cfb5a3569ec259dbf8cb6)) * **frontend:** refresh dependent queries after renames, deletes and listing toggles ([3aac561](https://github.com/oldmoldycake/Snagr/commit/3aac561221c2e30b3c477f6e98be9efd42873eee)) * **frontend:** refresh stale queries after renames, deletes and listing toggles ([610706c](https://github.com/oldmoldycake/Snagr/commit/610706c96b1cc6b8b3e9ebcacf72ffdf41a24b0f)) * **frontend:** refresh the dashboard after category and site deletes, jobs after listing toggles ([36fd233](https://github.com/oldmoldycake/Snagr/commit/36fd233912edcb38a73b3f684fc8b9b4eefff00f)) * **frontend:** refresh the session on a 401 from /api/auth/me ([94f20f0](https://github.com/oldmoldycake/Snagr/commit/94f20f0a2bcee8ee28e4ca59b99c0386746fb361)) * **frontend:** refresh the session on a 401 from /api/auth/me ([5a8c134](https://github.com/oldmoldycake/Snagr/commit/5a8c1349980a294d46d5fa06c0f72e7ed1558d6c)) * **frontend:** reopen the live feed after the browser gives up on it ([12296ab](https://github.com/oldmoldycake/Snagr/commit/12296ab74fb1c75a2ec708a013f301e8fb5abbf2)) * **frontend:** reopen the live feed after the browser gives up on it ([e82fde6](https://github.com/oldmoldycake/Snagr/commit/e82fde64ad027cd6dcda86dec3fe7e88577ef069)) * **frontend:** reset category page filters when the category changes ([bb199be](https://github.com/oldmoldycake/Snagr/commit/bb199beec505ee992501803e33435c70c65a6021)) * **frontend:** reset category page filters when the category changes ([63b786c](https://github.com/oldmoldycake/Snagr/commit/63b786c8f15fec282d51e1b6e715a8069ce91aef)) * **frontend:** return to the deep link after signing in ([d8b741d](https://github.com/oldmoldycake/Snagr/commit/d8b741de9aad704ab51a649d7629b975f7e798d8)) * **frontend:** return to the deep link after signing in ([def3a53](https://github.com/oldmoldycake/Snagr/commit/def3a532d37c7a84e71ba7add0b363f4e0fe67b5)) * **frontend:** say when a save fails, and show a failed chart as an error ([20c0997](https://github.com/oldmoldycake/Snagr/commit/20c099779bf7a7f41c57244878acbe914f744d23)) * **frontend:** say when a save fails, and show a failed chart as an error ([3f8ba0d](https://github.com/oldmoldycake/Snagr/commit/3f8ba0db799261e456556c31c982920042343e7a)) * **frontend:** show failed loads as errors with Retry, not empty or not-found states ([53ac6c5](https://github.com/oldmoldycake/Snagr/commit/53ac6c5a39d5559be220f2cc68d29094d5460b5a)) * **frontend:** show failed loads as errors with Retry, not empty or not-found states ([62166fe](https://github.com/oldmoldycake/Snagr/commit/62166fe86e8b674c808a24c8e890ef83d5820636)) * **frontend:** show not-found on Back after deleting an item ([9ffaee2](https://github.com/oldmoldycake/Snagr/commit/9ffaee2aea8bbc314240f0ceda223347fe945c4b)) * **frontend:** show not-found on Back after deleting an item ([6dbb00e](https://github.com/oldmoldycake/Snagr/commit/6dbb00ecd81c3a4e6be186a4c9394a65e13f606e)) * **frontend:** show not-found on Back after deleting an item ([7bbad90](https://github.com/oldmoldycake/Snagr/commit/7bbad905d25812e0d850d06e7f784316e9459b5d)) * **frontend:** sort unpriced watches by name ([b6e93b4](https://github.com/oldmoldycake/Snagr/commit/b6e93b49394d3a0b6b69d13dbc09d9c6daf3fabb)) * **frontend:** stack the sites table into cards and wrap long names on narrow screens ([b7a632a](https://github.com/oldmoldycake/Snagr/commit/b7a632a47f65a413144335243c5805c344275e7d)) * **frontend:** stack the sites table into cards and wrap long names on narrow screens ([83135e9](https://github.com/oldmoldycake/Snagr/commit/83135e9a68b3b98b2decc5d2d2f98378e032f9cd)) * **frontend:** stack the struck-through old price so it can't overrun the Site column ([f6f1c2f](https://github.com/oldmoldycake/Snagr/commit/f6f1c2fc7be84a3ccde635a97be68546d5c29d73)) * **frontend:** stack the struck-through old price so it can't overrun the Site column ([ffa8c32](https://github.com/oldmoldycake/Snagr/commit/ffa8c32b6d6ad04c1b485d739000a8db9279ad62)) * **frontend:** stop the login redirect loop on a stale session ([2b0f31f](https://github.com/oldmoldycake/Snagr/commit/2b0f31f81fd2b1e8b9ad63e3ddd30ae6116cf8dc)) * **frontend:** stop the login redirect loop on a stale session ([d721e67](https://github.com/oldmoldycake/Snagr/commit/d721e67ef93404b2fb857f92e41dcc69ec482ec1)) * **frontend:** use one clear vocabulary for the app's wording ([9071c5f](https://github.com/oldmoldycake/Snagr/commit/9071c5fa6f696d9621b6fba7be8a91f905f9a598)) * **frontend:** wrap long site names in the category site badges ([1d4bba7](https://github.com/oldmoldycake/Snagr/commit/1d4bba7d8d01ffaed8b47d4bb5fa846232d95d85)) * **mcp:** gate tools on the same scopes REST requires ([679b217](https://github.com/oldmoldycake/Snagr/commit/679b217af0825f576392930331e78f9d3277de56)) * refuse target prices that are not an amount in cents and wrap the price history header on phones ([ef64d11](https://github.com/oldmoldycake/Snagr/commit/ef64d11f82628de174afe94856ae148efe30c84d)) * stop "next check" and "next hunt" counting down to times already passed ([b909bca](https://github.com/oldmoldycake/Snagr/commit/b909bca386200842769eb4131604b7df16ca6dce)) * stop grounding and counting items nobody watches ([8463e13](https://github.com/oldmoldycake/Snagr/commit/8463e13fe0e6ae08cde2ede97e4f6eb182bd3a22)) * stop grounding and counting items nobody watches ([16deadf](https://github.com/oldmoldycake/Snagr/commit/16deadf062e42f84d26b476f961c8d35807572fb)) * stop new hunts starving the queue and countdowns showing passed times ([0bfefef](https://github.com/oldmoldycake/Snagr/commit/0bfefef9d972d3a00344c2a9bedb72ec3accb50d)) * use one clear vocabulary in the app and make catalog writes admin-only ([84b41b6](https://github.com/oldmoldycake/Snagr/commit/84b41b6f5063999ece826923f480a9338411de85)) ## [0.7.0](https://github.com/oldmoldycake/Snagr/compare/v0.6.1...v0.7.0) (2026-09-25) ### Features * **frontend:** animate listing detail rows ([7be4535](https://github.com/oldmoldycake/Snagr/commit/7be4535a6c502aec312f38077d4c37ea264954fa)) * **frontend:** animate the listings panel's show-more fold and detail rows ([4f87685](https://github.com/oldmoldycake/Snagr/commit/4f876856379c06433a592e669a3537cc5765c6be)) * **frontend:** animate the listings panel's show-more reveal ([166bd44](https://github.com/oldmoldycake/Snagr/commit/166bd4458297e56a00c15c51711c8260888b2e15)) * **frontend:** give every dropdown menu a header and a tracking highlight ([d7725f1](https://github.com/oldmoldycake/Snagr/commit/d7725f159416105a11be763ea87401583a296ac0)) * **frontend:** give every dropdown menu a header and a tracking highlight ([f0354ad](https://github.com/oldmoldycake/Snagr/commit/f0354ade0c669f3ba42d1b9a4e815ed79ac4b28b)) * **frontend:** track the active nav tab with one lume bar ([3d83071](https://github.com/oldmoldycake/Snagr/commit/3d8307103de3f07818fc246350f83578aa6b5145)) * **frontend:** track the active nav tab with one lume bar ([f0c68c7](https://github.com/oldmoldycake/Snagr/commit/f0c68c77964411e825b430ae3785a3d33b7ba370)) ### Bug Fixes * **frontend:** drop the to-target bar on phones so it stops overlapping the price ([bb998d5](https://github.com/oldmoldycake/Snagr/commit/bb998d5d8ec54850e230975dcbc3616b081863b2)) * **frontend:** drop the to-target bar on phones so it stops overlapping the price ([2bbdcf8](https://github.com/oldmoldycake/Snagr/commit/2bbdcf8a4d5b2b4c06924b4049feb55b17ad412f)) * **frontend:** line up the Activity history result column ([8336c2d](https://github.com/oldmoldycake/Snagr/commit/8336c2d9af0a964632e0b24e96aef97d14a29aa7)) * **frontend:** line up the Activity history result column ([ea7fe7b](https://github.com/oldmoldycake/Snagr/commit/ea7fe7b9051ff3a6eacb714ca3f741692e23157a)) ## [0.6.1](https://github.com/oldmoldycake/Snagr/compare/v0.6.0...v0.6.1) (2026-09-25) ### Bug Fixes * **frontend:** keep a past job's time and tokens on one line ([8f3c640](https://github.com/oldmoldycake/Snagr/commit/8f3c6407e60ae60b4cbf23a4a09bb37885adaa8b)) * **frontend:** keep a past job's time and tokens on one line ([f18ae91](https://github.com/oldmoldycake/Snagr/commit/f18ae91e5377192c93cbfb38c1bedb60ee27af33)) ## [0.6.0](https://github.com/oldmoldycake/Snagr/compare/v0.5.0...v0.6.0) (2026-09-25) ### Features * **frontend:** Activity as one timeline with a needs-you rail ([5358eb6](https://github.com/oldmoldycake/Snagr/commit/5358eb6e3e7e8ffd2b0489886f9df94dca161eba)) * **frontend:** Activity as one timeline with a needs-you rail ([f4b89cc](https://github.com/oldmoldycake/Snagr/commit/f4b89cc4ea2701d7007b8638df5c7beb7d5882cb)) ## [0.5.0](https://github.com/oldmoldycake/Snagr/compare/v0.4.1...v0.5.0) (2026-09-25) ### Features * **frontend:** category shelves and a guided first run on the dashboard ([ea2005d](https://github.com/oldmoldycake/Snagr/commit/ea2005d9a0328b21f732bf49a87deb402f2adcd8)) * **frontend:** category shelves and a guided first run on the dashboard ([16649e2](https://github.com/oldmoldycake/Snagr/commit/16649e272baa17ff15f84352a7a6b809147e3339)) * **frontend:** field-card dialogs with enter and exit motion ([703fa69](https://github.com/oldmoldycake/Snagr/commit/703fa6935db3312c068aaca9a2dfc7bd3cee1eab)) * **frontend:** field-card dialogs with enter and exit motion ([be4ceb8](https://github.com/oldmoldycake/Snagr/commit/be4ceb8247ceca013b7d3ab4538a1b6782ab52da)) * **frontend:** pick or add sites while creating a category ([a69ce25](https://github.com/oldmoldycake/Snagr/commit/a69ce2512e92251a053b610689cf6e1fa47233bc)) * **frontend:** pick or add sites while creating a category ([25b2b46](https://github.com/oldmoldycake/Snagr/commit/25b2b46c1a65b8bc82412f758e3eeae210144989)) ## [0.4.1](https://github.com/oldmoldycake/Snagr/compare/v0.4.0...v0.4.1) (2026-09-24) ### Bug Fixes * **agent:** let every queued site trade into a full watch, trim hunt context, read each listing once ([6ab512f](https://github.com/oldmoldycake/Snagr/commit/6ab512f5dd29f9947f34c6e422edf43b7b9df8b2)) * **agent:** let every queued site trade into a full watch, trim hunt context, read each listing once ([ed1270b](https://github.com/oldmoldycake/Snagr/commit/ed1270bc82b68c1b8ae2926edc195bcd32310c36)) ## [0.4.0](https://github.com/oldmoldycake/Snagr/compare/v0.3.0...v0.4.0) (2026-09-24) ### Features * **agent:** group Langfuse traces by watch and tag them by kind, site and category ([7ca88ff](https://github.com/oldmoldycake/Snagr/commit/7ca88ffcd8ab6f2e93f2b03e03e18aa73fcba541)) * **agent:** group Langfuse traces by watch and tag them by kind, site and category ([025a329](https://github.com/oldmoldycake/Snagr/commit/025a329ff15bd8d260f8fb79df9d1d40f96756ab)) ## [0.3.0](https://github.com/oldmoldycake/Snagr/compare/v0.2.1...v0.3.0) (2026-09-24) ### Features * **agent:** derive and replay per-listing price locators ([c585ccb](https://github.com/oldmoldycake/Snagr/commit/c585ccb37e624d9271cb1eed81a3e1fcf5ecaeb6)) * **agent:** disable_listing records why a listing ended ([dad7c9c](https://github.com/oldmoldycake/Snagr/commit/dad7c9c7e06332b8fd9d2d39dbf63695e0498d6d)) * **agent:** learned price locators and deterministic rechecks ([952d45a](https://github.com/oldmoldycake/Snagr/commit/952d45abc2438ea4d66b343c8ddfaea8be8422ea)) * **agent:** per-site circuit breaker ([4ca58d1](https://github.com/oldmoldycake/Snagr/commit/4ca58d1293a437cc65ddf0c982b70cb4be8be25a)) * **agent:** perpetual hunting — backoff chain, hourly sweep, freed-slot wakes, kill switch ([bbe0ed8](https://github.com/oldmoldycake/Snagr/commit/bbe0ed89b09739a507dce4d16456b8d560ebf308)) * **agent:** perpetual hunting with backoff ([9f13b2a](https://github.com/oldmoldycake/Snagr/commit/9f13b2a0e6bb055abc8779ea672674e4c6c0358c)) * **agent:** read a price from raw HTML without a browser ([0a68639](https://github.com/oldmoldycake/Snagr/commit/0a6863951c139de4e1871159eda6e797c411a34d)) * **agent:** recheck tracked listings without the model ([35f7007](https://github.com/oldmoldycake/Snagr/commit/35f700710320647d3356af766403e6bd8724ef0a)) * **agent:** schedule each recheck on the watch's own interval ([9aaf9d9](https://github.com/oldmoldycake/Snagr/commit/9aaf9d99826eaa831604e9d70eb0aa74fa0e5e2f)) * **agent:** swap hunts on a full watch ([8c9b0ae](https://github.com/oldmoldycake/Snagr/commit/8c9b0aedde162527d09a97cfe3e8e2fe90d95c4d)) * **agent:** swap hunts on a full watch ([5ecbf1c](https://github.com/oldmoldycake/Snagr/commit/5ecbf1cc84ca7a90be08d230166b46709354ae11)) * **agent:** the hunter daemon — serve, the two pools, the scheduler ([1112183](https://github.com/oldmoldycake/Snagr/commit/1112183efe0dbdd1de2cd257005a889351934b05)) * **agent:** the jobs queue ([bdc24e0](https://github.com/oldmoldycake/Snagr/commit/bdc24e0b11adc662dc9425b1156cc76ffd015a43)) * **agent:** validate prices, URLs and model-typed text ([ab4c74a](https://github.com/oldmoldycake/Snagr/commit/ab4c74a4dbd5a4f33075dcb7eb9ce62a890a3a1e)) * **agent:** validate tool arguments and refuse cross-listing writes ([ebd9762](https://github.com/oldmoldycake/Snagr/commit/ebd97624be240d91b631195eb7d9626bd045a61f)) * **agent:** validate tool arguments and refuse cross-listing writes ([4563221](https://github.com/oldmoldycake/Snagr/commit/4563221406f42c9e0392f6ac4b71ac3cfadd08e1)) * **api:** expose how each price was read, and ignore unbelieved readings ([9f9b70f](https://github.com/oldmoldycake/Snagr/commit/9f9b70fadbd9fbacfea6289bccd1d05c881a4d1f)) * **api:** the jobs API replaces runs ([029f39c](https://github.com/oldmoldycake/Snagr/commit/029f39cf2b3db74fc747987fdae50bbc36a1bb73)) * **backend:** a user hunt on a full watch queues a swap hunt ([093b7b3](https://github.com/oldmoldycake/Snagr/commit/093b7b3358bbd10a24b80657c207423a99e2d3fc)) * **backend:** hunt switch, backoff facts and the hunting kill switch ([fcef19d](https://github.com/oldmoldycake/Snagr/commit/fcef19d7cb1ed67f6434b991f454d041340d9c60)) * **backend:** migration 017 — watch check interval and listing inactive_reason ([478c4c1](https://github.com/oldmoldycake/Snagr/commit/478c4c1395f80a67e81c117fd491c3eea01d1700)) * **backend:** migration 018 — the hunting switch and job payload ([e17cf35](https://github.com/oldmoldycake/Snagr/commit/e17cf3537a8fb6ff43c23a1b0dc3ff7f52c41167)) * **backend:** per-watch check interval on items, MCP and InstanceInfo ([2c13f2d](https://github.com/oldmoldycake/Snagr/commit/2c13f2d85d10d87b45c182088079cd35e9429efb)) * **backend:** untracking a listing records inactive_reason 'untracked' ([25b75d4](https://github.com/oldmoldycake/Snagr/commit/25b75d4d89341d514489296289a41fef233d8b4f)) * **db:** migration 015 — the job queue replaces the run tables ([671e7cb](https://github.com/oldmoldycake/Snagr/commit/671e7cb0bb48592a5624967a466f4c89886a9213)) * **db:** price locators on listings, method and confirmed on checks ([c403d6f](https://github.com/oldmoldycake/Snagr/commit/c403d6faf0566fcca2160de2e030d59e17db1d19)) * **frontend:** Check every control and interval in the facts line ([c81e920](https://github.com/oldmoldycake/Snagr/commit/c81e9209abd93214dace3ce1c0e94c37888e9d1d)) * **frontend:** contract for perpetual hunting ([f3791b4](https://github.com/oldmoldycake/Snagr/commit/f3791b44621ad2124f3d75ffd1ee6c0838fb28c4)) * **frontend:** contract for the per-watch check interval ([1e982f5](https://github.com/oldmoldycake/Snagr/commit/1e982f5384fc0da9c4096e1722a7ec88a8d5b468)) * **frontend:** extract the listings rail math to a log scale, with tests ([33e3658](https://github.com/oldmoldycake/Snagr/commit/33e3658fdccda9f66d361c1c1f18ecfb9d872c8d)) * **frontend:** Hunt for better on a full watch ([17a0b85](https://github.com/oldmoldycake/Snagr/commit/17a0b8518a4b6e46d931c9a9c25f33a8b78a0940)) * **frontend:** Hunting switch, facts-line states and the HUNTING OFF ticker ([83a6f61](https://github.com/oldmoldycake/Snagr/commit/83a6f615c94177126426decb8e5b4c70565c532a)) * **frontend:** log-scale listings rail with per-row target notch ([4360df2](https://github.com/oldmoldycake/Snagr/commit/4360df23e283b3f4deee5f5f83250ca9ee4a64ad)) * **frontend:** per-row target notch, labeled ruler and label flip on the listings board ([31cbdbe](https://github.com/oldmoldycake/Snagr/commit/31cbdbe6f1eb465b9c7836b3efece1ea8a77af0d)) * **frontend:** show how each price was read ([6aa75a2](https://github.com/oldmoldycake/Snagr/commit/6aa75a2435eb67dc9303b0cd3f8f2261fc2d3aa7)) * **frontend:** the Activity page replaces Runs ([df3bcf5](https://github.com/oldmoldycake/Snagr/commit/df3bcf5fe73f3d25fa55ad84a3e115bb090ab8b0)) * **frontend:** the jobs contract — types, endpoints, queries and the mock ([b5fa06e](https://github.com/oldmoldycake/Snagr/commit/b5fa06e37d352f2544f7c540974bd47b3ccd6d79)) * per-watch check interval ([a90520d](https://github.com/oldmoldycake/Snagr/commit/a90520d6f94cd474024841bcaa47fc61e4fda14f)) ### Bug Fixes * **agent:** a breaker trip keeps a person's hunt labelled theirs ([d958826](https://github.com/oldmoldycake/Snagr/commit/d958826444ad239d6bea04ba72a1cdc8c321ee1c)) * **agent:** a check queued during a pause waits for the pause to lift ([4acbac2](https://github.com/oldmoldycake/Snagr/commit/4acbac20343a2b5409f85607af1a6aac14e82622)) * **agent:** deactivate_listing refuses a reason the CHECK would reject ([f40c165](https://github.com/oldmoldycake/Snagr/commit/f40c165cdde5211f5a2c7d34ab17dc3e6a1710a0)) * **agent:** disable_listing commits the ending before waking hunts ([721aa0a](https://github.com/oldmoldycake/Snagr/commit/721aa0ae12513e2fc306a487d4fea908f2be4465)) * **agent:** record an ending before waking hunts, and skip deactivated accounts ([5391917](https://github.com/oldmoldycake/Snagr/commit/5391917ad7deecf2102fda8596078aa1e2a123e7)) * **agent:** skip known inactive listings instead of resurrecting them ([602df94](https://github.com/oldmoldycake/Snagr/commit/602df946fc4746aa14bd2331c2812de81892900b)) * **agent:** skip known inactive listings instead of resurrecting them ([7cbdd7a](https://github.com/oldmoldycake/Snagr/commit/7cbdd7a72ffa1ef2d6721789df0f04fe7d82d536)) * **agent:** the breaker hears a site that answers nothing ([5127328](https://github.com/oldmoldycake/Snagr/commit/5127328f59dd15d3205a90c13d730646b298d3ae)) * **backend:** a shorter interval only brings tracked listings' checks forward ([58fa263](https://github.com/oldmoldycake/Snagr/commit/58fa263a1306f33021c59490137cca2a1beb7e34)) * **backend:** queue a first check for listings that predate the jobs table ([585dd32](https://github.com/oldmoldycake/Snagr/commit/585dd326378c3c7ad372151a1844776a439ad536)) * **backend:** queue a first check for listings that predate the jobs table ([01aa4af](https://github.com/oldmoldycake/Snagr/commit/01aa4afb89bddce7e5d06c6d63af07d319ba819e)) * **backend:** switching hunting off drops creation hunts; more room hunts now ([798ddfc](https://github.com/oldmoldycake/Snagr/commit/798ddfca93832a641179f75354a7470e9c7968b9)) * **frontend:** a fractional custom check interval is refused, not rounded ([41bfa6c](https://github.com/oldmoldycake/Snagr/commit/41bfa6c63ef870440f1f1118e5e5d1fa62a0f69a)) * **frontend:** only running hunts are live ([da278bd](https://github.com/oldmoldycake/Snagr/commit/da278bdf893b4dee9e63d97504bbdac8267b8134)) ## [0.2.1](https://github.com/oldmoldycake/Snagr/compare/v0.2.0...v0.2.1) (2026-09-14) ### Bug Fixes * **agent:** notify toggle no longer pauses discovery ([08107be](https://github.com/oldmoldycake/Snagr/commit/08107beaf121f72707900cf7807db434b1b885d7)) ## [0.2.0](https://github.com/oldmoldycake/Snagr/compare/v0.1.0...v0.2.0) (2026-09-14) ### Features * **agent:** add DB layer for market-price grounding ([06d3131](https://github.com/oldmoldycake/Snagr/commit/06d3131b90212ac92869ccc39b4b6a490cc3b24e)) * **agent:** add grounding config (SearXNG, currency, TTL, refresh cap) ([01d5415](https://github.com/oldmoldycake/Snagr/commit/01d541507fd0179d337f98c5b672adc727da924e)) * **agent:** add optional Langfuse/LangSmith tracing ([bb28800](https://github.com/oldmoldycake/Snagr/commit/bb288004989181fd2c38dd2a6b3382c0c1540607)) * **agent:** check_images — the vision second opinion in the discovery pass ([373191a](https://github.com/oldmoldycake/Snagr/commit/373191a54556e8b841d90d18310dc829f24eb54a)) * **agent:** consume queued runs and record sweeps ([a4c030e](https://github.com/oldmoldycake/Snagr/commit/a4c030e74541475be5042158075b97cddb9ad285)) * **agent:** docker packaging + compose run-queue ticker ([0da2b54](https://github.com/oldmoldycake/Snagr/commit/0da2b546abd48c5b3f1157eeee127f759a2d08d6)) * **agent:** enqueue notifications to the outbox and announce new listings ([2759e3e](https://github.com/oldmoldycake/Snagr/commit/2759e3ea94dccaa5178ffa1975848c49fd7f95a1)) * **agent:** fire due schedules when the consume tick finds an empty queue ([d5351ac](https://github.com/oldmoldycake/Snagr/commit/d5351ac15fb0d81d1153cf516b4cab885bfbd622)) * **agent:** heartbeat, stale-run reaper, and clean shutdown ([5fa19a2](https://github.com/oldmoldycake/Snagr/commit/5fa19a20e6a74936c90d8ab436a20220817b0ec2)) * **agent:** implement guide-first market-price grounding pipeline ([adfeb3b](https://github.com/oldmoldycake/Snagr/commit/adfeb3b2a22f848da6c8fe98684fa89c159ded52)) * **agent:** listing.new — announce genuinely new listings ([4368cc9](https://github.com/oldmoldycake/Snagr/commit/4368cc950ac231e8d0a02bb5274bd988468e5acd)) * **agent:** package the agent as the compose run-queue ticker ([a4e13bf](https://github.com/oldmoldycake/Snagr/commit/a4e13bf8db6765e2cacbd69b6b6a1190652f5a94)) * **agent:** per-unit step and wall-clock budgets ([1ee62f8](https://github.com/oldmoldycake/Snagr/commit/1ee62f8a7ac1f618ad35e2024bb1b7e3a680afbc)) * **agent:** push an ntfy notification when a watch crosses its target ([4c80890](https://github.com/oldmoldycake/Snagr/commit/4c808903e80c545f8c8e4a5f3f035885b602ed14)) * **agent:** push an ntfy notification when a watch crosses its target ([b9d1552](https://github.com/oldmoldycake/Snagr/commit/b9d1552ee9382a8987b42849aba33240ad7ac7cc)) * **agent:** run heartbeat, stale-run reaper, clean shutdown, per-unit budgets ([ac6918a](https://github.com/oldmoldycake/Snagr/commit/ac6918adf4bc083c706941f42d2b559a963eb728)) * **agent:** run-queue DB layer and stats tally ([496cce8](https://github.com/oldmoldycake/Snagr/commit/496cce8226415b168ff8afc71f4a5fcad6e6f797)) * **agent:** schedule-claim DB layer (claim_due_schedule + roll_forward) ([978b673](https://github.com/oldmoldycake/Snagr/commit/978b6732fdbf2e030916753c4adc4463c11310f2)) * **agent:** scope traces by run session and watch owner ([bda0b07](https://github.com/oldmoldycake/Snagr/commit/bda0b07ab3b1778cdda12b23f9ab8e51625119cc)) * **agent:** surface market-price context in scrape and recheck prompts ([cf70cb2](https://github.com/oldmoldycake/Snagr/commit/cf70cb2b5837d38a218e77a933e00936719fe025)) * **agent:** target-hit notifications enqueue to the outbox ([bd8a9df](https://github.com/oldmoldycake/Snagr/commit/bd8a9dfc1e1359241e642ed7f2ebf0714cde197d)) * **agent:** wire grounding pre-pass into the run loop, add --ground-only ([86587b4](https://github.com/oldmoldycake/Snagr/commit/86587b4c4e046cad2903aa39c095c9652f099a3f)) * **aggregates:** bucketed best-price sparkline for item rows ([97741b1](https://github.com/oldmoldycake/Snagr/commit/97741b18f45f934b734089f8242b833f79448bcd)) * **aggregates:** price history and summary series ([99ccb91](https://github.com/oldmoldycake/Snagr/commit/99ccb91ac88ae4e18669c1f2bcc0c9f334101d20)) * API tokens and the MCP layer ([6c0fb68](https://github.com/oldmoldycake/Snagr/commit/6c0fb689bcf1bb1fbebc126e557900ab1296a6c5)) * **api:** /api/me/channels CRUD + per-channel test sends ([3e2d32b](https://github.com/oldmoldycake/Snagr/commit/3e2d32bb5495291509f6ca0b21af197ff7be8b58)) * **api:** agent_runs.heartbeat_at for the agent's stale-run reaper ([924c9d3](https://github.com/oldmoldycake/Snagr/commit/924c9d36d0047b2f7494033da71e6370db2e436f)) * **api:** personal access tokens as bearer auth ([683ad4f](https://github.com/oldmoldycake/Snagr/commit/683ad4ff35d8e3e7afe752287d8b0a01f5c353c5)) * **backend:** add category condition-tier and price-source columns ([2b0243b](https://github.com/oldmoldycake/Snagr/commit/2b0243b056970816c0ce975c88bcc2561e53c7e7)) * **backend:** add market-price grounding schema ([401492e](https://github.com/oldmoldycake/Snagr/commit/401492e9bbcb9a73ee8eeb2a68e034855c29efbc)) * **backend:** add run_schedules schema ([08828d8](https://github.com/oldmoldycake/Snagr/commit/08828d83a643d00f9348159041535f002ac7a52b)) * **backend:** enforce run visibility on the REST surface ([bfa7f1d](https://github.com/oldmoldycake/Snagr/commit/bfa7f1d6e947e2cfcdf26927962a860a56517d8b)) * **backend:** implement run enqueue (trigger_run) ([60f624f](https://github.com/oldmoldycake/Snagr/commit/60f624f5498dee8cba3f24ac9ed2e2e106161fa1)) * **backend:** per-viewer SSE — identity-aware hub, filtered fan-out, per-client snapshots ([b37d2f0](https://github.com/oldmoldycake/Snagr/commit/b37d2f0ab58f2e0477ae6b3a1299d8b09d7f1aae)) * **backend:** run ownership — user_id on agent_runs + run_schedules ([e09dd9a](https://github.com/oldmoldycake/Snagr/commit/e09dd9acb679994c930473bb952d47d6847a88cc)) * **backend:** stream run activity over SSE (pg_notify triggers + LISTEN hub) ([094a1a2](https://github.com/oldmoldycake/Snagr/commit/094a1a2422564812678f391910b0cfd4a5c8e789)) * **backend:** the notification dispatcher ([6659689](https://github.com/oldmoldycake/Snagr/commit/6659689584696c83df4d58042a852b5036412a26)) * **backend:** vision authenticity schema — reference library, scans, listing images, user thresholds ([f73c2eb](https://github.com/oldmoldycake/Snagr/commit/f73c2ebe38bf2dc7d93c1481f7ec5a608db52a2c)) * **backend:** vision surfaces — review queue, library, image proxy, thresholds ([2c2f846](https://github.com/oldmoldycake/Snagr/commit/2c2f8464eacba3419c3a2f08545a5a6442b5dffe)) * **backend:** vision surfaces — review queue, library, image proxy, thresholds ([d535d6a](https://github.com/oldmoldycake/Snagr/commit/d535d6a8929a4aa45adbc9aa25b7e68c32dc1ef8)) * **charts:** category price change endpoint ([2fdf1cc](https://github.com/oldmoldycake/Snagr/commit/2fdf1cc2775942379c3ada50dbc1d2109b7333af)) * **charts:** price-history and price-summary endpoints ([5be7f05](https://github.com/oldmoldycake/Snagr/commit/5be7f0501c7a612a1a4a4fe9c9bfa33ad59a3608)) * **charts:** recent price drops endpoint ([0cbc4df](https://github.com/oldmoldycake/Snagr/commit/0cbc4df13d52b77058519f6c2e0201db44fc177e)) * **CLAUDE:** Updated cluade md to start establishing proper conventions ([b01e40b](https://github.com/oldmoldycake/Snagr/commit/b01e40b19e8edf55e1a46dc2039c9b1e7ba51942)) * **compose:** opt-in vision profile — minio + sidecar services ([f120bf4](https://github.com/oldmoldycake/Snagr/commit/f120bf45c8c79af9cf3466a4343ff1438311b731)) * **contract:** API tokens in types, endpoints, and mocks ([e37a721](https://github.com/oldmoldycake/Snagr/commit/e37a721d5357b0dc01ffeb162e618afd5b030084)) * **contract:** per-user notification channels in types, endpoints, and mocks ([629f565](https://github.com/oldmoldycake/Snagr/commit/629f56536e2cf606a69b6212f656c6ed5bc5b354)) * **contract:** per-user run privacy — types, mock oracle, D-P5 catch-up ([6441faa](https://github.com/oldmoldycake/Snagr/commit/6441faace5ea2b4f746a85d30d02beee0d69cb1b)) * **contract:** vision endpoints + FormData-aware client ([49b2b05](https://github.com/oldmoldycake/Snagr/commit/49b2b055c3068899bbdfab2dc6842d7d1e10ae69)) * **contract:** vision types + the mock oracle ([2297422](https://github.com/oldmoldycake/Snagr/commit/2297422911545c191083218a4c95456d02090a23)) * **dashboard:** stats tiles with drop counting and snagged items ([4101760](https://github.com/oldmoldycake/Snagr/commit/4101760d63c0c3f232131d60cc31073dc9843901)) * **db:** drop users.ntfy_topic (migration 011) + ownership docs ([f920814](https://github.com/oldmoldycake/Snagr/commit/f9208141965289bbc9d946ce3d7ac5063101d771)) * **db:** notification channels, outbox, and deliveries (migration 010) ([b780007](https://github.com/oldmoldycake/Snagr/commit/b780007d55d8024bb432bc952106723d5e9fcc73)) * **frontend:** add hand-rolled price-plot primitives ([d1fde8f](https://github.com/oldmoldycake/Snagr/commit/d1fde8f4716233972b5138c3bf062a67865c1711)) * **frontend:** dashboard redesign — every fact once, in the table ([8c257b0](https://github.com/oldmoldycake/Snagr/commit/8c257b04d852142f380d6402549500e1924538c5)) * **frontend:** dashboard rewrite — verdict hero, agent ticker, unified watch list ([38f957f](https://github.com/oldmoldycake/Snagr/commit/38f957fc409388ad8264424a093cee94e54e0104)) * **frontend:** flag photo-fake listings on the target board ([bbb7c00](https://github.com/oldmoldycake/Snagr/commit/bbb7c0035fc1203c202ab9d3db158105e76c945a)) * **frontend:** fold overnight events into the watch table ([069098e](https://github.com/oldmoldycake/Snagr/commit/069098ecdb80aa73d0ea497c2745dee16c4159ab)) * **frontend:** item detail rewrite — verdict block, ladder, tabbed chart panel ([af1a63b](https://github.com/oldmoldycake/Snagr/commit/af1a63b01ca03925d9804384dc297f575224d141)) * **frontend:** masthead shell replaces the sidebar; reticle auth screens ([fd66624](https://github.com/oldmoldycake/Snagr/commit/fd666243e853c21acf1a8f42c0171f382069e039)) * **frontend:** Night Hunt redesign ([02c40ab](https://github.com/oldmoldycake/Snagr/commit/02c40abfae78882e059b98709d7872acb223b372)) * **frontend:** night-hunt design tokens, fonts, and primitive restyle ([736cd2e](https://github.com/oldmoldycake/Snagr/commit/736cd2eb980ce119f98d7cd57cd7823d8c51cea9)) * **frontend:** notification channels contract, mocks, and settings UI ([1c99039](https://github.com/oldmoldycake/Snagr/commit/1c990393441e7ec12dc8a4652d4fa924dc936834)) * **frontend:** photo review queue page ([9080832](https://github.com/oldmoldycake/Snagr/commit/9080832f4dff4bb14e9f6c4245ed7ff770074170)) * **frontend:** redesign the item page's listings as a target-rail board ([3900fc2](https://github.com/oldmoldycake/Snagr/commit/3900fc2343ffd7fdd4f60b479fe73f41b0d19b52)) * **frontend:** redesign the price history charts ([539c61e](https://github.com/oldmoldycake/Snagr/commit/539c61e702a5b7d52ed70cfda384260cfbee669a)) * **frontend:** reference library on the item detail page ([bc65c5c](https://github.com/oldmoldycake/Snagr/commit/bc65c5c2d5d0e783786a9f601dfa488b676250c3)) * **frontend:** replace dashboard action cards with the pulse line ([8a4d4c0](https://github.com/oldmoldycake/Snagr/commit/8a4d4c08916153bc4cf028dd137e7f2c9dcd4377)) * **frontend:** replace the listings table with the target-rail board ([8a03b2d](https://github.com/oldmoldycake/Snagr/commit/8a03b2d2f9a12209f419b96d5c91919066df65e0)) * **frontend:** rewrite price charts as hand-rolled SVG ([04ecfb7](https://github.com/oldmoldycake/Snagr/commit/04ecfb7b94de3ea4b33c045dcfe3a2651f31bc15)) * **frontend:** runs in the terminal voice — live sweep hero, glyph statuses ([882f47c](https://github.com/oldmoldycake/Snagr/commit/882f47c2ce22aafd9bce47895112efd4336aacaf)) * **frontend:** sites, settings, and admin on the night-hunt system; docs ([4a941a7](https://github.com/oldmoldycake/Snagr/commit/4a941a7c96086ff628ba2cb4a385232c711f64e2)) * **frontend:** swap chart series palette to Embers ([12bfa03](https://github.com/oldmoldycake/Snagr/commit/12bfa03ee310e3f612207c4c3e8996714b80dd3c)) * **frontend:** vision review queue, reference library, and listing authenticity UI ([f6fe5dc](https://github.com/oldmoldycake/Snagr/commit/f6fe5dc683533d852bf9be7311c7e63d37ad230f)) * **frontend:** vision thresholds in settings ([a64db5e](https://github.com/oldmoldycake/Snagr/commit/a64db5e5619155764a2de836a5b2988ed2b08737)) * **items:** compute price rollups for item list rows ([b73072e](https://github.com/oldmoldycake/Snagr/commit/b73072e5611fe9fa93bef58fc677bd2000f039f9)) * **mcp:** the MCP endpoint with the read-only tool surface ([73973c3](https://github.com/oldmoldycake/Snagr/commit/73973c3f559c860900ac11af25326493da3195b9)) * **mcp:** write, run and vision tools ([421f171](https://github.com/oldmoldycake/Snagr/commit/421f1718ba458c7a21abcd9ee99f27d54fc97533)) * **notifications:** outbox dispatcher, channels API, and agent port ([5b7b364](https://github.com/oldmoldycake/Snagr/commit/5b7b364ff445479fe14234e1c9f06b017df3b549)) * **oidc:** code exchange, ID-token validation, /api/auth/oidc/callback ([2ce7c3f](https://github.com/oldmoldycake/Snagr/commit/2ce7c3f9aafc29e8b9ac9a50c26c69a0533e04cf)) * **oidc:** discovery, PKCE flow helpers, /api/auth/oidc/login ([355c3c3](https://github.com/oldmoldycake/Snagr/commit/355c3c376fe32a65b25cc87c7c26724902275840)) * **oidc:** expose oidc_provider_name in InstanceInfo ([1f4deba](https://github.com/oldmoldycake/Snagr/commit/1f4deba776d2b6edb32980e38ba8b566f11fba70)) * **oidc:** OIDC settings + users.oidc_sub column ([40b3bf7](https://github.com/oldmoldycake/Snagr/commit/40b3bf787e81800c06ed53901b867de5b69c3298)) * **oidc:** resolve_oidc_user account-linking service ([9493000](https://github.com/oldmoldycake/Snagr/commit/949300052532e67977ab172476813d997c77d14b)) * **oidc:** SSO sign-in button + failure banner on the login page ([90de7e3](https://github.com/oldmoldycake/Snagr/commit/90de7e3f43027f315bd97f9a5d95c85e5fbced1d)) * **oidc:** SSO-specific message when changing a nonexistent password ([a634496](https://github.com/oldmoldycake/Snagr/commit/a6344964c82b21bec6dd72b4e139efb43b9c6e6d)) * **runs:** implement list, get, events backfill, and cancel endpoints ([d980e2a](https://github.com/oldmoldycake/Snagr/commit/d980e2a40f7a94e98e380c521c4988f6d2cc9d07)) * **settings:** channels card replaces the ntfy topic UI ([e681f76](https://github.com/oldmoldycake/Snagr/commit/e681f767b1821e75bc20eaa5895a7b8f50a0591e)) * **settings:** MCP & API tab with tokens and client config ([eb3c0fb](https://github.com/oldmoldycake/Snagr/commit/eb3c0fbc4cde82de5d538023d1d2433ce6db3a36)) * **vision:** DINOv3 authenticity sidecar — embed, score, promote, GC ([2a99552](https://github.com/oldmoldycake/Snagr/commit/2a99552b44a9fce1691473bd0d25a0c038c31d60)) ### Bug Fixes * **agent:** hold one MCP session per run and fail units that never browsed ([4e9806b](https://github.com/oldmoldycake/Snagr/commit/4e9806b57be0863ed909260a75fa36154166177a)) * **agent:** honor per-watch site selection ([da859c7](https://github.com/oldmoldycake/Snagr/commit/da859c7b79128486e03f6d32a3260048e7a4e820)) * **agent:** honor per-watch site selection ([24a8cd7](https://github.com/oldmoldycake/Snagr/commit/24a8cd7d45e75915f5c6015662be30c9fe4b85fc)) * **agent:** keep the unknown bucket out of published market prices ([1835783](https://github.com/oldmoldycake/Snagr/commit/1835783b6bdaab20d109592e566a8ba6a1b6d746)) * **agent:** meter max_listings per watch, not per site scan ([f0a9859](https://github.com/oldmoldycake/Snagr/commit/f0a9859e23b6364d56455d5ed3fae45f59fb89b8)) * **agent:** meter max_listings per watch, not per site scan ([4c4d9be](https://github.com/oldmoldycake/Snagr/commit/4c4d9be45f6c33231feef0281e309fe303738d21)) * **agent:** never record auction bids as prices — Buy It Now is the exception ([f9fd12b](https://github.com/oldmoldycake/Snagr/commit/f9fd12b2237dfd179c95f62b77eeeb344822b9e5)) * **agent:** never record auction bids as prices — Buy It Now is the exception ([0382fb6](https://github.com/oldmoldycake/Snagr/commit/0382fb62b947c7039f1e88fbedd58c6b2546cb2f)) * **agent:** quarantine implausible prices, publish the basis count ([796d4b5](https://github.com/oldmoldycake/Snagr/commit/796d4b526d174daf17f7b9e8fa280e2b54278c19)) * **agent:** stamp price and listing checks in UTC ([f7f50e4](https://github.com/oldmoldycake/Snagr/commit/f7f50e4dd49636be2dfd959d38c3232d6ba133f1)) * **aggregates:** skip unpriced checks and guard degenerate points ([7044de1](https://github.com/oldmoldycake/Snagr/commit/7044de1c67c202e162d58a2bf613f9f9384ae319)) * **api:** answer db_unavailable when a site delete fails ([4cedc2e](https://github.com/oldmoldycake/Snagr/commit/4cedc2e71cac329c337467528c684895c3bc6ebc)) * **api:** declare the enabled server defaults on the models ([b36795c](https://github.com/oldmoldycake/Snagr/commit/b36795c3911a87c450348c1e2c27b98d86b54556)) * **api:** match the mock's category name validation ([a961cf6](https://github.com/oldmoldycake/Snagr/commit/a961cf642dfb62884104084d2cbef1c333704a19)) * **api:** scope snagged_count to the caller's own live targets ([42c4410](https://github.com/oldmoldycake/Snagr/commit/42c44107e78d4ded2dd60620ce43381b37ca06c8)) * **contract:** apply allow_reproductions on item create and update ([0c789c6](https://github.com/oldmoldycake/Snagr/commit/0c789c63dbceddd028fa8fc519b41f0800f7c3bd)) * **frontend:** don't flash the no-sweeps copy while the ticker loads the last run ([e1bbee2](https://github.com/oldmoldycake/Snagr/commit/e1bbee249ba9a01ea313f72fa84c742420a0dba8)) * **frontend:** merge ladder labels near the right edge so now/target can't overprint ([20d0820](https://github.com/oldmoldycake/Snagr/commit/20d0820b65094a3b81af15e4e31b5f44deb76733)) * **frontend:** navigate to the slug the rename returned ([6358a73](https://github.com/oldmoldycake/Snagr/commit/6358a7356b713b9e69935df2c3fa692c50fd638f)) * **frontend:** no-cache the SPA shell so deploys take effect on reload ([7abd10a](https://github.com/oldmoldycake/Snagr/commit/7abd10adaa2b749c1be2d23d691d0a1cb72f708f)) * **frontend:** render category chips on the dashboard before any items exist ([d7128c2](https://github.com/oldmoldycake/Snagr/commit/d7128c24136b70d9fee0515666894ea94c40a0f2)) * **mocks:** deactivate over-cap seeded listings so slots read 5 of 5 ([fe28f58](https://github.com/oldmoldycake/Snagr/commit/fe28f58bebea30c33491434844c4d8e116601db4)) * **mocks:** pluralize the seeded run-complete log line ([9ccd090](https://github.com/oldmoldycake/Snagr/commit/9ccd090fd9860c8f0b4e50fd70eff345db9fac25)) * **oidc:** final-review fixes — pin authlib, normalize IdP email, harden flow cookie ([7de44b0](https://github.com/oldmoldycake/Snagr/commit/7de44b0c69984842b3c0ece3a9b803d061dd7322)) * **oidc:** guarded case-insensitive email marriage per final review ([e9cb13a](https://github.com/oldmoldycake/Snagr/commit/e9cb13afbc45dcfc3cf9c013eb1fecf608abebac)) * **oidc:** name the oidc_sub unique constraint so downgrade works ([3fdbb43](https://github.com/oldmoldycake/Snagr/commit/3fdbb43468cd26d82ca0d798bde03357697b0b53)) * **sites:** match mock parity on create_site validation and response ([f41d7c6](https://github.com/oldmoldycake/Snagr/commit/f41d7c6659f341a730199d1e8da1a0051a45e341)) * **sites:** return real aggregates from update_site ([1e17e18](https://github.com/oldmoldycake/Snagr/commit/1e17e1867da92c6d81722a7fcc3190090eaa69b7)) * **sites:** syntax typo in update_site guard clause ([9bd3fc0](https://github.com/oldmoldycake/Snagr/commit/9bd3fc0e6fb8204538284adb687fa4009b5c3d74)) * the code bugs the comment audit left behind ([d265bef](https://github.com/oldmoldycake/Snagr/commit/d265bef5bcb3c32e3053ddfa70e7a00b7037d953)) * **vision:** add torchvision — transformers v5 image processors require it ([2d0abea](https://github.com/oldmoldycake/Snagr/commit/2d0abeaeb9c8eefc658f4ed8b815a8cc4e8aa104)) * **vision:** create the HF cache dir before the weights volume mounts ([cc496cc](https://github.com/oldmoldycake/Snagr/commit/cc496cc0c1f5e05528d4824316c637d4e99add3f)) * **vision:** make the first real weights load actually work ([6a51b83](https://github.com/oldmoldycake/Snagr/commit/6a51b8320bf185189415ea022d134e19130c0859))