kcode-speaker-system 0.1.1

Thin deterministic facade for the frozen 24-field speaker-classification libraries
Documentation
# kcode-speaker-system 0.1.1

Thin deterministic facade for the frozen 24-field speaker-classification libraries.

## Public API

The 0.1.0 extraction, store, dataset, model, snapshot, and evaluation API remains available. Version 0.1.1 adds `open_with_model(path, Option<&[u8]>)`, `SpeakerSystem::has_active_model()`, and instance `SpeakerSystem::identify()`.

`open(path)` is equivalent to `open_with_model(path, None)`. Supplied snapshot bytes are decoded at open time and retained as one optional immutable `ModelSnapshot` alongside the store. Instance identification uses only that model. Without one it returns `SystemError::ModelUnavailable`, displayed exactly as `model_unavailable`.

The existing free `identify(&ModelSnapshot, &Key, &FeatureVector)` function is retained.

## Successor Ktools

`KTOOLS` contains exactly:

- `kcode-speaker-system/identify`
- `kcode-speaker-system/set-sample-state`

`execute_ktool` dispatches only those names.

Identify accepts exactly `cohortId` equal to `gemini-speaker-24-normalized/1` and `ratings` containing exactly 24 integer values in `0..=100`. Missing, extra, malformed, wrong-cohort, wrong-count, out-of-range, and legacy fields are rejected. A successful response contains a deterministic known-or-unknown decision, best and optional runner-up LLRs, and absolute and margin gate evidence. LLR scores are not probabilities. Model absence returns `model_unavailable`.

Set-sample-state accepts provenance-bearing `eventId`, store-issued `sampleId`, a nonblank `reason`, and exactly one state:

- `{"status":"active"}`
- `{"status":"confirmed","speakerId":"speaker key"}`
- `{"status":"retracted"}`

`active` maps to the store’s unlabeled successor state. All mutation delegates to `SpeakerSystem::change_sample_state`. Unknown, malformed, or legacy train/delete schemas are rejected before mutation; the Ktool provides no arbitrary train or delete operation.

## Managed dependencies

The facade retains the pinned speaker package chain and uses `serde` plus `serde_json` only for strict Ktool JSON decoding and deterministic response serialization.

## Boundaries

This package performs no provider, audio, App, replay, activation, migration, registry, runtime, publication, or deployment work. `open_with_model` does not read an active-model pointer from the store and does not fit or activate a model.