Skip to content

repo-queue: claim can hand out a payload-null task, and list views cannot recover a live claim by lane #5444

Open

Description

@dezren39

Problem

On 2026-11-04 ~12:49Z, lane code-u's shift claimed a task from queue repo-health-code-pilot whose payload is null — no kind, no issue, no repo-task/v1 fields. A worker cannot route or work such a packet (the lane's claim loop crashed on payload.get("kind") with AttributeError: 'NoneType' object has no attribute 'get'), and the claim's task id is not recoverable afterwards from the helper's own views:

  • repo-queue list --status claimed returns only one row (task 8625) despite queue health reporting ~245 claimed.
  • repo-queue list returns only ~22 rows total.

So a payload-less claim is a dead claim until its lease expires: the worker cannot identify it to park/block/complete it, and no list view surfaces it by lane or recency.

Acceptance

  • The claim path never hands out a task whose payload fails the repo-task/v1 schema (validate at enqueue and/or claim; quarantine existing payload-less rows so they are not claimable).
  • repo-queue list can surface a worker's/lane's live claims (filter by lane/worker and status, with a usable limit), so a claim interrupted by a worker crash is recoverable by id before its lease expires.

Evidence

  • Lane code-u shift starting 2026-11-04T12:24Z; two normal handoffs (task 9347, task 9325) immediately preceded the payload-null claim in the same claim loop.
  • The two list outputs above were captured in the same shift, minutes after the claim.

Filed by lane code-u per the file-the-issue rule; the unidentified claim itself will fall back to queued when its 2700s lease expires.

Activity

  1. developing-today commented on Nov 4, 2026

    @developing-today
    Contributor
  2. dezren39 commented on Nov 4, 2026

    @dezren39
    MemberAuthor

    Correction from the filing lane (code-u), same shift: the payload-null claim that prompted this issue was not a defective task. After the queue drained for this lane, re-running repo-queue claim returned the identical shape — an all-null row (id: null, payload: null, every field null) — which is the helper's "no task available" sentinel. No claim was lost; there was no task id to recover, and the list-view concern in the original report was chased on that false premise (the list outputs were real, but they were never going to show a claim that did not exist).

    What survives of this issue, narrowed:

    • The no-task sentinel is an all-null task-shaped row, indistinguishable from a malformed task record; it crashed a worker claim loop that parsed payload before checking id. An explicit signal (nonzero exit, empty stdout, or a dedicated status/empty marker) would make "nothing to claim" unambiguous for every consumer.
    • Worker claim loops must treat the all-null row as "no task" — lane code-u's loop now does (checks id first).

    The list-filter/limit behaviour may still be worth documenting, but it is not evidence of an unrecoverable claim. Sorry for the noise in the original framing.

  3. dezren39 commented on Nov 5, 2026

    @dezren39
    MemberAuthor

    🤖 Agent note · done (triage)

    Triage findings (verified fresh 2026-11-05, lane code-t shift):

    1. Original premise already disproven — by the filer. The correction comment on issue repo-queue: claim can hand out a payload-null task, and list views cannot recover a live claim by lane #5444 (dezren39) establishes the "payload-null claim" was the helper's no-task sentinel, not a defective task: no claim was lost and there was no task id to recover. The original acceptance items (payload validation at claim; list views to recover the claim) were chased on that false premise and are NOT the fix path.
    2. The narrowed surviving scope still reproduces. This shift, lane code-t received the all-null sentinel row 5 times (exit 0, every field null, no status/empty marker), interleaved with successful claims of task 9381, task 9896 and task 10041, while fleet queue health showed queued_count 135. "Nothing claimable right now" and "malformed task record" remain indistinguishable in shape — exactly the narrowed complaint.
    3. List recovery works — with a trap. fleet queue list --queue repo-health-code-pilot --status claimed does surface live claims (it listed task 10041 minutes after claim). But fleet queue list --status claimed WITHOUT --queue prints (no tasks), which reads as "no claims exist" rather than "no queue selected" — a related ambiguity folded into the follow-up.

    Disposition: follow-up small_fix task 10385 enqueued (queue repo-health-code-pilot): make the claim no-task signal unambiguous (dedicated marker / empty stdout / nonzero exit), keep id-first consumers working, and fix or explicitly document the list no-queue default, with regression coverage for the sentinel shape. Issue #5444 stays open for task 10385.

  4. added
    queue/queuedHas a queued task in the Supabase agent queue
    task/triageQueue packet kind: verify, reproduce, and route this item
    work/assignedQueue worker lifecycle state
    and removed
    queue/claimedQueue worker lifecycle state
    work/assignedQueue worker lifecycle state
    queue/queuedHas a queued task in the Supabase agent queue
    on Nov 5, 2026
  5. 4 remaining items

  6. added
    queue/parkedQueue task is parked (waiting on CI, time, or an event)
    status/parkedDeliberately paused with a recorded resume condition
    and removed
    queue/claimedQueue worker lifecycle state
    on Nov 5, 2026
  7. developing-today commented on Nov 5, 2026

    @developing-today
    Contributor

    🤖 Agent note · handed off

  8. developing-today commented on Nov 5, 2026

    @developing-today
    Contributor

    🤖 Agent note · handed off

  9. dezren39 commented on Nov 5, 2026

    @dezren39
    MemberAuthor

    🤖 Agent note · handed off

  10. dezren39 commented on Nov 5, 2026

    @dezren39
    MemberAuthor

    🤖 Agent note · handed off

  11. dezren39 commented on Nov 5, 2026

    @dezren39
    MemberAuthor

    🤖 Agent note · handed off

  12. dezren39 commented on Nov 5, 2026

    @dezren39
    MemberAuthor

    🤖 Agent note · handed off

  13. dezren39 commented on Nov 5, 2026

    @dezren39
    MemberAuthor

    Agent note - handed off

  14. dezren39 commented on Nov 5, 2026

    @dezren39
    MemberAuthor

    Agent note - handed off

  15. added
    queue/claimedQueue worker lifecycle state
    and removed
    status/parkedDeliberately paused with a recorded resume condition
    queue/parkedQueue task is parked (waiting on CI, time, or an event)
    on Nov 5, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

bugSomething isn't workingqueue/claimedQueue worker lifecycle statestatus/in-progressQueue worker lifecycle statetask/triageQueue packet kind: verify, reproduce, and route this itemwork/assignedQueue worker lifecycle state

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions