dikw-core v0.5.3
OpenTelemetry observability — complete (PR1–PR5, #200–#207)
dikw-core now ships full traces + metrics + logs instrumentation behind an optional [otel] extra — off by default, zero-cost when unused — so its runtime data integrates with any OTLP backend (Jaeger/Tempo, Prometheus/Grafana, Datadog, …).
- Traces — one trace spans
client → HTTP server → background task → engine op → provider call.gen_ai.*spans carry model + token usage (incl. Anthropic prompt-cache tokens); each retrieval fusion leg (BM25/vector/asset/graph) gets its own span. - Metrics — GenAI
token.usage+operation.durationhistograms and dikw-domain counters/histograms (ingest / synth / embed / retrieve / task), exported over OTLP/HTTP. - Logs —
DIKW_LOG_FORMAT=jsonemits structured log records carryingtrace_id/span_id/servicefor log↔trace correlation (text default unchanged, byte-for-byte). - Docs + validation stack — new
docs/observability.mdoperator cookbook + a one-commanddocker composestack (OTel Collector → Jaeger / Prometheus / Grafana).
Enable server-side via a telemetry: section in dikw.yml; the dikw client CLI joins the same trace via the standard OTEL_* env vars.
Synth prompt restructure (#199)
The cached synth system prompt is rewritten into a six-invariant standing-policy spine with a correspondingly slimmed user prompt (single source of truth per rule); synth now forbids sources / lint in emitted front-matter — both are engine-owned.
Full changelog: CHANGELOG.md → 0.5.3
Install: pip install 'dikw-core==0.5.3' — add the [otel] extra for observability, [postgres] for the pgvector backend.