96168cfc7b
fix: update k-ap dependency version to 0.4.3
CI / Check / Test (push) Has been cancelled
2026-07-11 10:21:28 +02:00
95b839355f
fix: portal search overlay to escape transform stacking context, auto-fill IMDB from ttXXXX input
CI / Check / Test (push) Successful in 1h12m50s
2026-07-11 01:44:08 +02:00
85285b2a52
github ci fix
CI / Check / Test (push) Successful in 1h9m41s
2026-07-10 23:29:17 +02:00
c3d8bcad29
fix: collapse nested if for clippy
CI / Check / Test (push) Has been cancelled
2026-07-10 23:20:49 +02:00
8aa64ab174
fix: restrict swipe-tabs drag to touch-only, prevent ghost swipe after drawer close
CI / Check / Test (push) Failing after 8m25s
2026-07-10 22:52:50 +02:00
d84c54bb30
feat: page transitions, poster hover, star bounce, reveal scale-up
2026-07-10 22:51:09 +02:00
41bed3583d
feat: calendar diary view on profile ( #15 )
CI / Check / Test (push) Failing after 8m29s
2026-07-10 22:32:47 +02:00
0a8b52514d
feat: calendar diary view on profile ( #15 )
2026-07-10 22:22:13 +02:00
a0c0ba1c5d
rename profile Trends tab to Stats
CI / Check / Test (push) Failing after 8m35s
2026-07-10 22:01:56 +02:00
94cab1ea7c
fix: lock body scroll + remove scrollbar on wrapup share card
CI / Check / Test (push) Has been cancelled
2026-07-10 21:58:38 +02:00
3dde0d13db
docs: sync README + architecture diagram with current codebase
2026-07-10 21:56:16 +02:00
1c81d7768c
fix: duplicate count in wrapup watch medium display
2026-07-10 21:53:21 +02:00
07df6fe207
review detail sheet on diary/profile/community, wrapup period presets
2026-07-10 21:51:42 +02:00
1a7448fd3d
fix: use strict > for min-count filters in wrapup stats
CI / Check / Test (push) Failing after 8m38s
2026-07-10 21:42:29 +02:00
587dcc04de
feat: richer profile stats, wrapup min-count filter, watch medium distribution
...
CI / Check / Test (push) Has been cancelled
- filter wrapup top directors/actors with count < 2
- add watch_medium to wrapup report + adapters
- profile trends: genre breakdown, rating histogram, watch medium dist
- fix unused StarDisplay import in movie detail
2026-07-10 21:38:08 +02:00
498f3b1818
edit sheet delete btn, fix medium icons, 44px touch targets, fix drag leak on drawer close
CI / Check / Test (push) Failing after 8m44s
2026-07-10 17:46:56 +02:00
0ee2e04fe5
refactor(spa): collapse api/hooks telescope, merge review sheets, extract tab+list modules
...
- merge lib/api/* + hooks/use-* → features/* domain modules
- log-sheet + edit-review-sheet → review-sheet with mode discriminant
- index.tsx → feed-tab, watchlist-tab, queue-tab
- social actor-list pattern → ActorList component
- movie detail inline sections → community-reviews, viewing-history
2026-07-10 17:38:58 +02:00
89045414cf
fmt
CI / Check / Test (push) Failing after 9m15s
2026-07-10 17:10:59 +02:00
2de6690401
fix: import remote outbox on outbound follow accept (k-ap 0.4.2)
...
k-ap now emits OutboundFollowAccepted when remote accepts our follow.
Bridge maps it to FollowAccepted domain event. Worker handler looks up
the actor's outbox URL and calls import_remote_outbox. Previously the
accept was silent — no backfill happened, feed stayed empty.
2026-07-10 17:02:14 +02:00
12378c3649
fmt
2026-07-10 16:32:07 +02:00
46b8488b09
refactor: Feed uses SocialIdentity matching, deps From impl, remove get_accepted_following_urls
...
Feed builds FollowingFilter by matching SocialIdentity::Local/Remote
instead of URL-prefix heuristic. Removed get_accepted_following_urls
from SocialQuery (no longer needed). Added From<&AppState> for deps
structs — 20 construction sites collapsed to one-liners.
2026-07-10 16:31:05 +02:00
7e02f15a85
refactor: consolidate 11 social use cases → SocialCmd/SocialQry enum dispatch
...
-280 net lines. 11 one-file use cases replaced by execute_command/
execute_query with enum dispatch. Added FollowRejected event (reject
was silently dropping). Command→event mapping now explicit in one match.
2026-07-10 16:26:57 +02:00
d60c47199c
fix: FollowTarget enum — actor_url no longer lies about holding a handle
...
FollowCommand.target is now FollowTarget (Identity|Handle) instead of
SocialIdentity. actor_url field always holds a URL; handles go through
FollowTarget::Handle. Adapter resolves handles explicitly. Type system
prevents misuse in future commands.
2026-07-10 16:18:57 +02:00
2484f1e603
fmt
2026-07-10 16:03:36 +02:00
44d7df33a2
refactor: remove SocialQueryPort — replaced by SocialQuery + FederationAdminQuery
...
-319 lines. Legacy SocialQueryPort trait, NoopSocialQueryPort,
PanicSocialQueryPort all deleted. Federation repos now implement
FederationAdminQuery (single method). get_users uses FederationAdminQuery.
All other consumers use unified SocialQuery.
2026-07-10 16:02:27 +02:00
7cfa234902
refactor: SocialActor rich queries, migrate remaining handlers, slim SocialQueryPort
...
SocialQuery returns SocialActor (identity+handle+display_name+avatar_url)
instead of bare SocialIdentity. Migrated get_following_page,
get_followers_page, get_blocked_actors_page to use cases. Moved
get_activity_feed + get_profile from SocialQueryPort to SocialQuery.
Legacy SocialQueryPort remains only for get_users listing.
2026-07-10 15:52:37 +02:00
3ee75305a9
refactor: move ap_service from AppState to AppContext.Services
2026-07-10 15:34:23 +02:00
322e9ee81a
feat: unified social identity layer — SocialIdentity, ports, use cases, adapter
...
SocialIdentity value object (Local|Remote), SocialCommand/SocialQuery
domain ports, 11 CQRS use cases w/ 14 tests, CompositeSocialAdapter
wrapping k_ap, 6 new domain events, handlers migrated from ap_service
to use cases. Closes #12 foundation — AP handlers + legacy cleanup TBD.
2026-07-10 15:29:46 +02:00
96ce5f7d26
docs: domain glossary (16 terms) + ADR-0002 unified social identity
...
CONTEXT.md expanded with Movie, Person, Review, Rating, WatchMedium,
Watchlist, Goal, WrapUp, User, Follow, Feed, WatchEvent, Import,
ImportProfile, SocialIdentity. ADR-0002 documents wrap-k_ap decision.
2026-07-10 15:29:31 +02:00
6bf4ffc4ab
refactor: update rating validation logic — enforce minimum rating value
CI / Check / Test (push) Successful in 1h5m56s
2026-07-10 13:22:21 +02:00
fa881c3fd1
docs: update architecture.mmd+README — DiaryQuery, GoalCommand/GoalQuery, adapter-common crate
CI / Check / Test (push) Failing after 21m52s
2026-07-10 05:48:17 +02:00
0eb56c2be6
fmt
CI / Check / Test (push) Has been cancelled
2026-07-10 05:45:44 +02:00
c224cc6bd2
refactor: extract adapter-common crate — shared sqlx error mapping,
...
row-to-domain conversions, date/uuid utils
Eliminates 39 map_err copies, consolidates parse_uuid/parse_datetime/
datetime_to_str/format_year_month, extracts 7 shared row-to-domain
conversion functions (movie, review, watchlist, stats, user_summary).
Row structs stay per-adapter (FromRow is db-specific), only conversion
logic is shared. Net -281 lines.
2026-07-10 05:44:42 +02:00
6a9b4e5c00
refactor: LOW+MEDIUM cleanups — CQRS DiaryQuery/GoalCommand+GoalQuery,
...
test-helpers out of production, decompose get_user_profile_html,
dedup secure_flag, remove vestigial social_query, drop
PersistedImportSession, LoginCommand rename, DeleteAccountDeps,
PersonId macro, ReviewSortBy rename, TUI Command for fs::read,
generic PaginatedResponse<T>, noop ports for production fallbacks
2026-07-10 05:29:02 +02:00
5e0dde656c
refactor: LOW cleanups — dedup secure_flag, remove vestigial social_query,
...
drop PersistedImportSession, rename LoginQuery→LoginCommand, own
DeleteAccountDeps, PersonId via uuid_id! macro, rename SortDirection→
ReviewSortBy, TUI fs::read→Command, generic PaginatedResponse<T>
2026-07-10 05:04:35 +02:00
5266646b0b
fix: remove unused watch_event_query binding, prefix dead field for clippy -D warnings
2026-07-10 04:32:54 +02:00
2e32847129
docs+fix: update arch diagram/README/Insomnia, ApiError returns JSON
...
- architecture.mmd: CQRS trait names, ImageFetcher/RssFeedRenderer
ports, infra-wiring crate, api-types description
- README: add infra-wiring, note CQRS ports
- Insomnia: add PATCH /api/v1/reviews/:id
- ApiError returns {"error":"..."} JSON not plain text
2026-07-10 03:52:49 +02:00
dee013c7eb
refactor: remaining MEDIUM — CQRS splits, DI Deps, profile dedup, event Value, response enum
...
M1: MovieRepository→MovieCommand/MovieQuery, WatchEventRepository→
WatchEventCommand/WatchEventQuery
M2: goals/ and import/ use Deps structs
M7: extract upload_image helper in update_profile
M8: FederationDeliveryRequested activity_json String→serde_json::Value
M11: UserProfileResponse uses ProfileViewData enum
2026-07-10 03:50:43 +02:00
12da356a40
refactor: fix HIGH+MEDIUM architectural violations from code review
...
HIGH: fix watch_medium data-loss bug, standardize error handling on
ApiError, fix dep direction (rss/template-askama no longer dep on
application), extract ImageFetcher port (remove reqwest from app layer),
move event construction from save_review to use case, extract
infra-wiring crate (DbPool/EventBusBackend dedup), deduplicate
presentation helpers (encode_error, export streaming, multipart parsing)
MEDIUM: split LocalApContentQuery god-trait 10→3 methods, dedup movie
resolution orchestration, add RemoteActorDto/PersonDto mappers, move
AppConfig to infra-wiring, fix SocialQueryPort Uuid→UserId, replace
stringly-typed api-types with domain enums, move count_reviews_in_year
to StatsRepository, dedup event publisher cfg blocks, extract
should_enrich, move group_by_month to application, dedup
count_local_posts, add FederationFlags Default, TUI input helper +
ShowError rename + typed auth errors, api-types cleanup
(UserSettingsDto/UserProfileBase/PreviewRowData)
102 files changed, -681 lines net
2026-07-10 02:08:39 +02:00
26152660bb
fix: show remote user's reviews on their profile (include_remote when user_id set)
CI / Check / Test (push) Failing after 21m16s
2026-07-10 00:51:33 +02:00
c8f93bdd35
fix: human-readable watch medium labels in classic HTML (Media Server, Physical Media)
2026-07-10 00:44:23 +02:00
081a20ae31
fix: clippy too-many-args on update_remote_review, use RemoteReviewUpdate struct
2026-07-10 00:41:51 +02:00
cde2f5aaae
feat: federate watch_medium in AP review objects
...
- add watch_medium field to ReviewObject (outbound + inbound)
- update_remote_review passes watch_medium to DB
- unknown values silently ignored on ingest
2026-07-10 00:38:29 +02:00
f584bcd724
fix: diary page filters by authenticated user, excludes federated reviews
2026-07-10 00:35:51 +02:00
925f74bb3d
feat: auto-grow comment textarea, review detail sheet for full text
...
- textarea grows as you type instead of fixed 3 rows
- tap truncated comment to open detail sheet with full selectable text
- review detail sheet shows poster, rating, medium, date, full comment
2026-07-10 00:33:49 +02:00
306f4489fd
fix: hoist TooltipProvider to app root, remove per-component instances
2026-07-10 00:25:04 +02:00
5d4622e046
feat: tooltip with concrete date on relative timestamps in SPA
2026-07-10 00:22:14 +02:00
2e2adef5e0
fix: profile shows only own reviews, federation display name in community
...
- diary API accepts user_id filter, profile page passes it
- movie social feed joins ap_remote_actors for handle resolution
- COALESCE prefers actor handle for remote reviews, email for local
2026-07-10 00:19:23 +02:00
206ad44e82
fix: auto-set WatchMedium::MediaServer on webhook watch confirms
2026-07-10 00:07:52 +02:00
8eecd06fb8
docs: update README + architecture for WatchMedium and review editing
2026-07-10 00:05:36 +02:00