Assumptions
Everything the model believes, stated before the math. If you do not buy one of these, do not buy the output.
- Feature definitions are frozen (ew-features-1.0) and dated observations are event time, not ingestion time - features are frozen before outcome testing.
- No out-of-time validation sample exists in the corpus, so every indicator is DIAGNOSTIC, never predictive. False-positive and missed-event rates print as honest UNKNOWNs.
- Source silence is reported as source health, never as project deterioration.
- Repeated versions of one filing dedupe to one signal (by type + date/content key).
- Removing the precursor removes the signal: every warning lists the dated observations behind it.
Derivation
Three indicators, each a dated, repeatable feature over the record:
- Overdue milestones: a dated past event whose completion is unconfirmed (unknown_reasons non-empty), deduplicated by (type, date) so refiled versions count once.
- Unacknowledged alerts: alerts not yet acknowledged by an analyst, deduplicated by (type, what_changed); the presence of material-class language (breach, termination, cancellation, default) is flagged.
- Source silence: records exist but no dated observation this calendar year - reported as a source-coverage gap, never as deterioration.
Escalation maps from the signals: any material-class unacknowledged alert forces MATERIAL; two or more signals map to INVESTIGATE; otherwise WATCH. A project with no milestones, alerts or evidence on record is UNKNOWN - thin history yields UNKNOWN, not a predictive state:
Every signal carries its dated observations, the affected model input (which model's priors the signal bears on), disconfirming evidence, and the next required observation - the warning is a request for a specific fact, not a mood.
Identification strategy
Why the estimate supports the claimed meaning - and where the model refuses to claim more than the data carries.
- The model withholds predictive language by policy: with no out-of-time validation sample, it cannot know its false-positive or missed-event rates, and it prints both as UNKNOWN rather than implying performance it has never measured.
- Features are frozen before outcome testing and versioned (ew-features-1.0), so a signal's definition cannot drift to fit what later happened - the same discipline as freezing a cohort before reading outcomes.
- Source silence is separated from deterioration: an absent observation is a statement about the feed, not about the project, and conflating the two would manufacture distress signals from coverage gaps.
- Dedupe by type + date/content key keeps one refiled 8-K from reading as five separate warnings.
Inputs and outputs
Reads
- Milestones
- Dated milestone records with unknown_reasons for unconfirmed completion
- Alerts
- Alert records with acknowledgement state, fired_at, what_changed
- Evidence
- Evidence records for thin-history detection
Writes
- Escalation state: WATCH / INVESTIGATE / MATERIAL / UNKNOWN, with confidence LOW
- Signals, each with dated observations, affected model input, disconfirming evidence, next required observation
- False-positive rate and missed-event rate: UNKNOWN, with the reason printed
Calibration and gate evidence
Validation design
- None claimed: no out-of-time validation sample exists in the corpus, so predictive performance is unmeasured by design and every signal is DIAGNOSTIC_ONLY.
- When an out-of-time sample exists, the false-positive and missed-event rates become estimable; until then the page prints UNKNOWN.
Evidence on record
- Smoke gates at seal (7 m24-specific): escalation state present or honest UNKNOWN; every signal DIAGNOSTIC_ONLY; signals carry dated observations plus affected model input; false-positive and missed-event rates print as UNKNOWN; thin history is UNKNOWN, not a state; determinism; audit row written.
Gates at seal
- smoke: 7 m24 gates incl. determinism + audit row (suite counts at seal per the build agent's seal report)
- tsc clean; standing caveat: no OpenAI key in the build box, adapter paths unexercised
Failure modes
The ways this model declines, degrades or goes UNKNOWN - and what it prints when it does.
- Thin history (no milestones, alerts or evidence): escalation UNKNOWN with reason - the model refuses to grade a project it cannot see.
- Missing project record: signals are computed from linked collections only, and the assumption is printed on the run.
- Alerts without fired_at dates contribute no dated observations; undated warnings cannot fire.
Sensitivity
- The MATERIAL override rests on material-class language matching (breach, termination, cancellation, default); alert taxonomies that phrase materiality differently would need the classifier re-ruled.
- Escalation thresholds (2 signals for INVESTIGATE) are policy; they trade alert fatigue against missed stacking signals.
Iron rules
Every indicator is DIAGNOSTIC, never predictive; false-positive and missed-event rates print as honest UNKNOWNs.
Source silence is source health, never deterioration. Removing the precursor removes the signal.
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.