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¶
- Every codec component (deterministic input → output) ships a fixture set
under
protocol/conformance/<component>/. - Each implementation — TypeScript in the browser, Swift on iOS, yours — loads the same fixtures and asserts the same results.
- 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.