[package] name = "jouleclaw-otel" version.workspace = true edition.workspace = true license.workspace = true repository.workspace = true authors.workspace = true description = "OpenTelemetry GenAI semantic-convention adapter for JouleClaw receipts. Projects jouleclaw-prov::Receipt + jouleclaw-policy-receipt::PolicyReceipt + jouleclaw-contract::ContractVerdict + jouleclaw-graph::WorkerHandoffEvent + AgentFeedbackEvent into OTel-shaped SpanData with the stable `gen_ai.*` attribute set plus `jouleclaw.*` extensions (joules, energy provenance, cascade tier, contract hash). Pure types + projection — no opentelemetry runtime dep; transport (OTLP gRPC/HTTP, stdout, Jaeger) lives in a separate crate. Lets Datadog/Grafana/Honeycomb operators ingest JouleClaw receipts via the same pipeline they already run." [dependencies] jouleclaw-prov = { path = "../jouleclaw-prov" } jouleclaw-policy-receipt = { path = "../jouleclaw-policy-receipt" } jouleclaw-contract = { path = "../jouleclaw-contract" } jouleclaw-graph = { path = "../jouleclaw-graph" } jouleclaw-energy = { path = "../jouleclaw-energy" } serde = { workspace = true } serde_json = { workspace = true } thiserror = { workspace = true }