- Remove sqlx 'macros' feature — migrated to runtime queries in f4fd915,
proc-macro crates (sqlx-macros-core, sqlx-macros) were dead weight
- Add [profile.dev] debug=1 (line tables only) + split-debuginfo=unpacked
to speed up linking on macOS
- Add [profile.dev.package.'*'] opt-level=2 to compile deps faster at
runtime; one-time cost on first build, cached after that
Match the application crate convention: each source file references its
tests via #[cfg(test)] #[path = "tests/filename.rs"] mod tests; with
the test code in a sibling tests/ directory.
- events.rs -> tests/events.rs
- value_objects.rs -> tests/value_objects.rs
- models/mod.rs -> models/tests/mod.rs (renamed from tests.rs)
- models/person.rs -> models/tests/person.rs
- models/goal.rs -> models/tests/goal.rs
- models/watch_event.rs -> models/tests/watch_event.rs
- services/review_history.rs -> services/tests/review_history.rs
Queries were migrated to the runtime sqlx API (no query! macros) in
f4fd915, making the pre-verified .sqlx cache obsolete. The directory
is also gitignored, so the COPY would break any fresh build.
- Broadcast GoalUpdated AP note after ReviewLogged so federated goal
progress reflects the new review count without requiring a manual goal edit
- Add attribution check in GoalObjectHandler::on_update (mirrors
review_handler) to prevent any remote actor from overwriting another's goal
- Implement on_actor_removed in GoalObjectHandler via new
RemoteGoalRepository::remove_all_by_actor — remote goals were never
cleaned up when an actor unfollowed or was deleted
- Add remove_all_by_actor to SQLite, Postgres, Noop, and test Panic impls
Split domain/models/mod.rs (630 lines) into focused files:
movie.rs, review.rs, user.rs, stats.rs, enrichment.rs, feed.rs.
Move URL/date formatting from application use cases to
presentation mappers — use cases now return raw domain data.
Delete watchlist/get_page.rs (was pure presentation logic),
replace with presentation/mappers/watchlist.rs.
Document signature conventions in CONTRIBUTING.md.
Extract ReviewLogger trait to decouple import/integrations
from diary::log_review (cross-module coupling smell).
Add in-memory fakes for all repository ports, enabling
isolated testing of every use case module without a database.
Coverage: domain+application 22% → 80%, 427 tests.
New movies had no poster at AP broadcast time (race between poster sync
and ReviewLogged handler). PosterSynced event now fires after sync
completes, triggering Update notes so remote apps get the poster URL.
- fix wrapup status "completed" → "Ready"
- fix unfollow sending {handle} instead of {actor_url}
- fix missing post import in users.ts
- fix feed/activity cache not invalidated on review delete/log
- add person_id to cast/crew types, link to /people pages
- add movie_id to wrapup MovieRef, link highlights to /movies pages
- add wrapup actor profile images + clickable person links
- add federated review globe badge in feed and movie detail
- add fediverse handle (@user@instance) in follower/following cards
- add admin reindex search button in settings
- add wrapup user picker for admins
- add username/display_name to user summary type
- use tmdbProfileUrl for person search results