Beam 0.6 Compatibility
Beam 0.6 defines one compatibility contract across the protocol, directory, CLI, TypeScript SDK, and Python SDK:
Protocol family: beam/1
Current frame version: v = "1"If you stay inside that contract, minor releases must remain interoperable.
The Rules
1. Additive changes are allowed
You may add:
- optional top-level fields
- optional payload fields
- optional response fields
- new intent types
- new observability metadata
Existing receivers must ignore fields they do not understand.
2. Breaking required-field changes are not allowed in beam/1
The following require a new protocol version:
- removing an existing field
- changing the meaning of an existing field
- making a formerly optional field mandatory
- changing signature canonicalization
- changing nonce or timestamp validation semantics in a way that rejects previously valid traffic
3. payload is canonical
For intent frames, payload is the canonical request body on the wire.
Current SDKs still accept params as a legacy alias for backward compatibility. New producers should emit payload.
4. Unknown fields must be ignored
beam/1 receivers must ignore unknown fields at:
- the top level of intent frames
- the top level of result frames
- nested payload objects unless the application-level intent schema says otherwise
Ignoring unknown fields is what makes additive evolution safe.
5. Signature inputs cannot drift silently
Within beam/1, the signed content for frames is fixed. If you need a different canonicalization or signing rule, that is a version change, not a patch release.
6. CLI and SDK releases must track server compatibility explicitly
beam-protocol-cli 1.1.xtargetsbeam/1beam-protocol-sdk 1.1.xtargetsbeam/1beam-directory 1.1.xtargetsbeam/1
Feature additions may land in minor releases, but protocol compatibility must remain intact.
Schema Evolution Checklist
Before shipping a new field or endpoint behavior:
- Is the change additive?
- Will old clients continue to parse the response?
- Will old servers continue to accept the request?
- Does the signature input remain byte-for-byte compatible?
- Do compatibility fixtures and tests still pass?
If any answer is "no", you are not making a minor change anymore.
Fixtures and Tests
Beam 1.1 ships two compatibility fixture layers under spec/fixtures/compatibility:
- parser fixtures in the root folder for additive decode behavior such as unknown-field tolerance and legacy
params - archived signed release fixtures in
spec/fixtures/compatibility/releasesforv0.6.0andv0.6.1
The archived fixtures pin real signed frames from released beam/1 behavior:
v0.6.0quote request and signed quote resultv0.6.1async finance preflight intent and accepted acknowledgement result
The TypeScript and Python SDK test suites consume both layers. That means CI now fails on:
- additive parser regressions
- signature verification drift
- replay-window handling drift for archived intent frames
- result-frame validation changes that would reject already released
beam/1traffic
Release Notes Requirement
Every release note for Beam 0.6+ should say one of:
- "No protocol compatibility changes"
- or "Introduces a new protocol family / breaking compatibility"
That prevents silent breakage from being buried in a changelog bullet.