mobieusKnow Handling Friends tickets History #498
Author
Patrick Bass
Submitted
Aug 22, 2026 1:40am
Summary
Friends: how to answer a ticket without confirming a block
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''' — same
+ wording, same status code. Nothing support says should be more specific than the
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:
+ # They have chosen not to appear in username search.
+ # 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.
+ # The connection has been closed from the other side.
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: More → Friends → Add.
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
Working as designed. Unfriending is silent in both directions, the same as
blocking and for the same reason. Confirm that this is intended behavior 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
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.
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
* 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: '''More
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''' — same wording, 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:

# They have chosen not to appear in username search. # 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. # 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: More → 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: '''More → 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''' — same
wording, 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:

# They have chosen not to appear in username search.
# 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.
# 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: More → 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: '''More
→ 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.