Skip to content

Conformance

A protocol is only as real as the test that proves two implementations agree. Vero's conformance mechanism is built on language-neutral golden fixtures: JSON documents that pair inputs with the exact outputs a compliant implementation must produce. Fixtures are the durable protocol asset — test runners are thin and per-language, fixtures survive every rewrite.

How it works

  1. Every codec component (deterministic input → output) ships a fixture set under protocol/conformance/<component>/.
  2. Each implementation — TypeScript in the browser, Swift on iOS, yours — loads the same fixtures and asserts the same results.
  3. The iOS implementation serves as the reference implementation: the fixtures cross-check every other implementation against it.
protocol/
├── <component>-spec.md      # normative contract
└── conformance/
    └── <component>/
        └── *.json           # golden fixtures: input → required output

Capture components (camera- and device-bound) are held to minimum quality gates instead of exact outputs, exercised through recorded-session replay rather than static fixtures.

Running the gate

From the repository root:

just conformance        # TypeScript suites (browser verifier, packages, server)
just conformance-ios    # Swift reference implementation (Xcode + simulator)

Both gates run the same golden fixtures. A change that breaks cross-platform agreement fails the gate before it ships.

Decoder tiers

Conformance for the Blink Decoder (C12) is tiered — see Components:

Tier Claim Fixture style
Tier 1 Independent extraction: key decoded from video with no knowledge of the expected sequence Recorded streams + blink parameters → decoded key
Tier 2 Correlation with decoy margin: expected-sequence match that beats N wrong-key decoys by the specified margin Recorded streams + key + decoy panel → score margins

Implementations declare the tier they claim; sessions report the tier they achieve. V1's passing bar is Tier 2. Tier 1 is the protocol's pure form and remains a first-class profile.

Status

The fixture corpus is being built out component by component alongside V1 development. The pattern-setter (serialization golden fixtures with dual TypeScript/Swift runners) is in place; C12 tier fixtures and C15 entangler fixtures are next. Until V1 tags, fixture formats may change without notice.