Evolve a preference value enum without silently coercing unknown values
A new source value called paused is mapped to enabled by the old consumer's default branch.
- Focused work estimate
- 2h 30m + prerequisites
- Priority in the scenario
- Medium
- Engineering practice
- Schema evolution · Fail-closed handling
Estimated field mix
- Data engineering70%
- API design30%
Field percentages are editorial estimates of the ticket's engineering focus. They total 100%; they are not measured time, proficiency scores, or ownership evidence.
Review it, then add it to your workspace.
The board opens an editable draft; nothing is saved until you confirm it. Sign-in and workspace permissions apply, and Demo boards remain ephemeral.
Project context
A fictional messaging service builds a read model from database changes. Restarts and schema changes can re-enable preferences that customers disabled.
Setup prerequisites
- Create synthetic preference records and a replayable local change log.
- Use adapters or fixtures without provisioning a production broker.
Preceding work
Complete these dependencies, or supply their agreed outputs before taking this ticket.
- ACDC-101 · Define the preference change envelope with source position
- ACDC-103 · Represent preference deletion as a durable tombstone
- ACDC-104 · Advance the feed checkpoint only with the projected transaction
- ACDC-105 · Reject a stale preference update after a partition retry
- ACDC-106 · Handoff a preference snapshot to live changes without a gap
Acceptance criteria
- Use an explicit compatibility map for each envelope version.
- Unknown values enter quarantine without checkpoint loss.
- Document how a compatible consumer resumes blocked input.
Implementation constraints
- Avoid treating missing values as an affirmative preference.
Verification to include
- Apply known values under both supported versions.
- Deliver paused to an incompatible consumer and verify no enable write.
Deliverables
- Version compatibility matrix and consumer guard
Rollout and recovery
Deploy compatible readers before writers; retain queued unsupported changes for replay.
Value of the work
For the engineer: Practice change-feed ordering, snapshots and privacy-preserving deletion.
For the team: Review whether replicated customer preferences remain correct during recovery.
Evidence boundaries
Outcome Evidence: Tests, patches, and runbooks are requested deliverables. They become Outcome Evidence only through a qualified Mission and immutable Evidence IDs.
Ownership Evidence: Independent adaptation must be observed under a declared verification policy and cite immutable Evidence IDs. Completing a planning ticket establishes no Ownership Evidence.