October 4, 2026 at 12:00:00 AM UTC
Indigo muted words and hide-reposts
indigoatprotoc3ds
The last Cobalt parity gap was feed filtering: Cobalt honours the account's saved muted words and the home timeline's hide-reposts preference (commit d4c1686, issue #106); Indigo did not. This ports the whole module.
Changes
src/atproto/prefs.{c,h}— pure, host-testable muted-word matching, matching Cobalt's rules exactly: case-insensitive; a single alphanumeric word matches whole words only (muting "cat" does not hide "category"); a phrase or punctuated word matches as a substring; tag mutes match facets with or without the leading#; a word with no targets is content-only.indigo_prefs_filter_pagecompacts a session page in place and returns how many posts were dropped.src/atproto/prefs_wolfram.c— the Wolfram conversion, kept out ofprefs.cso the host build never sees Wolfram headers. Skips expired mutes (the server keeps the records), readshide_repostsoff thehomefeed view, mapscontent/tagtargets.src/util/timefmt.c—indigo_time_parse_rfc3339andindigo_time_now. The parser is Howard Hinnant'sdays_from_civilarithmetic rather thantimegm, which devkitARM lacks; it accepts only the UTC form ATProto requires (fractional seconds tolerated, numeric offsets rejected). The epoch islong longbecause the 3DS'slongis 32 bits and a far-future expiry would not fit.src/atproto/session.c—ensure_prefs()fetches preferences once per sign-in viawf_agent_get_actor_prefs_typed, non-fatal on failure (feed shown unfiltered, retried next page).do_timelinefilters withhome=true,do_feedwithhome=false— hide-reposts is a home-timeline preference only.drop_agent()resets the loaded flag.- Tests:
test_prefsand parser cases intest_time_rfc3339ported from Cobalt's suite. AGENTS.md §28, README, and CHANGELOG updated.
Verification
make test: 2940 checks, 0 failures (was 2845).make warningsclean,make snapshotsunchanged.- Clean
makecross-build with devkitARM:indigo.3dsxbuilds. Cross-build verified only, not run on hardware.
Empty-after-filter pages keep the cursor and the app auto-requests the next page, terminating at feed end — same behaviour as Cobalt. Indigo commit fb46dea.
all entries