Sentinel reads the same public radio signals anyone with a thirty-dollar antenna can read. Then it does the work of paying attention.
This page documents what Sentinel measures, where its data comes from, what it claims, what it explicitly does not claim, and how to reproduce any of its findings yourself. It exists because institutions cannot subscribe to systems they cannot audit.
| Section | What it answers | Time |
|---|---|---|
| The signals | What we measure | 4 min |
| The sources | Where the data comes from | 6 min |
| The model | How signals become a Sentinel Score | 8 min |
| The gauntlet | How false positives are filtered | 5 min |
| The corroboration | How receipts are cross-verified | 4 min |
| The disclosures | What we don't claim | 3 min |
| The errata | Where we've been wrong | (live) |
| The bibliography | Source registry, public APIs, prior art | 5 min |
The signals
Sentinel watches four things, and only four things. Each is computed from public data, each has a formal definition, and each has known blind spots. The four signals are deliberately independent: a real event tends to move several of them at once; a data artifact tends to move only one.
Sudden surge
Surge measures deviation from the baseline take-off rate for a region, per hour-of-week. The question it answers is narrow: are meaningfully more private aircraft leaving this region right now than this region's own history says is normal for this hour, this weekday, this season? The baseline window is 90 days.1
Known limits. Surge is weakest where baselines are sparse: small regions with few flights per day produce noisy baselines, and airports that recently opened or changed role have no history at all. In both cases the gauntlet's data-trust gate suppresses the signal rather than guessing.
Tight clustering
Clustering measures whether the departures that make up a surge are bunched in time more tightly than coincidence allows. The exposed window is 47 minutes of lookback — not a round number, because it was not chosen by hand. It is the 99.6th percentile of inter-departure gaps for same-cohort aircraft in the 90-day archive.2
Known limits. Large hubs at peak hour bunch departures for boring reasons — slot scheduling, weather windows, curfew edges. Clustering alone is therefore never sufficient; it contributes 25% of the composite and cannot cross an alert threshold on its own.
Going everywhere
Scatter measures destination entropy: whether the cohort is dispersing in many directions rather than converging on one place. Convergence is almost always explainable — a conference, a funeral, a final. Dispersal from a common origin, by unrelated parties, inside a tight window, is the rarer and more informative shape.3
Known limits. Small cohorts saturate quickly — with three aircraft, "everywhere" and "coincidence" are hard to distinguish, which is one reason the cohort floor for any published receipt is higher than three.
Independent decisions
Independence asks whether the cohort's members actually decided separately. Seven jets owned by one charter operator is one decision; seven jets owned by seven unrelated principals is seven. We resolve aircraft to beneficial-owner classes through registries and state business filings, unwinding shell entities where the paper trail is public.4
Known limits. Recently restructured ownership trees lag the public record by days to weeks; an aircraft sold last Tuesday may still resolve to its old owner. Trust-heavy jurisdictions (Delaware, South Dakota, Nevada, Wyoming) resolve more slowly and sometimes only to the trust, not through it. When resolution confidence is low, independence is scored conservatively downward, never upward.
The sources
Every input to Sentinel is listed below — there are no others. The licensing column is written for the person whose job is to check it. Sortable by column.
| Source | Coverage | Licensing | Refresh | Used in |
|---|---|---|---|---|
| ADS-B Exchange | Global ADS-B, no LADD/PIA suppression | Community-sourced; commercial API under ADSBx data license; attribution required | live / hourly batch | Eagle Eye · surge · clustering |
| airplanes.live | Community ADS-B, unfiltered | Community-sourced; attribution required | live | Eagle Eye redundancy |
| OpenSky Network | Global ADS-B/Mode S, research-grade history | OpenSky ToS; research use; commercial terms [placeholder — agreement pending] | 5s live / full history | baselines · calibration |
| FAA N-number registry | US aircraft ownership | Public records, no license required | daily batch | owner resolution |
| EASA aircraft registry | EU member-state aircraft | Public records, per-state retrieval | weekly | owner resolution (EU) |
| ICAO aircraft registry | ICAO 24-bit address allocations | Public standards data | monthly | hex → registration mapping |
| AIS — MarineTraffic public layer | Global vessel positions | API ToS-compliant, rate-limited; public display layer | 1–5 min | vessel cross-ref |
| AIS — raw receiver network | Coastal VHF AIS | Self-operated receivers; broadcast data, no license required | live | vessel cross-ref |
| State business filings (50 states + DC + 4 territories) | US entity registrations | Public records; per-portal ToS observed | daily–weekly | ownership trees |
| Delaware Division of Corporations | DE entities (trust prevalence carve-out) | Public records; paid expedited lookups | daily | ownership trees |
| GLEIF LEI registry | Global legal entity identifiers | CC0 public data | daily | entity resolution |
| SEC EDGAR | US ownership disclosures | Public records; fair-access limits (10 req/s) | live index | ownership · sector pressure |
| OFAC sanctions lists | SDN + consolidated lists | Public records, no license required | daily | source-of-funds screens (entities only) |
| GDELT 2.0 | Global news event database | Open data; attribution requested | 15 min | news heat · known-cause gate |
| Common Crawl news index | Web news corpus | Open data (Common Crawl ToU) | daily news crawl | news-lag verification |
| News API aggregator | Headline index, top 200 outlets | Commercial license; ToS-compliant, 60 req/min | live | news lag |
| X public sample API | 1% public sample | Platform ToS-compliant; attention-velocity only; no user-level storage | live | attention asymmetry |
| Reddit public listing API | Public posts and listings | Platform ToS-compliant; OAuth rate limits | 1 min | attention asymmetry |
| Substack public RSS index | Newsletter publication activity | Public RSS, no license required | hourly | attention asymmetry |
| Wikipedia edit activity | High-signal page revisions | CC BY-SA; open API etiquette limits | live (EventStreams) | attention asymmetry |
| NOAA weather feeds | US watches, warnings, storm tracks | US public domain | live | known-reason gate |
| EUMETSAT | European weather | EUMETSAT data policy, free tier | live | known-reason gate |
| USGS earthquake feed | Global seismic events | US public domain | live | known-reason gate |
| GLIDE disaster registry | Disaster identifiers | Open data (ADRC public registry), no license required | daily | known-reason gate |
| CME / ICE / OPRA public EOD feeds | Derivatives end-of-day summaries | Exchange public EOD ToS; delayed data only | daily | capital pressure |
| LSEG public M&A announcements | Deal announcement press layer | Public press layer | live | known-event gate |
The full source registry, with rate limits and ToS links, is also available as JSON at sentinel.app/method/sources.json.
The model
Composite scoring
The four signals combine into a single Sentinel Score on [0, 1]:
In plain English: a surge that is also tightly bunched matters most; where the cohort went and whether its members are unrelated each refine the picture. Below 0.40 the system stays quiet; 0.40–0.85 is a Heads Up; at or above 0.85, and only after the gauntlet and a human review, a Red Alert.5
The weights are not aesthetic. They were calibrated by maximizing precision at fixed recall on a manually labeled historical set of n = 240 events spanning 2023-Q4 through 2026-Q2, each labeled by two reviewers with disagreements adjudicated by a third. The labeled set, with identifying details removed, accompanies the classifier repository.6
The gauntlet
A score is not an alert. Every candidate above threshold runs through five rejection gates, in fixed order. In the last 90 days, the gauntlet rejected 99.87% of candidate alerts. The five gates rejected, in order of frequency: known-event (62%), data-trust (18%), same-company (11%), known-cause (7%), weekend (2%).7
| Gate | Definition | Example pass | Example fail (rejected) |
|---|---|---|---|
| Known event | Candidate window overlaps a calendared gathering for this cohort or region | No calendar match within 200 nm | 100 jets into Geneva in late January — Davos |
| Weekend / habit | Movement matches the cohort's standing seasonal routes | Monday 07:31, no habitual route match | LA→Aspen, Friday 3pm, ski season |
| Known cause | A public hazard or news event already explains the movement | No NOAA/USGS/wire match at T+0 | Gulf Coast departures during a named storm |
| Same company | Cohort collapses to fewer than the minimum independent deciders | 7 distinct ownership trees | 8 aircraft, one charter operator repositioning |
| Data trust | Fewer than 3 independent receivers per track, or jamming signatures present | Median 7 receivers per track | Garbled transponder cluster, single receiver |
Cross-modal corroboration
Aircraft movement is cross-checked against vessel movement in the window T−12h to T+1h: a cohort scatter accompanied by unusual yacht departures from the same region is materially stronger evidence than either alone. Both are then checked against news lag in the window T+0 to T+24h — if the press never catches up, the event is either small or was never real, and that outcome is recorded against the receipt either way.
The false-positive rate with and without vessel corroboration on the labeled set: [placeholder — research pending; published with the Q4 2026 calibration]. We will not state this number until the labeled set is large enough that it means something.
The Pulse layer
Pulse, the daily divergence surface, consumes the same four signals plus a news-heat layer and classifies every region and sector into exactly four states: red (news ≥ 0.55 and movement ≥ 0.55), white (news ≥ 0.55, movement < 0.35), sentinel (news < 0.35, movement ≥ 0.55), and quiet (everything else, including the deliberate dead zones between thresholds).8
Divergence states are coarser than the underlying signals, and that is deliberate. Pulse is for situational awareness, not precision; the receipt — with its full signal values, gauntlet record, and hash — remains the only artifact Sentinel asks anyone to rely on.
Calibration
Weights, gate rules, the clustering window, and corroboration windows are recalibrated quarterly against the growing labeled set, reviewed by the research team named at the end of this document, and frozen for the quarter. Every change — including changes that made the system look worse — is logged publicly at /method/calibration-log. A receipt is always evaluated under the calibration that was live when it was published; that is what makes old receipts reproducible.
config/thresholds.json in the classifier repository.docs/calibration.md [placeholder — published with the repo].PROPOSAL_PULSE_API.md) and serve from /v1/pulse/*.Reproducibility
The worked example below reproduces receipt SF-2026-06-08-0731 — the
seven-aircraft Bay Area scatter of June 8, 2026 — from public records alone.
- Pull the raw ADS-B feed for the Bay Area bounding box (
-123.1, 36.9, -121.3, 38.4) between2026-06-08T06:30Zand08:30Z, from ADS-B Exchange or your own receiver. The same window is retrievable from the OpenSky historical archive. - Filter for departures only: tracks transitioning from ground to positive climb within the box (the classifier repo gives the exact altitude-gate sequence).
- Resolve N-numbers to owner classes: FAA registry for the registration, then Delaware / Wyoming / Nevada / South Dakota business filings (plus GLEIF) to unwind the shell entities. Seven distinct trees should emerge.
- Compute the four signal values for the 07:31–08:18 PT cohort using the definitions in the signals section. Expected: surge 0.89, clustering 0.93, scatter 0.96, independence 0.87.
- Run them through the same classifier — open-source at github.com/GOUD-watch/classifier (at v0.9 the repository carries the full algorithm in executable pseudocode). Expected composite: 0.91, gauntlet pass on all five gates.
- Compare against the published receipt hash:
sha256:b71f8e…c20429. The hash covers the signal values, the gauntlet record, and the calibration version — reproduce those, and the hash reproduces.
Every receipt published since v0.9 launch is reproducible by this exact procedure. If you reproduce a receipt and reach a different conclusion, email dispute@sentinel.app and we will publish the discrepancy in the errata.
The disclosures
What Sentinel does not claim:
- Sentinel does not predict the future. It reports what has happened, after it has happened, with provenance.
- Sentinel does not provide investment advice. Receipts describe public observable events; what a recipient does with that information is their decision and their responsibility.
- Sentinel does not identify individuals. We track cohorts of ≥ 10 members; no receipt, public page, or alert names a natural person.
- Sentinel does not access private data. Every signal we use is broadcast under federal mandate or sourced from public records.
- Sentinel does not surveil its users. We do not sell user data, embed third-party tracking, or build a per-user behavior model.
- Sentinel does not guarantee delivery latency. Our published median news-lead time is a historical average, not a service-level commitment.
- Sentinel does not claim 100% recall. Some real events will not generate receipts; some receipts will, in retrospect, be false positives. The published precision and recall are both quarterly-recalibrated.
- Sentinel does not operate in classified domains. We accept no classified data and produce no classified output.
- Sentinel does not take money from any institution it observes. Family offices, hedge funds, and corporate entities may subscribe to receive receipts; none may subscribe to influence which receipts are produced.
- Sentinel does not negotiate the contents of its receipts. If a receipt is published, it has passed the gauntlet; we will not unpublish a passing receipt under pressure.
- Sentinel does not promise the model is static. Signal weights, gauntlet rules, and corroboration windows change quarterly with calibration; all changes are logged.
- Sentinel does not exempt itself from these disclosures. If you ever see Sentinel violate one, email accountability@sentinel.app.
The errata
Every published correction or retraction since launch, served live from the same archive the receipts come from.
loading errata…
Bibliography & prior art
- RTCA. DO-260B: Minimum Operational Performance Standards for 1090 MHz Extended Squitter ADS-B and TIS-B. RTCA, 2009. rtca.org
- Schäfer, M., Strohmeier, M., Lenders, V., Martinovic, I., Wilhelm, M. "Bringing Up OpenSky: A Large-scale ADS-B Sensor Network for Research." IPSN 2014. opensky-network.org
- Olive, X. "traffic, a toolbox for processing and analysing air traffic data." Journal of Open Source Software 4(39), 2019. doi:10.21105/joss.01518
- Olive, X., Basora, L. "Detection and identification of significant events in historical aircraft trajectory data." Transportation Research Part C 119, 2020. doi:10.1016/j.trc.2020.102737
- Strohmeier, M., Smith, M., Lenders, V., Martinovic, I. "The Real First Class? Inferring Confidential Corporate Mergers and Government Relations from Air Traffic Communication." IEEE EuroS&P 2018. ieeexplore.ieee.org
- Yermack, D. "Flights of fancy: Corporate jets, CEO perquisites, and inferior shareholder returns." Journal of Financial Economics 80(1), 2006. doi:10.1016/j.jfineco.2005.05.002
- FAA. Limiting Aircraft Data Displayed (LADD) program documentation. faa.gov/pilots/ladd
- FAA. Privacy ICAO Aircraft Address (PIA) program. faa.gov
- Silverman, C. (ed.). Verification Handbook: A Definitive Guide to Verifying Digital Content for Emergency Coverage. European Journalism Centre, 2014. verificationhandbook.com
- Bellingcat. Bellingcat's Online Investigation Toolkit. bellingcat.com/resources
- Leetaru, K., Schrodt, P. "GDELT: Global Data on Events, Location, and Tone, 1979–2012." ISA Annual Convention, 2013. gdeltproject.org
- Common Crawl Foundation. Common Crawl news corpus. commoncrawl.org
- GLEIF. Legal Entity Identifier (LEI) system documentation. gleif.org
- ITU. Recommendation ITU-R M.1371-5: Technical characteristics for an automatic identification system (AIS). 2014. itu.int
- Denev, A., Amen, S. The Book of Alternative Data. Wiley, 2020. wiley.com
Authors and reviewers
Research lead · R.O.
Former NTSB air-safety analyst, eleven years on surveillance-data investigations. Built the baseline and surge models; owns the quarterly calibration and signs every Red Alert review log.
Provenance & legal method · D.K.
Former financial-crimes prosecutor. Designed the ownership-resolution pipeline through state filings and GLEIF, and wrote the licensing column of the source registry — the part your counsel reads.
Verification editor · A.M.
Former open-source intelligence editor at an international verification desk. Owns the gauntlet's editorial standards, the errata process, and the dispute inbox. Has personally rejected more receipts than the model has.
Calibration & statistics · S.V.
Former econometrics researcher. Responsible for the labeled set, the precision/recall reporting, and for refusing to publish any number this document marks as research-pending.
External review board: this document has been reviewed by [placeholder — academic affiliations, journalism organizations, and policy reviewers are named at sentinel.app/method/reviewers when confirmed].
This is version v0.9 of the Sentinel Method document. The full revision history is at /method/changelog. The calibration log is at /method/calibration-log. The next scheduled review is Q4 2026.
If your institution's compliance, legal, or editorial-standards team has questions this document does not answer, email method@sentinel.app. We answer every inquiry within five business days, in writing, and we publish the answer (anonymized) at /method/inquiries when the answer has general interest.