307 Commits

Author SHA1 Message Date
d19f931d21 [release] Bump to version 64.4
All checks were successful
ci / test (push) Successful in 2m1s
ci / build-and-deploy (push) Successful in 37s
- Fix raw HTML output from agent response
2026-08-03 11:10:14 -04:00
6dfdf0f1cb [agents] Fix raw HTML in agent session responses 2026-08-03 11:09:50 -04:00
937f431d7a [release] Bump to version 64.3
All checks were successful
ci / test (push) Successful in 2m1s
ci / build-and-deploy (push) Successful in 41s
- Add notifications when agent prompts return responses
- Make agent prompts more resilient
2026-08-03 10:27:59 -04:00
b8eb13083f [agents] Notify on agent responses and retry failed prompts 2026-08-03 10:25:39 -04:00
c874fb8c6d [release] Bump to version 64.2
All checks were successful
ci / test (push) Successful in 2m35s
ci / build-and-deploy (push) Successful in 1m11s
- Fix a bug in koreader imports using a static tmp file
2026-08-02 09:26:40 -04:00
8be6c7c5f3 [koreader] Use unique temp file for WebDAV import downloads 2026-08-02 09:25:52 -04:00
5c3583e7f0 [release] Bump to version 64.1
All checks were successful
ci / test (push) Successful in 2m36s
ci / build-and-deploy (push) Successful in 52s
- Add search for agent sessiosn
- Add rc.d files for FreeBSD process management
2026-08-01 21:43:20 -04:00
27b2f603ab [release] Bump to version 64.0
All checks were successful
ci / test (push) Successful in 2m28s
ci / build-and-deploy (push) Has been skipped
- Add Google Gemini as a model option back for agent sessions
- Update agent flow to use OpenRouter and select model
2026-07-31 23:55:01 -04:00
1e338dec2d [agents] Swap agent flow to OpenRouter with model selection
All checks were successful
ci / test (push) Successful in 2m35s
ci / build-and-deploy (push) Has been skipped
2026-07-31 23:06:09 -04:00
de84e191df [geoloc] Handle Nominatim 429 rate limits with throttle and retry
All checks were successful
ci / test (push) Successful in 2m45s
ci / build-and-deploy (push) Has been skipped
2026-07-31 22:31:13 -04:00
d12a42adeb [release] Bump to version 63.2
All checks were successful
ci / test (push) Successful in 2m37s
ci / build-and-deploy (push) Successful in 41s
- Swap around AI API key for Google so Youtube still works
2026-07-31 09:51:25 -04:00
66fa555f63 [release] Bump to version 63.1
All checks were successful
ci / test (push) Successful in 2m31s
ci / build-and-deploy (push) Successful in 52s
- Fix agent scrobble bug with duration
- Swap around AI API key for Google so Youtube still works
2026-07-31 09:09:19 -04:00
af84e1419b [agents] Auto-complete agent session scrobbles after 10 minutes
All checks were successful
ci / test (push) Successful in 2m51s
ci / build-and-deploy (push) Has been skipped
2026-07-31 08:19:23 -04:00
63589c3fcc [release] Bump to version 63.0
All checks were successful
ci / test (push) Successful in 2m40s
ci / build-and-deploy (push) Successful in 56s
- Add agent-session scrobbling
- Fix small bug in nature importer if geojson is missing
2026-07-31 00:27:42 -04:00
0c92174440 [agents] Add agent-session scrobbling for Gemini and opencode providers
All checks were successful
ci / test (push) Successful in 3m2s
ci / build-and-deploy (push) Has been skipped
2026-07-31 00:21:24 -04:00
952ed596da [nature] Fix bug in importer when geojson is missing 2026-07-30 23:04:55 -04:00
2d2f77cfb4 [release] Bump to version 62.2
All checks were successful
ci / test (push) Successful in 2m25s
ci / build-and-deploy (push) Successful in 1m42s
- Fix concurrent trend to be more useful
- Add a public blog feature for scrobbles with notes
- Add drf-spectacular for OpenAPI schema generation
2026-07-30 12:09:56 -04:00
428d84d3bf Fix ImproperlyConfigured for drink-detail in scrobbles API
HyperlinkedModelSerializer could not resolve drink-detail because no
API ViewSet existed for the Drink model, even though the template URL
existed in drinks/urls.py.

Fix:
- Add DrinkSerializer and DrinkViewSet to drinks/api/
- Register DrinkViewSet as 'drinks' in the DRF router (vrobbler/urls.py)
- Mark task 8f2a3b4c as DONE in PROJECT.org

GET /api/v1/scrobbles/ now resolves without error.
2026-07-23 20:26:39 -04:00
d004336dd3 Add backlog task for drink-detail ImproperlyConfigured bug
GET /api/v1/scrobbles/ fails because HyperlinkedModelSerializer
can't resolve drink-detail — no API ViewSet exists for it, only a
template view in drinks/urls.py.
2026-07-23 20:22:59 -04:00
261bb618f5 Mark Android scaffold task as DONE in PROJECT.org
Scaffold completed in ../vrobbler-android with Compose, Hilt,
Navigation, OkHttp, Moshi, and EncryptedSharedPreferences.
2026-07-23 20:16:21 -04:00
cd9961662e Add drf-spectacular for OpenAPI schema generation
Closes #2fddd5d0-1138-4a6e-96b7-5879035f033f

drf-spectacular provides OpenAPI 3.0 schema generation for all 52
registered ViewSet endpoints under api/v1/. This is a prerequisite for
auto-generating the Kotlin networking layer.

Changes:
- Add drf-spectacular dependency (0.27.x)
- Register in INSTALLED_APPS and configure DEFAULT_SCHEMA_CLASS
- Add /api/schema/ (OpenAPI YAML) and /api/docs/ (Swagger UI) routes
- Add SPECTACULAR_SETTINGS with enum name overrides to suppress warnings

Schema generates cleanly with 4 non-blocking warnings (1 unique:
TagListSerializerField defaulting to string) and 14 unique skipped
errors (all non-ViewSet APIViews like webhooks that lack serializers).
2026-07-23 20:01:04 -04:00
050fce7ffc [release] Bump to version 62.1
All checks were successful
ci / test (push) Successful in 2m41s
ci / build-and-deploy (push) Successful in 1m40s
- Add open food stats as requirement
2026-07-22 01:17:09 -04:00
3bfb01b3f7 poetry lock 2026-07-22 01:16:52 -04:00
dbb6225315 [release] Bump to version 62.0
Some checks failed
ci / test (push) Failing after 48s
ci / build-and-deploy (push) Has been skipped
- Add open food facts source for Food and Drink
2026-07-21 17:10:56 -04:00
155ed2a4f8 feat: add Open Food Facts search selector for food and drinks
- Add openfoodfacts Python SDK dependency
- Create foods/sources/openfoodfacts.py API wrapper with text_search
- Add off_code field + find_or_create_from_search() to Food model
- Add nutrition fields (protein, fat, carbs, fiber, sugar, sodium),
  ingredients, image, off_code to Drink model
- Create FoodSearchView and FoodScrobbleFromSearchView at /foods/search/
- Route beverages to Drink model based on OFF category keywords
- Update ManualScrobbleView to redirect '-f Food Name' to food search
- Add Drinks section to home page and scrobble detail templates
- Update drink_detail.html with nutrition grid and image display
2026-07-21 17:09:13 -04:00
f58f5406bb [release] Bump to version 61.5
All checks were successful
ci / test (push) Successful in 2m29s
ci / build-and-deploy (push) Successful in 2m10s
- Fix referer bug in OSM tiles
- Fix bugs in lifeevent urls
2026-07-20 23:55:37 -04:00
0e3b3cc68d fix(locations): add referrerPolicy to OSM tile layers
Add referrerPolicy: 'origin' to the Leaflet tile layer in
geolocation_list.html and geolocation_detail.html to match the
other four templates that already had it.

Without this, those templates send the full page URL as Referer,
which can trigger OSM rate limiting (osm.wiki/blocked error).

Also marks the task as DONE in PROJECT.org.
2026-07-20 23:53:12 -04:00
d53a9a9d33 Fix a bug in lifeevent urls 2026-07-20 23:48:17 -04:00
b4d858571e [release] Bump to version 61.4
All checks were successful
ci / test (push) Successful in 2m25s
ci / build-and-deploy (push) Successful in 1m2s
- Add 7-day period for trends
2026-07-19 15:44:13 -04:00
a598562e24 feat(trends): add 7-day period option
Add 'last_7' (Last 7 days) as a selectable period for all trends.
Changes are minimal since the period system is driven by PERIOD_CHOICES
and PERIOD_DAYS dicts — the rest of the infrastructure (views, templates,
Celery tasks, management commands) picks it up automatically.

- Add ('last_7', 'Last 7 days') to PERIOD_CHOICES in models.py
- Add 'last_7': 7 to PERIOD_DAYS in utils.py
- Migration 0004_alter_trendresult_period_add_last_7
2026-07-19 15:43:08 -04:00
bb63e529e7 [release] Bump to version 61.3
All checks were successful
ci / test (push) Successful in 2m41s
ci / build-and-deploy (push) Successful in 1m8s
- Add trends tests and fix fasting
2026-07-19 13:52:46 -04:00
29fc493cc2 Rewrite fasting trend algorithm and add comprehensive tests
- Replace day-iteration algorithm with pair-based approach for fasting
  detection. Iterate consecutive food scrobble pairs and mark foodless
  days between them as fasting days.

- Handle consecutive-day periodic fasting: when two food scrobbles are on
  consecutive days with a gap >= periodic_threshold but < full_threshold,
  mark the later day as a periodic fast (user's original bug fix).

- Fix _dt test helper to use replace() instead of subtracting hours,
  producing correct timestamps (e.g., '3 days ago at 18:46' instead of
  '3 days + 18h46m ago').

- Fix total_days off-by-one: removed +1 from inclusive day count so a
  'last_30' period correctly reports 30 days.

- Add _drinks_on_day() for per-day drink detection (replaces whole-
  window _drinks_in_window for more accurate liquid fasting detection).

- Fix Beer test fixture to use styles M2M field instead of non-existent
  beer_style attribute.

- Add 26 test cases covering: classification, short gaps, periodic/
  full/liquid fasting, multi-day gaps, vacation exemptions, custom
  thresholds, streaks, mixed types, edge cases.

Reasoning:
The original day-iteration algorithm had fundamental issues: it marked
days with food as fasting (since it only checked prev/next food times),
it didn't filter out normal (< periodic) gaps, and the _dt helper was
misinterpreting hour parameters. The new pair-based approach is cleaner:
for each consecutive food scrobble pair, we mark the foodless days
between them. This naturally handles multi-day fasts and correctly
avoids marking food-eating days as fasting. The consecutive-day periodic
rule preserves the user's original intent of detecting overnight fasts
between meals.
2026-07-19 13:11:29 -04:00
f0d69cdac0 [release] Bump to version 61.2
All checks were successful
ci / test (push) Successful in 2m18s
ci / build-and-deploy (push) Successful in 40s
- Fix bug in trends and add liquid fasting
2026-07-17 15:35:57 -04:00
3bbfa6fc37 fix(trends): fix fasting detection for consecutive-day gaps and add liquid fasting 2026-07-17 15:35:42 -04:00
36a1ee8495 [release] Bump to version 61.1
All checks were successful
ci / test (push) Successful in 2m19s
ci / build-and-deploy (push) Successful in 46s
- Add trend for fasting
2026-07-17 15:03:27 -04:00
9393ae133c feat(trends): add fasting trend 2026-07-17 15:02:15 -04:00
46c5ff6993 [release] Bump to version 61.0
All checks were successful
ci / test (push) Successful in 2m20s
ci / build-and-deploy (push) Successful in 48s
- Try adding a nature app with Observations and Species
- Add ability to push one or sync all board game scrobbles to BGG
- Clean up naming of =bgsplay= parsing
2026-07-16 23:47:03 -04:00
c3673e2679 [nature] Add iNaturalist observation importer and scrobbles
- New nature app with SpeciesObservation model (scrobblable)
- SpeciesObservationLogData for observation-specific fields
- Atom feed parser + iNat REST API enrichment
- Photo download and local storage
- Celery periodic import (every 4 hours)
- Management command: import_from_inaturalist
- Species fields: title, scientific_name, taxon_id, iconic_taxon_name, rank, wikipedia_url
- Log fields: observation_id, photo_urls, quality_grade, place_guess, lat/lon, uri, identifications_count
- Updates existing scrobbles when observation data changes
- iNaturalist user mapping on UserProfile
- Templates, admin, API, URLs
- Default 5 minute run time for species observations
2026-07-16 23:43:21 -04:00
00249e3d3b [boardgames] Fix and clean up BGG push integration 2026-07-15 16:41:12 -04:00
9523d631b0 [scrobbles] Rename email_scrobble_board_game to scrobble_board_game_from_bgstats 2026-07-15 16:03:00 -04:00
abf0eae493 [release] Bump to version 60.2
All checks were successful
ci / test (push) Successful in 2m31s
ci / build-and-deploy (push) Successful in 2m6s
- Use FastCork to lookup wine data
2026-07-14 21:05:46 -04:00
740e5268dd [drinks] Add better wine lookups 2026-07-14 21:05:22 -04:00
681252b845 [release] Bump to version 60.1
All checks were successful
ci / test (push) Successful in 2m20s
ci / build-and-deploy (push) Successful in 1m38s
- Migrate coffee scrobbles to new Coffee model
2026-07-14 12:54:04 -04:00
f6a20b67a6 [drinks] Add coffee migration script 2026-07-14 12:53:27 -04:00
c9298fe387 [release] Bump to version 60.0
All checks were successful
ci / test (push) Successful in 2m19s
ci / build-and-deploy (push) Successful in 41s
- Send water drinking notifications
- Add wine as a ScrobbleItem in a drinks app and move beers into drinks app
2026-07-14 00:13:17 -04:00
f7d99f8b55 [drinks] Add water drink notifications 2026-07-13 23:17:14 -04:00
fdc18d5a5f [drinks] Rename beers to drinks and add new models 2026-07-13 13:26:28 -04:00
77d92f6c96 [release] Bump to version 59.5
All checks were successful
ci / test (push) Successful in 2m13s
ci / build-and-deploy (push) Successful in 38s
- Fix bug where all variants for board games are in form
2026-07-05 00:15:58 -04:00
d5d0eb6cd8 [boardgames] Make sure variants are filtered by game 2026-07-05 00:15:26 -04:00
d6f71e0761 [release] Bump to version 59.4
All checks were successful
ci / test (push) Successful in 2m14s
ci / build-and-deploy (push) Successful in 37s
- Fix bug in fetching expansions for board games
- Board games should have genres extracted from family data
2026-07-04 11:53:28 -04:00