Repository navigation
[finding] three sibling list doors declare limit/cursor and never read them, one reporting hasMore: false as a literal — REBUILD of #19365, which stopped resolving on 2026-09-21 #19543
Description
⚠️ This card REPLACES #19365, which no longer resolves. GitHub cannot restore a number, so this is a new one, and every citation that named the old number has to be re-pointed here. ⛔ Nothing below is written from memory — each section names the artefact it was recovered from, and what could not be recovered is listed rather than filled in.
✅ Re-derived 2026-09-25 on the maintainer's instruction (record: this card's re-derivation comment of that date). Door ① landed (PR #19493). Door ② is absorbed by #17158 (the export-job family retires). Door ③ is unblocked, with the reading taken: the spec half is on this card and the server half is objectstack-ai/cloud#2426, with the list ruled newest-first. Door ④ is retired in favour of GET /api/v1/meta/flow. The former wait on the placeholder #19545 (closed not_planned) is gone. ⛔ The table below is the history as recovered; the re-derivation comment is current.
Why this card exists — 出处三件
- Whose instruction: the maintainer, in the
domain:specseat-2 session (session_01UDXER3sdqfeVYpEWZs5mZx). - Verbatim (⛔ untranslated, unpolished): 「os-sam 的卡 404 和你pr 相关的要重建」
- Where: that session's chat, 2026-09-21, after this seat reported that card [finding] three sibling list doors carry the same declared-but-never-read
limit/cursorshape that #17667 is retiring on/packages— export jobs, AI conversations and automation runs #19365 — the card PR feat(automation): GET /automation/:name/runs retirescursorand computeshasMore#19493 isPart of— answers404, together with the blast radius.
What was measured about the loss, ⛔ not inferred. GET /repos/objectstack-ai/objectstack/issues/19365 → 404; the comment ids that card carried → 404. Controls taken in the same act: GET /pulls/19493 → 200, and comment 5755970189 (a record that happened to be posted on the PR rather than the card) → 200. So the issue and comment routes work; that card specifically is gone. ⛔ This card asserts nothing about WHY: the account route /users/... is refused by that session's proxy for every login — control, /users/os-warren, the seat's own account, answers 403 with the same 「sessions are bound to their configured repositories」 body — so no reading available there can answer it.
The ruling — recovered VERBATIM from a landed artefact
PR #19493's body quotes decision batch #204 item 2 (originally comment 5754491070 on the old card), letters C · C · A per door, maintainer 「204 同意」 2026-09-21. For door ① the ruling reads, verbatim:
cursoris retired fromListRunsRequestSchema;limitstays (it is read end to end and the Console's flow-runs page sends it today); the engine reports truncation to the route andhasMoreis computed, never hard-coded. A (a cursor protocol for a 100-row window) and B (retire cursor and leave the lie) are ⛔ not taken.
⭐ The same ruling is also carried in merged-to-branch source rather than only in prose: the reason field of packages/spec/src/migrations/entries/semantic/18.automation-runs-cursor-retired.ts names 「ADR-0049 enforce-or-remove (director seat, decision batch #204 item 2, maintainer 「204 同意」 2026-09-21, letter C of three for this door)」. That file is the durable copy and it is why the ruling survived the card.
The three doors
Three sibling list doors carry the identical shape — a declared limit and/or cursor that no reader spends, one of them reporting hasMore as a hard-coded false. The old card's own framing, recovered from a listing this seat took before the loss: 「三扇兄弟门声明 limit/cursor 却从不读,其一还带 .default(20) 让读声明的客户端以为有上限」.
| door | subject | state |
|---|---|---|
| ① | GET /api/automation/:name/runs |
in flight — PR #19493, letter C. cursor retired via retiredKey(), hasMore computed from the engine |
| ② | export jobs | ruled (letter C), gated on a cloud-repo reading |
| ③ | AI conversations (ai.conversations.list) |
ruled (letter A), gated on the same reading |
Why doors ②③ are not closed by PR #19493, recovered verbatim from that PR's body: 「Doors ② (export jobs) and ③ (AI conversations) are ruled but gated on a cloud-repo reading riding #19361, and the ruling has the seat execute them on that reading's return without re-entering the decision box. A merge that shut the card would strand two-thirds of the ruled work, so the card stays open and the seat re-labels it.」
Where door ①'s record lives now
PR #19493 is the surviving home for this work's records, because three os-dev-report comments and two contract-review records went with the old card:
- round-2 contract review, re-anchored: comment
5756785503 - round-3 contract review (FAIL,
Served-tier: 113/113): comment5757388878 - the
Lint & Repo Gatescitation diagnosis: comment5757007310, with its correction carried in5757388878
⛔ What could NOT be recovered, stated rather than filled in
- The original body in full. 3,052 bytes; what survives is the
Path:line, the 「三扇兄弟门」 framing, the relationship to The /packages read doors' declared request schemas and their actual query reads diverge in BOTH directions —?limit=and?cursor=are declared and never read,?type=is read and never declared #17667 (「The /packages read doors' declared request schemas and their actual query reads diverge in BOTH directions —?limit=and?cursor=are declared and never read,?type=is read and never declared #17667 deliberately did not widen onto these, and that was correct — the ruling named one door. This card is the successor」) and the dedup words, all from a listing and greps this seat took before the loss. - The original title verbatim. Only a 70-character listing truncation survives:
[finding] three sibling list doors carry the same declared-but-never-r. The title above is written to describe the same work; it is ⛔ not a quotation. - The comment thread: the claim, three dev reports, the ruling comment
5754491070in its original form, and the earlier review records. The ruling's text survives through the two quotations above; the rest does not. - The exact label set at the moment of loss.
domain:spec·priority:p1·pm:dispatched·needs:contract-reviewwere read off a lane listing this seat took at 2026-09-21T06:0xZ. They are restored from that reading, ⛔ not re-graded — triage corrects them if the reading was stale.
What this card asks for next
Nothing new. Door ① continues on PR #19493 at its round-4 rework. Lint & Repo Gates step #181 (Issue citations this change adds resolve on the board) stays red — its own remedy text forbids guessing a replacement and requires naming a target that resolves, which this card now is.
Dedup words
list door declared limit · cursor never read · hasMore hard-coded false · export jobs pagination declared · automation runs cursor ignored
Generated by Claude Code
Activity