Validation time window: 2026-06-04T05:48:37Z – 2026-06-04T05:49:37Z
Run ID: 26933463444 · Workflow: OTLP Data Quality Validator · Attempt: 1
Telemetry source: Local JSONL mirror (/tmp/gh-aw/otel.jsonl)
Backend: Sentry (https://o205451.ingest.us.sentry.io/api/.../integration/otlp) — not queried (no MCP access)
A. Executive Summary
Status: PASS (with informational notes)
The single span emitted so far (gh-aw.agent.setup) is correctly formed, fully attributed, and consistently correlated. No export errors were recorded. The missing conclusion and agent spans are expected — this workflow is still running when the setup span is written. No data-loss or structural violations were found in the available evidence.
B. Trace Completeness
| Metric |
Value |
| JSONL mirror span count |
1 |
Unique traceId count |
1 (65287eedcc614b173a8efa31225ef078) |
Unique span identities (traceId+spanId) |
1 |
| Duplicate spans |
0 |
| Backend span count |
unknown (no backend access) |
| Missing conclusion/agent spans |
expected — workflow still in progress |
Trace ID matches GITHUB_AW_OTEL_TRACE_ID |
✅ 65287eedcc614b173a8efa31225ef078 |
Confidence: High for setup span integrity; low for backend visibility (no MCP query performed).
C. Span Hierarchy Validation
Only the gh-aw.agent.setup span is available. The global root parent (689b8d2156032ea3) is referenced as parentSpanId but not present in the mirror — this is expected (the root parent is a synthetic span injected by the runner, not emitted into the mirror).
| Check |
Result |
Setup span has parentSpanId (global root) |
✅ 689b8d2156032ea3 |
| Conclusion span parents under setup |
⏳ not yet emitted |
| Agent spans parent under conclusion |
⏳ not yet emitted |
Span naming pattern gh-aw.<job>.<op> |
✅ gh-aw.agent.setup |
kind = INTERNAL (1) for setup span |
✅ |
status.code = OK (1) |
✅ |
startTimeUnixNano < endTimeUnixNano |
✅ (2082 ms duration) |
| Timestamps within validation window |
✅ |
D. Attribute Contract Validation
Setup span required attributes (spec §10.1)
| Attribute |
Value |
gh-aw.job.name |
✅ "agent" |
gh-aw.workflow.name |
✅ "OTLP Data Quality Validator" |
gh-aw.run.id |
✅ "26933463444" |
gh-aw.run.attempt |
✅ "1" |
gh-aw.run.actor |
✅ "mnkiefer" |
gh-aw.repository |
✅ "github/gh-aw" |
gh-aw.staged |
✅ false |
All required setup attributes present.
i️ Informational: gen_ai.system: "github_models" appears on the setup span. Per spec §10.3, GenAI semantic convention attributes are specified for agent spans, not setup spans. This is not a violation but may indicate the attribute is being added upstream of the span type check.
Conclusion span required attributes (spec §10.2)
⏳ Not yet emitted (gh-aw.run.status, gh-aw.error_count, gh-aw.warning_count, gh-aw.action_minutes, gh-aw.output.item_count, gh-aw.otlp.export_errors).
Agent span GenAI attributes (spec §10.3)
⏳ Not yet emitted.
Resource attributes (spec §11.1)
| Attribute |
Value |
service.name |
✅ "gh-aw.otlp-data-quality-validator" |
service.version |
✅ "1.0.57" |
github.repository |
✅ "github/gh-aw" |
github.run_id |
✅ "26933463444" |
github.run_attempt |
✅ "1" |
github.actions.run_url |
✅ "https://github.com/github/gh-aw/actions/runs/26933463444" |
All required resource attributes present.
Instrumentation scope
| Check |
Result |
scope.name = "gh-aw" |
✅ |
scope.version = "1.0.57" (matches service.version) |
✅ |
E. Export and Fan-Out Health
| Check |
Result |
| JSONL mirror written |
✅ /tmp/gh-aw/otel.jsonl (1 span) |
| OTLP endpoint configured |
✅ Sentry integration endpoint |
| Export error file present |
✅ absent (= 0 recorded errors) |
| Export error count |
0 |
| Multi-endpoint fan-out |
N/A — single endpoint only |
| Backend query-visibility |
unknown — no MCP/backend access |
No transport-layer failures detected at the mirror stage.
F. Root-Cause Hypothesis
No active failure found. The single emitted span is clean.
Hypothesis for any future backend visibility gap:
-
Most likely (if backend spans are missing): Sentry's Authorization header rewrite may not be applied. The Sentry OTLP integration requires the standard Authorization: Bearer <dsn> to be rewritten to x-sentry-auth. If this rewrite is absent, Sentry returns 401 silently and spans are dropped.
- Evidence strength: theoretical — no 401 recorded in export errors file.
-
Alternative: The OTLP endpoint URL is missing the /v1/traces suffix. The configured endpoint https://o205451.ingest.us.sentry.io/api/4511347087179777/integration/otlp ends without a path suffix — the exporter may need to append /v1/traces if not doing so automatically.
- Evidence strength: low — depends on exporter implementation.
-
Transient delay: Sentry ingestion typically has <60 s visibility lag. Absence in backend queries within 5 minutes should not be treated as data loss (per validation procedure rules).
G. Recommended Fixes (Prioritized)
- [High, if backend gaps confirmed] Verify Sentry header rewrite is active for the
Authorization → x-sentry-auth transformation. Check send_otlp_span.cjs for the header normalization logic.
- [Medium] After run completion, re-run the JSONL query set to confirm conclusion and agent spans are emitted and attributed correctly (spec §10.2, §10.3).
- [Low] Consider whether
gen_ai.system on setup spans is intentional; if not, restrict GenAI attributes to agent-span-only emission paths.
- [Low] Add backend MCP access to the validator workflow to close the "emitted vs query-visible" gap in future runs.
H. Validation Queries Used
# Span summary from JSONL mirror
jq -c '.resourceSpans[].scopeSpans[].spans[] | {name, traceId, spanId, parentSpanId, kind, startTimeUnixNano, endTimeUnixNano, status}' /tmp/gh-aw/otel.jsonl
# Resource attributes
jq -c '.resourceSpans[].resource.attributes[] | {(.key): .value}' /tmp/gh-aw/otel.jsonl | sort -u
# Instrumentation scope
jq -c '.resourceSpans[].scopeSpans[].scope' /tmp/gh-aw/otel.jsonl
# Span-level attributes
jq -c '.resourceSpans[].scopeSpans[].spans[].attributes[]' /tmp/gh-aw/otel.jsonl
# Trace ID count (expect 1)
jq -r '.resourceSpans[].scopeSpans[].spans[].traceId' /tmp/gh-aw/otel.jsonl | sort -u | wc -l
# Export errors
cat /tmp/gh-aw/agent/otlp-export-errors.jsonl 2>/dev/null || echo "No export errors"
cat /tmp/gh-aw/agent/otlp-export-errors.count 2>/dev/null || echo "0"
# Trace ID env consistency
echo $GITHUB_AW_OTEL_TRACE_ID
Generated by 🧭 OTLP Data Quality Validator · sonnet46 755K · ◷
Validation time window: 2026-06-04T05:48:37Z – 2026-06-04T05:49:37Z
Run ID:
26933463444· Workflow:OTLP Data Quality Validator· Attempt: 1Telemetry source: Local JSONL mirror (
/tmp/gh-aw/otel.jsonl)Backend: Sentry (
https://o205451.ingest.us.sentry.io/api/.../integration/otlp) — not queried (no MCP access)A. Executive Summary
Status: PASS (with informational notes)
The single span emitted so far (
gh-aw.agent.setup) is correctly formed, fully attributed, and consistently correlated. No export errors were recorded. The missing conclusion and agent spans are expected — this workflow is still running when the setup span is written. No data-loss or structural violations were found in the available evidence.B. Trace Completeness
traceIdcount65287eedcc614b173a8efa31225ef078)traceId+spanId)GITHUB_AW_OTEL_TRACE_ID65287eedcc614b173a8efa31225ef078Confidence: High for setup span integrity; low for backend visibility (no MCP query performed).
C. Span Hierarchy Validation
Only the
gh-aw.agent.setupspan is available. The global root parent (689b8d2156032ea3) is referenced asparentSpanIdbut not present in the mirror — this is expected (the root parent is a synthetic span injected by the runner, not emitted into the mirror).parentSpanId(global root)689b8d2156032ea3gh-aw.<job>.<op>gh-aw.agent.setupkind=INTERNAL(1) for setup spanstatus.code=OK(1)startTimeUnixNano<endTimeUnixNanoD. Attribute Contract Validation
Setup span required attributes (spec §10.1)
gh-aw.job.name"agent"gh-aw.workflow.name"OTLP Data Quality Validator"gh-aw.run.id"26933463444"gh-aw.run.attempt"1"gh-aw.run.actor"mnkiefer"gh-aw.repository"github/gh-aw"gh-aw.stagedfalseAll required setup attributes present.
Conclusion span required attributes (spec §10.2)
⏳ Not yet emitted (
gh-aw.run.status,gh-aw.error_count,gh-aw.warning_count,gh-aw.action_minutes,gh-aw.output.item_count,gh-aw.otlp.export_errors).Agent span GenAI attributes (spec §10.3)
⏳ Not yet emitted.
Resource attributes (spec §11.1)
service.name"gh-aw.otlp-data-quality-validator"service.version"1.0.57"github.repository"github/gh-aw"github.run_id"26933463444"github.run_attempt"1"github.actions.run_url"https://github.com/github/gh-aw/actions/runs/26933463444"All required resource attributes present.
Instrumentation scope
scope.name="gh-aw"scope.version="1.0.57"(matchesservice.version)E. Export and Fan-Out Health
/tmp/gh-aw/otel.jsonl(1 span)No transport-layer failures detected at the mirror stage.
F. Root-Cause Hypothesis
No active failure found. The single emitted span is clean.
Hypothesis for any future backend visibility gap:
Most likely (if backend spans are missing): Sentry's
Authorizationheader rewrite may not be applied. The Sentry OTLP integration requires the standardAuthorization: Bearer <dsn>to be rewritten tox-sentry-auth. If this rewrite is absent, Sentry returns401silently and spans are dropped.Alternative: The OTLP endpoint URL is missing the
/v1/tracessuffix. The configured endpointhttps://o205451.ingest.us.sentry.io/api/4511347087179777/integration/otlpends without a path suffix — the exporter may need to append/v1/tracesif not doing so automatically.Transient delay: Sentry ingestion typically has <60 s visibility lag. Absence in backend queries within 5 minutes should not be treated as data loss (per validation procedure rules).
G. Recommended Fixes (Prioritized)
Authorization→x-sentry-authtransformation. Checksend_otlp_span.cjsfor the header normalization logic.gen_ai.systemon setup spans is intentional; if not, restrict GenAI attributes to agent-span-only emission paths.H. Validation Queries Used