iridium-db 0.2.0

A high-performance vector-graph hybrid storage and indexing engine
# single-node service runbook

Minimal operator runbook for the first Iridium service candidate surface.

This is intentionally narrow. It is for local evaluation and single-node operator checks, not a hardened production deployment.

For the packaging-oriented install view of the same surface, see `docs/service_install.md`.

## prerequisites

- Build the CLI:

```sh
cargo build --bin ir
```

- Choose a local data root. The service commands expect `--data` to point at the parent of the `data/` directory they will use.

Example layout:

```text
/tmp/iridium-service-root/
└── data/
```

## recommended settings

Use the current validated service-candidate settings:

```text
listen_address=127.0.0.1:7001
telemetry_endpoint=stdout
tls_mode=operator-optional
admin_token=local-dev
max_requests=16
```

These settings match the verified Sprint 4 operator surface and artifact scripts.

## seed a local fixture

```sh
rm -rf /tmp/iridium-service-root
mkdir -p /tmp/iridium-service-root
cargo run --quiet --bin ir -- --data /tmp/iridium-service-root ingest-node 1 1 2,3
```

## validate the config

```sh
cargo run --quiet --bin ir -- \
  --data /tmp/iridium-service-root \
  service-validate \
  --listen 127.0.0.1:7001 \
  --telemetry-endpoint stdout \
  --tls operator-optional \
  --admin-token local-dev \
  --max-requests 16
```

## inspect the shared service contract

```sh
cargo run --quiet --bin ir -- service-report --listen 127.0.0.1:7001
```

## start the service

```sh
cargo run --quiet --bin ir -- \
  --data /tmp/iridium-service-root \
  service-serve \
  --listen 127.0.0.1:7001 \
  --telemetry-endpoint stdout \
  --tls operator-optional \
  --admin-token local-dev \
  --max-requests 16
```

## operator checks

Run these from another terminal while `service-serve` is active:

```sh
curl http://127.0.0.1:7001/livez
curl http://127.0.0.1:7001/readyz
curl http://127.0.0.1:7001/metrics
curl 'http://127.0.0.1:7001/v1/query?q=MATCH+%28n%29+RETURN+n+LIMIT+1'
curl -H 'Authorization: Bearer local-dev' http://127.0.0.1:7001/admin/status
curl -H 'Authorization: Bearer local-dev' 'http://127.0.0.1:7001/admin/lifecycle?action=stop'
```

Expected outcomes:

- `/livez` returns `live`
- `/readyz` returns the service contract JSON
- `/metrics` returns Prometheus-style text metrics
- `/v1/query` returns one row for the seeded node
- `/admin/status` returns the service contract JSON
- `/admin/lifecycle?action=stop` returns a lifecycle response and stops the bounded service loop

## operator artifacts

Generate the product-owned service artifacts after or instead of the manual checks:

```sh
python3 scripts/service_candidate_report.py --report-dir artifacts
python3 scripts/service_lifecycle_report.py --report-dir artifacts
python3 scripts/service_compatibility_report.py --report-dir artifacts
```

This writes:

- `artifacts/service_candidate_report.json`
- `artifacts/service_candidate_report.md`
- `artifacts/service_lifecycle_report.json`
- `artifacts/service_lifecycle_report.md`
- `artifacts/service_compatibility_report.json`
- `artifacts/service_compatibility_report.md`

The compatibility report also refreshes a service-backed retrieval-quality proof on the canonical fixture:

- `artifacts/retrieval_quality_service_report.json`
- `artifacts/retrieval_quality_service_report.md`

## limits

- TLS is config-shaped only. The current service path does not implement encrypted transport.
- Auth is limited to optional bearer-token gating on admin routes.
- The service candidate path is blocking and single-process.
- The current runbook is for evaluator and operator validation, not deployment automation.