Retrospective: the last 7 day(s), and what to do differently #296

Closed
opened 2026-09-10 00:47:39 +00:00 by viberfox-agent · 3 comments
Collaborator

Step back and read the last 7 day(s) of this lane, then steer it. You are not building anything on this ticket.

The maintainer has set a focus for this lane, so judge the period against it as well
as against the values — including whether the plan under it is still the right queue:

Improving performance on the steamdeck. keep it concrete and simple. use or extend harness tooling to find useful improvements.

  1. Gather. docs/direction.md (the goal and the seven values); every issue closed or
    filed in the last 7 day(s) — shipped, failed, parked — and the reports on closed
    qa tickets. All of it is on the Forgejo API with the FORGEJO_TOKEN in your
    environment. What the lane's queue already holds is not readable from here — its
    config file is on the pipeline host — so propose what the period argues for and let
    the autopilot drop the repeats; it matches on the slug of your title and says so.
  2. Analyse against the goal. Which shipped work actually moved the twin forward, and
    which was busywork? Where did tickets stall, and is the pattern a machinery problem
    (conflicts, refusals, flakes) rather than a hard ticket? What do the QA findings say
    players keep hitting? Is the frontier still the highest-value queue, or is the gap
    backlog now worth more than the next data source?
  3. Act, inside these bounds and no further. Open no issues — this lane files a
    ticket only for work that is about to be built, and everything below is a proposal
    until the maintainer keeps it.
    • Post the work you propose as rows on the lane's queue, in one comment on this
      ticket, as exactly this block:
```autopilot-plan
[{"title": "…", "note": "…"}, {"title": "…", "note": "…"}]
```
 Ordered, most valuable first. A title that says what changes; a note that opens by
 saying it came from this retrospective, then where in the code it lands and how a
 machine would judge it. Machinery problems belong here too (the autopilot, the
 watcher, CI, the deploy) — they are code under `tools/`, which the unattended lane
 may build but never merge, so they land for review. Nothing the fences cover, and
 nothing whose success is a matter of taste.
  • Argue a direction change in your report, not as work. Never edit
    docs/direction.md here: the direction is the maintainer's, by that file's own
    first rule. A proposal is a paragraph they read, not a row that becomes a ticket.
  • Until 2026-09-09 this step filed a ticket per finding and promoted three qa-gap
    issues into the build lane. Nine of those tickets were open, none of them labelled
    for the lane to build, and the board they filled is the thing that stopped it
    filing anything at all.
  1. Report, then close. Post the report as a comment on the open issue titled
    Autopilot log — the lane's daily thread, which is where the maintainer reads it, and
    the one place a finding of yours survives being deleted from the queue. The period in
    five lines, what you posted to the queue, what you propose and why. Then close this
    ticket through the API.

Decide it yourself. Nobody is watching this ticket. Judge by the seven values; a
promotion you are unsure about is one to leave for the maintainer, not to ask about.

Filed by the autopilot.

Step back and read the last 7 day(s) of this lane, then steer it. You are not building anything on this ticket. The maintainer has set a focus for this lane, so judge the period against it as well as against the values — including whether the plan under it is still the right queue: > Improving performance on the steamdeck. keep it concrete and simple. use or extend harness tooling to find useful improvements. 1. **Gather.** `docs/direction.md` (the goal and the seven values); every issue closed or filed in the last 7 day(s) — shipped, failed, parked — and the reports on closed `qa` tickets. All of it is on the Forgejo API with the `FORGEJO_TOKEN` in your environment. What the lane's queue already holds is not readable from here — its config file is on the pipeline host — so propose what the period argues for and let the autopilot drop the repeats; it matches on the slug of your title and says so. 2. **Analyse against the goal.** Which shipped work actually moved the twin forward, and which was busywork? Where did tickets stall, and is the pattern a machinery problem (conflicts, refusals, flakes) rather than a hard ticket? What do the QA findings say players keep hitting? Is the frontier still the highest-value queue, or is the gap backlog now worth more than the next data source? 3. **Act, inside these bounds and no further. Open no issues** — this lane files a ticket only for work that is about to be built, and everything below is a proposal until the maintainer keeps it. - **Post the work you propose as rows on the lane's queue**, in one comment on this ticket, as exactly this block: ```` ```autopilot-plan [{"title": "…", "note": "…"}, {"title": "…", "note": "…"}] ``` ```` Ordered, most valuable first. A title that says what changes; a note that opens by saying it came from this retrospective, then where in the code it lands and how a machine would judge it. Machinery problems belong here too (the autopilot, the watcher, CI, the deploy) — they are code under `tools/`, which the unattended lane may build but never merge, so they land for review. Nothing the fences cover, and nothing whose success is a matter of taste. - **Argue a direction change in your report, not as work.** Never edit `docs/direction.md` here: the direction is the maintainer's, by that file's own first rule. A proposal is a paragraph they read, not a row that becomes a ticket. - Until 2026-09-09 this step filed a ticket per finding and promoted three `qa-gap` issues into the build lane. Nine of those tickets were open, none of them labelled for the lane to build, and the board they filled is the thing that stopped it filing anything at all. 4. **Report, then close.** Post the report as a comment on the open issue titled `Autopilot log` — the lane's daily thread, which is where the maintainer reads it, and the one place a finding of yours survives being deleted from the queue. The period in five lines, what you posted to the queue, what you propose and why. Then close this ticket through the API. **Decide it yourself.** Nobody is watching this ticket. Judge by the seven values; a promotion you are unsure about is one to leave for the maintainer, not to ask about. <sub>Filed by the autopilot. <!-- autopilot:retro-p2958 --></sub>
Author
Collaborator

🤖 Picked this up — working on branch feat/296-retrospective-last-7-day 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 `feat/296-retrospective-last-7-day` 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

Read the period against docs/direction.md and the seven values. Three things
decide what I am proposing.

The lane built eight commits that never reached main. Seven branches are ahead
of main today — feat/214-nav-marks-readout, fix/232-crossing-clearance-from-rails,
fix/268-floating-marks-water-level, fix/219-autopilot-docs-only-deploy,
fix/281-autopilot-page-issue-lists, ci/290-flicker-smoke-headroom,
perf/237-reanchor-skips-an-unmoved-anchor — each carrying work this lane finished and
reported done, and every one of their tickets was closed on 2026-09-09. Each was parked
with a sentence addressed to a person ("rebase, resolve, push, and put the ship label
back") in a lane whose whole premise is that there is no person. That is the largest
pool of finished value on the board, and none of it needs a new idea.

Every build failure in the period was the 45-minute session limit. #288, #289 and
#293 — including item 1 of this lane's own queue — each died with "No commits were made".
Not a conflict, not a flake, not a hard ticket: a wall, hit three times, leaving nothing
behind and nobody to retry.

The gap backlog outvalues the next data source, and it was deleted rather than worked.
34 qa-gap tickets and nine machinery findings were closed on 2026-09-09. Several were
measured, cheap and player-facing; four of them are rows below.

Rows 1–7 are machinery and land under tools/, so they are built and parked for review.
Rows 8–11 are the measured gaps worth rescuing. Nothing here touches the wire protocol,
a migration, assetlinks.json or tools/autopilot.ts's fences — rows 1, 2, 3, 5 and 7
do edit autopilot.ts itself and are expected to land parked, not merged.

Row 10 is the only one on the Steam Deck focus directly; the queue already holds ten
perf rows in flight and I have not repeated them.

[{"title": "Page every issue list in the autopilot, so a dedupe key stops expiring", "note": "From the 7-day retrospective on #296. tools/autopilot.ts asks Forgejo for ?limit=100 in knownIssues (:728), logIssue (:1642) and digest (:1687), and ?limit=50 in three more places (:335, :773, :1443). The repository holds 112 issues today, measured on 2026-09-10 by paging the API, so alreadyFiled is already blind to the oldest twelve and the blind spot grows every day - which is the fault #281 measured when #206 was re-filed under a key that had already been used. The fix was built on 2026-09-03 as fix/281-autopilot-page-issue-lists (537894e) and never landed, because its ticket was closed while the branch was still parked; rebase that branch rather than writing it again. Judged by: every issue-list call pages to exhaustion, plus a test that a dedupe key on an issue past the first page is still found. It touches tools/, so it lands parked for review."}, {"title": "The daily note stopped on 2026-09-03, and when it does post it names the wrong things", "note": "From the 7-day retrospective on #296. The last daily note on #257 is dated 2026-09-03, while the lane demonstrably ticked on 09-05 (#290) and on 09-09 (#291-#295) - so for a week the one signal the maintainer reads has been saying, by that note's own charter, that the lane had stopped. Two changes in digest() in tools/autopilot.ts. First, a digest that does not post must say so: it is gated on state.digestDay, written by a saveState that can fail, and 99e942d already fixed a control file taking a whole tick with it. Second, fix what it names: mine at :1688 only sees issues carrying the autopilot label, so a parked ticket filed by anyone else never reaches the 'Stuck, waiting for you' line, and nothing in the note names a branch that is ahead of main - seven exist today, carrying eight commits. Judged by: a fixture board where a parked ticket without the label and a branch ahead of main both appear in the rendered note, plus a log line whenever the digest is skipped."}, {"title": "A parked branch comes back into the lane instead of being addressed to a person", "note": "From the 7-day retrospective on #296. shipReady parks a branch three ways and every one ends in an instruction to a person: a conflict (tools/autopilot.ts:515-528, 'rebase, resolve, push, and put the ship label back'), a red branch (:475-490), and a commit with no CI verdict. docs/direction.md's premise for this lane is that there is no person, so a park is not a park but a stop: #214 and #232 conflicted, #268 went red, #219 got no verdict, and all four are still unlanded, two of them for eleven days. Extend rearmParkedTickets() (:335), which today handles only agent:needs-input, so that a branch parked for a conflict or a red run is handed back to the build lane once with the reason in the comment, and only a second failure parks it for a person. Judged by: a fixture ticket parked for a conflict is re-armed exactly once and then parked with the reason 'twice'. Touches tools/, so it lands parked for review."}, {"title": "Rebase and land the three finished map fixes stranded since 2026-08-30", "note": "From the 7-day retrospective on #296. Three branches carry work this lane built and reported done, and their tickets were closed on 2026-09-09 while the branches stood: feat/214-nav-marks-readout (6a77c90, name a buoy you walk up to and give it its own row), fix/232-crossing-clearance-from-rails (10bcb20, measure a crossing's spacing from the tile's rail rather than the register), and fix/268-floating-marks-water-level (053b619, float navigation marks and moored boats on the water's own level). The first two are conflict-parked; the third went red on 'test cartopolis' and needs that failure fixed. Rebase each onto main, run the gate the branch would face (cargo check -p on what it touches, cargo test -p cartopolis_geo, cargo test -p cartopolis, cargo fmt --check over the five owned crates), and land only what CI is green on. Where main already contains the change, or the rebase cannot be resolved without guessing at intent, say which and stop rather than reconstructing it. Judged by: main contains each of the three changes, or the ticket names exactly which one it does not and why."}, {"title": "A session killed at the 45-minute limit is retried once, then parked as too big", "note": "From the 7-day retrospective on #296. All three build failures in the period were the session time limit rather than a hard problem: #288 and #289 (QA passes) and #293 (item 1 of this lane's own queue) each ended with 'The session was killed after hitting the 45 minute limit' and 'No commits were made' - no branch, no partial work, and agent:failed with nobody to retry it. In tools/autopilot.ts, extend rearmParkedTickets() to recognise that comment on a ticket carrying agent:failed, re-arm it once and record the attempt in state; on a second occurrence park it with a comment saying the ticket is too big to finish in one session, which is a signal a person can act on. Judged by: a fixture ticket carrying that comment is re-armed exactly once and parked on the second. What this cannot fix: the runner that kills the session is not in this repository, so making it push its worktree before dying is a maintainer decision, not a ticket that can land here."}, {"title": "Decide the three remaining stranded branches, including the re-anchor cost fix", "note": "From the 7-day retrospective on #296, and half of it is on this lane's focus. perf/237-reanchor-skips-an-unmoved-anchor carries c5ddf41, 'a re-anchor that does not move the anchor costs nothing', plus c0e8fa6 re-measuring the flicker floor after it; ci/290-flicker-smoke-headroom carries 13518a7, the headroom the smoke job's own logs say it needs; fix/219-autopilot-docs-only-deploy carries a9599f3, 'read the CI path filter instead of copying it'. All three were built by this lane, all three tickets are closed, and none of the work is on main. Rebase each, run the gate, land what is green. Two of them touch .forgejo/ and tools/, which are fenced, so those land parked for review. Judged by: main contains each change, or the ticket says why it should not."}, {"title": "QA walks docs/qa/targets.md instead of re-verifying every shipped ticket", "note": "From the 7-day retrospective on #296, re-proposing what #280 measured before it was closed unbuilt. generateQa (tools/autopilot.ts:1450-1462) files a re-verify for the first recently-shipped ticket and returns, so the standing 16-row list read at :1465 is only reached on a day when nothing shipped - and something ships most days. The result: 14 of 14 QA passes were re-verifies, nine of them of a documentation-only 'is it worth wiring in?' verdict and one of a compile fix, while not one row of the player journey (sign in, claim a house, sit, chat, proximity voice, block and report, script a prim, export a build) has ever been walked. QA findings are the input to what this lane builds next, so pointing it at prose is what produced a gap backlog that was 11 of 31 documentation-pointer defects. Alternate the two sources, and skip re-verifying a ticket whose diff is entirely docs/ or tools/. Judged by: a fixture board carrying three recently shipped tickets still files a targets.md row."}, {"title": "The level-crossing rail gate passes every tile, so 54 of 64 cells fetch nothing", "note": "From the 7-day retrospective on #296, re-proposing #236, which was measured and then closed unbuilt on 2026-09-09. vector_tiles::body_mentions_rail (crates/geo/src/vector_tiles.rs:4007) scans the undecoded MVT body for the bytes 'rail', and Shortbread's streets layer declares an attribute *key* called rail - so those four bytes are in the key table of every populated tile on Earth, including the layer note's own railless Veluwe control cell. Measured over 64 z14 tiles covering Groningen: 64 gate passes, 10 cells that actually hold a crossing, 54 wasted round trips to the register on every visit. Test features rather than the key table. Judged by: a unit test over the committed tile fixtures in which a railless tile does not pass the gate, and the Groningen pass count drops from 64 to about 10."}, {"title": "A re-run BGT extractor must reach a client that already visited the city", "note": "From the 7-day retrospective on #296, re-proposing #260, which was measured and then closed unbuilt. surveyed.rs:320 and :327 build a constant cache key, bgt/v2/{z}/{x}/{y}.json, so a client holding a warm cell never sees anything a later extractor run added - which is everybody who already plays in that city. Measured in #260 over one Groningen viewpoint: with the five newly accepted collections served and a fresh cache, surveyed_props is 607 and surveyed_lines 1588; with a cache warmed before those collections existed, the same host still gives 450 and 0, with no error and nothing in the UI. Same fault class as bdf7b2d, where a cache key with no version hid every door ever shipped. The pattern to reuse landed on 2026-09-07 as 'the self-invalidating cache key' in municipal.rs:328. Judged by: the three-run table in #260 re-run, with run 2 now matching run 3."}, {"title": "A --frames sweep places every viewpoint, not only the first", "note": "From the 7-day retrospective on #296, on this lane's focus of extending the harness rather than adding a timer. docs/notes/render-performance-survey.md records that every capture after the first in a --frames sweep reports alt_m=0 with space_factor and globe_albedo as NaN, reproduced on a 6-frame 60 km to 3000 km climb and confirmed against a clean tree: each waypoint is a teleport, a teleport re-anchors, setup_globe rebuilds, and the shutter fires while GlobeState is still empty. That disables the one instrument CLAUDE.md names for catching a hard cut in a ramp, which no single still can show. The fix already exists next door: the performance suite waits on ShotProgress::is_placed (shot_harness.rs:1460) before opening a scenario's window, and the sweep path in the same file does not. Judged by: a 6-frame sweep whose every --csv row carries a non-zero alt_m and a finite space_factor, and cargo perf unchanged."}, {"title": "A surveyed cabinet is not a post box", "note": "From the 7-day retrospective on #296, re-proposing #259, which was measured and then closed unbuilt. The BGT's kast records land on FurnitureKind::Cabinet (crates/geo/src/furniture.rs:235-237), a kind added for OSM's post_box, vending_machine and parcel_locker - so walking up to an electricity cabinet offers 'Use Post box [E]'. Over Groningen the register holds 162 current cabinets: 75 electricity, 29 street lighting, 24 cable TV, 8 traffic-signal, 6 telecoms, 6 GMS, 3 sewer, 2 gas, and no post boxes, and there is nothing a player can do with any of them. It is value 1 backwards: a surveyed object presented as the invented one it displaced. Give the surveyed kinds their own names and no interaction prompt. Judged by: a unit test mapping each cabinet type in the register to its own label, and prop_interactable false for all of them."}]
Read the period against `docs/direction.md` and the seven values. Three things decide what I am proposing. **The lane built eight commits that never reached `main`.** Seven branches are ahead of `main` today — `feat/214-nav-marks-readout`, `fix/232-crossing-clearance-from-rails`, `fix/268-floating-marks-water-level`, `fix/219-autopilot-docs-only-deploy`, `fix/281-autopilot-page-issue-lists`, `ci/290-flicker-smoke-headroom`, `perf/237-reanchor-skips-an-unmoved-anchor` — each carrying work this lane finished and reported done, and every one of their tickets was closed on 2026-09-09. Each was parked with a sentence addressed to a person ("rebase, resolve, push, and put the `ship` label back") in a lane whose whole premise is that there is no person. That is the largest pool of finished value on the board, and none of it needs a new idea. **Every build failure in the period was the 45-minute session limit.** #288, #289 and #293 — including item 1 of this lane's own queue — each died with "No commits were made". Not a conflict, not a flake, not a hard ticket: a wall, hit three times, leaving nothing behind and nobody to retry. **The gap backlog outvalues the next data source, and it was deleted rather than worked.** 34 `qa-gap` tickets and nine machinery findings were closed on 2026-09-09. Several were measured, cheap and player-facing; four of them are rows below. Rows 1–7 are machinery and land under `tools/`, so they are built and parked for review. Rows 8–11 are the measured gaps worth rescuing. Nothing here touches the wire protocol, a migration, `assetlinks.json` or `tools/autopilot.ts`'s fences — rows 1, 2, 3, 5 and 7 do edit `autopilot.ts` itself and are expected to land parked, not merged. Row 10 is the only one on the Steam Deck focus directly; the queue already holds ten perf rows in flight and I have not repeated them. ```autopilot-plan [{"title": "Page every issue list in the autopilot, so a dedupe key stops expiring", "note": "From the 7-day retrospective on #296. tools/autopilot.ts asks Forgejo for ?limit=100 in knownIssues (:728), logIssue (:1642) and digest (:1687), and ?limit=50 in three more places (:335, :773, :1443). The repository holds 112 issues today, measured on 2026-09-10 by paging the API, so alreadyFiled is already blind to the oldest twelve and the blind spot grows every day - which is the fault #281 measured when #206 was re-filed under a key that had already been used. The fix was built on 2026-09-03 as fix/281-autopilot-page-issue-lists (537894e) and never landed, because its ticket was closed while the branch was still parked; rebase that branch rather than writing it again. Judged by: every issue-list call pages to exhaustion, plus a test that a dedupe key on an issue past the first page is still found. It touches tools/, so it lands parked for review."}, {"title": "The daily note stopped on 2026-09-03, and when it does post it names the wrong things", "note": "From the 7-day retrospective on #296. The last daily note on #257 is dated 2026-09-03, while the lane demonstrably ticked on 09-05 (#290) and on 09-09 (#291-#295) - so for a week the one signal the maintainer reads has been saying, by that note's own charter, that the lane had stopped. Two changes in digest() in tools/autopilot.ts. First, a digest that does not post must say so: it is gated on state.digestDay, written by a saveState that can fail, and 99e942d already fixed a control file taking a whole tick with it. Second, fix what it names: mine at :1688 only sees issues carrying the autopilot label, so a parked ticket filed by anyone else never reaches the 'Stuck, waiting for you' line, and nothing in the note names a branch that is ahead of main - seven exist today, carrying eight commits. Judged by: a fixture board where a parked ticket without the label and a branch ahead of main both appear in the rendered note, plus a log line whenever the digest is skipped."}, {"title": "A parked branch comes back into the lane instead of being addressed to a person", "note": "From the 7-day retrospective on #296. shipReady parks a branch three ways and every one ends in an instruction to a person: a conflict (tools/autopilot.ts:515-528, 'rebase, resolve, push, and put the ship label back'), a red branch (:475-490), and a commit with no CI verdict. docs/direction.md's premise for this lane is that there is no person, so a park is not a park but a stop: #214 and #232 conflicted, #268 went red, #219 got no verdict, and all four are still unlanded, two of them for eleven days. Extend rearmParkedTickets() (:335), which today handles only agent:needs-input, so that a branch parked for a conflict or a red run is handed back to the build lane once with the reason in the comment, and only a second failure parks it for a person. Judged by: a fixture ticket parked for a conflict is re-armed exactly once and then parked with the reason 'twice'. Touches tools/, so it lands parked for review."}, {"title": "Rebase and land the three finished map fixes stranded since 2026-08-30", "note": "From the 7-day retrospective on #296. Three branches carry work this lane built and reported done, and their tickets were closed on 2026-09-09 while the branches stood: feat/214-nav-marks-readout (6a77c90, name a buoy you walk up to and give it its own row), fix/232-crossing-clearance-from-rails (10bcb20, measure a crossing's spacing from the tile's rail rather than the register), and fix/268-floating-marks-water-level (053b619, float navigation marks and moored boats on the water's own level). The first two are conflict-parked; the third went red on 'test cartopolis' and needs that failure fixed. Rebase each onto main, run the gate the branch would face (cargo check -p on what it touches, cargo test -p cartopolis_geo, cargo test -p cartopolis, cargo fmt --check over the five owned crates), and land only what CI is green on. Where main already contains the change, or the rebase cannot be resolved without guessing at intent, say which and stop rather than reconstructing it. Judged by: main contains each of the three changes, or the ticket names exactly which one it does not and why."}, {"title": "A session killed at the 45-minute limit is retried once, then parked as too big", "note": "From the 7-day retrospective on #296. All three build failures in the period were the session time limit rather than a hard problem: #288 and #289 (QA passes) and #293 (item 1 of this lane's own queue) each ended with 'The session was killed after hitting the 45 minute limit' and 'No commits were made' - no branch, no partial work, and agent:failed with nobody to retry it. In tools/autopilot.ts, extend rearmParkedTickets() to recognise that comment on a ticket carrying agent:failed, re-arm it once and record the attempt in state; on a second occurrence park it with a comment saying the ticket is too big to finish in one session, which is a signal a person can act on. Judged by: a fixture ticket carrying that comment is re-armed exactly once and parked on the second. What this cannot fix: the runner that kills the session is not in this repository, so making it push its worktree before dying is a maintainer decision, not a ticket that can land here."}, {"title": "Decide the three remaining stranded branches, including the re-anchor cost fix", "note": "From the 7-day retrospective on #296, and half of it is on this lane's focus. perf/237-reanchor-skips-an-unmoved-anchor carries c5ddf41, 'a re-anchor that does not move the anchor costs nothing', plus c0e8fa6 re-measuring the flicker floor after it; ci/290-flicker-smoke-headroom carries 13518a7, the headroom the smoke job's own logs say it needs; fix/219-autopilot-docs-only-deploy carries a9599f3, 'read the CI path filter instead of copying it'. All three were built by this lane, all three tickets are closed, and none of the work is on main. Rebase each, run the gate, land what is green. Two of them touch .forgejo/ and tools/, which are fenced, so those land parked for review. Judged by: main contains each change, or the ticket says why it should not."}, {"title": "QA walks docs/qa/targets.md instead of re-verifying every shipped ticket", "note": "From the 7-day retrospective on #296, re-proposing what #280 measured before it was closed unbuilt. generateQa (tools/autopilot.ts:1450-1462) files a re-verify for the first recently-shipped ticket and returns, so the standing 16-row list read at :1465 is only reached on a day when nothing shipped - and something ships most days. The result: 14 of 14 QA passes were re-verifies, nine of them of a documentation-only 'is it worth wiring in?' verdict and one of a compile fix, while not one row of the player journey (sign in, claim a house, sit, chat, proximity voice, block and report, script a prim, export a build) has ever been walked. QA findings are the input to what this lane builds next, so pointing it at prose is what produced a gap backlog that was 11 of 31 documentation-pointer defects. Alternate the two sources, and skip re-verifying a ticket whose diff is entirely docs/ or tools/. Judged by: a fixture board carrying three recently shipped tickets still files a targets.md row."}, {"title": "The level-crossing rail gate passes every tile, so 54 of 64 cells fetch nothing", "note": "From the 7-day retrospective on #296, re-proposing #236, which was measured and then closed unbuilt on 2026-09-09. vector_tiles::body_mentions_rail (crates/geo/src/vector_tiles.rs:4007) scans the undecoded MVT body for the bytes 'rail', and Shortbread's streets layer declares an attribute *key* called rail - so those four bytes are in the key table of every populated tile on Earth, including the layer note's own railless Veluwe control cell. Measured over 64 z14 tiles covering Groningen: 64 gate passes, 10 cells that actually hold a crossing, 54 wasted round trips to the register on every visit. Test features rather than the key table. Judged by: a unit test over the committed tile fixtures in which a railless tile does not pass the gate, and the Groningen pass count drops from 64 to about 10."}, {"title": "A re-run BGT extractor must reach a client that already visited the city", "note": "From the 7-day retrospective on #296, re-proposing #260, which was measured and then closed unbuilt. surveyed.rs:320 and :327 build a constant cache key, bgt/v2/{z}/{x}/{y}.json, so a client holding a warm cell never sees anything a later extractor run added - which is everybody who already plays in that city. Measured in #260 over one Groningen viewpoint: with the five newly accepted collections served and a fresh cache, surveyed_props is 607 and surveyed_lines 1588; with a cache warmed before those collections existed, the same host still gives 450 and 0, with no error and nothing in the UI. Same fault class as bdf7b2d, where a cache key with no version hid every door ever shipped. The pattern to reuse landed on 2026-09-07 as 'the self-invalidating cache key' in municipal.rs:328. Judged by: the three-run table in #260 re-run, with run 2 now matching run 3."}, {"title": "A --frames sweep places every viewpoint, not only the first", "note": "From the 7-day retrospective on #296, on this lane's focus of extending the harness rather than adding a timer. docs/notes/render-performance-survey.md records that every capture after the first in a --frames sweep reports alt_m=0 with space_factor and globe_albedo as NaN, reproduced on a 6-frame 60 km to 3000 km climb and confirmed against a clean tree: each waypoint is a teleport, a teleport re-anchors, setup_globe rebuilds, and the shutter fires while GlobeState is still empty. That disables the one instrument CLAUDE.md names for catching a hard cut in a ramp, which no single still can show. The fix already exists next door: the performance suite waits on ShotProgress::is_placed (shot_harness.rs:1460) before opening a scenario's window, and the sweep path in the same file does not. Judged by: a 6-frame sweep whose every --csv row carries a non-zero alt_m and a finite space_factor, and cargo perf unchanged."}, {"title": "A surveyed cabinet is not a post box", "note": "From the 7-day retrospective on #296, re-proposing #259, which was measured and then closed unbuilt. The BGT's kast records land on FurnitureKind::Cabinet (crates/geo/src/furniture.rs:235-237), a kind added for OSM's post_box, vending_machine and parcel_locker - so walking up to an electricity cabinet offers 'Use Post box [E]'. Over Groningen the register holds 162 current cabinets: 75 electricity, 29 street lighting, 24 cable TV, 8 traffic-signal, 6 telecoms, 6 GMS, 3 sewer, 2 gas, and no post boxes, and there is nothing a player can do with any of them. It is value 1 backwards: a surveyed object presented as the invented one it displaced. Give the surveyed kinds their own names and no interaction prompt. Judged by: a unit test mapping each cabinet type in the register to its own label, and prop_interactable false for all of them."}] ```
Author
Collaborator

This was a retrospective, not a build, so the branch has no commits and nothing was pushed.

What I found

I read docs/direction.md, every issue filed or closed between 3 and 10 September, the QA reports, and the code behind each claim.

The lane built eight commits that never reached main. Seven branches are ahead of main right now — the nav-mark readout (#214), the crossing clearance fix (#232), the floating navigation marks (#268), two autopilot fixes (#219, #281), the flicker-smoke headroom (#290) and the re-anchor cost fix (#237). Every one was finished and reported done by this lane; every one was parked with a sentence asking a person to rebase it; every one of their tickets was closed on 9 September while the branch stood. That is the largest pool of finished value on the board.

All three build failures in the period were the 45-minute session limit (#288, #289, #293 — including item 1 of the lane's own Steam Deck queue), each ending with "No commits were made".

Two machinery faults are live today, and I checked them rather than trusting the tickets: autopilot.ts reads issue lists at limit=100 while the repository holds 112 issues, so dedupe keys are already expiring; and the daily note has not been posted since 3 September although the lane ticked on the 5th and the 9th.

What I did

  • Posted eleven queue rows on #296 — seven machinery (paging, the digest, parked branches, the stranded work, the time-limit retry, the QA target rotation) and four measured gaps rescued from the sweep (the rail gate, the BGT cache key, the --frames sweep, the cabinet prompt). Each note says where it lands and how a machine judges it.
  • Posted the report on #257.
  • Closed #296.

For you to decide

  1. The direction paragraph. I did not edit docs/direction.md. My argument: a source stays "Wired" only while a player can meet it, and a qa-gap against a wired source outranks the next candidate. #221 said this in August and was closed unbuilt.
  2. Queue item 1 (#293) proposes a CARTO_QUALITY=steamdeck rung by name — which the #294 plan explicitly refused and c854c15 superseded the same day with the measured governor. I did not re-file it; I think it should be dropped or narrowed to the one part that isn't a guess (the Deck takes desktop(), which has no upload or residency ceiling at all).
  3. The Deck is not reachable from the lane. .forgejo/workflows has one runner label, ubuntu-latest, so queue item 6 — the measurement everything after it is ordered behind — parks until someone runs it by hand.
  4. The session runner is not in this repository, so the most useful fix for the commonest failure (push the worktree before the kill) can't land here.

Nothing was verified by building, because nothing was built. The factual claims above come from the Forgejo API, git, and reading the named source lines.

No commits were made.


🤖 viberfox issue agent on the VPS — 53 turns · $5.61 · session 7d9ede53-3cae-4650-aa19-6e14f3e8e9cc. Reply with @agent to continue this session.

This was a retrospective, not a build, so the branch has no commits and nothing was pushed. ## What I found I read `docs/direction.md`, every issue filed or closed between 3 and 10 September, the QA reports, and the code behind each claim. **The lane built eight commits that never reached `main`.** Seven branches are ahead of `main` right now — the nav-mark readout (#214), the crossing clearance fix (#232), the floating navigation marks (#268), two autopilot fixes (#219, #281), the flicker-smoke headroom (#290) and the re-anchor cost fix (#237). Every one was finished and reported done by this lane; every one was parked with a sentence asking a person to rebase it; every one of their tickets was closed on 9 September while the branch stood. That is the largest pool of finished value on the board. **All three build failures in the period were the 45-minute session limit** (#288, #289, #293 — including item 1 of the lane's own Steam Deck queue), each ending with "No commits were made". **Two machinery faults are live today, and I checked them rather than trusting the tickets:** `autopilot.ts` reads issue lists at `limit=100` while the repository holds 112 issues, so dedupe keys are already expiring; and the daily note has not been posted since 3 September although the lane ticked on the 5th and the 9th. ## What I did - Posted **eleven queue rows** on [#296](https://code.garage44.eu/jeroen/cartopolis/issues/296#issuecomment-2464) — seven machinery (paging, the digest, parked branches, the stranded work, the time-limit retry, the QA target rotation) and four measured gaps rescued from the sweep (the rail gate, the BGT cache key, the `--frames` sweep, the cabinet prompt). Each note says where it lands and how a machine judges it. - Posted the **report** on [#257](https://code.garage44.eu/jeroen/cartopolis/issues/257#issuecomment-2468). - Closed #296. ## For you to decide 1. **The direction paragraph.** I did not edit `docs/direction.md`. My argument: a source stays "Wired" only while a player can meet it, and a `qa-gap` against a wired source outranks the next candidate. #221 said this in August and was closed unbuilt. 2. **Queue item 1 (#293)** proposes a `CARTO_QUALITY=steamdeck` rung by name — which the #294 plan explicitly refused and `c854c15` superseded the same day with the measured governor. I did not re-file it; I think it should be dropped or narrowed to the one part that isn't a guess (the Deck takes `desktop()`, which has no upload or residency ceiling at all). 3. **The Deck is not reachable from the lane.** `.forgejo/workflows` has one runner label, `ubuntu-latest`, so queue item 6 — the measurement everything after it is ordered behind — parks until someone runs it by hand. 4. **The session runner is not in this repository**, so the most useful fix for the commonest failure (push the worktree before the kill) can't land here. Nothing was verified by building, because nothing was built. The factual claims above come from the Forgejo API, `git`, and reading the named source lines. _No commits were made._ --- <sub>🤖 viberfox issue agent on the VPS — 53 turns · $5.61 · session `7d9ede53-3cae-4650-aa19-6e14f3e8e9cc`. Reply with **@agent** to continue this session.</sub>
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#296
No description provided.