Skip to content

Add FeatureState as the persistence boundary - #180

Open
michal-granec wants to merge 3 commits into
v3from
v3-feature-state
Open

Add FeatureState as the persistence boundary#180
michal-granec wants to merge 3 commits into
v3from
v3-feature-state

Conversation

@michal-granec

Copy link
Copy Markdown
Contributor

Summary

  • Introduce Rollout::FeatureState as the backend-neutral snapshot of feature configuration.
  • Move Redis payload encode/decode into Rollout::RedisCodec and construct Feature only from FeatureState.
  • Pin current CRC32 assignment, Redis payload format, mutation semantics, and history behavior with characterization tests.

This is the first Rollout 3 slice. It does not extract rollout-redis, add Active Record, change hashing, or raise the Ruby requirement.

Test plan

  • CI green on the existing Ruby 2.4–3.3 matrix
  • Existing Redis payloads still load without rewriting unread keys
  • Percentage, user, and group evaluation match the pinned CRC32 examples
  • with_feature still saves one combined mutation and records one history event
  • delete removes feature history; clear! keeps it

Introduce a backend-neutral feature snapshot and move Redis
encode/decode out of Feature so later adapters can share the same
evaluation path. Pin CRC32, payload, mutation, and history behavior
with characterization tests.
Copy normalized name, user, and group strings so snapshots do not alias
the source feature. Restore symbol names on Feature while FeatureState
keeps string names for persistence. Reject non-Hash metadata and rely on
FeatureState defaults when clearing.
Keep the caller's String or Symbol feature name at the public Feature
boundary, and reject unsupported metadata values instead of sharing them
across snapshots.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant