Skip to content

[OTLP Validation] OTLP Data Quality Validation — run 26493116016 (2026-05-27) #35136

@github-actions

Description

@github-actions

Validation time window: 2026-05-27T05:42–05:43 UTC (mid-run snapshot)
Workflow run: 26493116016
Service name: gh-aw.otlp-data-quality-validator
OTLP endpoint: Sentry (o205451.ingest.us.sentry.io)
JSONL mirror: /tmp/gh-aw/otel.jsonl (1 entry)
Export errors: 0


A. Executive Summary

Overall status: PASS

The single setup span captured in the local JSONL mirror is correctly structured, fully attributed, and conformant with the normative spec (specs/otel-observability-spec.md). No export errors were recorded, trace ID propagation is consistent, and all required resource attributes and instrumentation scope fields are present.

Important context: This report is a mid-run snapshot. The gh-aw.agent.conclusion span and any agent spans are not yet emitted — they are expected at job completion. Their absence is expected, not a defect.

No data loss, duplicate spans, or attribute contract violations were found.


B. Trace Completeness

Metric Value
Spans in JSONL mirror 1 (gh-aw.agent.setup)
Spans in backend (Sentry) Not queried — no MCP backend tools available
Unique trace IDs 1 (81de631ec4922347a546e4158d21824f)
Duplicate spans (traceId+spanId) 0
Missing expected spans gh-aw.agent.conclusion, agent spans (pending — workflow in progress)
Export error count 0

Confidence: High for local mirror; backend visibility unverified (no query tool available).


C. Span Hierarchy Validation (§9.3)

Check Result Notes
Setup span has parentSpanId ✅ PASS parentSpanId: 0df1a06c133df175 (global parent)
GITHUB_AW_OTEL_PARENT_SPAN_ID set to setup spanId ✅ PASS 3c3964d402e285c5 matches setup span
Conclusion span parents under setup span ⏳ PENDING Not yet emitted
Agent spans parent under conclusion ⏳ PENDING Not yet emitted
Span naming pattern gh-aw.<job>.<op> ✅ PASS gh-aw.agent.setup
Span kind INTERNAL (1) for setup ✅ PASS kind: 1
Span status OK (code 1) ✅ PASS status.code: 1
Timestamp validity (start < end) ✅ PASS start 1779860465431ms, end 1779860467524ms

D. Attribute Contract Validation

Setup span required attributes (§10.1)

Attribute Present Value
gh-aw.job.name agent
gh-aw.workflow.name OTLP Data Quality Validator
gh-aw.run.id 26493116016
gh-aw.run.attempt 1
gh-aw.run.actor mnkiefer
gh-aw.repository github/gh-aw
gh-aw.staged false (bool)

All 7 required setup attributes present. ✅

Conditional attributes present: gen_ai.system (github_models), gh-aw.engine.id (copilot), gh-aw.event_name (schedule), gh-aw.episode.id, gh-aw.episode.kind, gh-aw.hop.id, gh-aw.workflow_call.id.

Conclusion span required attributes (§10.2)

⏳ PENDING — conclusion span not yet emitted.

Agent span GenAI attributes (§10.3)

⏳ PENDING — agent span not yet emitted.


E. Resource Attributes (§11.1 and §11.3)

Required resource attributes

Attribute Present Value
service.name gh-aw.otlp-data-quality-validator
service.version 1.0.52
github.repository github/gh-aw
github.run_id 26493116016
github.run_attempt 1
github.actions.run_url https://github.com/github/gh-aw/actions/runs/26493116016

All 6 required resource attributes present. ✅

Conditional attributes 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.

Instrumentation scope (§11.3)

Field Expected Actual
scope.name gh-aw gh-aw
scope.version CLI version 1.0.52

E. Export and Fan-out Health

Check Result
JSONL mirror written /tmp/gh-aw/otel.jsonl (1 entry, spec §7)
Export error file ✅ Clean (no /tmp/gh-aw/otlp-export-errors.jsonl)
Export error count ✅ 0
OTLP endpoint configured ✅ Sentry o205451.ingest.us.sentry.io
Backend query ⚠️ Not performed — no MCP backend query tool available
Multi-endpoint fan-out N/A — single endpoint configured

Note: The validation task prompt referenced /tmp/gh-aw/agent/otel.jsonl as the mirror path, but the normative spec (§7, line 261) and implementation (send_otlp_span.cjs line 523) use /tmp/gh-aw/otel.jsonl. The file was found at the spec-correct path. The prompt's path reference appears to be a stale description.


F. Root-Cause Hypothesis

No failures or data quality issues were detected. No root cause investigation required.

Observation (low severity): The OTLP data quality validator workflow prompt specifies /tmp/gh-aw/agent/otel.jsonl and /tmp/gh-aw/agent/otlp-export-errors.jsonl as telemetry paths, but the normative spec and implementation use /tmp/gh-aw/otel.jsonl and /tmp/gh-aw/otlp-export-errors.jsonl. These are documentation discrepancies in the workflow prompt, not runtime defects.


G. Recommended Fixes (Prioritized)

  1. (Low) Update the otlp-data-quality-validator.md workflow prompt to reference the correct JSONL mirror paths:

    • Change /tmp/gh-aw/agent/otel.jsonl/tmp/gh-aw/otel.jsonl
    • Change /tmp/gh-aw/agent/otlp-export-errors.jsonl/tmp/gh-aw/otlp-export-errors.jsonl
    • Change /tmp/gh-aw/agent/otlp-export-errors.count/tmp/gh-aw/otlp-export-errors.count
  2. (Enhancement) Add a second validation pass after workflow conclusion so the conclusion and agent spans can be validated. Currently only the setup span is available at mid-run snapshot time.

  3. (Enhancement) Add a backend query step using Sentry API (or equivalent MCP tool) to enable cross-stage reconciliation (local mirror vs backend visibility).


H. Validation Commands Used

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

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

# Required setup span attributes (§10.1)
jq -c '.resourceSpans[].scopeSpans[].spans[] | select(.name | endswith(".setup")) | [.attributes[].key]' /tmp/gh-aw/otel.jsonl

# Required resource attributes (§11.1)
jq -c '.resourceSpans[].resource.attributes[] | {(.key): .value}' /tmp/gh-aw/otel.jsonl | sort -u

# Instrumentation scope (§11.3)
jq -c '.resourceSpans[].scopeSpans[] | {name: .scope.name, version: .scope.version}' /tmp/gh-aw/otel.jsonl

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

# Export error check
cat /tmp/gh-aw/otlp-export-errors.count 2>/dev/null || echo "0"

# Trace ID env var match
echo $GITHUB_AW_OTEL_TRACE_ID

Validated against: specs/otel-observability-spec.md v0.3.0 · Run: 26493116016 · Snapshot time: 2026-05-27T05:43 UTC

Generated by 🧭 OTLP Data Quality Validator · sonnet46 1.4M ·

  • expires on Jun 3, 2026, 5:45 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