Skip to content

[OTLP Validation] Run 26997807167 — mid-run snapshot PASS (2026-06-05) #37066

@github-actions

Description

@github-actions

A. Executive Summary

Field Value
Overall Status ✅ PASS (mid-run snapshot)
Validation Time 2026-06-05T05:44:37Z – 05:45:36Z
Run ID 26997807167
Workflow otlp-data-quality-validator
JSONL Mirror /tmp/gh-aw/otel.jsonl (3,315 bytes, 1 span)
Export Errors 0
Main Risk Conclusion and agent spans not yet written (workflow in-progress — expected)
Most Likely Root Cause None — no anomalies found in available data

The local JSONL mirror is healthy. The setup span passes all format, attribute, and hierarchy checks. Conclusion and agent spans are absent because the workflow is still executing — this is spec-conformant per §7.1 (mirrors are written lazily as spans complete). No export errors were recorded.


B. Trace Completeness

Check Result
JSONL mirror path (spec §7.1) /tmp/gh-aw/otel.jsonl
Spans in mirror 1 (gh-aw.agent.setup)
Unique trace IDs 1 — 5cf4b086993d63ea6cbb401f3a705c22
Unique span identities (traceId+spanId) 1
Duplicate spans 0
Conclusion span ⏳ Not yet written (run in-progress)
Agent span ⏳ Not yet written (run in-progress)
Backend visibility ⚠️ Unconfirmable — no MCP backend tools available
Confidence High for emitted data; N/A for backend

Only the setup span is expected in the mirror at agent execution time. No data loss is indicated.


C. Span Hierarchy Validation

Check Spec Ref Result
Setup span has parentSpanId §9.3 bdfb79458e813aab
Setup spans share global parent §9.3 ✅ (single job in this run)
Conclusion spans parent under setup §9.3 ⏳ Not yet emitted
Agent span parents under conclusion §9.3 ⏳ Not yet emitted
Span name matches gh-aw.<job>.<op> §9.2 gh-aw.agent.setup
Setup span kind = INTERNAL (1) §9.4 kind=1
Span status OK (code=1) §9.5 status.code=1
startTimeUnixNano < endTimeUnixNano §9
Timestamps in expected window §9 ✅ 2026-06-05T05:44:37–39Z (duration: 1613ms)
Far-future or far-past timestamps §9 ✅ None

D. Attribute Contract Validation

Setup Span (§10.1) — gh-aw.agent.setup

Required Attribute Status Value
gh-aw.job.name ✅ Present agent
gh-aw.workflow.name ✅ Present OTLP Data Quality Validator
gh-aw.run.id ✅ Present 26997807167
gh-aw.run.attempt ✅ Present 1
gh-aw.run.actor ✅ Present mnkiefer
gh-aw.repository ✅ Present github/gh-aw
gh-aw.staged ✅ Present false

Conditional attributes also present: gen_ai.system, gh-aw.engine.id, gh-aw.event_name, gh-aw.episode.id, gh-aw.episode.kind, gh-aw.hop.id, gh-aw.workflow_call.id.

Conclusion Span (§10.2) — not yet emitted

Cannot validate. Expected attributes: 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 (§10.3) — not yet emitted

Cannot validate GenAI semantic convention attributes.

Resource Attributes (§11.1)

Required Attribute Status Value
service.name ✅ Present gh-aw.otlp-data-quality-validator
service.version ✅ Present 1.0.57
github.repository ✅ Present github/gh-aw
github.run_id ✅ Present 26997807167
github.run_attempt ✅ Present 1
github.actions.run_url ✅ Present https://github.com/github/gh-aw/actions/runs/26997807167

Conditional attributes also present: github.event_name, github.ref, github.ref_name, github.sha, github.job, github.workflow_ref, github.actor_id, runner.os, runner.arch, runner.name, runner.environment, gh-aw.awf.version, deployment.environment.

Minor note: gh-aw.awmg.version is empty in aw_info.json (optional per §11.2 — "when available").

Instrumentation Scope (§11.3)

Field Status Value
scope.name ✅ Correct gh-aw
scope.version ✅ Correct 1.0.57
scope.version == service.version ✅ Match both 1.0.57

E. Export and Fan-Out Health

Check Status Detail
JSONL mirror write (§7.1) ✅ Success /tmp/gh-aw/otel.jsonl, 3315 bytes, 1 line
Export error count ✅ 0 No otlp-export-errors.jsonl or .count file
OTEL_EXPORTER_OTLP_ENDPOINT ✅ Set (value redacted)
GH_AW_OTLP_ENDPOINTS ✅ Set Multi-endpoint confirmed
GH_AW_OTLP_ALL_HEADERS ✅ Set Implies ≥2 endpoints with headers
GITHUB_AW_OTEL_TRACE_ID ✅ Set Trace context propagated
GITHUB_AW_OTEL_PARENT_SPAN_ID ✅ Set Parent span propagated
Configured backends i️ Inferred *.grafana.net, *.sentry.io (from network allowlist)
Backend export success ⚠️ Unconfirmable No MCP backend tools available
Fan-out independence (§6.1, §6.6) ✅ Structurally configured No per-endpoint failures recorded

F. Root-Cause Hypothesis

No confirmed issues. Possible follow-on gaps to monitor:

  1. Backend visibility unconfirmed — MCP OTLP backend tools are not available in this execution context. Grafana Tempo and Sentry endpoint success is inferred from absence of export errors but not directly verified.

    • Evidence: No otlp-export-errors.jsonl, all env vars set correctly.
    • Alternative: Export could have silently failed after the mirror write if send_otlp_span.cjs encountered a network error after writing JSONL.
  2. Conclusion/agent span attribute completeness — Cannot be validated until the workflow completes. If gh-aw.otlp.export_errors or gh-aw.run.status are missing on the conclusion span, that would be a §10.2 violation.

  3. gh-aw.awmg.version absent — The awmg_version field in aw_info.json is empty. This is a conditional attribute (§11.2), so no violation, but may indicate AWMG is not deployed in this environment.


G. Recommended Fixes (Prioritized)

No current fixes required. The following are monitoring recommendations:

  1. (P2) Verify backend visibility post-run — After the workflow completes, query Grafana Tempo and Sentry for trace 5cf4b086993d63ea6cbb401f3a705c22 to confirm both endpoints received spans. Command:

    jq -r '.resourceSpans[].scopeSpans[].spans[].traceId' /tmp/gh-aw/otel.jsonl | head -1
    # Then search that ID in Grafana Tempo and Sentry UI
  2. (P3) Validate conclusion span post-run — Re-run this validation after the conclusion step writes to confirm §10.2 attribute contract compliance:

    jq -c '.resourceSpans[].scopeSpans[].spans[] | select(.name | endswith(".conclusion")) | {name, attrs: [.attributes[]? | {(.key): .value}] | add}' /tmp/gh-aw/otel.jsonl
  3. (P3) Validate agent span GenAI attributes post-run — Check §10.3 compliance:

    jq -c '.resourceSpans[].scopeSpans[].spans[] | select(.name | endswith(".agent")) | .attributes | map({(.key): .value}) | add | {gen_ai_system: .["gen_ai.system"], model: .["gen_ai.request.model"], op: .["gen_ai.operation.name"], input_tokens: .["gen_ai.usage.input_tokens"], output_tokens: .["gen_ai.usage.output_tokens"]}' /tmp/gh-aw/otel.jsonl
  4. (P4) Enable export error monitoring — The absence of otlp-export-errors.count means either no errors occurred or the file is not written. Confirm send_otlp_span.cjs writes this file on any OTLP HTTP failure (per §7, §6.6).


H. Validation Queries Used

# Span count and summary
jq '[.resourceSpans[].scopeSpans[].spans[]] | length' /tmp/gh-aw/otel.jsonl
jq -c '.resourceSpans[].scopeSpans[].spans[] | {name, traceId, spanId, parentSpanId, kind, status}' /tmp/gh-aw/otel.jsonl

# Trace ID uniqueness
jq -r '.resourceSpans[].scopeSpans[].spans[].traceId' /tmp/gh-aw/otel.jsonl | sort -u | wc -l

# Timestamp validation
jq -c '.resourceSpans[].scopeSpans[].spans[] | {name, start: .startTimeUnixNano, end: .endTimeUnixNano, valid: (.startTimeUnixNano < .endTimeUnixNano)}' /tmp/gh-aw/otel.jsonl

# Required resource attributes
jq -r '.resourceSpans[].resource.attributes[] | "\(.key): \(.value | to_entries[0].value)"' /tmp/gh-aw/otel.jsonl | sort

# Setup span required attributes (§10.1)
jq -c '.resourceSpans[].scopeSpans[].spans[] | select(.name | endswith(".setup")) | .attributes | map({(.key): .value}) | add' /tmp/gh-aw/otel.jsonl

# Instrumentation scope
jq -c '.resourceSpans[].scopeSpans[].scope' /tmp/gh-aw/otel.jsonl

# Duplicate detection
jq -r '.resourceSpans[].scopeSpans[].spans[] | "\(.traceId)-\(.spanId)"' /tmp/gh-aw/otel.jsonl | sort | uniq -d | 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"

Spec reference: specs/otel-observability-spec.md v0.3.0 (2026-05-22). Telemetry source: local JSONL mirror only (cheapest trustworthy source per otel-queries SKILL). Backend queries skipped — no MCP OTLP backend tools available in this execution context.

Generated by 🧭 OTLP Data Quality Validator · 154.1 AIC ·

  • expires on Jun 12, 2026, 5:50 AM UTC

Metadata

Metadata

Assignees

No one assigned

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions