The QA lane has never walked docs/qa/targets.md — 14 of 14 passes re-verified a shipped ticket, 9 of them documentation-only verdicts #280

Closed
opened 2026-09-03 00:56:45 +00:00 by viberfox-agent · 0 comments
Collaborator

Found by the 7-day retrospective on #279, reading every qa ticket the lane has
ever filed.

What happens

docs/qa/targets.md is a 16-row standing list of the functionality a player
actually meets — register and sign in, claim a house, walk and run, jump and fly,
sit on a bench, emotes, chat, proximity voice, block and report, delete account,
create and edit a prim, script a prim, touch and interact, export/import builds,
bookmarks and place pins, place photos.

Not one of those rows has ever been walked. Every QA ticket the lane has
filed, 14 of 14, is a re-verify of a recently shipped issue:

QA passes filed since 2026-08-29 14
of them "QA: what #N shipped" 14
of them from docs/qa/targets.md 0

And nine of those fourteen re-verified a "…: is it worth wiring in?" ticket —
#175, #176, #180, #186, #187, #192, #197, #199, #201 — whose entire deliverable
was a row in docs/direction.md and a file in docs/notes/. There is no player
journey in a verdict. A tenth, #278, is a QA pass on main is red on 9e5ed895, a
compile fix to a test module.

What it costs, and it is not hypothetical

The QA lane's findings are the input to the retrospective's promotions, so what
QA is pointed at decides what gets built. Point it at prose and it finds prose:
11 of the 31 open qa-gap issues are documentation-pointer defects — #240,
#242, #244, #246, #247, #248, #250, #252, #253, #254, #256, every one of them a
note or a table row that names the wrong symbol or the wrong file. Each is
correct. None can be promoted, because none is something a player meets, and the
retrospective's own bar is "gaps whose success a machine can judge". They will
sit in the backlog for ever.

Meanwhile the simulator half of this codebase — accounts, prims, scripting, chat,
voice, ownership, the sit pose, driver mode — has had zero unattended
attention in the period, and every one of the 34 gaps filed is about a map data
layer.

Where the seam is

tools/autopilot.ts, generateQa (:876) and shippedRecently (:821).

// Freshly shipped functionality first — walked once, while nobody has used it
// yet, which is when a missing obvious next step costs the least.
for (const shipped of await shippedRecently()) {
  const key = `qa-reverify-${shipped.number}`;
  if (await alreadyFiled(key)) continue;
  await fileQaTicket(…);
  return;                       // <- the standing list is below this line
}

Two things put together produce the outcome:

  1. The re-verify loop returns. With qaPerDay: 1 the standing list below it
    is only reached on a day when every shipped ticket of the last week has already
    been walked. In seven days that has never happened once.
  2. shippedRecently() filters on agent:shipped and a 7-day cutoff and nothing
    else.
    It cannot tell a merged data layer from a merged verdict, a merged
    autopilot change or a merged red-main repair — so those enter the QA queue
    ahead of chat, voice and prim ownership.

What would fix it

Two independent changes, either of which helps and both of which are small:

  • Give shippedRecently() a player-facing test. The cheapest honest one is
    the files the merge touched: a ticket whose diff is entirely docs/, .md,
    tools/ or .forgejo/ shipped nothing a player can walk into, and the compare
    endpoint shipReady already calls answers it. That drops all nine verdict
    tickets, the red-main repairs and every autopilot change out of the queue.
  • Do not let the re-verify loop starve the rotation. Alternate, or reserve one
    pass in N for docs/qa/targets.md, so the standing list is reached whether or
    not the lane shipped something yesterday.

Note the second alone is not enough while qaPerDay is 1: a queue that always has
one fresh re-verify in it will still take every slot.

  • #272 asks for a way out of the qa-gap backlog. This is the other end: what
    goes into it.
  • The 11 documentation-pointer gaps listed above are the evidence for both.

Filed by the 7-day retrospective (#279). Not labelled autonomous — it edits
tools/autopilot.ts, which the fence refuses to land, and three finished branches
are already waiting for review.

Found by the 7-day retrospective on #279, reading every `qa` ticket the lane has ever filed. ## What happens `docs/qa/targets.md` is a 16-row standing list of the functionality a player actually meets — register and sign in, claim a house, walk and run, jump and fly, sit on a bench, emotes, chat, proximity voice, block and report, delete account, create and edit a prim, script a prim, touch and interact, export/import builds, bookmarks and place pins, place photos. **Not one of those rows has ever been walked.** Every QA ticket the lane has filed, 14 of 14, is a re-verify of a recently shipped issue: | | | |---|---| | QA passes filed since 2026-08-29 | **14** | | of them "QA: what #N shipped" | **14** | | of them from `docs/qa/targets.md` | **0** | And nine of those fourteen re-verified a **"…: is it worth wiring in?"** ticket — #175, #176, #180, #186, #187, #192, #197, #199, #201 — whose entire deliverable was a row in `docs/direction.md` and a file in `docs/notes/`. There is no player journey in a verdict. A tenth, #278, is a QA pass on `main is red on 9e5ed895`, a compile fix to a test module. ## What it costs, and it is not hypothetical The QA lane's findings are the input to the retrospective's promotions, so what QA is pointed at decides what gets built. Point it at prose and it finds prose: **11 of the 31 open `qa-gap` issues are documentation-pointer defects** — #240, #242, #244, #246, #247, #248, #250, #252, #253, #254, #256, every one of them a note or a table row that names the wrong symbol or the wrong file. Each is correct. None can be promoted, because none is something a player meets, and the retrospective's own bar is "gaps whose success a machine can judge". They will sit in the backlog for ever. Meanwhile the simulator half of this codebase — accounts, prims, scripting, chat, voice, ownership, the sit pose, driver mode — has had **zero** unattended attention in the period, and every one of the 34 gaps filed is about a map data layer. ## Where the seam is `tools/autopilot.ts`, `generateQa` (`:876`) and `shippedRecently` (`:821`). ```ts // Freshly shipped functionality first — walked once, while nobody has used it // yet, which is when a missing obvious next step costs the least. for (const shipped of await shippedRecently()) { const key = `qa-reverify-${shipped.number}`; if (await alreadyFiled(key)) continue; await fileQaTicket(…); return; // <- the standing list is below this line } ``` Two things put together produce the outcome: 1. **The re-verify loop `return`s.** With `qaPerDay: 1` the standing list below it is only reached on a day when every shipped ticket of the last week has already been walked. In seven days that has never happened once. 2. **`shippedRecently()` filters on `agent:shipped` and a 7-day cutoff and nothing else.** It cannot tell a merged data layer from a merged verdict, a merged autopilot change or a merged red-`main` repair — so those enter the QA queue ahead of chat, voice and prim ownership. ## What would fix it Two independent changes, either of which helps and both of which are small: - **Give `shippedRecently()` a player-facing test.** The cheapest honest one is the files the merge touched: a ticket whose diff is entirely `docs/`, `.md`, `tools/` or `.forgejo/` shipped nothing a player can walk into, and the compare endpoint `shipReady` already calls answers it. That drops all nine verdict tickets, the red-`main` repairs and every autopilot change out of the queue. - **Do not let the re-verify loop starve the rotation.** Alternate, or reserve one pass in N for `docs/qa/targets.md`, so the standing list is reached whether or not the lane shipped something yesterday. Note the second alone is not enough while `qaPerDay` is 1: a queue that always has one fresh re-verify in it will still take every slot. ## Related - #272 asks for a way *out* of the `qa-gap` backlog. This is the other end: what goes *into* it. - The 11 documentation-pointer gaps listed above are the evidence for both. <sub>Filed by the 7-day retrospective (#279). Not labelled `autonomous` — it edits `tools/autopilot.ts`, which the fence refuses to land, and three finished branches are already waiting for review.</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#280
No description provided.