This policy applies to protocol-facing shared schemas in packages/shared/src/:
stored-entry.tsevent-message.tsdata-message.tssession-message.tsserver-broadcast.tsviewer-command.ts
- New optional fields.
- New variants only when consumers can safely ignore unknown types (or behind explicit capability flags).
- New enum values only when unknown enum values are handled safely.
- Tightened validation constraints (limits/regex/date strictness).
- Fields that become semantically required in some contexts.
- Alias deprecations (for example
sessionIdvssession_id) during a transition window.
- Canonical field names take precedence when both canonical and alias forms are present in one payload.
- Current canonical/alias pairs:
session_id(canonical) oversessionId(alias)text(canonical) oversearch(alias)
- Current canonical/alias pairs:
- Alias behavior must be covered by transport tests for:
- Alias-only payloads (still accepted during transition)
- Dual-field payloads (canonical precedence)
- Alias removals are
conditionally compatibleuntil the deprecation window expires, then becomebreaking. - Each deprecation must document:
- First release where deprecation is announced.
- Last release where alias is accepted.
- First release where alias is rejected.
- Protocol docs must include migration guidance while an alias remains accepted.
- Removed fields or variants.
- Renamed fields without a compatibility alias.
- Narrowed unions or removed accepted enum values.
Any schema contract change must ship in the same change-set with:
- Compatibility classification (
additive,conditional, orbreaking). - Updated fixtures/tests in
packages/shared/test/fixture-validation.test.tswhen relevant. - Protocol documentation updates in
docs/reference/protocol.md. - Backward-compatible shared export surface unless explicitly marked breaking.