442a61bbdb
feat: add optional mood to thoughts with custom moods support
...
lint / lint (push) Failing after 9m28s
test / unit (push) Successful in 16m8s
Mood is an optional label+emoji string (e.g. "relaxed 😌 ") on thoughts.
Users can define up to 8 custom moods in profile settings.
Mood federates via AP Note JSON and displays on thought cards.
2026-05-29 15:38:35 +02:00
be27fe04e2
docs: sync README with actual features, fix default port to 8000
...
lint / lint (push) Failing after 9m25s
test / unit (push) Successful in 16m42s
- Add missing features: profile fields, custom CSS, visibility
levels, CW/sensitive, feed sort/filter, popular tags, account
migration
- Fix top friends limit: 5→8
- Default PORT 3000→8000 in code, README, and .env.example
- Deduplicate frontend env docs, update contributing section
2026-05-29 14:31:17 +02:00
6d0b1a3121
refactor: eliminate User/UserResponse struct literals, add AP user tests
...
- Feed/search adapters use #[sqlx(flatten)] UserRow instead of
inline User construction — single point of change when User
gains fields
- User::new_remote constructor replaces struct literal in testing
- to_summary_response replaces inline UserResponse in get_users
- 5 integration tests for PgApUserRepository (find, count,
profile_fields→attachment)
2026-05-29 14:17:41 +02:00
020a79704f
refactor: dedup JSONB name/value helpers, add profile fields validation
...
lint / lint (push) Failing after 9m29s
test / unit (push) Has been cancelled
Extract parse/serialize into postgres::jsonb, used by user,
remote_actor, and postgres-federation. Validate profile fields
in update_profile use case (max 4, name≤64, value≤256).
2026-05-29 13:59:39 +02:00
805bd9534f
feat: add profile fields for local users
...
DB→domain→API→AP→frontend end-to-end. Fields stored as
JSONB, exposed via PATCH /users/me, serialized as AP
PropertyValue attachment. Editor in federation settings,
display on profile card.
2026-05-29 13:54:25 +02:00
14a869cc8d
fix(federation): convert remote actor posts handler to PagedResponse
...
lint / lint (push) Failing after 9m36s
test / unit (push) Successful in 16m25s
missed in prior refactor — was still returning snake_case per_page via json!
2026-05-29 12:23:28 +02:00
9798a1d829
refactor: type safety + dedup cleanup across 13 code smells
...
test / unit (push) Has been cancelled
lint / lint (push) Has been cancelled
- typed PagedResponse/CreatedApiKeyResponse/NotificationSummaryResponse replace json! blocks
- extract TagRow/ApiKeyRow/OutboxRow to module level, top_friend uses sqlx flatten
- add should_broadcast() helper, inline dead let bindings in federation_event
- add UploadContext struct, extract_upload_field, wants_activity_json helpers
- rename PostgresFederationRepository→PgFederationRepository, PostgresApUserRepository→PgApUserRepository
- add IntoAnyhow trait replacing ~30 .map_err(|e| anyhow!(e)) calls
- extract build_ap_service shared between bootstrap and worker factories
- add postgres/constants.rs, PartialEq+Eq on PasswordHash
2026-05-29 12:02:03 +02:00
84edf58de6
fix(federation): fix 27 AP bugs, gaps, and inconsistencies
...
lint / lint (push) Failing after 9m26s
test / unit (push) Successful in 16m3s
Round 1 — 18 bug fixes:
- remote likes/boosts now persist in engagement tables
- intern_remote_actor uses name@domain, expanded username to VARCHAR(255)
- PgRemoteActorRepository upsert/find now handles all fields
- update_following_status no longer a no-op, count_followers counts all
- accept/reject follow publishes event before DB mark (atomicity)
- fetch_outbox_page follows pagination via next links
- actor URL canonicalized to /users/{uuid}
- content_to_html escapes single quotes
- WebFinger accepts application/ld+json type
- try_from_ap accepts Article and Page object types
- feed SQL uses parameterized viewer UUID instead of format!
- content cap raised from 500 to 5000 chars
- also_known_as changed from Option<String> to Vec<String>
- connections fetch always triggers from page 1
Round 2 — 9 gap fixes:
- on_announce_removed handler deletes boost row on Undo(Announce)
- on_update handles Person/Service/Group actor profile updates
- sync_remote_actor_to_user syncs remote_actors → users on create/update
- FederationBlockPort: block_by_username sends Block activity to remote
- domain RemoteActor gains inbox_url, shared_inbox_url fields
- remote_actors attachment column (JSONB) with read/write
- .well-known/host-meta endpoint
- 256KB body limit on AP inbox routes
- outbox cleanup job (7-day retention, hourly sweep)
2026-05-29 11:28:40 +02:00
f9de21dcfa
refactor(tests): remove unused value_objects imports from test files
lint / lint (push) Failing after 9m20s
test / unit (push) Successful in 16m13s
2026-05-29 10:18:18 +02:00
79f1e63bb8
perf(feed): replace correlated subqueries with LEFT JOIN aggregations
...
lint / lint (push) Failing after 9m14s
test / unit (push) Successful in 16m3s
Feed queries ran 5 correlated subqueries per row (3 COUNT + 2 EXISTS
for engagement counts and viewer context). Replaced with LEFT JOIN
aggregations computed once per query. Adds migration 016 with indexes
on likes(thought_id), boosts(thought_id), thoughts(in_reply_to_id),
and compound viewer-context indexes — expected to drop ~3s queries to
<100ms on typical page sizes.
Also removes WebFinger from the footer (requires query params, zero
standalone value as a link).
2026-05-29 04:35:32 +02:00
bcd86fbfe7
refactor: extract handler business logic into application use cases
...
test / unit (push) Has been cancelled
lint / lint (push) Has been cancelled
11 handlers were calling repos/ports directly, bypassing the
application layer. Extracted into proper use cases:
feed: get_public_feed, get_user_feed, get_tag_feed, get_popular_tags
profile: get_user_profile (with follow check), list_users,
count_local_users, list_local_followers, list_local_following
federation_management: set_also_known_as
Also registers 9 previously undocumented handlers in OpenAPI modules.
2026-05-29 04:22:43 +02:00
5b4b747dd7
feat(federation): enrich RemoteActor with bio, banner, followers/following URLs
...
lint / lint (push) Failing after 9m25s
test / unit (push) Has been cancelled
Bumps k-ap to 0.3.1 which adds bio, banner_url, followers_url,
following_url, and also_known_as to RemoteActor. These are populated
from fetched actor JSON at follow/ingest time so followers and following
listings no longer return null profile fields.
Adds migration 015 for the new remote_actors columns, updates all JOIN
queries in postgres-federation to select and return the new fields, and
maps them through k_ap_actor_to_domain.
Also fixes clippy: remove empty line after doc comment in port.rs.
2026-05-29 04:07:52 +02:00
bd370776fe
refactor: simplify function signatures and improve code readability
lint / lint (push) Failing after 9m6s
test / unit (push) Has been cancelled
2026-05-29 03:47:29 +02:00
ecb61f9b8f
feat: add federation processed activities table and update dependencies
...
test / unit (push) Has been cancelled
lint / lint (push) Has been cancelled
- Created a new SQL migration to add the `federation_processed_activities` table with an index on `processed_at`.
- Updated dependencies in `Cargo.toml` files across `bootstrap` and `worker` crates, including version updates for `k-ap`.
- Enhanced the event publishing mechanism in the `factory.rs` file to include a new `KapPublisher` for handling federation events.
- Refactored the `build` function in `factory.rs` to accommodate the new event publisher and improve ActivityPub service initialization.
- Modified the worker's main loop to handle new federation event types and improved error handling for event processing.
Co-authored-by: Copilot <copilot@github.com >
2026-05-29 03:47:06 +02:00
37d03a06dd
docs(openapi): fix schema registration for federation actors and management
lint / lint (push) Failing after 8m56s
test / unit (push) Successful in 16m29s
2026-05-29 02:09:16 +02:00
55e5bcc2bb
docs(openapi): register federation management and actors doc modules
2026-05-29 02:08:08 +02:00
ac26eaca6b
docs(openapi): annotate federation actors handlers and add doc module
2026-05-29 02:06:40 +02:00
86d0497509
docs(openapi): annotate all federation management handlers and add doc module
2026-05-29 02:04:59 +02:00
989004dd74
docs(openapi): annotate all missing user handlers
2026-05-29 02:02:31 +02:00
64cc11c2a1
docs(openapi): annotate get_followers, get_following, get_popular_tags handlers
2026-05-29 02:00:53 +02:00
01ef118b0a
docs(openapi): add FeedOptionsQuery IntoParams and update feed annotations
2026-05-29 01:59:17 +02:00
8229285a2f
refactor(postgres): format FeedSqlBuilder for improved readability
2026-05-29 00:13:55 +02:00
145b07d636
refactor(postgres): introduce FeedSqlBuilder to consolidate SQL construction
2026-05-29 00:11:07 +02:00
0688ffe0ae
feat(backend): wire FeedRequest/FeedOptions sort+filter through all feed layers
2026-05-28 23:45:46 +02:00
95728302b7
feat(domain): add FeedSort, FeedFilter, FeedOptions, FeedRequest CQRS query types
2026-05-28 23:39:35 +02:00
e406464f9f
feat(presentation): add GET /federation/me/friends handler and route
lint / lint (push) Failing after 9m24s
test / unit (push) Successful in 16m41s
2026-05-28 03:48:59 +02:00
0e2b72b77a
feat(presentation): add GET /users/me/friends handler and route
2026-05-28 03:46:52 +02:00
d4da172398
feat(application): add get_remote_friends use case
2026-05-28 03:44:41 +02:00
4e750420bf
feat(application): add get_local_friends use case
2026-05-28 03:43:35 +02:00
e6330125be
test(postgres): add list_mutual integration tests
2026-05-28 03:42:12 +02:00
14b7928026
fix: list_mutual sort by follow created_at, apply pagination in TestStore
2026-05-28 03:40:44 +02:00
a6a555e6a7
feat(domain): add list_mutual to FollowRepository, add remote actor storage to TestStore
2026-05-28 03:37:41 +02:00
4d4171a9c5
fix(clippy): remove unused PasswordHash import
2026-05-28 03:00:54 +02:00
75e6fe61ca
fix: look up remote parent by ap_id to thread remote-to-remote replies
2026-05-28 02:59:45 +02:00
d68c628335
refactor: delegate mark_follower_accepted/rejected through k-ap service, remove federation_repo from ApFederationAdapter
2026-05-28 02:45:59 +02:00
af5c4481b6
fix: extract initiate_actor_move use case — remove event publish from handler
2026-05-28 02:41:42 +02:00
5e3db44043
fix(tests): update federation_management tests for EventPublisher arg
2026-05-28 02:34:30 +02:00
915163aac4
feat: split accept/reject into DB+event; broadcast_move via event in API
2026-05-28 02:32:50 +02:00
a06d09c101
feat(worker): add FederationManagementHandler and wire into event loop
2026-05-28 02:30:22 +02:00
0dce4fbe64
feat(application): add FederationManagementEventService
2026-05-28 02:28:15 +02:00
9c93baaa39
fix(bootstrap,worker): pass shared federation_repo to ApFederationAdapter
2026-05-28 02:26:57 +02:00
a253efacec
feat(activitypub): add federation_repo field and thin DB-only methods to ApFederationAdapter
2026-05-28 02:24:43 +02:00
04f39e35c2
feat(domain): add mark_follower_accepted/rejected thin port methods
2026-05-28 02:22:52 +02:00
2060317867
fix(event-payload): correct NATS subjects for federation events
2026-05-28 02:20:43 +02:00
e338254099
feat(domain): add RemoteFollowAccepted, RemoteFollowRejected, ActorMoved events
2026-05-28 02:19:46 +02:00
2445cad1c9
feat: add PATCH /federation/me/also-known-as endpoint
...
Adds alsoKnownAs column to users table (migration 013), reads it in
the AP actor JSON, and exposes PATCH /federation/me/also-known-as to
set or clear it. Required pre-condition for broadcast_move.
2026-05-28 01:59:35 +02:00
fc290dc18f
fix: update user URL handling in ThoughtsObjectHandler to use user_id
2026-05-28 01:51:55 +02:00
43e5175db5
fix: add broadcast_move stub to TestStore
2026-05-28 01:50:37 +02:00
50a90efbce
feat: add POST /federation/me/move endpoint
2026-05-28 01:47:29 +02:00
ff75361eb1
feat: bump k-ap to v0.1.9 and implement migrate_follower_actor
2026-05-28 01:43:06 +02:00