stateset-observability 0.8.1

Observability utilities for StateSet iCommerce (metrics + tracing)
# stateset-observability

Observability primitives for StateSet iCommerce:

- Structured tracing bootstrap (`init_tracing`)
- Business counters (orders, payments, inventory)
- RED metrics (`record_request_*`)
- SLO evaluation (`SloTarget`, `SloEvaluation`)
- Span/metric naming conventions (`conventions`)

## Tracing

```rust
use stateset_observability::init_tracing;

init_tracing("stateset-marketplace", "production", "us-east-1")
    .expect("tracing init");
```

## Metrics + RED + SLO

```rust
use std::time::Duration;
use stateset_observability::{init_metrics, MetricsConfig, SloTarget};

let metrics = init_metrics(MetricsConfig::default());

metrics.record_order_created("cust-1", 129.99);
metrics.record_request_success("order.create", Duration::from_millis(42));
metrics.record_request_error("order.create", Duration::from_millis(180));

let snapshot = metrics.snapshot();

let report = snapshot
    .evaluate_operation_slo(
        "order.create",
        SloTarget {
            min_success_rate: 0.95,
            max_avg_latency_ms: 200.0,
            min_requests: 2,
        },
    )
    .expect("operation metrics");

assert!(report.requests >= 2);
```

## Conventions

- Span names: `stateset.<normalized_operation>` (for example `stateset.order_create`)
- Metric names:
  - `stateset_requests_total`
  - `stateset_request_errors_total`
  - `stateset_request_duration_ms_total`
- Label keys:
  - `service`
  - `operation`
  - `environment`
  - `region`
  - `outcome`

Use `normalize_name`, `operation_span_name`, and `operation_metric_label` to keep cardinality stable.

## License

MIT OR Apache-2.0