2.8 KiB
2.8 KiB
Baseline Comparison Study — Tasks
T1: Register chronological builtin profile
- Add
chronological()function totidal/src/ranking/builtins.rs - Uses
Sort::Newfor pure reverse-chronological ordering, no personalization signals - Register in
register_builtins() - Add unit test verifying sort mode and no boosts
- Acceptance:
cargo test --manifest-path tidal/Cargo.toml --libpasses; profile available via retrieve
T2: Create experiment types module
- New file
tidal/src/experiment/mod.rs ExperimentConfigstruct: experiment_id, treatment_fraction, treatment/control profile names, click/completion signal names, return_windowExperimentGroupenum: Treatment, Control (PartialEq, Eq, Debug, Clone)assign_group(user_id, experiment_id, treatment_fraction) -> ExperimentGroupusing FNV-1a hash for deterministic assignmentGroupMetricsstruct: views, clicks, completions, ctr, completion_rate, return_rateMetricLiftstruct withcompute()andrelative_lift()ExperimentReportstruct aggregating both groups- Unit tests for hash determinism, balanced split, metric lift math
- Acceptance:
cargo check --manifest-path tidal/Cargo.tomlclean; 16 unit tests pass
T3: Build report aggregation
- New file
tidal/src/experiment/report.rs ReportBuildertakes&Arc<SignalLedger>and&UserSignalIndexaggregate_group_metrics()resolves signal type IDs, iterates users callinguser_signal_count()anduser_activity_split()- Add
user_signal_count(user_id, type_id) -> u64toUserSignalIndex - Add
user_activity_split(user_id, window_boundary_ns) -> (bool, bool)toUserSignalIndex - Acceptance: Report builder compiles and aggregates correctly in unit tests
T4: Wire experiment API onto TidalDb
- New file
tidal/src/db/experiment.rs experiment_group(user_id, &ExperimentConfig) -> Result<ExperimentGroup>experiment_profile(user_id, &ExperimentConfig) -> Result<&str>experiment_report(&ExperimentConfig, &[u64]) -> Result<ExperimentReport>- Add
mod experiment;todb/mod.rs - Acceptance: Methods callable from integration tests
T5: Integration tests
- New file
tidal/tests/pg1_baseline.rs - Test chronological profile returns reverse created_at order
- Test chronological is deterministic across users
- Test experiment group assignment is deterministic
- Test experiment profile returns correct name
- Test balanced 50/50 split across 10k users
- Test experiment report with synthetic signals (treatment > control CTR)
- Test experiment report is reproducible
- Acceptance: All 7 integration tests pass
T6: Wire re-exports in lib.rs
- Add
pub mod experiment;totidal/src/lib.rs - Re-export
ExperimentConfig,ExperimentGroup,ExperimentReport,GroupMetrics,MetricLift - Acceptance: Types accessible as
tidaldb::ExperimentConfigetc.