observer-core 0.1.1

Core canonical contracts and analytics for the Observer verification platform
Documentation
<!-- SPDX-FileCopyrightText: 2026 Alexander R. Croft -->
<!-- SPDX-License-Identifier: GPL-3.0-or-later -->

# observer-core

`observer-core` is the canonical data-model and derivation crate behind Observer.

It is the crate to use when you need Observer's deterministic contracts without depending on the CLI itself.

## What It Contains

- canonical inventory, suite, product, and report types
- normalization and hashing for inventory, suite, product, and lowered CMake model artifacts
- provider-resolution helpers and provider list/run payload types
- suite execution and product certification runtime entrypoints
- analytics derivation for cubes, compares, compare indexes, and CMake check evidence
- JSON and JSONL parsing helpers for Observer-produced artifacts

The intended consumer is either:

- another Observer-facing crate such as the CLI
- an integration that wants to parse or derive Observer artifacts programmatically
- tooling that wants deterministic hashes and analytics without shelling out to `observer`

## Major Modules

- `inventory`: canonical inventory contract
- `suite`: canonical suite model and selector logic
- `runtime`: suite execution over canonical inventory
- `product`: staged product certification model
- `report` and `report_jsonl`: report serialization and parsing
- `analytics`: cube, compare, and compare-index derivation
- `cmake`: lowered CMake product model and first CMake certification checks

## Common Uses

Compute stable hashes for canonical artifacts:

```rust
use observer_core::{normalized_inventory_sha256, normalized_product_sha256, normalized_suite_sha256};
```

Parse report JSONL produced by Observer:

```rust
use observer_core::{parse_product_report_jsonl, parse_report_jsonl};
```

Derive analytics artifacts from canonical evidence:

```rust
use observer_core::{derive_compare_index, derive_compare_pair, derive_cube_from_report};
```

## Scope

`observer-core` is intentionally contract-oriented. It does not try to provide a friendlier authoring layer for test authors. That work belongs in integration crates such as `observer-rust-lib` or in the `observer` CLI surface.

If you want the end-user command-line tool, install `frogfish-observer` instead. If you want the Rust registration/runtime primitives for building a provider, use `observer-rust` or `observer-rust-host`.