feat(todo): the server finds places through the instance's Photon (ADR 0033, D32)

Todo's locations search through the person's own instance, as Train's
planner does, not a public service: `SearchEndpoint` on `PlaceSearch`, for
those signed in, 60 searches a minute, nothing kept or logged. Its `Place`
carries the address's parts and the object in OpenStreetMap, and a shop's
car park or charger is left out, which came first for `Lindau EDEKA`.

`compose.todo-search.yaml` puts Todo's server on compose.search.yaml's
Photon. A file of its own: without it Todo starts as it did, and offers no
search.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
This commit is contained in:
Tizian 「ティツィアーン」 2026-11-05 14:58:38 +01:00
commit c9d3eb4dd1
Signed by: raisondetredev
GPG key ID: 07F6FCF405488B64

View file

@ -614,10 +614,10 @@ The developer's review of 4 Nov 2026, again beside Todoist's screens.
and city, so that two EDEKAs differ, and show as pins; a pin or a row chooses, and a
tap on the map places a pin by hand. The phone's last known position centres the map
and biases the search, where it may be read. `PlaceSearchGateway` is the seam:
`TodoDependencies.places` is the instance's search once wired, and until then
`PublicPhotonGateway` to komoot's public Photon, in a debug build asked for it alone
`TodoDependencies.places` is the instance's search, or `PublicPhotonGateway` to
komoot's public Photon, in a debug build asked for it alone
(`--dart-define=TODO_PUBLIC_PHOTON=true`), with a generic User-Agent and no personal
data; without either the picker says search isn't available. Car parks and charging
data; where the instance has no Photon the picker says search isn't available. Car parks and charging
stations named after a place are left out (seen on `Lindau EDEKA`). The map is Train's
(`flutter_map`, `vector_map_tiles`, OpenFreeMap's Liberty and Dark), a small copy of
`vectorTiles`, no tile layer in widget tests. Alternatives named: a street-address
@ -676,6 +676,16 @@ The developer's review of 4 Nov 2026, again beside Todoist's screens.
differing; SimpleLogin's way back keeps the scheme the instance allows, so with both
installed Android asks which app answers it. Debug builds log to
`adb logcat -s HalkyonLocation`.
- *Found through the instance* (the agent's, the developer choosing locations): a
search goes to Todo's own server, as Train's (ADR 0030, D50), not to a public service
or Google: `SearchEndpoint` on `PlaceSearch`, on the instance's Photon (`PHOTON_URL`,
`compose.todo-search.yaml`), for those signed in, 60 searches a minute, neither query
nor places kept or logged. The server sees what is searched for while it is searched
for; a task's location stays in its sealed payload. Copied from Train's rather than
moved into the module, as `TodoKeys` was: the two differ, Todo's `Place` carrying the
address's parts and the object in OpenStreetMap (`osmType`, `osmId`, `osmValue`), what
opening hours are later looked up by, and leaving out what is no place to go, Photon
asked for 12 so that 8 are still listed.
## Steps