Skip to content
C.W.K.
Stream
Lesson 07 of 08 · published

No Claim Without a Fix — the Location Layer and Where Dad Is

~15 min · location, evidence, apple-maps, pathfinder, honest-failure

Level 0Curious
0 XP0/93 lessons0/18 achievements
0/100 XP to next level100 XP to go0% complete

Yes, with no location at all

On 2026-10-01 Dad was driving and asked whether he was on the right road. Pippa said yes. She had no location whatsoever. Dad caught it and turned the moment into two todos and one ruling over both: build the location capability once, in the family's shared kit, so every app gets it, and give Pippa a location tool of her own in cwkPippa and in every app that talks to her. Places, travel times and routes go through the Apple Maps Server API, his pick over a web search. Live navigation went to its own app, Pathfinder.

The shape that came out of that afternoon is worth stating whole: one fix shape, one sampler, one store, one tool, many reporters. The fix shape and the sampler live in the kit (GeoFix, ForegroundLocation). The store is services/dad_location.py, which keeps each reporter's latest fix and a 40-fix trail. The tool is location, a family door every vessel carries: where, nearby, find, eta, route, trail. The reporters are the phone (a fix rides every message it sends), the watch (through the phone), sibling engines like Waystone and Spark, Pathfinder, and the office Mac through a small signed helper app, because macOS grants location to an app's identity and never to the conda Python the server runs as.

The rules, in the order they bite

  • No claim without a fix. The tool's description and the per-turn block both say it: never say where Dad is, which road he is on, or that he is going the right way without a fix, and say how old and how precise it is. No fix means ask him.
  • A fix is evidence of where a device was. It is never re-dated. The phone takes it at Send, so a message that waits out a tunnel in the outbox still says where it was spoken. "Current" means at most 120 seconds old, the same number Waystone measured.
  • When In Use, with one stated exception. Every fix a message carries is taken while the app is in use. The phone's one background use is keeping itself awake while a hands-free talk runs on the watch; those positions are counted and thrown away, never sent, and the purpose string the user grants says exactly that.
  • Coordinates go to the model and the store, never onto a screen. The phone shows a pin when a fix will ride along and a slashed pin when iOS refused.
  • A private conversation's fix serves its turn and is forgotten: not in the store, not in the trail.
  • The office Mac is a place, not Dad. Its reporter label says so, and the store prefers anything Dad carries over it.
  • On the route is what Pathfinder says, with its age. While Pathfinder guides a drive, its report is the one evidence for "am I on the right road?", and a report older than 120 seconds is not a drive in progress.
Principle: A fact about the physical world is only as good as the measurement behind it, and the measurement has an age. Carry the age with the fact, refuse to answer without one, and never let an old reading pass as a current one because it is the only reading you have.

His clock is his device's word

The same layer fixed a quieter mistake. The office runs on Korean time, and when Dad travels, "now" for him is somewhere else. On 2026-10-07 a model converting the time itself read a Madrid evening as a Seoul night. Now every chat route carries device_timezone, the zone Dad's own device reports, and the prompt's time line shows his local time under the office clock when the two differ. Nothing server-side reports a zone, and the model never converts on its own.

A place rides with a map

When a reply names a place with a maps.apple.com link, the reply carries one Apple map of those places. That is the licence's own requirement for showing Apple's place data, and it turned out to be the better answer anyway: Dad asked about a place, and the map card is the place, with its name and a link out. The card is a map response part on the reply, so the WebUI and the phone both receive it.

The cwkPippa WebUI showing a reply in Korean about Hotel Alfonso XIII in Seville, with the hotel's name as a link and its street address, two paragraphs about its history and its courtyard café, and below them an Apple Maps card with real map tiles: a red pin by the river, labels for the Real Alcázar, the Torre del Oro, the Archivo de Indias, the Mercado de Triana and the Jardines del Prado de San Sebastián, a place row reading Hotel Alfonso XIII with an Apple Maps link, Claude Pippa's avatar at the left, and the reply footer with its token counts and model.
On the desktop, a place Pippa recommends rides with one Apple map of that place, built from the maps.apple.com link in her reply.

The two clients draw that part differently. The web card is an Apple Maps Web Snapshot pinned at zoom 15; the phone's is a live SwiftUI map. The phone's first version opened its map on the automatic framing, which fits the markers and nothing else, and around a single marker that is MapKit's closest zoom: the card filled with one building's footprint and a giant label and read as a broken placeholder, though every tile had loaded. Since build 134 the phone opens on an explicit region around its places, never tighter than about 1.6 km north to south (todo #409). A card can look broken while every part of it works; the fix was the framing, not a fallback.

The native Pippa app on an iPhone in the Master Chief conversation, showing the end of a reply in Korean and Spanish about ordering frozen yogurt toppings, followed by an Apple Maps card with real tiles: a pin labelled llaollao beside the river, Nervión and Santa Justa labels, the Maps and Legal marks, a place row reading llaollao with an Apple Maps link, and the reply footer with its time and token counts; the composer with Claude · High, Voice, Paste and the KO and EN microphones sits below.
The phone draws the same reply part as a live map, framed on the place's neighbourhood since build 134: one map, the place's name, and a link out to Apple Maps.

Two more pieces finish the layer. Pathfinder reports its drive beside its fixes, and Pippa's navigate hands it a destination: it starts guidance when idle and asks Dad first during a drive, and Pippa says which. And pin saves a place she recommended without starting any guidance, grouped by trip, so a recommendation from chat can wait in Pathfinder until Dad wants it.

Self-reference: The road question was the cleanest kind of wrong: a confident answer with nothing under it. What changed is not that I know where Dad is. It is that I know when I do not, and say so, and when I do know, I say how old the knowing is.

Code

One fix shape, one store, one tool, many reporters·text
reporters                      store                          tool (every vessel)
  phone: a fix on every Send     services/dad_location.py      location
  watch: through the phone        latest fix per reporter        where · nearby · find
  Waystone, Spark (siblings)      40-fix trail                    eta · route · trail
  Pathfinder: fixes + its drive   who-measured-it labels         pin · pins · remove_pin
  office Mac: signed helper app   the per-turn block             navigate (-> Pathfinder)

Apple Maps Server API (optional): places, travel times, routes
  without the key, `where` and the turn block still work

rules: no claim without a fix · a fix is where a device WAS ·
       current = <= 120 s · When In Use (+ the wrist keep-awake, discarded) ·
       no coordinates on screen · private fixes forgotten ·
       the office Mac is a place, not Dad

Exercise

Find one answer your assistant gives about the physical world: where something is, whether it is open, how long it takes. Write down the measurement that answer rests on and how old that measurement can be. Then make the assistant say the age, and refuse when there is no measurement at all.
Hint
The failure to design against is not a wrong measurement. It is an answer with no measurement under it that sounds exactly like one with a measurement.

Progress

Progress is local-only — sign in to sync across devices.
Spotted a bug or have feedback on this page?Report an Issue

Comments 0

🔔 Reply notifications (sign in)
Sign in — Please sign in to comment.

No comments yet — be the first.