Release validation protocol
Protocol v2 is frozen before the release study runs. Its SHA256 is retained in the results. Changes to the protocol require a new version and a separate run. This is a bounded release screen, not a claim of nominal coverage on all data.
The v2 amendment changes the candidate identifier only. Estimands, data generation, seeds, budgets and decision rules remain those frozen in v1. The rerun checks the reviewed numerical correction.
Scope and invariants
The candidate is 0.4.0rc2. Primary scope is two-arm complete or prespecified stratified randomisation and equal-geo parallel DiD or Lift. Analytic intervals, BCa intervals and sharp-null tests receive separate evidence assessments. CRT and staircase inference remain experimental. No CRT power is claimed. Original trial allocations must remain unchanged when upgrading.
Independent numerical references
Check the public parallel analysers against separately computed stratum-weighted contrasts, variance, degrees of freedom and intervals. Enumerate a small finite population with heterogeneous potential outcomes to check unbiasedness and the Neyman variance identity. Enumerate all permitted allocations under a sharp null to check exact-test size. Check BCa against an independently assembled bootstrap and delete-one jackknife calculation. These are numerical references, not an independent human review or simulation evidence.
Check that incomplete windows cannot silently remove eligible geos from power scenarios. Invalid panels, allocation changes, zero Lift baselines and undefined variance must fail visibly. Repeated calls must preserve seeds and float64 data.
Simulation matrix
Use 250 repetitions in each of twelve data-generating cells. Each panel is analysed with both DiD and Lift, each with analytic and BCa intervals. The analytic call also requests a sharp-null randomisation test. This gives 12,000 public analysis calls. Use 999 bootstrap and 999 randomisation draws per call. Exact enumeration applies when the allocation space fits that budget.
All panels have eight dates, four baseline and four test. Untreated outcomes contain a geo intercept, common linear time trend and AR(1) disturbances with coefficient 0.6. Allocation is drawn independently of outcomes with fixed arm counts in each stratum. Potential outcomes and random seeds are retained through the fully specified generator. Each scenario has zero and positive intervention cells.
Scenario |
Geos |
Distinctive condition |
Role |
|---|---|---|---|
regular |
40 |
Normal errors, positive stable baselines |
Core |
unequal_strata |
40 |
Strata of 17 and 23, different trends and variances |
Core |
few_geos |
12 |
Six geos per arm |
Stress |
unequal_variance |
40 |
Geo error scales from 2 to 15 |
Stress |
heterogeneous_effect |
40 |
Geo effects from zero to twice the nominal effect |
Stress |
unstable_baseline |
40 |
Positive baselines spanning several orders of magnitude |
Stress |
The positive nominal effect is five outcome units. It is constant except in the heterogeneous-effect scenario. The truth for DiD is the finite-population mean of geo effects. The truth for Lift is the mean of geo effects divided by their realised pre-treatment baseline means. This is not a ratio of population totals. The zero-effect cell is the sharp null for both methods. Rejection under the positive cell is descriptive; it has no release power threshold.
Use master seed 20260912 and separate deterministic streams for cells, repetitions, outcomes, allocations and resampling. Do not select seeds after seeing results. Save every replicate’s estimate, truth, interval, p-value and failure status, plus software versions and source hashes. Record bias, bias Monte Carlo standard error, RMSE, interval width, coverage, null rejection and 95% Wilson Monte Carlo intervals. No failed replicate may be silently discarded.
Decision rules
Numerical references and input-contract checks must pass.
Any unexpected failed fit in a core simulation cell blocks its method’s core approval. Failed stress cells restrict scope and must be disclosed.
Bias must be within four Monte Carlo standard errors of zero. This is an investigation trigger, not evidence that bias is exactly zero.
For coverage, a 95% Wilson lower bound of at least 0.90 passes this minimum screen. An upper bound below 0.90 fails; other results are inconclusive.
For sharp-null rejection, a 95% Wilson upper bound of at most 0.10 passes this minimum screen. A lower bound above 0.10 fails; other results are inconclusive.
These tolerances detect material miscalibration with a bounded run. They do not certify 95% coverage or exactly 5% size. Also flag any coverage upper bound below 0.95 or null-rejection lower bound above 0.05 for methodological review.
A failed or inconclusive core method remains experimental. Stress failures do not justify changing the acceptance criteria or rerunning preferred seeds.
CRT, staircase and BCa receive no approval by association with analytic DiD. BCa p-values remain analytic unless a randomisation test was requested; BCa interval coverage and p-value size are separate assessments.
Budget the study for at most 30 minutes on the local machine. If it exceeds that budget, retain partial evidence and mark remaining cells unexecuted. Do not reduce the frozen repetitions and describe the reduced run as completed.
Operational and packaging gates
Run the full software suite, all CLI analysers, a complete saved-allocation workflow, documentation with unsuppressed broken-reference warnings, and wheel and source-distribution installation outside the checkout. Test Python 3.11 and 3.12 in clean environments. Resolve dependencies from one package contract and retain the installed versions. Do not claim other interpreter versions tested.
Missingness, interference, non-adherence, adaptive stopping and outcome-driven allocation changes remain outside the release’s automatic causal guarantees. Document the minimum retained design and decision record. A release candidate is a review artefact; this protocol does not authorise publication or deployment.