---
model: claude-fable-5
service: claude
session: f6c84722-471a-4458-9a80-e453fea9029f
timestamp: 2026-07-02T16:58:06Z
git_ref: a34aaf98
scope: code
substantive: true
raw_file: 20260702T165806Z_a34aaf98_prompt_io.raw.md
---

## Prompt

Follow-up round in the same session as the
`tractor.to_actor` landing (see
`20260702T154255Z_65bf9df5_prompt_io.md`). After
committing that work the user green-lit the deferred
items:

> go go go on this with what time you have left, in
> particular see if you can get the _ria_nursery
> removal going!

then extended the deadline twice to iterate on the
discovered hang:

> continue on this up until a 12:58:30 deadline

and finally chose "Commit step A now" from the
next-steps prompt.

## Response summary

Step A of the `._ria_nursery` removal (issue #477): hoist
`.run_in_actor()` result-reaping out of the spawn
backends into the `ActorNursery` machinery so ria
children spawn via the default daemon nursery,

- new `_supervise._reap_ria_portals()` runs one
  `_spawn.cancel_on_completion()` task per ria child
  AFTER `._join_procs` is set; happy path awaits it
  right after `._join_procs.set()`.
- error path SEQUENCES: snapshot ria
  `(portal, subactor)` pairs -> `await an.cancel()` ->
  0.5s-bounded reap. Two failed intermediates informed
  this: a concurrent reap+cancel DEADLOCKED
  `test_multierror`; a 3s bound blew
  `test_cancel_while_childs_child_in_sync_sleep`'s
  `fail_after` deadline.
- backends (`spawn/_trio.py`, `spawn/_mp.py`) lose the
  `._cancel_after_result_on_exit` membership branch,
  per-child reaper nursery + dead imports.
- design/probe-history doc:
  `ai/conc-anal/ria_nursery_removal_plan.md` (from an
  agent-verified machinery map).

Verification: `test_cancellation.py` fully green
(20 passed, 1 xfailed) incl. the previously-hung
`test_multierror`; `test_to_actor`+`test_spawning`
20/20; bounded full-suite gate SIGINT'd ~30s early at
303 passed / 0 failures (user opted to commit on that
signal, deferring the unbounded re-run to step-B
verification).

## Files changed

- `tractor/runtime/_supervise.py` — `_reap_ria_portals()`
  + two call-sites; `run_in_actor()` off the ria nursery
- `tractor/spawn/_trio.py` — reaper branch + import drop
- `tractor/spawn/_mp.py` — same as `_trio.py`
- `ai/conc-anal/ria_nursery_removal_plan.md` — plan +
  probe history

## Human edits

None yet — committed via the drafted
`.claude/git_commit_msg_ria_step_a.md` (user-driven
`git commit --edit`).
