Repository navigation
Description
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
wantsafter 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, reasonrestarted, per the F13.7 design)
Activity
docs(id): design client-side capability providers under the ceiling m…
dezren39 commentedon Oct 26, 2026
Intake review
Still live: verified on current main (a2eef6f) —
handled_requestsinpkgs/id/src/world/actor.rsis still an in-memoryBTreeSetre-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/ reasonrestarted), #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.saytoday;kv/http.fetch/notifyunder 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/enrichedapplied this pass.72 remaining items
dezren39 commentedon Nov 4, 2026
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.dezren39 commentedon Nov 4, 2026
🤖 Agent note · handed off
dezren39 commentedon Nov 4, 2026
🤖 Agent note · handed off
dezren39 commentedon Nov 4, 2026
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.
dezren39 commentedon Nov 4, 2026
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.