This specification is maintained by the AgentRules Working Group. Have enhancements or want to claim maintainership?Submit Specification →
devopscritical PriorityID: otel-genai-token-backpressure-mesh

OpenTelemetry GenAI Semantic Token Backpressure and Non-Severing Trace Mesh

High-throughput GenAI workloads emitting fine-grained semantic convention spans (e.g., gen_ai.usage.input_tokens, gen_ai.usage.output_tokens) can saturate collector pipelines and exhaust memory buffers. Telemetry backpressure must throttle or downsample semantic token telemetry without dropping or severing downstream W3C traceparent and tracestate contexts.

Prohibited Anti-Pattern: Dropping or Early-Exiting Spans Under Token Saturation Severing Downstream W3C Trace Contexts

Export Ready-to-Drop Configuration

Select format below to copy code or download file directly.

---
description: OpenTelemetry GenAI Semantic Token Backpressure and Non-Severing Trace Mesh - High-throughput GenAI workloads emitting fine-grained semantic convention spans (e.g., gen_ai.usage.input_tokens, gen_ai.usage.output_tokens) can saturate collector pipelines and exhaust memory buffers. Telemetry backpressure must throttle or downsample semantic token telemetry without dropping or severing downstream W3C traceparent and tracestate contexts.
globs: src/telemetry/**/*.ts, src/instrumentation/**/*.ts, src/llm/**/*.ts, src/middleware/**/*.ts
alwaysApply: true
verified_by: "agentrules.org"
license: "CC-BY-4.0"
source: "https://agentrules.org/rules/otel-genai-token-backpressure-mesh"
---

# OpenTelemetry GenAI Semantic Token Backpressure and Non-Severing Trace Mesh

> **Severity**: CRITICAL | **Category**: devops
> **Anti-Pattern Warning**: Dropping or Early-Exiting Spans Under Token Saturation Severing Downstream W3C Trace Contexts

## System Constraints
You are a Principal Observability Architect enforcing OpenTelemetry GenAI Semantic Conventions and resilient distributed tracing. You must mandate that telemetry pipeline backpressure never severs W3C traceparent context, that span droppers fallback to context-preserving NonRecordingSpans, and that token accounting strictly adheres to OTel GenAI semantic attributes.

## Strict Guidelines
- Engineers MUST ALWAYS propagate the active W3C trace context (traceparent and tracestate) across outgoing RPCs and child contexts, even when local span recording is throttled by token backpressure.
- Engineers MUST NOT discard or return undefined telemetry context upon reaching token-per-minute (TPM) or span-per-second thresholds, as this causes downstream orphaned traces.
- Code SHOULD wrap backpressure-dropped spans into a trace.wrapSpanContext(...) or a NonRecordingSpan to maintain parentage across distributed service boundaries.
- Services MUST emit standard OpenTelemetry GenAI semantic convention attributes (gen_ai.system, gen_ai.usage.input_tokens, gen_ai.usage.output_tokens) only through rate-limited or aggregated batch span processors.
- Components NEVER block the main asynchronous execution thread when telemetry queues or exporter buffers reach watermarks; backpressure must drop span attributes or sampling flags gracefully while preserving context headers.

## Bad vs Good Implementations
### Token Span Throttling with Trace Preservation vs. Truncation

#### Bad Antipattern (AI Common Hallucination)
> **Why it fails**: When the token rate limiter rejects recording, the function bypasses OpenTelemetry entirely. Any downstream HTTP or RPC calls executed inside `fn()` lack an active span in their context, stripping `traceparent` headers and creating disconnected orphaned trace fragments.
```typescript
import { trace, context, SpanStatusCode } from '@opentelemetry/api';

interface TokenRateLimiter {
  hasQuota(tokens: number): boolean;
}

export async function instrumentLlmCall(
  tracerName: string,
  limiter: TokenRateLimiter,
  estimatedTokens: number,
  fn: () => Promise<{ outputTokens: number }>
) {
  // ANTI-PATTERN: If token quota is exceeded, tracing is aborted entirely,
  // returning an isolated invocation that severs W3C propagation downstream.
  if (!limiter.hasQuota(estimatedTokens)) {
    console.warn('Telemetry quota exceeded: span dropped');
    // Context is severed! Downstream HTTP calls have no parent span context.
    return await fn();
  }

  const tracer = trace.getTracer(tracerName);
  return tracer.startActiveSpan('gen_ai.client.inference', async (span) => {
    try {
      const result = await fn();
      span.setAttribute('gen_ai.usage.output_tokens', result.outputTokens);
      span.setStatus({ code: SpanStatusCode.OK });
      return result;
    } catch (err) {
      span.recordException(err as Error);
      span.setStatus({ code: SpanStatusCode.ERROR });
      throw err;
    } finally {
      span.end();
    }
  });
}
```

#### Production Standard (Correct)
> **Standard**: When backpressure limits are triggered, the code creates an unsampled NonRecordingSpan preserving the valid spanContext. It sets this in the active async context using `context.with(...)`, ensuring downstream W3C injectors (e.g., fetch, axios, gRPC) still propagate valid traceparent headers.
```typescript
import { trace, context, SpanStatusCode, TraceFlags } from '@opentelemetry/api';

interface TokenRateLimiter {
  hasQuota(tokens: number): boolean;
}

export async function instrumentLlmCall(
  tracerName: string,
  limiter: TokenRateLimiter,
  estimatedTokens: number,
  fn: () => Promise<{ outputTokens: number }>
) {
  const tracer = trace.getTracer(tracerName);
  const activeCtx = context.active();
  const parentSpan = trace.getSpan(activeCtx);
  const recordSpan = limiter.hasQuota(estimatedTokens);

  if (!recordSpan) {
    // PRESERVE CONTEXT: Wrap existing context in a NonRecordingSpan
    // maintaining TraceFlags and W3C traceparent for downstream services.
    const parentSpanContext = parentSpan?.spanContext() ?? {
      traceId: trace.getTracer(tracerName).startSpan('tmp').spanContext().traceId,
      spanId: '0000000000000000',
      traceFlags: TraceFlags.NONE
    };
    
    const nonRecordingSpan = trace.wrapSpanContext({
      ...parentSpanContext,
      traceFlags: TraceFlags.NONE // Explicitly un-sampled
    });

    return context.with(trace.setSpan(activeCtx, nonRecordingSpan), async () => {
      return await fn();
    });
  }

  return tracer.startActiveSpan(
    'gen_ai.client.inference',
    {
      attributes: {
        'gen_ai.usage.input_tokens': estimatedTokens
      }
    },
    activeCtx,
    async (span) => {
      try {
        const result = await fn();
        span.setAttribute('gen_ai.usage.output_tokens', result.outputTokens);
        span.setStatus({ code: SpanStatusCode.OK });
        return result;
      } catch (err) {
        span.recordException(err as Error);
        span.setStatus({ code: SpanStatusCode.ERROR });
        throw err;
      } finally {
        span.end();
      }
    }
  );
}
```

Architectural Specification & Invariant Rationale

Architectural Invariant Design: OpenTelemetry GenAI Semantic Token Backpressure and Non-Severing Trace Mesh

OpenTelemetry GenAI Semantic Token Backpressure and Non-Severing Trace Mesh defines an industrial-grade behavioral standard for devops engineering. High-throughput GenAI workloads emitting fine-grained semantic convention spans (e.g., gen_ai.usage.input_tokens, gen_ai.usage.output_tokens) can saturate collector pipelines and exhaust memory buffers. Telemetry backpressure must throttle or downsample semantic token telemetry without dropping or severing downstream W3C traceparent and tracestate contexts. Modern software architectures require strict adherence to deterministic patterns to guarantee high availability, maintainability, and zero security vulnerabilities.

Framework Paradigm Shift & Drift MechanicsLLMs are trained on millions of open-source repositories containing outdated code, legacy idioms, and unpatched antipatterns. When coding assistants generate implementations for this stack, they default to common statistical tokens: Dropping or Early-Exiting Spans Under Token Saturation Severing Downstream W3C Trace Contexts Without an explicit system instruction file, developers spend hours debugging silent failures.
Failure Modes & Production Blast Radius

Hazard Analysis: What Breaks Without This Rule

The following failure modes have been cataloged from hundreds of hours of production code reviews where AI assistants produced non-compliant implementations:

Failure ModeAI Symptom (The Anti-Pattern)SeverityProduction Impact & Remedy
AI Hallucination & Deprecation DriftDropping or Early-Exiting Spans Under Token Saturation Severing Downstream W3C Trace ContextsCritical
Violating this industrial standard introduces regression bugs, security risks, and unexpected runtime failures in production.
Enforce explicit behavioral system directives across all AI coding assistants in your repository.
Silent Architecture InconsistencyAI assistants produce mixed paradigms across files, creating fragmented codebase conventions.Medium
Increases cognitive load during code reviews and leads to maintenance debt across engineering teams.
Pin project conventions in .cursor/rules, CLAUDE.md, and AGENTS.md so all team agents follow identical guardrails.
Architectural Directives in Detail

Step-by-Step Production Directives

Each rule constraint below is injected into the AI agent's system prompt to establish deterministic boundaries:

1

Engineers MUST ALWAYS propagate the active W3C trace context (traceparent and tracestate) across outgoing RPCs and child contexts, even when local span recording is throttled by token backpressure.

Engineers MUST ALWAYS propagate the active W3C trace context (traceparent and tracestate) across outgoing RPCs and child contexts, even when local span recording is throttled by token backpressure.

Rationale:AI models frequently generate unconstrained code here because statistical language distributions lack project-specific architectural context. Mandating this directive ensures that generated code adheres to verified industrial production requirements.
Enforcement:Integrated into the Agent Pack rule file. When Cursor, Claude Code, or Codex processes this prompt, it applies this constraint before emitting syntax.
2

Engineers MUST NOT discard or return undefined telemetry context upon reaching token-per-minute (TPM) or span-per-second thresholds, as this causes downstream orphaned traces.

Engineers MUST NOT discard or return undefined telemetry context upon reaching token-per-minute (TPM) or span-per-second thresholds, as this causes downstream orphaned traces.

Rationale:AI models frequently generate unconstrained code here because statistical language distributions lack project-specific architectural context. Mandating this directive ensures that generated code adheres to verified industrial production requirements.
Enforcement:Integrated into the Agent Pack rule file. When Cursor, Claude Code, or Codex processes this prompt, it applies this constraint before emitting syntax.
3

Code SHOULD wrap backpressure-dropped spans into a trace.wrapSpanContext(...) or a NonRecordingSpan to maintain parentage across distributed service boundaries.

Code SHOULD wrap backpressure-dropped spans into a trace.wrapSpanContext(...) or a NonRecordingSpan to maintain parentage across distributed service boundaries.

Rationale:AI models frequently generate unconstrained code here because statistical language distributions lack project-specific architectural context. Mandating this directive ensures that generated code adheres to verified industrial production requirements.
Enforcement:Integrated into the Agent Pack rule file. When Cursor, Claude Code, or Codex processes this prompt, it applies this constraint before emitting syntax.
4

Services MUST emit standard OpenTelemetry GenAI semantic convention attributes (gen_ai.system, gen_ai.usage.input_tokens, gen_ai.usage.output_tokens) only through rate-limited or aggregated batch span processors.

Services MUST emit standard OpenTelemetry GenAI semantic convention attributes (gen_ai.system, gen_ai.usage.input_tokens, gen_ai.usage.output_tokens) only through rate-limited or aggregated batch span processors.

Rationale:AI models frequently generate unconstrained code here because statistical language distributions lack project-specific architectural context. Mandating this directive ensures that generated code adheres to verified industrial production requirements.
Enforcement:Integrated into the Agent Pack rule file. When Cursor, Claude Code, or Codex processes this prompt, it applies this constraint before emitting syntax.
5

Components NEVER block the main asynchronous execution thread when telemetry queues or exporter buffers reach watermarks

Components NEVER block the main asynchronous execution thread when telemetry queues or exporter buffers reach watermarks; backpressure must drop span attributes or sampling flags gracefully while preserving context headers.

Rationale:AI models frequently generate unconstrained code here because statistical language distributions lack project-specific architectural context. Mandating this directive ensures that generated code adheres to verified industrial production requirements.
Enforcement:Integrated into the Agent Pack rule file. When Cursor, Claude Code, or Codex processes this prompt, it applies this constraint before emitting syntax.
Technical Questions & Answers

Frequently Asked Technical Questions

Common questions developers face when configuring AI coding assistants for this stack:

Q:Why is OpenTelemetry GenAI Semantic Token Backpressure and Non-Severing Trace Mesh critical for AI coding assistants?

High-throughput GenAI workloads emitting fine-grained semantic convention spans (e.g., gen_ai.usage.input_tokens, gen_ai.usage.output_tokens) can saturate collector pipelines and exhaust memory buffers. Telemetry backpressure must throttle or downsample semantic token telemetry without dropping or severing downstream W3C traceparent and tracestate contexts. Without explicit behavioral boundaries, AI coding assistants (Cursor, Claude Code, Windsurf, Codex) rely on training data averages, which frequently produce deprecated, inefficient, or vulnerable code patterns.

Q:How does adopting this rule prevent AI hallucinations?

This rule explicitly declares what the AI must avoid (Dropping or Early-Exiting Spans Under Token Saturation Severing Downstream W3C Trace Contexts) and prescribes verified positive examples. Grounding the LLM with negative and positive pairs eliminates guesswork.

Q:Which AI coding environments are supported?

This specification is multi-platform compatible: Cursor (.cursor/rules/*.mdc & .cursorrules), Anthropic Claude Code (CLAUDE.md), Windsurf (.windsurfrules), Codex / Cline (AGENTS.md), and GitHub Copilot (.github/copilot-instructions.md).

Q:Can I combine this rule with other technology stacks?

Yes. Use the Interactive Stack Builder or download an Agent Pack to merge this rule with other frontend, backend, database, security, and DevOps rules without syntax collision.

Open Specification · CC BY 4.0·Free for Personal, Team & Commercial In-Repo Use

Citation & Open Source Attribution Guidelines

This specification is licensed under Creative Commons Attribution 4.0 International (CC BY 4.0). You are completely free to adapt and share this rule in your workspace. If citing, including in public AI benchmark datasets, or redistributing, attribution to AgentRules.org is required.

1 Rule in Stack

OpenTelemetry