docs/design/2026-08-23-approval-mode-contract.md
Keep ApprovalMode and APPROVAL_MODES in core as the runtime source of
truth. TypeScript packages derive their local types and validators from either
that core contract or the TypeScript SDK's checked tuple. Python and Java keep
native public types, with their accepted values checked against a small JSON
fixture that is also checked against core.
This avoids adding a runtime dependency from the published SDKs to core and does not introduce code generation for one five-value domain.
ApprovalMode.permission_mode fields with
the shared union.Adjacent value domains such as channel modes, hook permission decisions, and desktop cycling preferences remain independent because their supported values and semantics intentionally differ.