Skip to content

id(world): capability requests in wants re-execute unattributed after a world reopen #839

Open

Description

@dezren39

handled_requests lives in memory only (pkgs/id/src/world/actor.rs:208) and starts empty after a reopen. So every capability request still listed in the guest's wants runs again on the first pass after a restart. With no acting participant, it runs as permitted (actor_permits). For a non-idempotent provider (chat.say today; F12.5 kv, http.fetch and notify), a restart can repeat a side effect with world authority. The comment near actor.rs:400 calls delivery at-least-once, but the restart case is not documented or tested.

Proposed: write down the restart semantics and add a test. Consider journaling handled request ids, or refusing un-attributed re-execution after a reopen. The F13.7 design refuses with actor_denied, reason restarted.

Found while writing the F13.7 design (#789).

Acceptance criteria

  • The restart semantics for capability requests still listed in a guest's wants after a world reopen are written down in the code/docs
  • A test covers the reopen case: a non-idempotent request (e.g. chat.say) is not silently re-executed unattributed, or its at-least-once re-execution is explicitly asserted as intended
  • If the chosen semantics refuse re-execution, the refusal uses the documented code (actor_denied, reason restarted, per the F13.7 design)

Activity

  1. added
    kind/bugSomething isn't working (prefixed form of the classic bug label)
    source/humanFiled directly by a human
    priority/highImportant and time-sensitive
    effort/mMedium: expected under 1 day of work
    app/idPackage/app: id (pkgs/ or apps/ in this repo)
    meta/enrichedIntake review done: acceptance criteria, links, and normalized labels added
    on Oct 26, 2026
  2. dezren39 commented on Oct 26, 2026

    @dezren39
    MemberAuthor

    Intake review

    Still live: verified on current main (a2eef6f) — handled_requests in pkgs/id/src/world/actor.rs is still an in-memory BTreeSet re-initialised empty on open (and cleared at line ~1215); no journaling or restart refusal found.

    Related: #789 (F13.7 design proposes refusing with actor_denied / reason restarted), #840 (the sibling attribution gap — input carries no session identity).

    Notes / risks: this is the highest-risk item in this batch: a restart can repeat a non-idempotent side effect (chat.say today; kv / http.fetch / notify under F12.5) with world authority and no acting participant. The fix is a semantics decision first, code second.

    Suggested approach: decide journal-handled-ids vs refuse-unattributed-on-reopen, write the semantics into the module docs, then add the reopen regression test named in the acceptance criteria.

    🤖 Fleet monitor intake enrichment — acceptance criteria appended to the body, labels normalized and meta/enriched applied this pass.

  3. added
    mode/onlineFully doable remotely: design, config, code, cloud
    work/assignedQueue worker lifecycle state
    queue/claimedQueue worker lifecycle state
    and removed on Nov 1, 2026
  4. 72 remaining items

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

    @dezren39
    MemberAuthor

    Lane M claimed task 7201 (triage) for #839; execution-lane assignment returned opencode, so this task is handed off to the laptop claimant (opencode-claimant), which launches the bound session. Attempts 21/24. Prior checkpoint note stands: Drew-authored fix PR #4677 is OPEN — do not touch/compete; complete as already_done if PR #4677 merges.

  7. dezren39 commented on Nov 4, 2026

    @dezren39
    MemberAuthor

    🤖 Agent note · handed off

  8. dezren39 commented on Nov 4, 2026

    @dezren39
    MemberAuthor

    🤖 Agent note · handed off

  9. dezren39 commented on Nov 4, 2026

    @dezren39
    MemberAuthor

    agent: repo-worker-code
    state: picked up
    queue: repo-health-code-pilot
    task: 7201
    lane: aea12c82-c5af-4e5a-9b66-f8e360f87177
    found_via: atomic queue claim
    at: 2026-11-04T21:48:35Z

    Claimed task 7201 and checkpointed the inherited handoff state (attempts 24/24). I am revalidating issue #839 and PR #4677 fresh. The prior progress identifies #4677 as a Drew-authored active fix; I will not touch or duplicate it. If it is still open, I will park; if merged, I will complete as already_done with fresh evidence.

  10. 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 4, 2026
  11. dezren39 commented on Nov 4, 2026

    @dezren39
    MemberAuthor

    agent: repo-worker-code
    state: parked
    queue: repo-health-code-pilot
    task: 7201
    lane: aea12c82-c5af-4e5a-9b66-f8e360f87177
    at: 2026-11-04T21:49:31Z

    Parked task 7201 for 30 minutes after fresh verification: issue #839 is OPEN; PR #4677 is OPEN, fixes #839, and is authored by dezren39. This is active Drew-owned work, so I did not inspect or modify its PR/branch or create a duplicate. Attempt count is 24/24; no code or tests were performed in this claim. Resume after PR #4677 merges/closes, then revalidate #839 and PR state. Labels now reflect parked state: queue/parked + status/parked + work/assigned.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

app/idPackage/app: id (pkgs/ or apps/ in this repo)effort/mMedium: expected under 1 day of workkind/bugSomething isn't working (prefixed form of the classic bug label)meta/enrichedIntake review done: acceptance criteria, links, and normalized labels addedmode/onlineFully doable remotely: design, config, code, cloudpriority/highImportant and time-sensitivequeue/parkedQueue task is parked (waiting on CI, time, or an event)source/humanFiled directly by a humanstatus/parkedDeliberately paused with a recorded resume conditiontask/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