An item with no price is not a menu item
We found a live QR menu offering customers toilet roll, bin bags and cling film, all at nothing. Two ordinary settings met and produced something nobody would ever have typed on purpose.
A routine look through a live database, not a bug report. One of the kitchens at our own hall had a hundred rows on its customer menu that should never have been within a mile of a customer: Toilet Tissue, Bin Bags, Nitrile Gloves, Cling Film, Tin Foil, a Disposable Wooden Fork. All of them tappable. All of them priced at nothing.
Nobody did anything wrong
That is the part worth sitting with. Two perfectly reasonable behaviours met in the middle.
The first: a kitchen that has not built a named menu yet gets shown its whole item list. That is a kind default. A vendor who has just typed in twelve dishes should see twelve dishes on their QR code without first learning what a menu object is.
The second: that kitchen had imported its supplier list, and every purchasing line came in flagged as visible. Also reasonable on its own — those rows are real, they belong to the kitchen, and they need to exist somewhere.
Neither is a mistake. Together they put a packet of blue roll on a phone.
The rule we should have had
The fix is one sentence, and it is embarrassing that it took an incident to write it down: a customer is never shown something with no price. Not hidden as a special case, not filtered on a screen — refused at the point where the guest menu is assembled, so every surface that asks the same question gets the same answer.
An item with no price is not a free gift. It is a row somebody has not finished. Treating those two states as the same thing is how a system ends up offering a customer a fork for nothing.
Silence would have been its own bug
A hundred items vanishing from a menu with no explanation is not a fix, it is a second mystery. So the Menu screen now says it out loud — how many items are being held back, the first few by name, and the two ways out: give it a price, or switch it off. The reason those rows were on a customer's phone in the first place is that nothing anywhere had ever mentioned them.