Baton currently treats OpenTelemetry span and metric export as an optional feature (pip install baton[otel]). This should be the default behavior.
-
Move
opentelemetryfrom optional to required dependency in pyproject.toml. Move the packages from[project.optional-dependencies]otel extra to[project.dependencies]. -
Enable OTLP span export by default in config.py / schemas.py. The
ObservabilityConfigshould defaultotlp_enabledtoTrue(or add such a field if it doesn't exist). Default endpoint:http://localhost:4317(standard OTLP collector). Users opt-out by settingotlp_enabled: falsein baton.yaml. -
Add Chronicler as a named OTLP sink in config.py. Support multiple OTLP endpoints:
observability: otlp_enabled: true otlp_endpoints: - name: collector endpoint: http://localhost:4317 protocol: grpc - name: chronicler endpoint: http://localhost:4318 protocol: grpc
-
Update otel.py to support multiple endpoints — fan out spans/metrics to all configured endpoints.
-
De-emphasize the built-in dashboard in CLI help text and docs. Add a note that it is a development aid, not production observability.
-
Update tests for the new defaults.
- Backward compatible: existing baton.yaml files without observability config should work (OTLP attempts connection to localhost:4317, logs warning if unreachable, continues without blocking)
- Unreachable OTLP endpoint must never block circuit operation (fire-and-forget, consistent with Arbiter integration pattern)
- All existing tests must pass