2 months ago
037a6e6* feat(model): consume the openkara-models stable catalog with installed identity Implements #167: model URLs, digests, and versions now come from the openkara-models two-layer catalog (stable pointer + immutable release manifest) instead of hand-maintained constants. Rust: - Add separator::catalog — typed pointer/manifest parsing, byte-level verification (size + SHA-256 before parse), structural validation (unique artifact ids, HTTPS URLs, waveform tensor interface, non-empty reciprocal runtime compatibility), and monotonic-generation enforcement. - Embed a verbatim snapshot of catalog generation 3 as the offline trust anchor; descriptors resolve from it with no network and no config. - Record installed identity (<model>.identity.json) on every verified install; readiness accepts pin-matching or identity-verified files so a model from a newer generation stays usable offline or under an older binary, and catalog refresh failure can never invalidate an install. - Add check_model_updates: fetches + verifies the stable catalog, compares installed identity per variant, caches the verified catalog so download_model installs the newer artifact. Implicit downgrades are rejected at both comparison and download. - Model pin moves from model-v2.0.1 to model-v2.1.0 via the snapshot. Parity: - scripts/resolve-model.mjs resolves artifacts from the same snapshot; scripts/setup.sh and the CI model-preparation job consume it, deleting all hardcoded MODEL_URL/MODEL_SHA256 values. Frontend: - Settings model section shows installed versions, adds Check for updates / Update actions, and distinguishes runtime corrupt/failed states with the underlying error instead of a generic install CTA. - The per-song Separate button is disabled with a hint while the model is still downloading on first run. - New en/zh-CN copy; tests for the catalog module, identity resolution, update comparison, resolver parity, and the new UI states. Refs #166. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * style(scripts): format resolve-model.mjs Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> --------- Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Parentc3eebe1