The frontier is empty — find the next things worth importing #201

Closed
opened 2026-08-30 03:18:22 +00:00 by viberfox-agent · 7 comments
Collaborator

Problem

The candidates table in docs/direction.md is 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:

  • The regex is ^\|\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 at docs/direction.md:85-93 is invisible to it, and why it must stay three columns.
  • The source cell becomes the dedupe key: lowercased, non-alphanumerics collapsed to -, 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.
  • Rows are consumed top-down (tools/autopilot.ts:593, and docs/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-81 with a table under the existing Candidates, unverified heading, in the shape the file used to carry (git show 66b26ff:docs/direction.md):

| Source | What it would add |
|---|---|
| … | … |

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 alreadyFiled uses): 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-73 does not mention:

  • IMWA flood defences from the water boards' registers, via cartopy's dikes.ts and systems::dikes (crates/cartopolis/src/systems/map/dikes.rs:1-13, fetched at dikes.rs:307-311).
  • The Overpass tall-structure lane: windmills, water towers, chimneys, masts, towers, cranes and wind turbines (crates/cartopolis/src/systems/map/tall_structures.rs:105-108). Note docs/notes/vector-tile-unused-layers.md:95-97 is 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 takes power=generator + generator:source=wind (tall_structures.rs:107-108).
  • PDOK Locatieserver and the BAG WFS, used server-side for address search (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)

  • PDOK's OGC API collection indexes. Reachable from this container: https://api.pdok.nl/lv/bgt/ogc/v1/collections?f=json answered 200, 164 KB.
  • docs/notes/vector-tile-unused-layers.md:31,36,110 — the Shortbread layers nothing reads (place_labels, street_labels_points), and :91-98 for 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.
  • Every data row is exactly two cells on one line and contains no | inside a cell, so tools/autopilot.ts:502 matches all of them.
  • No row's derived slug (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.
  • No row names a source already wired: anything on the Wired line (docs/direction.md:69-73), IMWA flood defences, the Overpass tall-structure set, PDOK Locatieserver, or the BAG WFS.
  • Every row names an organisation that publishes data and the interface it publishes it over — not a feature, a look, or a behaviour.
  • Rows are ordered strongest first, since the autopilot takes the top one (tools/autopilot.ts:593).
  • The goal, the seven values, the Wired line, the three-column "Checked and not taken" table, and every section from "What an unattended session may do" onwards are unchanged. The diff touches only docs/direction.md:79-81 and what replaces it.
  • No file is added under docs/notes/ — proposals are issues until they land (docs/notes/README.md, "What does not belong").
  • The pull request body records, per row, the URL that was requested and one line of what came back (status, and something from the response that shows the source is what the row claims). A candidate that turned out not to exist, or to be something else, is named in the PR body and is not a row.

Verification

Docs-only; no cargo command is needed or permitted for this change. The gate that matters is the parser, reproduced exactly:

bun -e 'const t=await Bun.file("docs/direction.md").text();
for(const l of t.split("\n")){const m=/^\|\s*([^|]+?)\s*\|\s*([^|]+?)\s*\|\s*$/.exec(l);
if(!m)continue;const s=m[1];if(/^-+$/.test(s)||/^Source$/i.test(s))continue;
console.log(s.toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-|-$/g,""),"::",m[2]);}'

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:

curl -s -H "Authorization: token $FORGEJO_TOKEN" \
  "$FORGEJO_API/repos/$FORGEJO_REPO/issues?state=all&type=issues&limit=100" \
  | grep -oE "autopilot:[a-z0-9-]+" | sort -u

Outbound HTTP works from this container (curl to api.pdok.nl returned 200), and WebFetch / WebSearch are available, so confirming a source exists is doable here. Nothing in this change needs a GPU, a workstation, --shot or cargo shots.

Out of scope

  • Checking the candidates. Confirming the licence, the per-cell volume and whether the picture actually changes is the first half of each candidate's own ticket (docs/direction.md:75-78, tools/autopilot.ts:603-610). This ticket confirms only that the source is real and has an interface.
  • Writing an extractor, a coverage manifest or a streamer. Nothing in crates/ or in cartopy changes.
  • Filing the follow-up tickets. The autopilot files them from the table on its next tick.
  • Repairing the Wired line, even though it is incomplete — IMWA flood defences, the tall-structure lane and the two PDOK services the simulator uses are wired and unlisted. The ticket forbids touching that list; leaving it is the decision, applied from value 7's companion rule that a session may propose a change to docs/direction.md and may not rewrite it (docs/direction.md:3-5).
  • Adding or editing anything in docs/notes/.

Open questions

None.


Branch: docs/201-frontier-candidate-refill

Original request

Every candidate in the frontier table of docs/direction.md
has 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:

  • What do PDOK, the Kadaster, CBS, Rijkswaterstaat, the provinces, the
    municipalities and the water boards publish that this world does not draw yet?
  • What does OpenStreetMap carry that the client ignores — tags already in the
    vector tiles it streams, layers it never reads?
  • What is registered but invisible: things with a position and no representation.

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:

  • A source, not an idea. Something that publishes data, with an interface.
  • Not the maintainer's job. Nothing whose success is a matter of taste — no
    colour, lighting or feel work, and nothing that needs a camera or a headset.
  • Say what it costs if you can measure it: bytes per cell, or requests per view.
  • Do not touch the goal, the rules, or the list of what is already wired.

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.

## Problem The candidates table in `docs/direction.md` is 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: - The regex is `^\|\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 at `docs/direction.md:85-93` is invisible to it, and why it must stay three columns. - The source cell becomes the dedupe key: lowercased, non-alphanumerics collapsed to `-`, 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. - Rows are consumed **top-down** (`tools/autopilot.ts:593`, and `docs/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-81` with a table under the existing **Candidates, unverified** heading, in the shape the file used to carry (`git show 66b26ff:docs/direction.md`): ``` | Source | What it would add | |---|---| | … | … | ``` 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 `alreadyFiled` uses): `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-73` does not mention: - IMWA flood defences from the water boards' registers, via cartopy's `dikes.ts` and `systems::dikes` (`crates/cartopolis/src/systems/map/dikes.rs:1-13`, fetched at `dikes.rs:307-311`). - The Overpass tall-structure lane: windmills, water towers, chimneys, masts, towers, cranes and **wind turbines** (`crates/cartopolis/src/systems/map/tall_structures.rs:105-108`). Note `docs/notes/vector-tile-unused-layers.md:95-97` is 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 takes `power=generator` + `generator:source=wind` (`tall_structures.rs:107-108`). - PDOK Locatieserver and the BAG WFS, used server-side for address search (`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) - PDOK's OGC API collection indexes. Reachable from this container: `https://api.pdok.nl/lv/bgt/ogc/v1/collections?f=json` answered `200`, 164 KB. - `docs/notes/vector-tile-unused-layers.md:31,36,110` — the Shortbread layers nothing reads (`place_labels`, `street_labels_points`), and `:91-98` for 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. - [ ] Every data row is exactly two cells on one line and contains no `|` inside a cell, so `tools/autopilot.ts:502` matches all of them. - [ ] No row's derived slug (`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`. - [ ] No row names a source already wired: anything on the Wired line (`docs/direction.md:69-73`), IMWA flood defences, the Overpass tall-structure set, PDOK Locatieserver, or the BAG WFS. - [ ] Every row names an organisation that publishes data and the interface it publishes it over — not a feature, a look, or a behaviour. - [ ] Rows are ordered strongest first, since the autopilot takes the top one (`tools/autopilot.ts:593`). - [ ] The goal, the seven values, the Wired line, the three-column "Checked and not taken" table, and every section from "What an unattended session may do" onwards are unchanged. The diff touches only `docs/direction.md:79-81` and what replaces it. - [ ] No file is added under `docs/notes/` — proposals are issues until they land (`docs/notes/README.md`, "What does not belong"). - [ ] The pull request body records, per row, the URL that was requested and one line of what came back (status, and something from the response that shows the source is what the row claims). A candidate that turned out not to exist, or to be something else, is named in the PR body and is **not** a row. ## Verification Docs-only; no cargo command is needed or permitted for this change. The gate that matters is the parser, reproduced exactly: ```bash bun -e 'const t=await Bun.file("docs/direction.md").text(); for(const l of t.split("\n")){const m=/^\|\s*([^|]+?)\s*\|\s*([^|]+?)\s*\|\s*$/.exec(l); if(!m)continue;const s=m[1];if(/^-+$/.test(s)||/^Source$/i.test(s))continue; console.log(s.toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-|-$/g,""),"::",m[2]);}' ``` 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: ```bash curl -s -H "Authorization: token $FORGEJO_TOKEN" \ "$FORGEJO_API/repos/$FORGEJO_REPO/issues?state=all&type=issues&limit=100" \ | grep -oE "autopilot:[a-z0-9-]+" | sort -u ``` Outbound HTTP works from this container (`curl` to `api.pdok.nl` returned 200), and `WebFetch` / `WebSearch` are available, so confirming a source exists is doable here. Nothing in this change needs a GPU, a workstation, `--shot` or `cargo shots`. ## Out of scope - **Checking the candidates.** Confirming the licence, the per-cell volume and whether the picture actually changes is the first half of each candidate's own ticket (`docs/direction.md:75-78`, `tools/autopilot.ts:603-610`). This ticket confirms only that the source is real and has an interface. - Writing an extractor, a coverage manifest or a streamer. Nothing in `crates/` or in cartopy changes. - Filing the follow-up tickets. The autopilot files them from the table on its next tick. - Repairing the Wired line, even though it is incomplete — IMWA flood defences, the tall-structure lane and the two PDOK services the simulator uses are wired and unlisted. The ticket forbids touching that list; leaving it is the decision, applied from value 7's companion rule that a session may propose a change to `docs/direction.md` and may not rewrite it (`docs/direction.md:3-5`). - Adding or editing anything in `docs/notes/`. ## Open questions None. --- Branch: `docs/201-frontier-candidate-refill` <details><summary>Original request</summary> Every candidate in the frontier table of [`docs/direction.md`](../src/branch/main/docs/direction.md) has 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: - What do PDOK, the Kadaster, CBS, Rijkswaterstaat, the provinces, the municipalities and the water boards publish that this world does not draw yet? - What does OpenStreetMap carry that the client ignores — tags already in the vector tiles it streams, layers it never reads? - What is registered but invisible: things with a position and no representation. 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: - **A source, not an idea.** Something that publishes data, with an interface. - **Not the maintainer's job.** Nothing whose success is a matter of taste — no colour, lighting or feel work, and nothing that needs a camera or a headset. - **Say what it costs** if you can measure it: bytes per cell, or requests per view. - Do not touch the goal, the rules, or the list of what is already wired. **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. <sub>Filed by the autopilot. <!-- autopilot:frontier-refill-0 --></sub> </details> <sub>🤖 Refined by the viberfox issue agent. Reply with **@agent refine** and what is wrong to have this rewritten.</sub>
Author
Collaborator

🤖 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.

🤖 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.
Author
Collaborator

🤖 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:skip stops me.


🤖 viberfox issue agent on the VPS — 25 turns · $2.19 · session 196ff6d3-bcf1-4d89-9b6c-4a6b1fdbb98c. Reply with @agent to continue this session.

🤖 **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:skip` stops me. --- <sub>🤖 viberfox issue agent on the VPS — 25 turns · $2.19 · session `196ff6d3-bcf1-4d89-9b6c-4a6b1fdbb98c`. Reply with **@agent** to continue this session.</sub>
Author
Collaborator

🤖 Picked this up — working on branch docs/201-frontier-candidate-refill in a fresh worktree on the VPS. I'll report back here when I'm done.

Label an issue agent:skip to keep me off it, or driven to keep it in a session you are driving.

🤖 Picked this up — working on branch `docs/201-frontier-candidate-refill` in a fresh worktree on the VPS. I'll report back here when I'm done. <sub>Label an issue `agent:skip` to keep me off it, or `driven` to keep it in a session you are driving.</sub>
Author
Collaborator

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.

Row Requested Answer
RVO crop parcels (BRP) api.pdok.nl/rvo/gewaspercelen/ogc/v1/.../brpgewas/items?bbox= 200. Farmland cell north of Groningen: 163 parcels, 501 KB. Flevoland: 131 parcels, 149 KB, one reading {"gewas":"Tarwe, winter-","jaar":2025}. Groningen city cell: 0 features.
Rijkswaterstaat vaarwegmarkeringen .../rws/vaarwegmarkeringen-nederland/.../items?bbox= 200, two collections. Hollands Diep cell: 5 floating and 3 fixed marks, 13.1 KB, carrying colour pattern and light colour.
ProRail Spoorwegen .../prorail/spoorwegen/ogc/v1/collections 200. Seven collections including switches, level crossings, track axes. Groningen station cell: 22 track axes and 70 switches, 208 KB.
Rijkswaterstaat Weggegevens .../rws/weggegevens/.../items?bbox= 200. Motorway cell on the A28: 8 sections, 8.9 KB, one lane field reading 2 -> 2, one speed limit of 100 valid 06:00–19:00.
Kadaster BRT geografische namen .../kadaster/brt-geografische-namen/.../namedplace_point/items?bbox= 200. Groningen cell: 11 names, 4.7 KB, e.g. "Museum Centrum", type building.
RDW parking register opendata.rdw.nl/resource/t5pc-eb34.json 200. 237 garages nationally, 72.5 KB in one request, with position, capacity, height limit and charging points.
OpenSky live aircraft opensky-network.org/api/states/all?lamin=… 200 with no key. 24 aircraft over the whole country, 3.2 KB.

Checked and deliberately not made rows

  • NDW's national traffic-sign register answers Authorization field missing. It needs an API key nobody here can obtain, so registering for one is your call, not a row.
  • The water boards' IMWA structures service (weirs, locks, pumping stations) is listed in PDOK's own index at api.pdok.nl/hwh/waterschappen-kunstwerken-imwa/ogc/v1/ and every path under it answers 404, while the flood-defence service next to it that systems::dikes already uses answers 200 from the same container. It looks withdrawn or broken, not blocked. Worth another look later.
  • CelesTrak's satellite elements answer 503, twice.
  • Blauwe Golf Verbindend (live bridge openings) resolves but no connection completes from here.

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_labels tile 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-refill is 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)

ff2fbbf docs(direction): refill the frontier with seven checked sources

🤖 viberfox issue agent on the VPS — 43 turns · $4.49 · session 82edb45a-9098-493f-b31f-01e9aea843b3. Reply with @agent to continue this session.

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. | Row | Requested | Answer | |---|---|---| | RVO crop parcels (BRP) | `api.pdok.nl/rvo/gewaspercelen/ogc/v1/.../brpgewas/items?bbox=` | 200. Farmland cell north of Groningen: 163 parcels, 501 KB. Flevoland: 131 parcels, 149 KB, one reading `{"gewas":"Tarwe, winter-","jaar":2025}`. Groningen city cell: 0 features. | | Rijkswaterstaat vaarwegmarkeringen | `.../rws/vaarwegmarkeringen-nederland/.../items?bbox=` | 200, two collections. Hollands Diep cell: 5 floating and 3 fixed marks, 13.1 KB, carrying colour pattern and light colour. | | ProRail Spoorwegen | `.../prorail/spoorwegen/ogc/v1/collections` | 200. Seven collections including switches, level crossings, track axes. Groningen station cell: 22 track axes and 70 switches, 208 KB. | | Rijkswaterstaat Weggegevens | `.../rws/weggegevens/.../items?bbox=` | 200. Motorway cell on the A28: 8 sections, 8.9 KB, one lane field reading `2 -> 2`, one speed limit of 100 valid 06:00–19:00. | | Kadaster BRT geografische namen | `.../kadaster/brt-geografische-namen/.../namedplace_point/items?bbox=` | 200. Groningen cell: 11 names, 4.7 KB, e.g. `"Museum Centrum"`, type `building`. | | RDW parking register | `opendata.rdw.nl/resource/t5pc-eb34.json` | 200. 237 garages nationally, 72.5 KB in one request, with position, capacity, height limit and charging points. | | OpenSky live aircraft | `opensky-network.org/api/states/all?lamin=…` | 200 with no key. 24 aircraft over the whole country, 3.2 KB. | ## Checked and deliberately not made rows - **NDW's national traffic-sign register** answers `Authorization field missing`. It needs an API key nobody here can obtain, so registering for one is your call, not a row. - **The water boards' IMWA structures service** (weirs, locks, pumping stations) is listed in PDOK's own index at `api.pdok.nl/hwh/waterschappen-kunstwerken-imwa/ogc/v1/` and every path under it answers 404, while the flood-defence service next to it that `systems::dikes` already uses answers 200 from the same container. It looks withdrawn or broken, not blocked. Worth another look later. - **CelesTrak's satellite elements** answer 503, twice. - **Blauwe Golf Verbindend** (live bridge openings) resolves but no connection completes from here. ## 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_labels` tile 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-refill` is 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) ``` ff2fbbf docs(direction): refill the frontier with seven checked sources ``` --- <sub>🤖 viberfox issue agent on the VPS — 43 turns · $4.49 · session `82edb45a-9098-493f-b31f-01e9aea843b3`. Reply with **@agent** to continue this session.</sub>
Author
Collaborator

🤖 Marked agent:done without a CI verdict on ff2fbbf1 — no workflow reported on this commit. The branch is waiting for review; check the run yourself before landing it.

🤖 Marked `agent:done` **without a CI verdict** on `ff2fbbf1` — no workflow reported on this commit. The branch is waiting for review; check the run yourself before landing it.
viberfox-agent 2026-08-30 03:38:26 +00:00
Author
Collaborator

🤖 Merged into main as pull request #202 (ff2fbbf1).

🤖 **Merged into `main`** as pull request #202 (`ff2fbbf1`).
Author
Collaborator

🤖 Merged, but not deployed. The deploy step exited 1:

main is at f5771656
  waiting for CI on f5771656
refusing: no Actions job ran for f5771656 — nothing has verified this commit

main has the change; the public services are still on the previous build.

🤖 **Merged, but not deployed.** The deploy step exited 1: ``` main is at f5771656 waiting for CI on f5771656 refusing: no Actions job ran for f5771656 — nothing has verified this commit ``` `main` has the change; the public services are still on the previous build.
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
jeroen/cartopolis#201
No description provided.