A. Executive Summary
Overall status: ⚠️ WARN
The validation was performed during an active run (agent phase in progress). Only the setup span has been emitted to the local JSONL mirror at this point. All observed data is fully compliant with the normative spec. No export errors were detected. Conclusion and agent spans are expected to be emitted when the run concludes.
Main risk: Full end-to-end attribute coverage (conclusion/agent spans, backend visibility) cannot be confirmed until the run finishes.
Most likely root cause of WARN: Partial data — run is in-progress, not a data quality defect.
B. Trace Completeness
| Metric |
Value |
| Validation window |
2026-06-08T05:49:20Z – 2026-06-08T05:50:26Z (run in progress) |
Expected service.name |
gh-aw.otlp-data-quality-validator |
| Spans in JSONL mirror |
1 (gh-aw.agent.setup) |
| Spans in backend |
Not verifiable (no MCP backend query tools available) |
| Unique trace IDs |
1 — 9b2249ae54939556d5f2973ac1f92b4a |
Unique span identities (traceId+spanId) |
1 — no duplicates |
| Missing spans (expected later) |
gh-aw.agent.conclusion, gh-aw.agent.agent (not yet emitted) |
| Duplicate spans |
None |
Trace ID consistent with GITHUB_AW_OTEL_TRACE_ID |
✅ Match confirmed |
| Export error count |
0 (no error files at /tmp/gh-aw/otlp-export-errors.jsonl or .count) |
Confidence: High for setup span correctness; Low for backend visibility (unavailable).
C. Span Hierarchy Validation
Only one span is currently present in the mirror. Full hierarchy validation requires conclusion and agent spans.
| Check |
Result |
Notes |
Setup span has valid parentSpanId (global root) |
✅ Pass |
parentSpanId = 9e13569dba71af6c (16-char hex) |
GITHUB_AW_OTEL_PARENT_SPAN_ID = setup span ID |
✅ Pass |
223e01cb1bfea101 — conclusion will parent here |
| Conclusion parents under setup |
⏳ Not yet emitted |
Expected after agent completes |
| Agent span parents under conclusion |
⏳ Not yet emitted |
Expected after agent concludes |
Span naming pattern gh-aw.<job>.<op> |
✅ Pass |
gh-aw.agent.setup matches spec §9.2 |
Span kind INTERNAL (1) for setup |
✅ Pass |
kind: 1 per spec §9.4 |
| Single trace ID across all jobs |
✅ Pass |
One trace per run (single job observed) |
D. Attribute Contract Validation
Setup span required attributes (spec §10.1)
| Attribute |
Status |
Value |
gh-aw.job.name |
✅ Present |
agent |
gh-aw.workflow.name |
✅ Present |
OTLP Data Quality Validator |
gh-aw.run.id |
✅ Present |
27118543361 |
gh-aw.run.attempt |
✅ Present |
1 |
gh-aw.run.actor |
✅ Present |
mnkiefer |
gh-aw.repository |
✅ Present |
github/gh-aw |
gh-aw.staged |
✅ Present |
false (boolValue) |
All 7 required setup attributes present. 0 missing.
Conclusion span required attributes (spec §10.2)
⏳ Not yet emitted. Validation deferred.
Agent span GenAI attributes (spec §10.3)
⏳ Not yet emitted. Validation deferred.
Resource attributes (spec §11.1)
| Attribute |
Status |
Value |
service.name |
✅ Present |
gh-aw.otlp-data-quality-validator |
service.version |
✅ Present |
1.0.60 |
github.repository |
✅ Present |
github/gh-aw |
github.run_id |
✅ Present |
27118543361 |
github.run_attempt |
✅ Present |
1 |
github.actions.run_url |
✅ Present |
https://github.com/github/gh-aw/actions/runs/27118543361 |
All 6 required resource attributes present. 0 missing.
Observed conditional attributes also present: github.event_name, github.ref, github.sha, github.job, github.workflow_ref, github.actor_id, runner.os, runner.arch, runner.name, runner.environment, gh-aw.awf.version, deployment.environment.
Instrumentation scope (spec §11.3)
| Field |
Expected |
Observed |
Status |
scope.name |
gh-aw |
gh-aw |
✅ Correct |
scope.version |
matches service.version |
1.0.60 |
✅ Correct |
Timestamp integrity
| Check |
Result |
startTimeUnixNano < endTimeUnixNano |
✅ 1780897760079000000 < 1780897764361000000 |
| Start time in validation window |
✅ 2026-06-08T05:49:20.079Z |
| End time in validation window |
✅ 2026-06-08T05:49:24.361Z |
| Duration |
4282 ms (reasonable) |
| Far-future timestamp |
None |
E. Export and Fan-Out Health
| Endpoint |
URL |
Header |
Status |
| Sentry |
https://o205451.ingest.us.sentry.io/api/4511347087179777/integration/otlp |
x-sentry-auth (§4.4 rewrite applied ✅) |
No errors observed |
| Grafana |
https://otlp-gateway-prod-eu-west-2.grafana.net/otlp |
Authorization: Basic ... |
No errors observed |
- Sentry header rewrite (spec §4.4):
Authorization → x-sentry-auth correctly applied ✅
- URL path appending:
send_otlp_span.cjs (line 1037) appends /v1/traces to base URL, producing correctly-formed OTLP endpoint URLs
- Export error count: 0 — no
/tmp/gh-aw/otlp-export-errors.count or .jsonl files written
- JSONL mirror write status: ✅
/tmp/gh-aw/otel.jsonl written (3315 bytes, 1 line)
- Multi-endpoint fan-out:
Promise.allSettled used — failure on one endpoint will not block the other ✅
- Backend query visibility: Not verifiable (no MCP tools or backend query access in this environment)
F. Root-Cause Hypothesis
Likely cause: No defect detected. WARN status reflects in-progress run state, not a data quality issue.
Supporting evidence:
- JSONL mirror exists and contains a single well-formed setup span
- All required span and resource attributes are present and valid
- Trace ID and span IDs are correctly formatted and consistent with runtime env vars
- No OTLP export errors logged
- Sentry header rewrite correctly applied per spec §4.4
Alternative explanations (for WARN, if applicable):
- Export failures could occur at conclusion-span emission time (cannot confirm until run finishes)
- Backend ingestion delay (≤5 min not considered data loss per validation policy)
- Agent span may lack GenAI attributes if token/model data is unavailable from the engine
G. Recommended Fixes (Prioritized)
No critical fixes required based on observed data. Post-run recommendations:
- Re-run validation after conclusion — confirm
gh-aw.agent.conclusion and gh-aw.agent.agent spans are emitted with all required §10.2 and §10.3 attributes
- Verify backend visibility — query Sentry trace
9b2249ae54939556d5f2973ac1f92b4a and Grafana Tempo after 5-minute ingestion delay
- Confirm fan-out independence — if one backend fails, check that the other still receives spans (currently no failure to verify against)
H. Validation Queries Used
# Span summary from JSONL mirror
jq -c '.resourceSpans[].scopeSpans[].spans[] | {name, traceId, spanId, parentSpanId, kind, startTimeUnixNano, endTimeUnixNano, "status": .status}' /tmp/gh-aw/otel.jsonl
# Total span count
jq '[.resourceSpans[].scopeSpans[].spans[]] | length' /tmp/gh-aw/otel.jsonl
# Unique trace IDs
jq -r '.resourceSpans[].scopeSpans[].spans[].traceId' /tmp/gh-aw/otel.jsonl | sort -u | wc -l
# Duplicate span check (traceId+spanId)
jq -r '.resourceSpans[].scopeSpans[].spans[] | "\(.traceId):\(.spanId)"' /tmp/gh-aw/otel.jsonl | sort | uniq -c | sort -rn
# Setup span required attributes (§10.1)
jq -c '.resourceSpans[].scopeSpans[].spans[] | select(.name | endswith(".setup")) | {name, attrs: [.attributes[]? | {(.key): .value}] | add}' /tmp/gh-aw/otel.jsonl
# Resource attributes (§11.1)
jq -c '.resourceSpans[].resource.attributes[] | {(.key): .value}' /tmp/gh-aw/otel.jsonl | sort -u
# Trace ID match between JSONL and env var
jq -r '.resourceSpans[].scopeSpans[].spans[].traceId' /tmp/gh-aw/otel.jsonl
echo $GITHUB_AW_OTEL_TRACE_ID # 9b2249ae54939556d5f2973ac1f92b4a ✅
# Export errors
cat /tmp/gh-aw/otlp-export-errors.jsonl 2>/dev/null || echo "none"
cat /tmp/gh-aw/otlp-export-errors.count 2>/dev/null || echo "0"
# OTLP endpoint config
echo $GH_AW_OTLP_ENDPOINTS | jq .
Telemetry source: Local JSONL mirror (/tmp/gh-aw/otel.jsonl) — cheapest trustworthy source.
Spec reference: specs/otel-observability-spec.md v0.3.0 (§9–§12).
Workflow run: 27118543361 • Trace ID: 9b2249ae54939556d5f2973ac1f92b4a
Generated by 🧭 OTLP Data Quality Validator · 200.6 AIC · ⌖ 39.1 AIC · ⊞ 23.4K · ◷
A. Executive Summary
Overall status:⚠️ WARN
The validation was performed during an active run (agent phase in progress). Only the setup span has been emitted to the local JSONL mirror at this point. All observed data is fully compliant with the normative spec. No export errors were detected. Conclusion and agent spans are expected to be emitted when the run concludes.
Main risk: Full end-to-end attribute coverage (conclusion/agent spans, backend visibility) cannot be confirmed until the run finishes.
Most likely root cause of WARN: Partial data — run is in-progress, not a data quality defect.
B. Trace Completeness
service.namegh-aw.otlp-data-quality-validatorgh-aw.agent.setup)9b2249ae54939556d5f2973ac1f92b4atraceId+spanId)gh-aw.agent.conclusion,gh-aw.agent.agent(not yet emitted)GITHUB_AW_OTEL_TRACE_ID/tmp/gh-aw/otlp-export-errors.jsonlor.count)Confidence: High for setup span correctness; Low for backend visibility (unavailable).
C. Span Hierarchy Validation
Only one span is currently present in the mirror. Full hierarchy validation requires conclusion and agent spans.
parentSpanId(global root)parentSpanId = 9e13569dba71af6c(16-char hex)GITHUB_AW_OTEL_PARENT_SPAN_ID= setup span ID223e01cb1bfea101— conclusion will parent heregh-aw.<job>.<op>gh-aw.agent.setupmatches spec §9.2INTERNAL(1) for setupkind: 1per spec §9.4D. Attribute Contract Validation
Setup span required attributes (spec §10.1)
gh-aw.job.nameagentgh-aw.workflow.nameOTLP Data Quality Validatorgh-aw.run.id27118543361gh-aw.run.attempt1gh-aw.run.actormnkiefergh-aw.repositorygithub/gh-awgh-aw.stagedfalse(boolValue)All 7 required setup attributes present. 0 missing.
Conclusion span required attributes (spec §10.2)
⏳ Not yet emitted. Validation deferred.
Agent span GenAI attributes (spec §10.3)
⏳ Not yet emitted. Validation deferred.
Resource attributes (spec §11.1)
service.namegh-aw.otlp-data-quality-validatorservice.version1.0.60github.repositorygithub/gh-awgithub.run_id27118543361github.run_attempt1github.actions.run_urlhttps://github.com/github/gh-aw/actions/runs/27118543361All 6 required resource attributes present. 0 missing.
Observed conditional attributes also present:
github.event_name,github.ref,github.sha,github.job,github.workflow_ref,github.actor_id,runner.os,runner.arch,runner.name,runner.environment,gh-aw.awf.version,deployment.environment.Instrumentation scope (spec §11.3)
scope.namegh-awgh-awscope.versionservice.version1.0.60Timestamp integrity
startTimeUnixNano < endTimeUnixNanoE. Export and Fan-Out Health
https://o205451.ingest.us.sentry.io/api/4511347087179777/integration/otlpx-sentry-auth(§4.4 rewrite applied ✅)https://otlp-gateway-prod-eu-west-2.grafana.net/otlpAuthorization: Basic ...Authorization→x-sentry-authcorrectly applied ✅send_otlp_span.cjs(line 1037) appends/v1/tracesto base URL, producing correctly-formed OTLP endpoint URLs/tmp/gh-aw/otlp-export-errors.countor.jsonlfiles written/tmp/gh-aw/otel.jsonlwritten (3315 bytes, 1 line)Promise.allSettledused — failure on one endpoint will not block the other ✅F. Root-Cause Hypothesis
Likely cause: No defect detected. WARN status reflects in-progress run state, not a data quality issue.
Supporting evidence:
Alternative explanations (for WARN, if applicable):
G. Recommended Fixes (Prioritized)
No critical fixes required based on observed data. Post-run recommendations:
gh-aw.agent.conclusionandgh-aw.agent.agentspans are emitted with all required §10.2 and §10.3 attributes9b2249ae54939556d5f2973ac1f92b4aand Grafana Tempo after 5-minute ingestion delayH. Validation Queries Used
Telemetry source: Local JSONL mirror (
/tmp/gh-aw/otel.jsonl) — cheapest trustworthy source.Spec reference:
specs/otel-observability-spec.mdv0.3.0 (§9–§12).Workflow run: 27118543361 • Trace ID:
9b2249ae54939556d5f2973ac1f92b4a