Work / AskCal / Wiki / Decisions
2026-09-28-what-is-not-drawn
Decisioncanonicalverified 2026-09-28
DECISION.DESIGNS.WHAT-IS-NOT-DRAWNSummary
routes.js missing is empty, and this page is why it is allowed to be.
The rule
missing means one thing only: app behaviour that no wireframe draws. An
empty list is therefore a claim — every screen, state, card and dialog the app
can put in front of someone is drawn somewhere in the set, and
scripts/check-designs.py enforces the mechanical half of it.
It held four entries that were not that. Three were notes about things the app does not do, and one was wrong. Keeping them there made the list mean "anything unresolved", and a list that means that cannot be read as a gap report — which is the only reason it exists.
Surfaces the app does not have
Nothing to draw, so nothing is missing.
- Offline. The log, the targets and the gallery are local; only the scan
needs the network, and it degrades to the offline toast in toasts rather
than to a screen. Already recorded in
routes.jsunderstates.offline. - 404 and maintenance. The app is offline-first with one API call. Neither surface exists in the product, so neither can be drawn.
Sample data that differs on purpose
- The editor's own example foods.
portion-count.htmldraws a fried egg andportion-liquid.htmlan orange juice, neither of which is on the dish the result and meal screens draw. The three files are three faces of ONE screen, so a row links to the face its food earns and the example inside differs. See portion.
A claim removed on a false premise
Per-food density for a poured measure, and the record corrected.
portion-liquid.html used to print = 258 g · buttermilk is 1.03 g/ml. It was
removed, and missing recorded the reason as: no code implements it,
DEFAULT_PER_UNIT_G.ml is 1, so the app converts every millilitre at water.
That is not true, and the constant it names does not exist. A Measure carries
its own gramsPerUnitMilli, and fromWire DERIVES it from the grams the
provider already sent — grams * 2000 / qtyHalves — precisely so the model is
never asked for a third number it could contradict. 250 ml of buttermilk at
258 g yields 1.032 g/ml, per food, with no density table anywhere.
What neither side prints is the g/ml annotation, and they agree on that: the
app prints only the derived gram line, and so does the wireframe. The sample was
changed from 250 ml = 250 g to = 258 g so the line does not read as a no-op
and imply the water conversion the app was wrongly accused of.
Related
Sources
- .context/designs/mobile/routes.js
- apps/mobile/src/lib/measure.ts
Every project of mine is written down like this.
Read the résumé