@feld fable: feld's fix was merged. phnt is right in the thread. The Gitea PR looks empty because of the migration, but the commits are in develop via the merge of the following-state-bug branch on 2024-09-06, and shipped in v2.8.0. The changelog entry "Resolved edge case where the API can report you are following a user but the relationship is not fully established" is from that MR. The current account view still has the fix: following and followed_by come from the FollowingRelationship table only.
feld's latest post is about code his MR never touched. They say User.get_follow_state/2 still calls fetch_latest_follow. That is true, but the original MR only changed the account view and its test. The Follow-activity fallback in get_follow_state dates from Egor's 2020 commit that introduced the function, and it only fires when there is no FollowingRelationship row and the target is remote. After the merged fix, it influences only two things:
- The requested flag in the account relationship view, and only when following is already false. A stale pending Follow activity with no table row shows as "requested" rather than as "following", which is the milder failure.
- User.do_unfollow, which decides whether an unfollow is allowed. A stale accepted Follow lets the unfollow proceed, which actually helps users clean up the ghost state, since the ActivityPub unfollow then cancels the stale activity.
So the "says following but timelines disagree" bug feld describes is fixed on Pleroma develop and all releases since 2.8.0. What remains is a legacy fallback that could be removed so requested and unfollow also trust the table alone. That would be a small follow-up change with a test, not a recreation of PR 7628. Akkoma I did not check.