> Status: draft. Part of the Harmovela 0.2 specification.
Define observable compatibility levels for Harmovela implementations. Conformance levels are cumulative and describe externally visible behavior, not internal architecture.
An HARMOVELA-C0 implementation can parse Harmovela envelopes and validate shared schema assets.
Required behavior:
event.rejected (code unknown_event_type). Unknown event types are not forwarded. This is an intentional divergence from the earlier opaque-forwarding draft.schemas/harmovela-envelope.schema.json.schemas/subscription-filter.schema.json when checking subscription filters.An HARMOVELA-C1 implementation supports the core local runtime protocol. HARMOVELA-C1 includes all HARMOVELA-C0 behavior.
Required behavior:
An HARMOVELA-C2 implementation supports observable delivery semantics for distributed or durable deployments. HARMOVELA-C2 includes all HARMOVELA-C0 and HARMOVELA-C1 behavior.
Required behavior:
An HARMOVELA-C3 implementation supports end-to-end delivery tracking including track, ack, nack, dead-letter, and DeliveryTracker stats verification. HARMOVELA-C3 includes all HARMOVELA-C0, HARMOVELA-C1, and HARMOVELA-C2 behavior.
Required behavior:
Shared conformance fixtures are described by conformance/manifest.json.
Manifest paths are relative to conformance/. A runner declares a target level and executes every fixture at or below that level. Runners must ignore higher-level fixtures unless explicitly configured to verify that level.
The default target level for Harmovela 0.2 reference runners is HARMOVELA-C3.
accept_all means every fixture event must pass envelope and schema validation.
stateful_flow means every fixture event must pass validation and must be accepted by the reference harness without producing event.rejected.
reject_some means every fixture event must be inspected, including validation of expected_types when present, and the fixture passes only when at least one event is rejected by envelope validation, applicable payload validation, or protocol/harness validation. Any harness response whose event type ends in .rejected is a protocol/harness rejection. Invalid events in this fixture do not make the fixture fail.
Optional profiles extend core conformance with domain-specific semantics. Implementations may declare support for zero or more profiles in addition to their core conformance level.
Each profile declares a required_core_level — the minimum core conformance level an implementation must meet before it can claim the profile. For example, the delivery profile requires at least HARMOVELA-C1, because durable delivery depends on task lifecycle and session management primitives. The runtime-semantics profile requires HARMOVELA-C0 since it operates at the envelope and schema layer.
To claim a profile, an implementation must:
1. Meet or exceed the profile's declared required_core_level. 2. Pass all fixtures tagged with that profile in conformance/manifest.json.
Profile fixture paths are listed in the manifest under profiles.<name>.fixtures.
Profile fixtures follow the same accept_all, stateful_flow, and reject_some expectations as core fixtures. A profile fixture may also reference conformance levels that are not part of core — for example, HARMOVELA-C2 is exclusive to the delivery profile. Runners configured for a profile should execute only fixtures belonging to that profile plus unprofiled (core) fixtures.
The reference conformance runner supports --profile=<name> to filter execution to core fixtures plus the selected profile's fixtures. When a profile is not selected, its fixtures are excluded from the run and reported as SKIP in the summary.