Development record
Every payload a host hands back from a delegated step names the model that produced it and the number of agents that ran, and the ingesting verb refuses one that does not
Press Release
Seeded from a quoted-text intent capture. Expand into the full press-release narrative before planning.
Why This Matters
Every payload a host hands back from a delegated step names the model that produced it and the number of agents that ran, and the ingesting verb refuses one that does not
Mechanism
Prompted (the claim-recording gradient): why the authors expect this to work, as a falsifiable "we expect X because Y" — not the outcome restated. Replace this line with the claim, or with the exact token
None stated.alone on its line to record the claim as considered and declined.
Scope Conditions
Required (the claim-recording gradient): the population, platform, scale, or assumptions this claim holds under, one per top-level bullet —
abcd intent planstamps each with a persistent identity. Replace this line with those bullets, or with the exact tokenNone stated.alone on its line.
Acceptance Criteria
Required (the itd-1 discipline): add at least one Given-When-Then bullet describing the verifiable bar for "shipped" before this draft can be planned.
SOTA
Surveyed on 2026-10-23; sources, evidence tiers and the local fit risks are in the autonomous-loops SOTA note.
- The field names exist, on different spans. OpenTelemetry's GenAI
conventions (status: Development) define
gen_ai.request.model(on the create-agent span, "the exact name of the model requested"; on the invoke-agent span Recommended only where one model applies),gen_ai.response.model("the name of the model that generated the response", defined on the model-call spans and not listed on the invoke-agent span at all),gen_ai.provider.name,gen_ai.agent.id,gen_ai.agent.name,gen_ai.conversation.idandgen_ai.usage.input_tokens/output_tokens, with input tokens including cached ones (OTel GenAI spans and agent spans). A per-agentgen_ai.response.model, and the agents list itself, are abcd's own composition of OTel names, not an OTel structure. - The host's run already carries the facts.
system/initreports the session'smodel; the result'smodelUsageis keyed by model name and counts sub-agent requests whereusagedoes not; every sub-agent message carries aparent_tool_use_idfrom which the nesting tree is rebuilt;SubagentStopcarriesagent_idandagent_typebut no model; cost figures are client-side estimates (Claude Code and Agent SDK docs). So the per-model totals come from the final result, but the per-agent served model and tokens can only be rebuilt from the stream (stream-jsonmessages withparent_tool_use_id, each carrying its model and usage), not from the result alone; and after a process crash the finalerror_during_executionresult "may carry zeroedusage,total_cost_usd, andmodelUsage", so a run that did work can hand back an empty agent list, and the refusal must say what it does with a zeroed result rather than treat it as no work. - Provenance words. W3C PROV-O: an entity
wasAttributedToan agent, an activitywasAssociatedWithan agent, an agentactedOnBehalfOfanother, andSoftwareAgentis a kind ofAgent; the human the run acts on behalf of is the attribution rule's author. - Served is not asked. The 2026-10-16 note measured the spread between provider pairings; the build verb's scope condition already says the model is recorded as the runner reported it and cannot be verified by the binary.
Path 1 for the names, Path 2 for the mechanism: the payload carries the
OTel attribute names verbatim (gen_ai.provider.name, gen_ai.request.model,
gen_ai.response.model) and an agents list keyed by gen_ai.agent.id with
each agent's served model and tokens, the per-agent gen_ai.response.model
being abcd's extension of a convention whose agent span does not define it;
the agent count is the number of distinct agent ids that ran, the top-level
one included; the ingesting verb refuses a payload with no
gen_ai.response.model or an empty agent list, and a zeroed crash result is
recorded as "unknown" with the crash named rather than refused as no work; the
per-agent fields are read from the stream, the per-model totals from the
result; the payload pins the convention version because the status is
Development. Names only, no OTel SDK, no Go dependency. The independent
fit-challenge runs at plan time.
Open Questions
- (SOTA 2026-10-23) Whether "the number of agents that ran" counts distinct
agent ids (the top-level one included) or only sub-agents, and whether a
forked skill with a
forked-command-parent counts as an agent. - (SOTA 2026-10-23) Whether the payload records both the requested and the served model, and refuses only when the served one is missing.
- (SOTA 2026-10-23) Which convention version the payload pins, and what the ingesting verb does with a payload pinned to a newer one.
Audit Notes
Empty. Populated by intent-auditor when intent moves to shipped/.
Frontmatter
| id | itd-2609180517121254 |
|---|---|
| type | intent |
| lifecycle | drafts |
| severity | minor |
.abcd/development/intents/drafts/itd-2609180517121254-every-payload-a-host-hands-back-from-a.md
open on GitHub ↗ · commit history ↗
Referenced by2
- iss-2610262043089096The delegated-payload draft refuses a payload that names no model; itd-166 records a missing served model as a reason, never leaving it out.related
- itd-2609170822093401abcd proposes the model each agent deserves, and facilitates it where it canbuilt on by
mentions3
- itd-1Every Intent Has Acceptance Criteria; Every Audit Verifies Them
- itd-2610161733316518One task done across a model matrix, re-runnably
- spc-2609180535002478abcd proposes the model each agent deserves, and facilitates it where it can