mobieusKnow Handling meal history tickets History #674
Author
Patrick Bass
Submitted
Sep 5, 2026 4:34am
Summary
Family meal sharing tickets: the conditions behind the share button and the Share with family? switch, reading a "logged but not shared" report back to a member, sharing a saved meal without logging it, and what to escalate

'''Who this is for.''' Support staff taking tickets about meal history: the calendar, copying meals, the meal draft, and excluding a food. The member-facing guide is [https://loopa.mobieus.io/know/meal-history Meal history].

== "I can't find it" ==

'''Health → Food → History.''' It is a tile on the Food screen beside '''My Meals''', on both apps. There is no web version: this is a phone feature.

If the tile is not there, the member is on a build older than iOS 120 / Android 78.

== "It says I need Premium" ==

It is '''Premium''', on the feature key meal_history. That is correct and not a fault.

The one thing a Basic member can reach is the '''vocabulary''' (the meal-slot and reason lists), which exists so the app can draw the offer itself. Everything that touches their own diary answers '''402''', which both apps render as the purchase sheet.

Saved meals themselves are '''free'''. A Basic member can still build and log a saved meal; what they cannot do is read their history back to build one from it.

== "My old days are empty" ==

Two different things, and they look the same:

  • '''They genuinely logged nothing.''' The screen names the day it is showing ("You didn't log any food on Tuesday, 12 August"), so read the ticket's screenshot for the date.
  • '''They are on Basic.''' A free member's history clamps to 30 days everywhere in the app, so a Premium member who lapses sees their older days disappear from every history surface, not just this one. Resubscribing brings them back; nothing was deleted.

== "The copy didn't work" ==

The copy is '''all or nothing'''. If one thing in the request cannot be resolved, none of it is written, so a member copying three meals and being told about one of them has had nothing land, not two thirds of it.

The refusals, and what each means:

  • '''source_not_found''' means the meal named has nothing in it, '''or''' the food is no longer in their log. Those two are deliberately the same answer.
  • '''future_date''' means they picked a day that has not happened. The picker should not offer one; if it did, get the build number.
  • '''bad_meal_type''' means the destination slot is not one the server knows. Almost always a stale build against a newer catalog.
  • '''too_many''' means more than 100 meals and items in one request.

'''A copy never removes anything.''' If a member says a copy "wiped" their day, it did not: the copy appends, and what they are looking at is probably a duplicate. Have them delete the entry they do not want from the Food log.

== "It went into the wrong meal" ==

The destination picker starts on '''Same as source''', which keeps a lunch a lunch. If they wanted it somewhere else and did not change it, the copy is doing what it was told. They can delete the entries and copy again.

'''Dessert''' is a real destination and has been since 2026-09-03. If a copy into Dessert fails on a particular tenant with a database error, that tenant has not had the migration applied. Escalate rather than working around it.

== "I excluded a food and it's still in my log" ==

Working as designed. '''Excluding a food says what to stop offering; it does not edit what they ate.''' Loopa stops suggesting it and flags it if it turns up in a plan or a meal idea, and their history is untouched.

== "Undo didn't appear" ==

The Undo shows '''only when the exclusion was newly added'''. If the food was already on their never-eat list, there is nothing this action did that undoing would reverse, and offering it would have let them remove something they set weeks ago with one tap.

To take a food off the list either way: the '''hand''' icon at the top of the history screen, or Settings → food preferences. '''It is one list, reached from two places.'''

== "My draft disappeared" ==

The draft lives on the '''history screen''', and it survives changing day, which is the point of it. It does '''not''' survive closing the app: it is not saved anywhere until they name it and tap '''Save To My Meals'''.

Once saved it is an ordinary saved meal and appears in '''My Meals''' like any other.

== What to escalate ==

  • A copy that reports success and does not appear in the Food log.
  • A member whose history is empty on Premium with an active seat.
  • Any tenant where a copy into '''Dessert''' fails with a database error.
  • A '''402''' reaching a member who holds an active Premium seat.
'''Who this is for.''' Support staff taking tickets about meal history: the calendar, copying meals, the meal draft, and excluding a food. The member-facing guide is [https://loopa.mobieus.io/know/meal-history Meal history].

== "I can't find it" ==

'''Health → Food → History.''' It is a tile on the Food screen beside '''My Meals''', on both apps. There is no web version: this is a phone feature.

If the tile is not there, the member is on a build older than iOS 120 / Android 78.

== "It says I need Premium" ==

It is '''Premium''', on the feature key `meal_history`. That is correct and not a fault.

The one thing a Basic member can reach is the '''vocabulary''' (the meal-slot and reason lists), which exists so the app can draw the offer itself. Everything that touches their own diary answers '''402''', which both apps render as the purchase sheet.

Saved meals themselves are '''free'''. A Basic member can still build and log a saved meal; what they cannot do is read their history back to build one from it.

== "My old days are empty" ==

Two different things, and they look the same:

* '''They genuinely logged nothing.''' The screen names the day it is showing ("You didn't log any food on Tuesday, 12 August"), so read the ticket's screenshot for the date.
* '''They are on Basic.''' A free member's history clamps to 30 days everywhere in the app, so a Premium member who lapses sees their older days disappear from every history surface, not just this one. Resubscribing brings them back; nothing was deleted.

== "The copy didn't work" ==

The copy is '''all or nothing'''. If one thing in the request cannot be resolved, none of it is written, so a member copying three meals and being told about one of them has had nothing land, not two thirds of it.

The refusals, and what each means:

* '''`source_not_found`''' means the meal named has nothing in it, '''or''' the food is no longer in their log. Those two are deliberately the same answer.
* '''`future_date`''' means they picked a day that has not happened. The picker should not offer one; if it did, get the build number.
* '''`bad_meal_type`''' means the destination slot is not one the server knows. Almost always a stale build against a newer catalog.
* '''`too_many`''' means more than 100 meals and items in one request.

'''A copy never removes anything.''' If a member says a copy "wiped" their day, it did not: the copy appends, and what they are looking at is probably a duplicate. Have them delete the entry they do not want from the Food log.

== "It went into the wrong meal" ==

The destination picker starts on '''Same as source''', which keeps a lunch a lunch. If they wanted it somewhere else and did not change it, the copy is doing what it was told. They can delete the entries and copy again.

'''Dessert''' is a real destination and has been since 2026-09-03. If a copy into Dessert fails on a particular tenant with a database error, that tenant has not had the migration applied. Escalate rather than working around it.

== "I excluded a food and it's still in my log" ==

Working as designed. '''Excluding a food says what to stop offering; it does not edit what they ate.''' Loopa stops suggesting it and flags it if it turns up in a plan or a meal idea, and their history is untouched.

== "Undo didn't appear" ==

The Undo shows '''only when the exclusion was newly added'''. If the food was already on their never-eat list, there is nothing this action did that undoing would reverse, and offering it would have let them remove something they set weeks ago with one tap.

To take a food off the list either way: the '''hand''' icon at the top of the history screen, or Settings → food preferences. '''It is one list, reached from two places.'''

== "My draft disappeared" ==

The draft lives on the '''history screen''', and it survives changing day, which is the point of it. It does '''not''' survive closing the app: it is not saved anywhere until they name it and tap '''Save To My Meals'''.

Once saved it is an ordinary saved meal and appears in '''My Meals''' like any other.

== What to escalate ==

* A copy that reports success and does not appear in the Food log.
* A member whose history is empty on Premium with an active seat.
* Any tenant where a copy into '''Dessert''' fails with a database error.
* A '''402''' reaching a member who holds an active Premium seat.