fix(features): inherit mv hashing salt in change requests and scheduled commits#7963
fix(features): inherit mv hashing salt in change requests and scheduled commits#7963Zaimwa9 wants to merge 12 commits into
Conversation
…erride in a version
|
The latest updates on your projects. Learn more about Vercel for GitHub. 3 Skipped Deployments
|
|
Important Review skippedDraft detected. Please check the settings in the CodeRabbit UI or the ⚙️ Run configurationConfiguration used: Organization UI Review profile: ASSERTIVE Plan: Pro Plus Run ID: You can disable this status message by setting the Use the checkbox below for a quick retry:
Comment |
for more information, see https://pre-commit.ci
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## fix/7913-mv-hashing-salt #7963 +/- ##
===========================================================
Coverage ? 98.62%
===========================================================
Files ? 1490
Lines ? 58755
Branches ? 0
===========================================================
Hits ? 57948
Misses ? 807
Partials ? 0 ☔ View full report in Codecov by Harness. 🚀 New features to boost your workflow:
|
…nge request overrides
Thanks for submitting a PR! Please check the boxes below:
docs/if required so people know about the feature.Changes
Contributes to #7913
Builds on #7914. Two recreation paths bypass
clone()and still re-bucketed multivariate variants:ChangeRequestCommitServicenow carries the superseded live state's salt onto drafts at commit time.Also: succession helpers on
FeatureState(used byclone()), afeatures.feature_state.mv_variants_rebucketedwarning event for unknown v1 recreation paths (added to the events catalogue), andclone()copies multivariate values in id order so variant order is deterministic.Alternatives considered
BEFORE_CREATEhook): covers unknown paths too, but heals them silently — a flow bypassingclone()would never surface and be fixed. Rejected in favour of declared, reviewable call sites plus the guard tripwire (raise under v2, warning event under v1).clone()(copy the old state, apply the request on top): the request already defines the entire new state, so the clone would contribute nothing but the salt — while starting from old values instead of defaults silently changes what partial requests return, and the rewired create path would touch shared serialisers far beyond the two affected flows. Possible later refactor.How did you test this code?
New unit tests: variant assignment stable across a change request commit (fails without the fix), override delete + recreate in a draft inherits the salt via the API, warning event fires only for unknown v1 paths, lineage lookup helper.