| Server IP : 35.80.110.71 / Your IP : 216.73.216.221 Web Server : Apache/2.4.58 (Ubuntu) System : Linux ip-172-31-21-44 6.17.0-1019-aws #19~24.04.1-Ubuntu SMP Tue Jun 23 18:53:06 UTC 2026 x86_64 User : ubuntu ( 1000) PHP Version : 8.3.31 Disable Function : NONE MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : OFF | Sudo : ON | Pkexec : OFF Directory : /var/www/splitstream/current/config/ |
Upload File : |
<?php
return [
/*
|--------------------------------------------------------------------------
| Decision-rule defaults (Phase 0 calibrated)
|--------------------------------------------------------------------------
|
| 360,000 null-effect simulations (see stats/calibration_results.json)
| identified this tuple as the closest empirical false-positive rate to
| 5% without exceeding it. The plan's draft values (0.95 / 1000 / 15min)
| delivered 66% empirical FP — well outside any defensible target. These
| are inherited by new experiments unless overridden in
| `experiments.decision_rule`.
|
*/
'defaults' => [
'posterior_threshold' => env('SPLITSTREAM_DEFAULT_POSTERIOR_THRESHOLD', 0.995),
'min_sample_per_variant' => env('SPLITSTREAM_DEFAULT_MIN_SAMPLE_PER_VARIANT', 20000),
'snapshot_cadence_minutes' => env('SPLITSTREAM_DEFAULT_SNAPSHOT_CADENCE_MINUTES', 240),
],
/*
|--------------------------------------------------------------------------
| Analysis worker
|--------------------------------------------------------------------------
|
| The analysis worker iterates active experiments every cadence_minutes,
| up to max_concurrent_per_tick experiments in parallel with a
| per_experiment_timeout_seconds budget each. Snapshots that hit the
| timeout are written with status='timeout' and retried on the next tick.
|
| Test env override: set SPLITSTREAM_ANALYSIS_CADENCE_SECONDS to drop the
| cadence to a few seconds so Playwright tests can assert "the dashboard
| visibly updates" deterministically.
|
*/
'analysis' => [
'cadence_seconds_override' => env('SPLITSTREAM_ANALYSIS_CADENCE_SECONDS'),
'max_concurrent_per_tick' => 4,
'per_experiment_timeout_seconds' => 30,
'monte_carlo_draws' => 10000,
],
/*
|--------------------------------------------------------------------------
| Event ingest
|--------------------------------------------------------------------------
*/
'ingest' => [
'redis_buffer_max' => 100000,
'buffer_key_prefix' => 'ss:ingest:buffer:',
'dedup_key_prefix' => 'ss:ingest:dedup:',
'dedup_ttl_seconds' => 30 * 24 * 60 * 60, // 30 days — covers late-event window
'late_event_window_days' => 7, // accepted + counted as late
'too_late_window_days' => 30, // accepted; older rejected with 412
'batch_size' => 500,
],
/*
|--------------------------------------------------------------------------
| API key verification
|--------------------------------------------------------------------------
*/
'api_keys' => [
'pepper' => env('APP_KEY_PEPPER'),
// Octane workers cache verified-by-Argon2 keys for the worker
// lifetime so the Argon2 cost amortizes across requests.
'octane_cache_ttl_seconds' => 3600,
],
];