gap: the navigation-marks water gate stops nothing inside the Netherlands #212
Labels
No labels
agent
agent:ci
agent:done
agent:failed
agent:needs-input
agent:refined
agent:refining
agent:running
agent:shipped
agent:skip
autonomous
autopilot
driven
local
plan
proposal
qa
qa-gap
research
retro
ship
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
jeroen/cartopolis#212
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Found by the QA pass on #210, walking what #206/#207 shipped.
What I did
Two measurements against the live tile source and the live register.
tiles.cartopolis.org/tiles/osm/14/{x}/{y}and appliedvector_tiles::body_mentions_waterto the raw body.cache/features/marks/.What happened
10 of 10 sampled Dutch cells pass the water gate. Every one carries
water_polygons; eight also carrywater_lines. The Veluwe heath and the Achterhoek — about as dry as inland Netherlands gets — carrywater_polygonson their own. The country is drained by ditches and dotted with ponds, so at z14 there is no dry cell in it.The cold start bore that out: nine Groningen cells were each asked of PDOK and each answered empty, and all nine were written to the cache as
{"marks":[]}(12 bytes each):That is 18 requests to api.pdok.nl (two collections × nine cells) on a first run at the app's own start location, for nothing.
What the design says instead
docs/notes/navigation-marks.mdand the commit body both rest the "fetch from the client rather than through a cartopy extractor" argument on this gate:There is no dry two thirds. Inside the envelope the second gate is very close to a constant
true, so the request count is the same as if it were not there.Why no test caught it
The two tests disagree about Groningen and neither joins the halves:
crates/geo/src/vector_tiles.rs—the_water_probe_reads_an_undecoded_bodyassertsbody_mentions_water(GRONINGEN_Z14)is true. That is the correct answer and it is the one that breaks the gate.crates/cartopolis/src/systems/map/nav_marks.rs—a_foreign_or_dry_cell_asks_for_nothingasserts!should_fetch(GRONINGEN, false), passing the wet/dry answer in by hand. It can only ever prove the boolean is honoured, never that any real cell produces it.Where the seam is
crates/cartopolis/src/systems/map/nav_marks.rs—should_fetch, and the module note's "Two gates before a request is made"crates/geo/src/vector_tiles.rs—WATER_HINT_LAYERSdocs/notes/navigation-marks.md— "Two gates, and why they are the whole cost argument"What a person might decide
Narrowing the hint set does not rescue it:
water_polygonsalone is still 10/10. Three directions, for whoever picks this up:Cache-Controland CORS*. That may simply be fine — but the note should say so rather than claim a saving it does not make.WireMarkform the Waal's 43 marks are 4,802 bytes — about 112 bytes each — so the whole national register is roughly 2.1 MB, less than the 3.8 MB the BGT paving costs for one dense cell. A single national fetch would delete both gates and every empty answer with them.Nothing here is user-visible: the marks draw correctly (
nav_marks=115over the Waal, settled). This is the cost argument not holding, not a broken layer.Filed by the QA pass on #210. Not
autonomous— a person decides whether this becomes work.🤖 Considered by the 3-day retrospective (#218) and deliberately left unpromoted. Not because it is wrong — the measurement is solid, and 10 of 10 sampled Dutch cells passing the gate is the kind of finding this lane exists to produce.
It is left because the ticket's own "What a person might decide" section is a genuine three-way choice, and the three answers are not variations on one fix:
A machine can judge the outcome of any of the three — the request count on a cold start is a number. It cannot pick between them, and picking is most of the work. That is the line the retrospective drew: a gap where the fix is determined gets promoted (#213, #214), a gap where the decision is the deliverable stays here.
Worth saying plainly: nothing is broken. The marks draw correctly. What is false is the cost argument in
docs/notes/navigation-marks.md, and the cheapest honest answer may simply be to correct the note.Left for the maintainer by the retrospective on #218.
railis a Shortbread attribute key #236