Public version, edited from our internal record for readers: internal names, file paths and working notes are removed. The internal record is kept, and each step in it was committed with a timestamp and a checksum before the step that followed.
1. The data and the periods
- Source: ANAC's Voo Regular Ativo (VRA) records, one row per scheduled flight, with scheduled and actual gate times and whether the flight was cancelled.
- Build period, January 2024 to August 2025 (20 months): the only history the model was allowed to learn from.
- Test period, September 2025 to May 2026 (9 months), sealed: the model never saw these months. Their actual times and cancellations stayed unread until the single opening.
- Out of time: the model is built on the earlier months and judged on the later ones. (Our US test alternates weeks; this one uses separate periods instead.)
- Times: every time is read on one fixed base (UTC−3, as ANAC publishes) and converted to the airport's own time zone exactly once. Two checks on the build months, described in section 6, confirmed this.
2. What counts as a missed connection
- A connection is the first onward flight a passenger could be sold on the same airline group, or a listed partner, between 25 and 180 minutes after the inbound flight's scheduled arrival, with both flights scheduled that day and the onward flight leaving from the airport where the inbound landed.
- A missed connection means either flight was cancelled, or the real gap after delays was shorter than the model's estimated transfer time for that pair. This is the same definition as our US test.
- Stated limit: ANAC's records hold no passenger data. A missed connection is estimated from the flights' real times and our transfer-time estimate. It is not a count of real passengers.
- Diversions: VRA has no diversion flag. A flight with no recorded arrival that wasn't cancelled counts as missing, and that share is reported. A diversion recorded as a normal arrival can't be seen.
- Single flights: for flights graded on their own, "missed" means the flight arrived 60 minutes or more late, or was cancelled.
3. What was tested
The model is the Brazil connection-grade model as committed before any test prediction was made, with GateCast's grading logic unchanged from the US. Each test was scored separately, so a failure in one couldn't fail another:
- Domestic connections at the hubs selected by a written rule applied to the build months.
- Domestic flights with one end at one of those hubs, graded as single flights (added 25 October, before the model was committed).
- International flights into or out of Brazil's international gateways, graded as single flights.
- International arrivals connecting to a domestic flight, where a missed connection is judged against the model's own estimate of the arrival steps (passport control, bag reclaim, customs, bag re-check). A pass here could only support the flights' delay and cancellation side. It could never confirm the arrival-step times themselves, because the same estimate sets both the grade and the yardstick.
4. The pass bars
- Order: the realised missed-connection rate rises from A to F, with at most one inversion, and only one that lies inside the 95% intervals.
- Calibration: the average gap between predicted and realised rates across grades is at most 3 percentage points.
- Bands: each grade with 500 or more test cases lands within 5 points of the published figure for that grade. (Which figures were used is set out in section 7.)
- Ranking: predicted and realised missed-connection rates are positively correlated, with the 95% interval above zero.
- Coverage: at least 2,000 graded test cases per hub. A hub below that isn't graded.
Intervals come from resampling 7-day blocks of the test period (2,000 resamples, fixed seed), so a bad week counts as one unit. Bars 2 and 3 apply to domestic connections. Single flights use bars 1, 4 and 5, because we publish no per-grade percentage for flights. International-to-domestic connections use bars 1, 2, 4 and 5.
5. Order of work and hard stops
The work ran in a fixed order: the plan, checks on the build months, the test flight table, the model commit, sealed predictions from scheduled times only, then one opening of the outcomes, followed by a second, separate reading of the raw records and a hand check. The plan named stops, any one of which would have ruled out a verdict. They were:
- anyone seeing a delay, cancellation or rate from a test month before the opening;
- a failed time-base check that wasn't fixed before the model commit;
- the model using any test month, for parameters, tuning or the choice of hubs or partners;
- more than 10% of actual times missing at a hub (that hub is dropped);
- any part of the model committed after the opening (it would need fresh months).
A failed bar allows no re-tuning on the test months. A retry needs a new plan on months not yet opened.
6. Checks on the build months, before the model was committed
- Two readers, working separately, agreed. Our own parser of the raw files and the data team's flight table gave identical scheduled times, actual times and cancellations for São Paulo Guarulhos and Manaus in March 2024 (20,252 and 1,886 flights).
- Time base. If the files had been in local time, routes across time zones would show a large one-way difference (120 minutes or more). Across eight such routes over all 20 months, no month came close. The original 15-minute test was too tight to tell weather and scheduling from a time-base error: a same-zone control route alone differed by 20 to 30 minutes. It was replaced by a rule based on the size of a time-base error. This change was made after seeing the build-month results, and it is disclosed here.
- Manaus spot check. No archived 2024–25 Manaus timetable could be found, so the pre-approved fallback was used: 10 Manaus departures from the newest month, compared with published schedules on a third-party flight-tracking site (a disclosed deviation). Nine matched exactly and one was 10 minutes off. No difference was a multiple of 60 minutes, which a time-zone error would produce.
- Two separate counts of connections on August 2025 matched exactly at every candidate hub.
- A dress rehearsal on August 2025, a build month, tested the format and run times. Domestic connections passed bars 1, 2 and 4 there and failed bar 3 against the US figures: Brazilian connections at each grade were missed about half as often. International-to-domestic connections failed calibration by 17 points.
7. Changes made before the opening
Every change below was committed before the test predictions existed, unless it says otherwise. None was made after seeing a test-month outcome.
- 23 Oct, international tests added (owner's decision). Domestic connections, international flights and international-to-domestic connections each get their own verdict.
- 23 Oct, a disclosure. On the day the plan was fixed, a team member counted scheduled flights per airport in June to August 2026 to size the project. No time, status or delay was read, and no test month was opened. In response, the hub and partner choices were made by written rules applied to the build months only.
- 23 Oct, dated sources only. No source covering any part of September 2025 to May 2026 may set a model parameter, even if it isn't ANAC data. Every source must state the period it covers; an unstated period counts as overlapping.
- 23 Oct, layout facts. Facts read in October 2026 about terminals, gates and procedures may be used if they carry no time or delay measured in the test window. Known changes since 1 September 2025 are listed with dates. Two partner agreements that began after the test window count on no test date.
- 23 Oct, time-base check replaced (section 6), and flights placed in the test by their own departure date.
- 25 Oct, a narrower robustness range for international-to-domestic connections. The ends became the model's own 5th and 95th percentiles, because the summed step-by-step highs exceeded the 180-minute window and would have failed by construction. A later rule kept this check reported only unless every high end was at most 150 minutes; none was, so it decided nothing.
- 25 Oct, ungraded cases. Cases the model can't grade (too little history, or no matching flight) stay in the file, show "not graded yet" and are excluded from the bars. Their share is reported.
- 25 Oct, one descriptive table for a launch story: the missed-connection rate for 40–50 minute connections per domestic hub. It was to be released only if domestic connections passed, and it decides nothing.
- 25 Oct, neighbouring grades. For domestic connections, each pair of neighbouring grades is reported, with whether they differ. This is reported only and doesn't decide the pass.
- 25 Oct, domestic flights added as a test, with the international-flight method.
- 25 Oct, Brazil's own figures for bar 3 (owner's decision). The test weeks were split into alternating halves. Brazil's figures are the rates on half 1, and bar 3 checks half 2 against them. This was chosen after the August 2025 rehearsal had failed against the US figures. No test-month outcome had been seen. This choice decided the domestic pass: against the US figures, grades C, D and F would have failed bar 3.
- 25 Oct, grades ship whatever the result (owner's decision). The owner decided that Brazil grades launch regardless, with the result published. A test that fails ships labelled "Provisional" with no per-grade percentage on cards, and this page says what failed. International-to-domestic connections, briefly dropped earlier that day, were reinstated as a published test on these terms.
- 25 Oct, a standing rule (owner's decision). Validation improves the models and does not hold up launches. A failed or pending test means the grades ship "Provisional", with the result published and a fix plan. The test stays exactly as strict.
- 25 Oct, the model commit. The model and its rule files were recorded by checksum before any test prediction. Two inputs to the international-to-domestic test (a customs time with an undated source, and a terminal-move time without a dated archive copy) broke the dated-sources rule. Under a rule fixed beforehand, that test's result is therefore published as "not a clean test", whatever its bars show. Domestic connections use neither input.
- 25 Oct, two changes to how the prediction file was written. One wrote rows in chunks, and the other resumed after a memory stall. Before use, each was shown to give a byte-identical file on a build month.
- 25 Oct, a seal note. While listing the sealed test table, the data team's command printed one flight row with its actual times (one of 714,842). Nothing from it reached the model.
- 25 Oct, the seal. The 4,528,088 test predictions were checksummed and committed. A separate count of cases matched exactly. The outcomes were then opened once, at 16:33 UTC.
8. Owner's decisions after the results (outside the test)
- International-to-domestic connections launched on revised, measured arrival steps from our research team. Cards show a typical time and no percentage, with the grade marked Provisional. This revised model was not tested by this plan.
- Flights recorded with a "Z" prefix. ANAC's registration manual describes Z as a prefix added to avoid a duplicate in its registration. The manual is silent on whether a Z record is the same passenger flight as the numbered flight with the same digits. We treat it as the same flight on our own evidence (the pattern in the records, and checks that two such series were on public sale). These flights are graded Provisional on the history of the same airline's numbered flight on that route, when they depart within 60 minutes of it. This was not tested by this plan.
9. Limits stated with any Brazil result
- Gate times on both sides, as in the US. Diversions recorded as normal arrivals are not visible.
- One test window, September 2025 to May 2026 (southern spring to autumn). A re-test follows on fresh months.
- ANAC's records carry no aircraft registration, so the aircraft type defaults to a narrowbody.
- Several transfer steps, including the 15-minute boarding cut-off, are modelled judgements with no dated source, and are labelled as such.
Flight records: Agência Nacional de Aviação Civil (ANAC), Voo Regular Ativo (VRA), January 2024 to May 2026 (downloaded 23 October 2026) and June to August 2026 (downloaded 21 October 2026), published under a Creative Commons Attribution licence on dados.gov.br. ANAC had no part in GateCast and does not endorse it; grades and figures are Wingmark Analytics' own estimates.
Dados de voos: Agência Nacional de Aviação Civil (ANAC), Voo Regular Ativo (VRA), janeiro de 2024 a maio de 2026 (obtidos em 23 de outubro de 2026) e junho a agosto de 2026 (obtidos em 21 de outubro de 2026), licença Creative Commons Atribuição (dados.gov.br). A ANAC não participa do GateCast nem o endossa; as notas e os números são estimativas da Wingmark Analytics.
Checksums (SHA-256): test flight table 5fd945a2…, sealed predictions 76faaf3f…846d, outcomes 3e00a73d….
Plan fixed 23 October 2026; results opened 25 October 2026. Public version prepared 2 November 2026.