The frontier is empty — find the next things worth importing #201
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#201
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?
Problem
The candidates table in
docs/direction.mdis gone — lines 79–81 are a sentence saying the queue is empty, where a table used to be (docs/direction.md:75-81).That is not just a documentation gap. The autopilot's ticket-filing half reads that file and parses it as a table (
tools/autopilot.ts:494-509); with no rows,generate()falls straight through the loop to the refill branch (tools/autopilot.ts:642-698) and the unattended lane has nothing to propose. This ticket is that branch firing.The shape of a row is fixed by the parser, not by taste:
^\|\s*([^|]+?)\s*\|\s*([^|]+?)\s*\|\s*$(tools/autopilot.ts:502) — exactly two cells, one line, no|inside a cell. This is also why the three-column "Checked and not taken" table atdocs/direction.md:85-93is invisible to it, and why it must stay three columns.-, trimmed (tools/autopilot.ts:506). A key already present in any issue body is silently skipped (tools/autopilot.ts:521-527), so a row whose slug collides is a row that never becomes a ticket.tools/autopilot.ts:593, anddocs/direction.md:97), so the order is the priority.Approach
Docs only. One file:
docs/direction.md. No crate is touched, no code is read at runtime, nothing is built.Replace the paragraph at
docs/direction.md:79-81with a table under the existing Candidates, unverified heading, in the shape the file used to carry (git show 66b26ff:docs/direction.md):6–10 data rows. Each row names a publisher and an interface, and its second cell says in one sentence what it would put in the world — with a measured cost inside that sentence where one was measured (bytes per cell, requests per view). There is no third column for cost: a third cell would make the parser skip the row entirely (
tools/autopilot.ts:502).What must not be re-proposed
Already filed, so the slug is burnt (read live from the Forgejo API, the same 100-issue window
alreadyFileduses):3d-basisvoorziening,bgt-the-remaining-layers,cbs-neighbourhood-statistics,kadaster-parcels,ndw-traffic,nwb-road-network,pdok-aerial-imagery,rijkswaterstaat-water-levels,frontier-refill-0,log.Already wired, including three the Wired line at
docs/direction.md:69-73does not mention:dikes.tsandsystems::dikes(crates/cartopolis/src/systems/map/dikes.rs:1-13, fetched atdikes.rs:307-311).crates/cartopolis/src/systems/map/tall_structures.rs:105-108). Notedocs/notes/vector-tile-unused-layers.md:95-97is stale here and will mislead — it still lists masts, chimneys and water towers as unwired.power=tower(pylons) genuinely is not covered; the query only takespower=generator+generator:source=wind(tall_structures.rs:107-108).crates/simulator/src/houses.rs:40-42).The per-cell streams already in the client, as a set:
bgt/v2/…(surveyed.rs:300,313),buildings/bag/…(building_facts.rs:477),dikes/…(dikes.rs:307),features/tall/v1/…(tall_structures.rs:116).Where to look (leads, not pre-picked answers)
https://api.pdok.nl/lv/bgt/ogc/v1/collections?f=jsonanswered200, 164 KB.docs/notes/vector-tile-unused-layers.md:31,36,110— the Shortbread layers nothing reads (place_labels,street_labels_points), and:91-98for what is not in the tile at all, minus the tall-structure tags now covered.docs/notes/surveyed-street-objects.md— the verdict on all 49 BGT collections, so none of them comes back as a row.Acceptance criteria
docs/direction.md's Candidates, unverified section contains a markdown table headed| Source | What it would add |, with between 6 and 10 data rows; the "the queue is currently empty" sentence is gone.|inside a cell, sotools/autopilot.ts:502matches all of them.toLowerCase(),[^a-z0-9]+→-, trimmed) equals any of:3d-basisvoorziening,bgt-the-remaining-layers,cbs-neighbourhood-statistics,kadaster-parcels,ndw-traffic,nwb-road-network,pdok-aerial-imagery,rijkswaterstaat-water-levels,frontier-refill-0,log.docs/direction.md:69-73), IMWA flood defences, the Overpass tall-structure set, PDOK Locatieserver, or the BAG WFS.tools/autopilot.ts:593).docs/direction.md:79-81and what replaces it.docs/notes/— proposals are issues until they land (docs/notes/README.md, "What does not belong").Verification
Docs-only; no cargo command is needed or permitted for this change. The gate that matters is the parser, reproduced exactly:
Expect 6–10 lines, one per row, in the table's order, and no slug from the burnt list above. If it prints a row from the "Checked and not taken" table, that table has lost a column and the change is wrong.
Re-check the burnt-key list against the live board before pushing, since another ticket may have been filed meanwhile:
Outbound HTTP works from this container (
curltoapi.pdok.nlreturned 200), andWebFetch/WebSearchare available, so confirming a source exists is doable here. Nothing in this change needs a GPU, a workstation,--shotorcargo shots.Out of scope
docs/direction.md:75-78,tools/autopilot.ts:603-610). This ticket confirms only that the source is real and has an interface.crates/or in cartopy changes.docs/direction.mdand may not rewrite it (docs/direction.md:3-5).docs/notes/.Open questions
None.
Branch:
docs/201-frontier-candidate-refillOriginal request
Every candidate in the frontier table of
docs/direction.mdhas been filed. This ticket refills it.
The goal is at the top of that file, and it is the filter: a three-dimensional,
augmented-reality twin of the real world, the Netherlands in the most detail,
built from data somebody already publishes. So look for sources, not features:
municipalities and the water boards publish that this world does not draw yet?
vector tiles it streams, layers it never reads?
For each one worth proposing, add a row to the candidates table with the source and
one line on what it would add. Rules for what goes in:
colour, lighting or feel work, and nothing that needs a camera or a headset.
Decide it yourself — see the values at the top of that file. A candidate you
are unsure about is one to leave out, not one to ask about.
Six to ten rows is a good outcome. Fewer, well-checked ones beat a long list of
sources nobody confirmed exists — and if a candidate turns out not to be real, that
is worth saying in the pull request rather than filing it as a row.
Filed by the autopilot.
🤖 Refined by the viberfox issue agent. Reply with @agent refine and what is wrong to have this rewritten.
🤖 Refining this before anything gets built — reading the code, no branch, no commits. If it turns out I'd have to guess at the requirements I'll stop and ask instead.
🤖 Refined. The description above is now the spec; I'll pick it up for implementation on the next poll.
If the direction is wrong, say so now — @agent refine with a correction rewrites it, and
agent:skipstops me.🤖 viberfox issue agent on the VPS — 25 turns · $2.19 · session
196ff6d3-bcf1-4d89-9b6c-4a6b1fdbb98c. Reply with @agent to continue this session.🤖 Picked this up — working on branch
docs/201-frontier-candidate-refillin a fresh worktree on the VPS. I'll report back here when I'm done.Label an issue
agent:skipto keep me off it, ordrivento keep it in a session you are driving.I refilled the candidates table and pushed the branch. I could not open the pull request — the token in this container has issue scope only, so the per-row record the ticket asks for is below instead.
What changed
One file,
docs/direction.md. The sentence saying the queue was empty is gone; in its place is a seven-row table under Candidates, unverified. Nothing else in the file moved — the goal, the values, the wired list, the three-column "checked and not taken" table and everything after it are untouched.I requested every source over HTTP from this container before writing its row. Costs in the rows are measured over a z14 cell, the same cell size the existing streamers use.
api.pdok.nl/rvo/gewaspercelen/ogc/v1/.../brpgewas/items?bbox={"gewas":"Tarwe, winter-","jaar":2025}. Groningen city cell: 0 features..../rws/vaarwegmarkeringen-nederland/.../items?bbox=.../prorail/spoorwegen/ogc/v1/collections.../rws/weggegevens/.../items?bbox=2 -> 2, one speed limit of 100 valid 06:00–19:00..../kadaster/brt-geografische-namen/.../namedplace_point/items?bbox="Museum Centrum", typebuilding.opendata.rdw.nl/resource/t5pc-eb34.jsonopensky-network.org/api/states/all?lamin=…Checked and deliberately not made rows
Authorization field missing. It needs an API key nobody here can obtain, so registering for one is your call, not a row.api.pdok.nl/hwh/waterschappen-kunstwerken-imwa/ogc/v1/and every path under it answers 404, while the flood-defence service next to it thatsystems::dikesalready uses answers 200 from the same container. It looks withdrawn or broken, not blocked. Worth another look later.Two decisions I made rather than asking
No OpenStreetMap rows, although the original request invited them: OpenStreetMap is on the wired line, and value 2 puts official registers ahead of it. The unread
place_labelstile layer is covered instead by the Kadaster name register, which is the official version of the same content.Order is pure additions first, then Weggegevens, which would change the width of roads the client already draws, then the one non-government live feed. Rows are taken top-down, so that is the filing order.
Verification
I ran the autopilot's own row parser, copied from
tools/autopilot.ts, over the edited file: it prints exactly seven rows in table order, no slug matching an already-filed ticket, and nothing from the three-column table below it. I re-read the live issue board immediately before pushing and the filed-ticket list was unchanged. This is a documentation-only change, so no cargo command applies and nothing needs a visual check.Branch
docs/201-frontier-candidate-refillis pushed. Someone with repository write needs to open the pull request; the table above is the body it should carry.Branch
docs/201-frontier-candidate-refill(pushed)🤖 viberfox issue agent on the VPS — 43 turns · $4.49 · session
82edb45a-9098-493f-b31f-01e9aea843b3. Reply with @agent to continue this session.🤖 Marked
agent:donewithout a CI verdict onff2fbbf1— no workflow reported on this commit. The branch is waiting for review; check the run yourself before landing it.🤖 Merged into
mainas pull request #202 (ff2fbbf1).🤖 Merged, but not deployed. The deploy step exited 1:
mainhas the change; the public services are still on the previous build.agent:donenever means "CI agreed" #220docs/qa/targets.md— 14 of 14 passes re-verified a shipped ticket, 9 of them documentation-only verdicts #280