Adds fetched_at to RemoteActor, configurable TTL via builder
(.actor_cache_ttl_secs, default 24h), and get_or_refresh_remote_actor
helper that re-fetches stale actors from origin.
Closes#3
Bump to 0.3.1. These fields are available on DbActor at follow/ingest
time but were discarded when constructing RemoteActor. Now populated
in from_json and follow(), so consuming repos can store and return
rich actor profiles without extra queries.
Undo(Announce): now removes announce record from ActorRepository and
calls ApObjectHandler::on_announce_removed (default no-op, override
to decrement boost counts). Announce counts no longer drift.
Undo(Block): now logged at info level instead of silently ignored.
No automatic relationship restoration (spec doesn't require it).
AddActivity: now uses object["id"] as the stable ap_id (same as
CreateActivity), falling back to activity id only if object has no
id field. Fixes keying watchlist/collection items by the wrong id.
Featured collection: GET /users/{id}/featured now served by the router.
ApContentReader::get_featured_objects() has a default empty-list impl
— override to expose pinned posts without any breaking changes.
#1 count_accepted_followers / get_accepted_followers_page: new DB-side
methods on FollowRepository — no more loading all followers into memory
to count or page them.
#2 Move re-follows are now non-blocking: tokio::spawn instead of
awaiting each sign_and_send inside receive() — inbox handler no longer
stalls for slow remote servers during account migration.
#3 Remove get_local_objects_for_user from ApContentReader (dead code).
Backfill and outbox both use the paginated get_local_objects_page.
#6 Rename backfill_outbox → import_remote_outbox with a clear doc
explaining the direction (import FROM a remote server, not to a follower).
#7 also_known_as: Option<String> → Vec<String> on ApUser, LookedUpActor,
and DbActor. from_json now stores all aliases; move_act.rs checks all.
Mentions: broadcast_create_note / broadcast_update_note now accept
mentioned_inboxes: Vec<Url> — delivery goes to followers + mentioned
actors who aren't already followers. Deduplication is done before
sending. Pass vec![] if note has no external mentions.
Docs: ApObjectHandler and ApContentReader now have complete doc comments
with contracts, idempotency guidance, and error-handling semantics.