v3.1.0 — GA: hardened for OT¶
Released: 2026-09-19 · General availability (first GA of the v3.1 line)
This is a general-availability release. No wire-format, envelope, or public-API changes from v3.1.0-beta.1 — v3.1.0 is the OT-safety hardening gate that takes SKI out of beta.
Install¶
pip install ski-sdk ski-kg-extractor ski-kg-validator ski-audit-ledger ski-model-deploy ski-schemas
docker pull ghcr.io/kpifinity/ski-model:3.1.0
Why GA now¶
The core has been fail-closed since beta.1. v3.1.0 makes that provable for OT/ICS deployment: every fail-safe path is tested and gated in CI, the highest-consequence OT threat has a conformance test, and the trust boundary is documented with a conservative default.
Highlights¶
Every fail-safe path is tested and gated¶
Per-module coverage assertions now sit on the safety-critical set — the
verifier, the evaluator's degrade paths, kg_loader signature
verification, the ledger client, and the risk-tier policy — on top of the
global floor. There is an explicit negative test for every fail-closed
branch: backend error, malformed model output, bad KG signature, unknown
citation, and ledger-write failure. The guarantee is no longer "the guard
exists" but "the guard is exercised and gated."
The OT attack that matters is now tested (threat T9)¶
A dedicated conformance test drives prompt-injection-via-telemetry: a
compromised sensor/ETL source attempts to steer the reasoner into a
fabricated CLEAR for a genuine breach. It must not silently CLEAR — it
FLAGs or degrades. The test pins the structural guard rails (independent
grounding against the measurement and the cited obligation, mechanical
recomputation of satisfied, risk-tier downgrade of any disagreement) and
is backed by a functional FakeLLM injection proof.
Fail-safe risk tiering + documented trust boundary¶
An absent, empty, or unrecognized risk_tier now defaults to tier-1
(any non-agreement → DISCRETIONARY + human attestation) rather than being
trusted as lower-risk, and the coercion is audited. The effective tier is
derived from the signed KG, not the caller-declared value. SKI's
telemetry trust boundary is documented: integrity/authenticity are assumed
enforced upstream; signed/authenticated telemetry and a trusted time
source are recommended for OT.
Static analysis on the network-facing surface¶
Bandit now covers the sidecar (telemetry ingress), the telemetry buffer, and the KG tools, not just the core packages.
Conformance¶
82 conformance tests — 30 Provenance · 30 Durability · 22 Sovereignty (the sovereignty set now includes the T9 adversarial-telemetry test). Level 3 is fully runnable, including the air-gapped-boot CI rig.
Versioning note¶
ski-sdk and ski-schemas — versioned independently during the
alpha/beta line under RFC 0003 — are unified to the framework version at
GA. All six packages are 3.1.0.
Upgrade from v3.1.0-beta.1¶
No wire-format or API changes; drop the --pre flag:
pip install --upgrade ski-sdk ski-kg-extractor ski-kg-validator \
ski-audit-ledger ski-model-deploy ski-schemas
See CHANGELOG.md.