Files
OpenShell/crates/openshell-core
Kris Hicks 0e96e8e8c9 feat(ocsf)!: emit OCSF 1.8.0 only and deprecate the schema version knobs (#5036)
Remove the OCSF schema downgrade. OpenShell now writes native OCSF 1.8.0
records to supervisor JSONL and stderr, gateway JSONL, and OTLP log
export regardless of configuration.

The downgrade did not produce valid records: events it labelled 1.1 or
1.3 failed validation against those versions, because OpenShell's
emitters rely on requirements that only 1.8 relaxed (#4284). It was also
not shown to be required by any SIEM: of ten sinks and pipelines tested
with real OpenShell records, none rejected native 1.8.0 or gated on
metadata.version.

The version knobs stay accepted so existing configuration still loads,
but they are deprecated and ignored:

- The ocsf_schema_version sandbox setting accepts any value; the
  supervisor reports a newly set value as a Device Config State Change
  event.
- schema_version under [openshell.gateway.ocsf_log] and
  [openshell.gateway.otlp.ocsf], and the server.ocsfLog.schemaVersion
  Helm value, accept any value; the gateway logs a warning at startup.
- The compute drivers' OPENSHELL_OTLP_OCSF_SCHEMA_VERSION flag and
  environment variable are hidden and ignored, with a warning, and are
  no longer forwarded to sandboxes.

BREAKING CHANGE: Deployments that set an OCSF schema version now receive
native OCSF 1.8.0 records instead of records labelled 1.1 or 1.3.

Closes #4284

Signed-off-by: Kris Hicks <khicks@nvidia.com>
2026-10-30 15:23:37 +00:00
..

openshell-core

Shared types, constants, configuration, and helpers used across OpenShell crates.

Isolation registrations

isolation_registration owns the operator registry's backend names, byte-stream endpoints, and shared validation. Its fallible conversions carry registrations through the compute-driver protobuf and back into the supervisor's JSON launch file. These routes contain no credentials or driver-owned launch coordinates.

Object Metadata

Top-level user-facing objects use a Kubernetes-style metadata convention. The metadata shape provides:

  • Stable server-generated ID.
  • Human-readable name.
  • Creation timestamp.
  • Optional labels for filtering and automation.

Code that works with object metadata should use the traits in openshell_core::metadata instead of reaching into protobuf fields directly:

use openshell_core::{ObjectId, ObjectLabels, ObjectName};

let id = sandbox.object_id();
let name = sandbox.object_name();
let labels = sandbox.object_labels();

Trait methods must tolerate missing metadata and return safe empty values rather than panicking.

Label Rules

Labels follow Kubernetes-style key and value conventions:

  • Keys may include an optional DNS-prefix followed by /.
  • Names are limited to alphanumeric characters plus -, _, and ..
  • Values use the same character set and may be empty.
  • Selectors use comma-separated key=value pairs with AND semantics.

Validate labels at API ingress before persisting objects.

Inference Profiles

Provider inference profiles live in this crate so the gateway, sandbox, and router agree on provider defaults. Profiles define:

  • Auth header style.
  • Default upstream headers.
  • Client-supplied passthrough headers.
  • Supported inference protocol shapes.

Do not duplicate provider-specific inference behavior in callers. Add shared behavior here, then consume it from the gateway, sandbox, and router.

Middleware Contracts

Built-in supervisor middleware identifiers, host-selector matching, and pure configuration validation live in openshell_core::middleware. Policy admission and the supervisor runtime consume the same contract without introducing a dependency from the policy crate to the supervisor implementation.

Protobuf Struct Conversion

Use openshell_core::proto_struct when crossing between serde_json values and prost_types::{Struct, Value}. Both conversion directions live in this module; JSON-to-protobuf conversion is fallible so callers cannot silently replace an unrepresentable number.