{
  "name": "forge.telemetry",
  "language": "python",
  "version": "0.1.0",
  "description": "Python telemetry package; imports are explicit from this package.",
  "manifest": "forge-py/pyproject.toml",
  "manifestSha256": "7f96957378b21995bf2e583af2afd1b9e6fb3b0089ff3559d62c7e012a034696",
  "status": "source-reference",
  "registryPublicationVerified": false,
  "route": "/libraries/python/telemetry",
  "features": {},
  "files": [
    {
      "path": "forge-py/src/forge/telemetry/__init__.py",
      "sha256": "6b52b205836ca6a929276d4bdbfaddc8c7bf3c19f03135ba7fb0408fc83e538e",
      "artifactSha256": "95ffe7062d38f2855dd6acba64946a74b861f8d163a19f88e833f9f5d51e9eb7",
      "url": "/reference/source/forge-py/src/forge/telemetry/__init__.py.txt",
      "declarations": []
    },
    {
      "path": "forge-py/src/forge/telemetry/audit.py",
      "sha256": "6962dbb720ecafdffbb49086fc8b5f4e5a28d25251378ff3cfb462b3aacade51",
      "artifactSha256": "b00348e033710147ed63e234a5551514ed3cdba8a10a62e8300990145acc8a6d",
      "url": "/reference/source/forge-py/src/forge/telemetry/audit.py.txt",
      "declarations": [
        {
          "name": "AuditEntry",
          "line": 25,
          "signature": "class AuditEntry()",
          "documentation": "A single audit trail entry.\n\nEach entry has a sequential index assigned by the AuditTrail and wraps\nan AuditEvent with the full event details.\n\nANVIL Spec section 14.2 -- Audit Trail.\n\nArgs:\n    index: Sequential index in the trail (0-based).\n    event: The audit event.\n\nExample:\n    >>> from forge.telemetry.contract import AuditEvent, AuditEventKind\n    >>> event = AuditEvent.new(\n    ...     AuditEventKind.AGENT_INSTANTIATED,\n    ...     \"did:oas:l1fe:agent:test\",\n    ...     {},\n    ... )\n    >>> entry = AuditEntry(index=0, event=event)\n    >>> entry.index\n    0"
        },
        {
          "name": "AuditTrail",
          "line": 57,
          "signature": "class AuditTrail()",
          "documentation": "An append-only audit trail with optional Ed25519 signatures.\n\nPer ANVIL Spec section 14.2, every significant agent operation is recorded\nin the audit trail. Entries are timestamped and optionally signed by the\nagent's Ed25519 key. The trail assigns sequential indices starting from 0.\n\nInvariants:\n    - Entries are append-only; removal is not supported.\n    - Each entry's index equals its position in the trail.\n    - The agent DID is set at creation and does not change.\n\nANVIL Spec section 14.2 -- Audit Trail.\n\nArgs:\n    agent_did: The agent's OAS DID string.\n\nExample:\n    >>> trail = AuditTrail(\"did:oas:l1fe:agent:analyst\")\n    >>> trail.is_empty()\n    True\n    >>> trail.append(AuditEvent.new(\n    ...     AuditEventKind.AGENT_INSTANTIATED,\n    ...     \"did:oas:l1fe:agent:analyst\",\n    ...     {\"module_hash\": \"abc123\"},\n    ... ))\n    >>> trail.append(AuditEvent.new(\n    ...     AuditEventKind.TOOL_INVOCATION,\n    ...     \"did:oas:l1fe:agent:analyst\",\n    ...     {\"tool\": \"calculator\", \"status\": \"success\"},\n    ... ))\n    >>> len(trail)\n    2\n    >>> trail.entries()[0].index\n    0\n    >>> trail.entries()[1].index\n    1"
        },
        {
          "name": "AuditTrail.__init__",
          "line": 96,
          "signature": "def __init__(self, agent_did: str) -> None",
          "documentation": ""
        },
        {
          "name": "AuditTrail.agent_did",
          "line": 101,
          "signature": "def agent_did(self) -> str",
          "documentation": "Return the agent DID associated with this trail.\n\nReturns:\n    The agent's OAS DID string."
        },
        {
          "name": "AuditTrail.append",
          "line": 109,
          "signature": "def append(self, event: AuditEvent) -> None",
          "documentation": "Append an audit event to the trail.\n\nThe event is wrapped in an AuditEntry with a sequential index\nequal to the current length of the trail.\n\nANVIL Spec section 14.2 -- Audit Trail.\n\nArgs:\n    event: The audit event to append.\n\nExample:\n    >>> trail = AuditTrail(\"did:oas:l1fe:agent:bot\")\n    >>> trail.append(AuditEvent.new(\n    ...     AuditEventKind.CAPABILITY_CHECK,\n    ...     \"did:oas:l1fe:agent:bot\",\n    ...     {\"capability\": \"web_search\", \"granted\": True},\n    ... ))\n    >>> len(trail)\n    1"
        },
        {
          "name": "AuditTrail.entries",
          "line": 133,
          "signature": "def entries(self) -> list[AuditEntry]",
          "documentation": "Return all entries in the trail.\n\nReturns:\n    A list of AuditEntry in sequential order."
        },
        {
          "name": "AuditTrail.is_empty",
          "line": 145,
          "signature": "def is_empty(self) -> bool",
          "documentation": "Return True if the trail contains no entries."
        },
        {
          "name": "AuditTrail.last",
          "line": 149,
          "signature": "def last(self) -> AuditEntry | None",
          "documentation": "Return the last entry in the trail, or None if empty.\n\nReturns:\n    The most recently appended entry, or None.\n\nExample:\n    >>> trail = AuditTrail(\"did:oas:l1fe:agent:bot\")\n    >>> trail.last() is None\n    True\n    >>> trail.append(AuditEvent.new(\n    ...     AuditEventKind.AGENT_INSTANTIATED,\n    ...     \"did:oas:l1fe:agent:bot\",\n    ...     {},\n    ... ))\n    >>> trail.last() is not None\n    True"
        },
        {
          "name": "AuditTrail.filter_by_kind",
          "line": 171,
          "signature": "def filter_by_kind(self, kind: AuditEventKind) -> list[AuditEntry]",
          "documentation": "Return all entries matching the given AuditEventKind.\n\nANVIL Spec section 14.2 -- Audit Trail (filtering).\n\nArgs:\n    kind: The kind of audit event to filter for.\n\nReturns:\n    A list of entries whose event kind matches.\n\nExample:\n    >>> trail = AuditTrail(\"did:oas:l1fe:agent:bot\")\n    >>> trail.append(AuditEvent.new(\n    ...     AuditEventKind.TOOL_INVOCATION,\n    ...     \"did:oas:l1fe:agent:bot\",\n    ...     {\"tool\": \"search\"},\n    ... ))\n    >>> trail.append(AuditEvent.new(\n    ...     AuditEventKind.NETWORK_ACCESS,\n    ...     \"did:oas:l1fe:agent:bot\",\n    ...     {\"url\": \"https://example.com\"},\n    ... ))\n    >>> trail.append(AuditEvent.new(\n    ...     AuditEventKind.TOOL_INVOCATION,\n    ...     \"did:oas:l1fe:agent:bot\",\n    ...     {\"tool\": \"calculator\"},\n    ... ))\n    >>> tools = trail.filter_by_kind(AuditEventKind.TOOL_INVOCATION)\n    >>> len(tools)\n    2\n    >>> network = trail.filter_by_kind(AuditEventKind.NETWORK_ACCESS)\n    >>> len(network)\n    1"
        }
      ]
    },
    {
      "path": "forge-py/src/forge/telemetry/collector.py",
      "sha256": "afad2373c17cbf04cba2597a7b7a00aa8af60a4b8ecc62bfe080c8f47b1241e4",
      "artifactSha256": "211ab97b1e825acf56d2b93b2839fcd44bcbe0aad18391ed311e579b88451af0",
      "url": "/reference/source/forge-py/src/forge/telemetry/collector.py.txt",
      "declarations": [
        {
          "name": "CompletedSpan",
          "line": 31,
          "signature": "class CompletedSpan()",
          "documentation": "A completed span with timing information.\n\nRepresents a span that has been started and ended, capturing the full\nduration and attributes of the operation.\n\nANVIL Spec section 14.1 -- Telemetry Contract.\n\nArgs:\n    span_id: The unique identifier for this span.\n    name: The span name (e.g., ``\"anvil.generate\"``, ``\"anvil.tool.invoke\"``).\n    attributes: Key-value attributes associated with this span.\n    start_time: ISO 8601 timestamp of when the span was started.\n    end_time: ISO 8601 timestamp of when the span was ended.\n    agent_did: The agent's OAS DID, if available.\n\nExample:\n    >>> span = CompletedSpan(\n    ...     span_id=SpanId.generate(),\n    ...     name=\"anvil.generate\",\n    ...     attributes=[(\"model\", \"gpt-4o\")],\n    ...     start_time=\"2026-02-19T00:00:00Z\",\n    ...     end_time=\"2026-02-19T00:00:01Z\",\n    ...     agent_did=\"did:oas:l1fe:agent:test\",\n    ... )\n    >>> span.name\n    'anvil.generate'"
        },
        {
          "name": "SpanCollector",
          "line": 72,
          "signature": "class SpanCollector(Protocol)",
          "documentation": "Protocol for collecting completed telemetry spans.\n\nImplementations can store spans in memory, write them to disk, or forward\nthem to an external collector.\n\nANVIL Spec section 14.1 -- Telemetry Contract (span collection)."
        },
        {
          "name": "SpanCollector.record_span",
          "line": 81,
          "signature": "def record_span(self, span: CompletedSpan) -> None",
          "documentation": "Record a completed span.\n\nArgs:\n    span: The completed span to record."
        },
        {
          "name": "SpanCollector.spans",
          "line": 89,
          "signature": "def spans(self) -> list[CompletedSpan]",
          "documentation": "Retrieve all recorded spans.\n\nReturns:\n    A list of all completed spans recorded so far."
        },
        {
          "name": "SpanCollector.clear",
          "line": 97,
          "signature": "def clear(self) -> None",
          "documentation": "Clear all recorded spans."
        },
        {
          "name": "SpanCollector.is_empty",
          "line": 105,
          "signature": "def is_empty(self) -> bool",
          "documentation": "Return True if no spans have been recorded."
        },
        {
          "name": "NoopCollector",
          "line": 114,
          "signature": "class NoopCollector()",
          "documentation": "Discards all spans. Zero-cost default for standalone agents.\n\nUse NoopCollector when span collection is not needed. All operations\nare no-ops and allocate nothing.\n\nANVIL Spec section 14.1 -- Telemetry Contract.\n\nExample:\n    >>> collector = NoopCollector()\n    >>> collector.record_span(CompletedSpan(\n    ...     span_id=SpanId.generate(),\n    ...     name=\"discarded\",\n    ...     attributes=[],\n    ...     start_time=\"2026-01-01T00:00:00Z\",\n    ...     end_time=\"2026-01-01T00:00:01Z\",\n    ... ))\n    >>> len(collector)\n    0\n    >>> collector.is_empty()\n    True"
        },
        {
          "name": "NoopCollector.record_span",
          "line": 137,
          "signature": "def record_span(self, span: CompletedSpan) -> None",
          "documentation": "No-op: discards the span."
        },
        {
          "name": "NoopCollector.spans",
          "line": 140,
          "signature": "def spans(self) -> list[CompletedSpan]",
          "documentation": "Always returns an empty list."
        },
        {
          "name": "NoopCollector.clear",
          "line": 144,
          "signature": "def clear(self) -> None",
          "documentation": "No-op: nothing to clear."
        },
        {
          "name": "NoopCollector.is_empty",
          "line": 151,
          "signature": "def is_empty(self) -> bool",
          "documentation": "Always returns True."
        },
        {
          "name": "InMemoryCollector",
          "line": 160,
          "signature": "class InMemoryCollector()",
          "documentation": "Stores spans in memory. Useful for testing and debugging.\n\nThread-safe via ``threading.Lock``. Not intended for high-throughput\nproduction use; use a dedicated exporter for production telemetry.\n\nANVIL Spec section 14.1 -- Telemetry Contract.\n\nExample:\n    >>> collector = InMemoryCollector()\n    >>> collector.is_empty()\n    True\n    >>> collector.record_span(CompletedSpan(\n    ...     span_id=SpanId.from_string(\"span-1\"),\n    ...     name=\"test.span\",\n    ...     attributes=[(\"key\", \"value\")],\n    ...     start_time=\"2026-01-01T00:00:00Z\",\n    ...     end_time=\"2026-01-01T00:00:01Z\",\n    ...     agent_did=\"did:oas:l1fe:agent:test\",\n    ... ))\n    >>> len(collector)\n    1"
        },
        {
          "name": "InMemoryCollector.__init__",
          "line": 184,
          "signature": "def __init__(self) -> None",
          "documentation": ""
        },
        {
          "name": "InMemoryCollector.record_span",
          "line": 188,
          "signature": "def record_span(self, span: CompletedSpan) -> None",
          "documentation": "Record a completed span.\n\nArgs:\n    span: The completed span to record."
        },
        {
          "name": "InMemoryCollector.spans",
          "line": 197,
          "signature": "def spans(self) -> list[CompletedSpan]",
          "documentation": "Retrieve all recorded spans.\n\nReturns:\n    A list of all completed spans recorded so far."
        },
        {
          "name": "InMemoryCollector.clear",
          "line": 206,
          "signature": "def clear(self) -> None",
          "documentation": "Clear all recorded spans."
        },
        {
          "name": "InMemoryCollector.is_empty",
          "line": 216,
          "signature": "def is_empty(self) -> bool",
          "documentation": "Return True if no spans have been recorded."
        },
        {
          "name": "InMemoryTelemetry",
          "line": 239,
          "signature": "class InMemoryTelemetry()",
          "documentation": "In-memory telemetry implementation that stores both spans and events.\n\nWraps InMemoryCollector for span storage and tracks active spans to\nproduce CompletedSpan records when end_span is called. Also collects\nemitted AuditEvent entries.\n\nImplements the TelemetryContract interface for use in testing and\ndebugging scenarios.\n\nANVIL Spec section 14.1 -- Telemetry Contract.\n\nArgs:\n    agent_did: Optional agent DID to associate with recorded spans.\n\nExample:\n    >>> telemetry = InMemoryTelemetry()\n    >>> span_id = telemetry.start_span(\"anvil.generate\", [(\"model\", \"gpt-4o\")])\n    >>> telemetry.end_span(span_id)\n    >>> telemetry.span_count()\n    1"
        },
        {
          "name": "InMemoryTelemetry.__init__",
          "line": 262,
          "signature": "def __init__(self, agent_did: str | None=None) -> None",
          "documentation": ""
        },
        {
          "name": "InMemoryTelemetry.start_span",
          "line": 271,
          "signature": "def start_span(self, name: str, attributes: list[tuple[str, str]] | None=None) -> SpanId",
          "documentation": "Start a new span with the given name and attributes.\n\nArgs:\n    name: The span name (use dotted notation, e.g., ``\"anvil.generate\"``).\n    attributes: Key-value pairs of span attributes.\n\nReturns:\n    A unique SpanId for the started span."
        },
        {
          "name": "InMemoryTelemetry.end_span",
          "line": 296,
          "signature": "def end_span(self, span_id: SpanId) -> None",
          "documentation": "End a previously started span.\n\nIf the span_id is not found among active spans, this is a silent no-op\n(matching the Rust reference behavior).\n\nArgs:\n    span_id: The ID returned by start_span."
        },
        {
          "name": "InMemoryTelemetry.emit_event",
          "line": 325,
          "signature": "def emit_event(self, event: AuditEvent) -> None",
          "documentation": "Emit an audit event for the agent's audit trail.\n\nArgs:\n    event: The audit event to record."
        },
        {
          "name": "InMemoryTelemetry.flush",
          "line": 334,
          "signature": "def flush(self) -> None",
          "documentation": "Flush buffered telemetry data. Always succeeds for in-memory storage."
        },
        {
          "name": "InMemoryTelemetry.completed_spans",
          "line": 339,
          "signature": "def completed_spans(self) -> list[CompletedSpan]",
          "documentation": "Return all completed spans.\n\nReturns:\n    A list of all completed spans that have been started and ended."
        },
        {
          "name": "InMemoryTelemetry.events",
          "line": 347,
          "signature": "def events(self) -> list[AuditEvent]",
          "documentation": "Return all emitted audit events.\n\nReturns:\n    A list of all audit events emitted via emit_event."
        },
        {
          "name": "InMemoryTelemetry.clear",
          "line": 356,
          "signature": "def clear(self) -> None",
          "documentation": "Clear all collected spans and events."
        },
        {
          "name": "InMemoryTelemetry.span_count",
          "line": 363,
          "signature": "def span_count(self) -> int",
          "documentation": "Return the number of completed spans."
        },
        {
          "name": "InMemoryTelemetry.event_count",
          "line": 367,
          "signature": "def event_count(self) -> int",
          "documentation": "Return the number of emitted events."
        }
      ]
    },
    {
      "path": "forge-py/src/forge/telemetry/contract.py",
      "sha256": "a8fb592a5293cd8f06ae73bd3106860a109fdb3f3fe50838e980503f29bb6e94",
      "artifactSha256": "82a4bb01a5f1ce36d3e54ddb96ed59aa8f25a98cc40575baf3be64384d32f176",
      "url": "/reference/source/forge-py/src/forge/telemetry/contract.py.txt",
      "declarations": [
        {
          "name": "SpanId",
          "line": 25,
          "signature": "class SpanId()",
          "documentation": "A unique span identifier.\n\nEach span started via the TelemetryContract receives a SpanId that\nmust be passed to end_span when the operation completes. IDs are\ngenerated as UUID v4 strings for global uniqueness.\n\nANVIL Spec section 14.1 -- Telemetry Contract (span identification).\n\nExample:\n    >>> span_id = SpanId.generate()\n    >>> len(span_id.value) > 0\n    True"
        },
        {
          "name": "SpanId.__init__",
          "line": 42,
          "signature": "def __init__(self, value: str) -> None",
          "documentation": ""
        },
        {
          "name": "SpanId.generate",
          "line": 46,
          "signature": "def generate(cls) -> SpanId",
          "documentation": "Create a new random span ID using UUID v4.\n\nReturns:\n    A globally unique SpanId.\n\nExample:\n    >>> a = SpanId.generate()\n    >>> b = SpanId.generate()\n    >>> a.value != b.value\n    True"
        },
        {
          "name": "SpanId.from_string",
          "line": 61,
          "signature": "def from_string(cls, value: str) -> SpanId",
          "documentation": "Create a SpanId from an existing string value.\n\nArgs:\n    value: The span identifier string.\n\nReturns:\n    A SpanId wrapping the given string."
        },
        {
          "name": "AuditEventKind",
          "line": 91,
          "signature": "class AuditEventKind(Enum)",
          "documentation": "Kinds of audit events that agents can emit.\n\nANVIL Spec section 14.3 -- Audit Events.\n\nExample:\n    >>> AuditEventKind.TOOL_INVOCATION.value\n    'tool_invocation'"
        },
        {
          "name": "AuditEvent",
          "line": 120,
          "signature": "class AuditEvent()",
          "documentation": "An audit event recording a significant agent operation.\n\nEach event is associated with an agent DID, timestamped, and optionally\nsigned by the agent's Ed25519 key. Audit events form the foundation of\nthe agent's audit trail.\n\nANVIL Spec section 14.3 -- Audit Events.\n\nArgs:\n    kind: The kind of event.\n    agent_did: The agent's OAS DID.\n    details: Event-specific details as a dict/JSON value.\n    timestamp: ISO 8601 timestamp. Defaults to current UTC time.\n    signature: Optional Ed25519 signature (hex-encoded).\n\nExample:\n    >>> event = AuditEvent.new(\n    ...     AuditEventKind.TOOL_INVOCATION,\n    ...     \"did:oas:l1fe:agent:analyzer\",\n    ...     {\"tool\": \"web_search\", \"status\": \"success\"},\n    ... )\n    >>> event.kind\n    <AuditEventKind.TOOL_INVOCATION: 'tool_invocation'>"
        },
        {
          "name": "AuditEvent.new",
          "line": 153,
          "signature": "def new(cls, kind: AuditEventKind, agent_did: str, details: Any) -> AuditEvent",
          "documentation": "Create a new AuditEvent with the current UTC timestamp.\n\nThe signature is initially None. Call with_signature to attach an\nEd25519 signature after construction.\n\nArgs:\n    kind: The kind of audit event.\n    agent_did: The agent's OAS DID string.\n    details: Event-specific details.\n\nReturns:\n    A new AuditEvent with the timestamp set to the current UTC time."
        },
        {
          "name": "AuditEvent.with_signature",
          "line": 180,
          "signature": "def with_signature(self, signature: str) -> AuditEvent",
          "documentation": "Attach an Ed25519 signature to this event.\n\nArgs:\n    signature: The hex-encoded Ed25519 signature.\n\nReturns:\n    Self with the signature attached (builder pattern)."
        },
        {
          "name": "TelemetryContract",
          "line": 197,
          "signature": "class TelemetryContract(Protocol)",
          "documentation": "ANVIL Spec section 14.1 -- Telemetry Contract.\n\nDefines the telemetry emission interface for ANVIL-compliant agents.\nImplementations collect spans, emit audit events, and support flushing\nbuffered telemetry data to external systems.\n\nContract Guarantees:\n    - start_span always returns a valid SpanId\n    - end_span is idempotent for implementations that track span state\n    - emit_event is non-blocking (events may be buffered)\n    - flush ensures all buffered data is written to the backend"
        },
        {
          "name": "TelemetryContract.start_span",
          "line": 211,
          "signature": "def start_span(self, name: str, attributes: list[tuple[str, str]] | None=None) -> SpanId",
          "documentation": "Start a new span with the given name and attributes.\n\nArgs:\n    name: The span name (use dotted notation, e.g., \"anvil.generate\").\n    attributes: Key-value pairs of span attributes.\n\nReturns:\n    A unique SpanId for the started span."
        },
        {
          "name": "TelemetryContract.end_span",
          "line": 227,
          "signature": "def end_span(self, span_id: SpanId) -> None",
          "documentation": "End a previously started span.\n\nArgs:\n    span_id: The ID returned by start_span."
        },
        {
          "name": "TelemetryContract.emit_event",
          "line": 235,
          "signature": "def emit_event(self, event: AuditEvent) -> None",
          "documentation": "Emit an audit event for the agent's audit trail.\n\nArgs:\n    event: The audit event to record."
        },
        {
          "name": "TelemetryContract.flush",
          "line": 243,
          "signature": "def flush(self) -> None",
          "documentation": "Flush any buffered telemetry data to the backend.\n\nRaises:\n    FlushFailedError: If the flush operation fails."
        },
        {
          "name": "NoopTelemetry",
          "line": 256,
          "signature": "class NoopTelemetry()",
          "documentation": "No-op telemetry implementation that discards all telemetry data.\n\nUsed as the default for agents that do not need telemetry collection\nor when telemetry is disabled. All operations are zero-cost.\n\nANVIL Spec section 14.1 -- Telemetry Contract (default implementation).\n\nExample:\n    >>> noop = NoopTelemetry()\n    >>> span = noop.start_span(\"test\")\n    >>> noop.end_span(span)\n    >>> noop.flush()"
        },
        {
          "name": "NoopTelemetry.start_span",
          "line": 271,
          "signature": "def start_span(self, name: str, attributes: list[tuple[str, str]] | None=None) -> SpanId",
          "documentation": "Return a generated SpanId without recording any span data."
        },
        {
          "name": "NoopTelemetry.end_span",
          "line": 279,
          "signature": "def end_span(self, span_id: SpanId) -> None",
          "documentation": "No-op: does nothing."
        },
        {
          "name": "NoopTelemetry.emit_event",
          "line": 282,
          "signature": "def emit_event(self, event: AuditEvent) -> None",
          "documentation": "No-op: discards the event."
        },
        {
          "name": "NoopTelemetry.flush",
          "line": 285,
          "signature": "def flush(self) -> None",
          "documentation": "Always succeeds: no data to flush."
        }
      ]
    },
    {
      "path": "forge-py/src/forge/telemetry/errors.py",
      "sha256": "60176e32cba3c6f2414d94f1ca523a5d34cfdeebd7c3adde6f4b5b77be2c5acf",
      "artifactSha256": "f44b43dcbe5edb1fa74f352b4d4ba5ba28230f5ddc421228171e4c3a200494a6",
      "url": "/reference/source/forge-py/src/forge/telemetry/errors.py.txt",
      "declarations": [
        {
          "name": "TelemetryError",
          "line": 14,
          "signature": "class TelemetryError(ForgeError)",
          "documentation": "Base error for telemetry operations."
        },
        {
          "name": "SpanNotFoundError",
          "line": 18,
          "signature": "class SpanNotFoundError(TelemetryError)",
          "documentation": "A span with the given ID was not found in the collector.\n\nANVIL Spec section 14.1 -- Telemetry Contract.\n\nArgs:\n    span_id: The span ID that was not found."
        },
        {
          "name": "SpanNotFoundError.__init__",
          "line": 27,
          "signature": "def __init__(self, span_id: str) -> None",
          "documentation": ""
        },
        {
          "name": "SpanAlreadyClosedError",
          "line": 35,
          "signature": "class SpanAlreadyClosedError(TelemetryError)",
          "documentation": "An attempt was made to close a span that is already closed.\n\nANVIL Spec section 14.1 -- Telemetry Contract.\n\nArgs:\n    span_id: The span ID that was already closed."
        },
        {
          "name": "SpanAlreadyClosedError.__init__",
          "line": 44,
          "signature": "def __init__(self, span_id: str) -> None",
          "documentation": ""
        },
        {
          "name": "AuditEntryInvalidError",
          "line": 52,
          "signature": "class AuditEntryInvalidError(TelemetryError)",
          "documentation": "An audit entry failed validation.\n\nANVIL Spec section 14.2 -- Audit Trail.\n\nArgs:\n    reason: The reason the entry is invalid."
        },
        {
          "name": "AuditEntryInvalidError.__init__",
          "line": 61,
          "signature": "def __init__(self, reason: str) -> None",
          "documentation": ""
        },
        {
          "name": "AuditTrailCorruptedError",
          "line": 69,
          "signature": "class AuditTrailCorruptedError(TelemetryError)",
          "documentation": "The audit trail integrity check failed at the given index.\n\nANVIL Spec section 14.2 -- Audit Trail.\n\nArgs:\n    index: The index where corruption was detected.\n    reason: The reason for the corruption."
        },
        {
          "name": "AuditTrailCorruptedError.__init__",
          "line": 79,
          "signature": "def __init__(self, index: int, reason: str) -> None",
          "documentation": ""
        },
        {
          "name": "FlushFailedError",
          "line": 88,
          "signature": "class FlushFailedError(TelemetryError)",
          "documentation": "Flushing buffered telemetry data to the backend failed.\n\nANVIL Spec section 14.1 -- Telemetry Contract.\n\nArgs:\n    reason: The reason the flush failed."
        },
        {
          "name": "FlushFailedError.__init__",
          "line": 97,
          "signature": "def __init__(self, reason: str) -> None",
          "documentation": ""
        },
        {
          "name": "CollectorFullError",
          "line": 105,
          "signature": "class CollectorFullError(TelemetryError)",
          "documentation": "The span collector has reached its capacity limit.\n\nANVIL Spec section 14.1 -- Telemetry Contract.\n\nArgs:\n    capacity: The maximum number of spans the collector can hold."
        },
        {
          "name": "CollectorFullError.__init__",
          "line": 114,
          "signature": "def __init__(self, capacity: int) -> None",
          "documentation": ""
        },
        {
          "name": "ExportFailedError",
          "line": 122,
          "signature": "class ExportFailedError(TelemetryError)",
          "documentation": "Exporting telemetry data to an external system failed.\n\nANVIL Spec section 14.1 -- Telemetry Contract.\n\nArgs:\n    reason: The reason the export failed."
        },
        {
          "name": "ExportFailedError.__init__",
          "line": 131,
          "signature": "def __init__(self, reason: str) -> None",
          "documentation": ""
        }
      ]
    }
  ]
}
