Assumptions
Everything the model believes, stated before the math. If you do not buy one of these, do not buy the output.
- The only approved design is matched difference-in-differences; there is no generic causal button.
- Matching uses pre-treatment fields only - project type, state, capacity tercile. Post-event variables can never enter the match key.
- Co-movement alone never activates causal language: IDENTIFIED requires the pre-trend, placebo, overlap, and minimum-cell checks to pass.
- A scenario output is never relabeled causal evidence.
- Censoring is printed via cell counts, never imputed.
- An instrumental-variables request is refused absent a documented exclusion argument - no IV design exists in the registry.
Derivation
Treated subjects are the projects carrying the shocked object (node, sponsor, or queue request). Controls are projects that do not carry it but share a treated unit's pre-treatment match key - type, state, and capacity tercile - so every treated cell with overlap gets a comparison group drawn from how projects looked before the event, never after.
The effect is the difference-in-differences of withdrawal rates, treated minus control, net of the same difference before the event:
Three diagnostics gate the estimate before it may print. The pre-trend check compares pre-event milestone activity between treated and controls with a two-proportion z (pass: |z| < 1.96) - if the groups already moved differently before the event, the design fails. The placebo re-runs the design with the event shifted one year earlier - a significant placebo effect means the design is picking up something other than the event. Overlap requires at least 5 matched controls and 5 resolved outcomes per cell; below that, censoring is printed and no number is released.
Identification strategy
Why the estimate supports the claimed meaning - and where the model refuses to claim more than the data carries.
- The identification contract is the gate, not the arithmetic: any failed assumption - malformed event date, no treated subjects, poor overlap, failed pre-trend, significant placebo, thin cells - returns NOT_IDENTIFIED with every failed assumption named, and the effect prints as UNKNOWN with the reason, never as a number.
- Pre-treatment-only matching is the anti-contamination rule: because the match key is built from fields fixed before the event, the event itself cannot decide who looks like a control.
- The placebo is the falsification channel: shifting the event a year earlier asks the design to find an effect where none should exist, and a significant result kills the estimate.
- The hidden-bias note prints with every estimate: matching is on observables only, so bias from unobserved confounders is unbounded - the interval is labeled optimistic by construction.
Inputs and outputs
Reads
- Causal event
- A shocked object (node, sponsor, or queue request) with an event date and direction
- Project statuses
- Resolved / censored status per project; censoring printed, never imputed
- Milestone history
- Dated milestone events, used for the pre-trend diagnostic on pre-event activity
- Pre-treatment fields
- Project type, state, capacity tercile - the only permitted match keys
Writes
- Identification verdict: IDENTIFIED or NOT_IDENTIFIED with failed assumptions named
- Treated and matched-control cohorts with the match keys and overlap note
- Pre-trend diagnostic (rates, z, pass) and placebo (shifted date, effect, significance)
- The DiD estimate with standard error and 95% interval - only when identified
- Hidden-bias sensitivity note with every estimate
Calibration and gate evidence
Validation design
- Validated by construction gates: a run with no treated subjects must return NOT_IDENTIFIED naming that failure, and a failed design must yield an UNKNOWN effect, never a number.
Evidence on record
- Smoke gates at seal (10 m27-specific): the only design is the approved matched DiD; the identification verdict is explicit; NOT_IDENTIFIED names the failed assumptions; matching is restricted to pre-treatment fields; pre-trend and placebo print; failed identification yields an UNKNOWN effect, never a number; the hidden-bias note prints; no treated subjects returns NOT_IDENTIFIED; determinism (identical input hash on re-run); audit row written for every run.
Gates at seal
- smoke: 10 m27 gates incl. no-treated NOT_IDENTIFIED, determinism + audit row (suite counts at seal per the build agent's seal report)
- sealed at d7a7dc6b on atlas-nl-shock-redesign
Failure modes
The ways this model declines, degrades or goes UNKNOWN - and what it prints when it does.
- No treated subjects carry the shocked object: NOT_IDENTIFIED, named.
- Fewer than 5 matched controls or 5 resolved outcomes per cell: no estimate released; censoring printed via cell counts.
- No pre-event history in the record: parallel movement cannot be checked and the design fails.
- Pre-trend or placebo failure: the estimate is withheld and the failed diagnostic is named.
Sensitivity
- Capacity terciles are the coarsest match key: within a tercile, a very large treated project can sit against much smaller controls, and the estimate carries that heterogeneity.
- Matching on observables only means hidden bias is unbounded - the printed note treats every interval as optimistic, which is the honest reading of an observational design.
Iron rules
Co-movement alone never activates causal language.
A scenario output is never relabeled causal evidence. Failed identification prints UNKNOWN with the failed assumptions named, never a number.
Source and audit
Written from the sealed model source. Every run is recorded - model version, frozen inputs, input hash, timestamp. There is no unrecorded model execution.