The question on the road
Dad was driving. He asked Pippa whether he was on the right road, and she said yes. She had no location at all: no fix from his phone, no route, nothing to compare anything against. The answer was warm, confident, and made of nothing.
He caught it. And he did what he does with every mistake worth keeping: he turned it into work. Three coop todos came out of that one wrong "yes": GPS into Pippa (#288), location-aware travel help in Waystone (#289), and a standalone navigation app (#290). That app is Pathfinder, and this whole quest is about it. Its architecture document still carries the goal in one line: keep Dad from getting lost first, then grow.
Why a confident yes is the worst answer
An assistant asked "am I on the right road?" has three honest outputs and one dishonest one. "Yes" with evidence. "No" with evidence. "I can't know, where are you?" And then the fourth: "yes" with nothing behind it.
The fourth is worse than the third, and not by a little. "I can't know" is annoying, but it hands the problem back to the person who can still solve it: Dad glances at a sign, checks the phone, slows down. A baseless yes takes that moment away. It does not just fail to help; it suppresses the check he would otherwise have made. That is the whole danger of fluency without facts: it sounds exactly like knowledge, and people lean on automated answers that sound like knowledge.
Two fixes, two layers
The first fix is a rule, and it lives in cwkPippa's location layer as rule one: no claim without a fix. Pippa never says where Dad is, which road he is on, or that he is going the right way without a measured position, and when she has one she says how old and how precise it is. No fix: she asks him. A fix is evidence of where a device was, and "current" means at most 120 seconds old.
But a position alone still cannot answer Dad's question. "Am I on the right road?" is not "where am I?". It is "where am I relative to the route I am supposed to be on?", and answering that takes a planned route and map matching against it. Pippa does not guide. Something has to, and has to tell her what it knows. That is the second fix: Pathfinder.
What Pathfinder gives Pippa
Beside each fix it posts to POST /api/location as reporter pathfinder, the phone sends a PippaNavigationReport:
- state:
idle,guiding,off_route,reroutingorarrived, plus the mode (driving or walking, because a walk asks different help than a drive); - destination and route: name, provider, distance, expected time, start, how many reroutes;
- progress: remaining metres and seconds, the ETA, the next maneuver and its distance, how far off the route;
- the next speed camera.
While a trip is guided it reports every 20 seconds when nothing happens, and at once when something does. cwkPippa validates the report rather than trusting it, keeps one per reporter, and active_navigation picks the freshest report that is not idle and not older than 120 seconds. The turn block then says it in words: "ON the planned route: its map matching places him on it," or "OFF the planned route by about 84 m; a new route is coming."
So the next time Dad asks, Pippa's yes is Pathfinder's map matching, with its age attached. Past two minutes, the report is not a drive in progress any more, and she is back to asking.
Dropped, never queued
One quiet detail completes the picture. When the phone cannot reach Pippa, its reports are dropped, never queued for later. The app just marks itself "Pippa unreachable" and moves on. A queue would sound more robust, and it would be the same lie in a slower shape: a position delivered late reads as where Dad is now. Freshness is part of the evidence, so the system throws away what has gone stale instead of delivering it.