- RunQuota now enforced: background admission acquires the run permit
(global→session) and the runner holds it until terminal commit;
foreground never takes run permits so nested limit=1 cannot deadlock
- RuntimeAdmission activity guard held by background runners for the
whole run; admission checked before any durable write
- signal_contract_json/signal_delivery persisted at run admission so
definition-level steer delivery actually takes effect (was silently
falling back to queue)
- terminal completion payload carries the run's emitted signal IDs
(design §12.3) so the main Agent can recognise duplicates
- ROOT caller_scope_id is the literal "ROOT" (design §9.6)
- legacy general delegation returns a deprecation/migration hint
Cleanup:
- remove unused AgentCaller enum and run_parallel wrapper
- remove unreachable http_get_only prompt machinery (http_request is
RootOnly and never enters sub-agent registries)
- drop never-read EmittedSignal fields; derive WakeupSource from
TurnInputSource instead of duplicating match arms
- replace the /stop oneshot compatibility bridge with a plain turn_busy
flag; the worker's forced-cancel path now selects on the cancellation
token (implementation doc §11.1)
Version 1.8.0