Friends is the social layer in Loopa. This page is how to answer a ticket about it without breaking the one promise the feature is built on.
== The rule that shapes every answer ==
'''Never confirm or deny that a block exists.''' Not to the person blocked, not to the person who blocked them, not by implication, not "I can't see anything on my side".
The product is built the same way. A member who does not exist, a member who blocked you, a member you blocked, a member whose settings refuse you and a member who declined you last week all produce '''one identical answer''', the same wording and the same status code. Nothing support says should be more specific than the software is, because a support answer that narrows it down defeats the whole design.
== "I can't find my friend" ==
By far the most common ticket. It is one of three things and we do not say which:
1. They have chosen not to appear in username search. 1. The member is typing something other than the exact username. Search matches usernames only. Never a name, never an email address, never a phone number. 1. The connection has been closed from the other side.
'''The answer that is true in all three cases:'''
Members choose who can find them, and that setting can change at any time. I'm not able to see or share anything about another member's settings. The reliable way in is an invite link. If they send you theirs, it reaches them regardless of their search settings, and it works from any of the three: You → Friends → Add.
Every sentence there is true whether or not a block exists, which is what makes it safe to send.
== "My friend request disappeared" ==
It was declined. The person who sent it is never told, and the same two members cannot ask each other again for 30 days.
Do not say "it was declined". Say:
A request that isn't answered within a while stops showing in your sent list. There's nothing wrong with your account. If you'd rather reach them directly, ask them for their invite link.
== "Somebody unfriended me and I wasn't told" ==
Working as designed. Unfriending is silent in both directions, the same as blocking and for the same reason. Confirm that this is intended behaviour rather than a bug, and say that they were not singled out by it.
== "I can't send any more friend requests" ==
Two limits, both server-side and both per member:
* '''20 requests a day.''' Rolling 24 hours, so it clears gradually rather than at midnight. * '''100 unanswered requests at once.'''
There is also an automatic throttle: three reports against one member inside 30 days halves their daily limit to 10 until those reports age out. It is not a ban and the member is not told, so '''do not mention it'''. If a ticket looks like it might be that, escalate rather than explaining.
== Reports ==
'''Where they land:''' /admin/moderation on the tenant, alongside every other kind of report. A member report has type 'user' and carries a snapshot of the profile as it read when the report was filed, which is the useful part, because an abusive account changes its username and bio first.
'''The commitment is 24 hours.''' It is published in the community guidelines and the App Store review was granted against it. Child safety, credible threats and anything reading like a medical emergency go first.
'''What the reporter is told:''' that their report was reviewed. Nothing about the outcome. What happened to the other account is not theirs to know, and saying otherwise creates a retaliation risk.
'''Prefer the narrowest action.''' Suspending social features removes somebody from search, kills their invite links and stops new outgoing requests while leaving their health data, their logging and their subscription completely untouched. For a Friends complaint that is almost always the right first step. Taking away somebody's food diary over a social report is not proportionate.
== What a friend can actually see ==
Members ask this a lot, and the answer is short:
* display name * profile photo * the streak badge (how many days in a row they have logged '''something'''), only if that member left it switched on * how many friends the two of them have in common
'''Nothing from the health record.''' Not weight, food, fasting, cycle, measurements, vitals, photos, targets or allergens. Sharing any of that is a separate accountability-partner grant given category by category, and it ends automatically if the friendship ends or either side blocks.
If a member wants to see everything they are sharing and stop any of it: '''You → Preferences → Your Data'''.
== Things support cannot do ==
* Look up who has blocked whom, or tell anyone. * Reverse a block or an unfriend on a member's behalf. Both are the other member's decision. * Find a member by their email address. No search in Loopa does this, including ours. * Reveal the outcome of a report to the person who filed it.
== Escalate to Patrick ==
* Anything involving child safety. * A credible threat, or a report that reads like a medical emergency. * A member claiming another member is impersonating them. * Any request to disclose whether a block exists, however it is phrased.
Friends is the social layer in Loopa. This page is how to answer a ticket about it without breaking the one promise the feature is built on. == The rule that shapes every answer == '''Never confirm or deny that a block exists.''' Not to the person blocked, not to the person who blocked them, not by implication, not "I can't see anything on my side". The product is built the same way. A member who does not exist, a member who blocked you, a member you blocked, a member whose settings refuse you and a member who declined you last week all produce '''one identical answer''', the same wording and the same status code. Nothing support says should be more specific than the software is, because a support answer that narrows it down defeats the whole design. == "I can't find my friend" == By far the most common ticket. It is one of three things and we do not say which: 1. They have chosen not to appear in username search. 1. The member is typing something other than the exact username. Search matches usernames only. Never a name, never an email address, never a phone number. 1. The connection has been closed from the other side. '''The answer that is true in all three cases:''' <blockquote> Members choose who can find them, and that setting can change at any time. I'm not able to see or share anything about another member's settings. The reliable way in is an invite link. If they send you theirs, it reaches them regardless of their search settings, and it works from any of the three: You → Friends → Add. </blockquote> Every sentence there is true whether or not a block exists, which is what makes it safe to send. == "My friend request disappeared" == It was declined. The person who sent it is never told, and the same two members cannot ask each other again for 30 days. Do not say "it was declined". Say: <blockquote> A request that isn't answered within a while stops showing in your sent list. There's nothing wrong with your account. If you'd rather reach them directly, ask them for their invite link. </blockquote> == "Somebody unfriended me and I wasn't told" == Working as designed. Unfriending is silent in both directions, the same as blocking and for the same reason. Confirm that this is intended behaviour rather than a bug, and say that they were not singled out by it. == "I can't send any more friend requests" == Two limits, both server-side and both per member: * '''20 requests a day.''' Rolling 24 hours, so it clears gradually rather than at midnight. * '''100 unanswered requests at once.''' There is also an automatic throttle: three reports against one member inside 30 days halves their daily limit to 10 until those reports age out. It is not a ban and the member is not told, so '''do not mention it'''. If a ticket looks like it might be that, escalate rather than explaining. == Reports == '''Where they land:''' /admin/moderation on the tenant, alongside every other kind of report. A member report has type 'user' and carries a snapshot of the profile as it read when the report was filed, which is the useful part, because an abusive account changes its username and bio first. '''The commitment is 24 hours.''' It is published in the community guidelines and the App Store review was granted against it. Child safety, credible threats and anything reading like a medical emergency go first. '''What the reporter is told:''' that their report was reviewed. Nothing about the outcome. What happened to the other account is not theirs to know, and saying otherwise creates a retaliation risk. '''Prefer the narrowest action.''' Suspending social features removes somebody from search, kills their invite links and stops new outgoing requests while leaving their health data, their logging and their subscription completely untouched. For a Friends complaint that is almost always the right first step. Taking away somebody's food diary over a social report is not proportionate. == What a friend can actually see == Members ask this a lot, and the answer is short: * display name * profile photo * the streak badge (how many days in a row they have logged '''something'''), only if that member left it switched on * how many friends the two of them have in common '''Nothing from the health record.''' Not weight, food, fasting, cycle, measurements, vitals, photos, targets or allergens. Sharing any of that is a separate accountability-partner grant given category by category, and it ends automatically if the friendship ends or either side blocks. If a member wants to see everything they are sharing and stop any of it: '''You → Preferences → Your Data'''. == Things support cannot do == * Look up who has blocked whom, or tell anyone. * Reverse a block or an unfriend on a member's behalf. Both are the other member's decision. * Find a member by their email address. No search in Loopa does this, including ours. * Reveal the outcome of a report to the person who filed it. == Escalate to Patrick == * Anything involving child safety. * A credible threat, or a report that reads like a medical emergency. * A member claiming another member is impersonating them. * Any request to disclose whether a block exists, however it is phrased.