What happens
A fullsend run writes Level 1 telemetry as run-telemetry.jsonl (ADR 0050). The root run span records agent name, work item id, security trace id, gen_ai fields, exit code, and cost/turn aggregates.
It does not record which resolved harness produced the run, or which forge/CI identity the run was against (repo, SHA, change id, pipeline run). Downstream scoring and eval wrappers that need those facts scrape ambient CI env, which is unstable across local runs, child dispatches, and forges.
#5524 proposed a sibling harness-snapshot.json plus mirrored root-span attributes. That ADR was not accepted. Review settled on this split: primary run facts belong on the trace; extra on-disk files are for derived products (for example eval-measurements.jsonl from ADR 0087). Snapshot implementation was #5449 (closed, not planned).
What should happen
Harness fingerprint and forge/CI pointers are attributes on the root run span. They then appear in run-telemetry.jsonl with no extra file, and in OTLP when Level 2 export is on.
The set should be enough to answer "what harness/config produced this run, and against which forge/CI identity?" without scraping CI env. This issue covers both the harness content SHA tracked in #2368 and the forge/CI pointers. Close #2368 as overlapping when this lands.
When OTEL_SDK_DISABLED=true, Level 1 is not written; these facts are absent in that mode. A dedicated snapshot file is out of scope until the root-span attributes are shown not to be enough.
Context
Successor to closed #5524 (ascerra review, follow-up comment): start with root-span attributes, then reassess.
Related:
- #2368 (harness content SHA; overlapping, close when this lands)
- #5449 (closed snapshot tracker)
- operational observability
- Fullsend owns Level 1 / OTEL attribute names; external tools (including ABEvalFlow) map from that
What happens
A
fullsend runwrites Level 1 telemetry asrun-telemetry.jsonl(ADR 0050). The rootrunspan records agent name, work item id, security trace id, gen_ai fields, exit code, and cost/turn aggregates.It does not record which resolved harness produced the run, or which forge/CI identity the run was against (repo, SHA, change id, pipeline run). Downstream scoring and eval wrappers that need those facts scrape ambient CI env, which is unstable across local runs, child dispatches, and forges.
#5524 proposed a sibling
harness-snapshot.jsonplus mirrored root-span attributes. That ADR was not accepted. Review settled on this split: primary run facts belong on the trace; extra on-disk files are for derived products (for exampleeval-measurements.jsonlfrom ADR 0087). Snapshot implementation was #5449 (closed, not planned).What should happen
Harness fingerprint and forge/CI pointers are attributes on the root
runspan. They then appear inrun-telemetry.jsonlwith no extra file, and in OTLP when Level 2 export is on.The set should be enough to answer "what harness/config produced this run, and against which forge/CI identity?" without scraping CI env. This issue covers both the harness content SHA tracked in #2368 and the forge/CI pointers. Close #2368 as overlapping when this lands.
When
OTEL_SDK_DISABLED=true, Level 1 is not written; these facts are absent in that mode. A dedicated snapshot file is out of scope until the root-span attributes are shown not to be enough.Context
Successor to closed #5524 (ascerra review, follow-up comment): start with root-span attributes, then reassess.
Related: