Checkpoint
One last thing before we move on. Same surface as a write step — but the lesson doesn't complete until this passes.
Version a feature like code. Implement logins_30d_v1 (counts all events) and logins_30d_v2 (excludes "bot" events), compute both on the raw row and print them (f"v1 (all events): {v1}" / f"v2 (bots excluded): {v2}"). The MODEL dict records it trained on v1; serving is about to compute v2. Print the model's expectation, then the refusal: f"REFUSE: serving computes {sv} but the model trained on {tv} - retrain or serve v1". Silently 'improving' a feature under a deployed model is self-inflicted skew.