Repository navigation
feat(harness): each worker's place, permissions and deadline - #247
Draft
KarthikAvinashFI wants to merge 88 commits into
Draft
KarthikAvinashFI wants to merge 88 commits into
KarthikAvinashFI wants to merge 88 commits into
Conversation
…ntime says made each call
…t/TH-8886-declared-workers # Conflicts: # src/fi/alk/harness/call_runner.py # src/fi/alk/harness/run/simulation.py # src/fi/alk/harness/world/runtime.py
…all and the worker that made it
…o each keeps its worker
…vation and keep voice on its LiveKit trace
…-off with its return
…uv run project agent runs in
…ll that launched it
…ne still running when the call ends is kept
…and join a job that starts before its launch returns
…de it, as its own span is named only when it ends
…, apart from the call that launched it
… sits in when no agent names it
…ithout listing kinds of hand-off
… each tracer read, and a job without an id is never taken for an ended one
…hapes, including a transfer that outlives its agent
…permissions-v2 # Conflicts: # src/fi/alk/harness/call_runner.py # src/fi/alk/harness/hosted_scheduler.py
…the actors' refusal path and action log
…ve when the world recorded none
…rker ledger clients
…the trial's state changes
…e trial state beside its faults
KarthikAvinashFI
changed the base branch from
feat/TH-8886-declared-workers
to
feat/TH-8875-actor-model
November 5, 2026 14:03
This branch has not been deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
1. Why
This is the harness half of "Test a multi-agent application" in the simulation plan (tasks T16 and T17, acceptance tests MA-1 and MA-2). The sandbox's own record becomes the source of how a call's agents relate and which worker did what. Each worker event names its span, the hand-off it ran in, its kind and whether that relationship was observed. Where the framework gives no evidence, the record says
unknown; nothing is inferred from names or event order.The PR stacks on Actors (#246,
feat/TH-8875-actor-model). Worker permissions and deadlines go through the actors' tool proxy: the samepermitted()check and refusal path, the same action log, and the trial state file that already carries faults. The platform half is future-agi/future-agi#3754.Plan items and where they are
binding: separate,address_env) gets its own tool-proxy channel per world. The token is never logged or forwardedspan_id,parent_span_id,kind(delegated,transferred,tool_call),relationshipandended_at. Real OpenAI Agents SDK 0.24 and ADK 2.13 span shapes are coveredallowed_tools) is enforced at the proxy, and an out-of-permission call is refused (not_permitted) into the action logworker_budget_secondsbecomes a deadline the proxy enforces (deadline_passed)subject: worker:<id>grades only that worker's calls. Worker verdicts are reported beside the task verdict and never decide it. With no recorded calls, or past its deadline, a worker's check is inconclusiveunknownsimulation_worker_events.py; section 3 lists the observed shapes2. What changed
simulation_worker_events.py(new),simulation_mark_bootstrap.pytool_trace_proxy.pyactions.jsonbundle_author_v2.pypermissions.jsonandactions.json, writes worker channel addresses, seeds the full action log when workers are limitedprocess_runtime.pycall_runner.py,chat_call_runner.py,chat_readiness.pyhosted_scheduler.py,catalogue.py,scenario_source.py,outbound.py,hosted_entrypoint.pysubject; worker lanes; verdicts beside the taskcontract.py,tools.py,scenario.py,scenario_tools.py, skillsallowed_tools,binding,address_env,worker_budget_seconds,subject; writer and builder guidanceexamples/harness/returns_referenceUpdate impact: no change to the platform's storage. Sealed rows and receipts gain optional fields, which readers that do not know them ignore.
3. Observed shapes
unknownuntil it records who handed controlAgentTooltransfer_to_agentReported as unobserved or unknown, never filled in:
unknown.unknown.4. What we tested on
AgentTool, two turnsinspiration_agentwith no recorded arguments; nested hand-off under it; parallel hand-offs in turn 2update_order_statusrefused at the proxy (not permitted for order_lookup), logged with the worker; the worker's own check passedworker:refundsub-goal graded on the Refund worker's calls only, reported beside the taskworker_budget_seconds: 3deadline_passedbefore the world; Refund never ran, its check inconclusivenot_permittedanddeadline_passedrefused before the world and logged with the worker, and kept on the sealed trace row; a worker's check graded on its lane onlyNot tested
unknownworld_ir.py), the other fails at the call on its response path; a fresh build is neededevidence_missing: no tool calls captured by the CrewAI observer for that scenario5. Tests
tests/harness/: span, proxy, call-runner, scheduler, contract, scenario-source, chat-readiness and actor-runtime suites pass. Nine tests in the full suite fail on this branch and on its base the same way (test_dispatch_ack×4,test_proof_failed_attempts×4,test_gradecap).Linear
References: TH-8884, TH-8886, TH-8887, TH-8888