KBM Nexus Flight Service
Operations analysis

Data readiness

Before any prediction is tested, the records behind it have to be checked. This page shows that check working on invented records. It answers one question: are these records well formed and honestly described? It does not say whether any prediction works.

A checking demonstration, on synthetic records. No stored timing record, call, transcript, recording or configuration was read. Live data is not connected, and nothing here reads it. Passing these checks does not make records fit to learn from or to score, and neither says a model is any good. Back to Predictions · Review guide
Predictive readiness is not assessed. Whether these records could support a fair test of a prediction is unavailable. See the panel below.

The synthetic set through the gate

Synthetic
Records processed
1,146
synthetic, from 276 reads
Structurally valid
1,146
1,146 complete
Excluded records
0
invalid or conflicting records
Predictive validation
Not assessed
not what this page checks
Request coverage
Not known
No independent request total supplied

Passes every structural check Declared synthetic. Passing means the records are well formed. It does not mean any prediction works.

The structural checks on the synthetic set
CheckResultWhat was seen
The validator knows exactly the fields the registry listsPass41 fields
Every store read could be used: none missing, unreadable, empty, without the guard, all damaged, or not the reader's shapePass276 reads: 276 ok
No line failed to open. A line that fails is a record of unknown content, not an absent onePass0 damaged lines
Every record passed the strict schema, allowlist, time and consistency rulesPass0 of 1146 processed failed a rule (0 excluded alone, 0 inside conflicting groups)
No request identifier appears with different contents (identical repeats are collapsed and counted)Pass0 conflicting groups, 0 identical repeats collapsed
Every kept record is complete: none cut short by the service, none with an unclosed groupPass0 incomplete of 1146
Every kept record has an ingestion time that could have held itPass0 without one
The declared provenance is not contradicted by what the identifiers look like. Declared provenance is a label, not proofPassdeclared synthetic

What the gate looks at

Synthetic
What the gate looks at
CheckWhat it catchesWhat happens
TypesA number is a number, a yes or no is a real true or false, and a time is a real UTC time. Something that only looks like one, such as the text "false", is refused.Excluded
The allowlistOnly the fields the contract lists, holding only the values it allows. Anything else is refused, including text that looks like an identifier, and the name of an unlisted field is never shown.Excluded
Times and orderSteps happen in order and nothing ends before it starts or after the request ended. Records may be written out of start order, so that is not refused.Excluded
ConsistencyCounts add up, flags agree with the numbers they summarise, and a group cannot list more transfers than URLs it asked for.Excluded
Missing is not zeroA value the service may leave empty is unknown, and is never counted as zero. A failed transfer that measured 0 ms is called not measured.Noted
DuplicatesAn identical repeat is counted once. The same identifier with different contents, even only a different type, excludes every copy, whichever came first.Collapsed, or excluded
Cut short and damagedA record the service cut short is valid but marked incomplete. A line that would not open is counted, never guessed at, and the set stays visibly partial.Marked
When it could be usedAvailability is the time the reader ingested the record. It is never worked out from the record's own stamps or the file's time.Recorded
Where it came fromEach batch carries one declared label, synthetic or measured, given by whoever supplies it. The gate does not verify that the label is true.Labelled

Broken and unusual records

Synthetic

Each row is an invented record, or set of reads, with one thing wrong or one thing unusual. 38 of 38 behave as they must. A record that fails is excluded whole: nothing is repaired, and it never reaches the kept set.

Valid, and must be kept
CaseWhat was doneKeptExcludedWhat the gate saidAs it must
A clean setTwelve well-formed records in two reads.120Nothing to reportYes
The same day file read twiceEvery record appears again in a later read. That is a repeat, not new evidence: it is counted once, and known from the first read.120Nothing to reportYes
Records written out of start orderA record that started earlier is written after one that started later. Nothing requires a file to be in start order (a long request is written when it finishes), so this is not rejected.120Nothing to reportYes
A flight-plan check with nothing to listNo stages, cache events or lookup groups: the lists are empty, and that is valid.120Nothing to reportYes
Fewer transfers than URLs asked forA group asked for 4 addresses and lists 3 transfers. A failed measurement can cause that, so it is valid.120Nothing to reportYes
Identifiers made only of digitsValid identifiers that look like numbers, including one that looks like a number in scientific notation. They stay identifiers.120Nothing to reportYes
Valid but marked
CaseWhat was doneKeptExcludedWhat the gate saidAs it must
Values the writer may leave emptyThe clock gap before the script, the HTTP status and the hand-off time are empty. They are unknown, and are never counted as zero.120Missing is not zeroYes
A record the service cut shortA list reached its limit of 64 and the service said so. It is well formed, but it is not complete.120CompletenessYes
A group of lookups never closedThe end and duration of one group are empty. How long it took is unknown, and is not zero.120CompletenessYes
No ingestion timeThe read carries records but no time when it was ingested. Nobody can say when they could first have been used, and none is guessed from their own stamps.120AvailabilityYes
Read before it existedThe read says it was ingested before any of its records were assembled. Those clocks disagree, so no availability is claimed. (A read that is only earlier than some of them is believed for the rest.)120AvailabilityYes
Bad record, must be excluded
CaseWhat was doneKeptExcludedWhat the gate saidAs it must
A time written as textA cache time is the text "310.0" instead of a number. Some code would quietly accept it.111SchemaYes
A yes/no written as textA cache hit is the text "false". Read loosely it counts as a hit.111SchemaYes
A count written as a yes/noA time-to-live is true instead of a whole number of seconds.111SchemaYes
A field nobody listedA top-level field the contract does not have, holding a tail-number-like text. It is not kept, and its name is not shown.111AllowlistYes
A field nobody listed, inside a groupAn extra field inside the request block. Nested fields are held to the same list.111AllowlistYes
A feed name nobody listedA lookup counted under a name that is not one of the fixed feed names. The name is a field name in disguise, so it is not shown.111AllowlistYes
Contact-like text in a fixed-name fieldThe purpose field holds text with a tail number, a place and a phone-like number. It may only hold a fixed name.111AllowlistYes
An airport in a stage nameA stage name that carries an airport identifier.111AllowlistYes
An empty value where one is neededThe request time is empty. A request time that is unknown cannot be treated as short.111SchemaYes
A required block is missingThe whole budget block is gone. An empty list is fine; an absent block is not.111SchemaYes
A date that does not existThe start time is 30 February.111TimeYes
Finished before it startedThe record says it was put together before the request began.111TimeYes
Stages out of sequenceA later stage is stamped earlier than the one before it.111TimeYes
A group that ends before it startsA lookup group ends at 100 ms after starting at 300 ms.111SchemaYes
Counts that disagreeFive transfers, of which one worked and one failed.111ConsistencyYes
Skipped, yet transfers recordedA group marked as skipped for lack of time that also lists transfers, and the skip count does not match.111ConsistencyYes
Says it was cut, but no list is fullMarked as cut short although no list is anywhere near its limit.111ConsistencyYes
A list longer than the service can write65 stages, when the service stops at 64.111StructureYes
A huge, deeply nested recordA very long text nested many levels deep. It is refused unread.111StructureYes
The generator's hidden truth inside a recordThe synthetic world's hidden "true slow" answer placed inside the record. It belongs outside; a record that carries it is refused.111AllowlistYes
Handed off before the script endedThe hand-off is stamped at 1 ms although the script ran for over a second. Both come from one clock, so that cannot be.111TimeYes
More transfers than URLs asked forA group that asked for 1 address lists 2 transfers. That cannot happen.111ConsistencyYes
Duplicates
CaseWhat was doneKeptExcludedWhat the gate saidAs it must
One identifier, two different recordsThe same identifier appears twice with different contents, in different reads. Neither can be trusted, so both are excluded, whichever came first.112DuplicatesYes
A valid record and its twin that differs only in typeThe same record twice, but in one the budget is the whole number 15000 and in the other the decimal 15000.0. The contract requires a whole number, so one is invalid. Both are excluded, in either order.112Duplicates SchemaYes
A conflict that hides a broken twinA valid record and a same-identifier copy that also carries an unlisted field. The conflict is reported, and so is the unlisted field: neither hides the other.112Duplicates AllowlistYes
Store and provenance
CaseWhat was doneKeptExcludedWhat the gate saidAs it must
Every kind of unusable read, told apartOne good read beside a missing file, an unreadable one, an empty one, one without the guard, one whose lines all failed to open, one partly damaged, and one that is not the reader's shape.120partial × 1 corrupt × 1 missing × 1 unreadable × 1 empty × 1 wrong guard × 1 malformed × 1Yes
Declared measured, but the identifiers are a counterRecords whose identifiers count 1, 2, 3 (the demonstration generator's habit) declared as measured. Provenance is a label; this is a tripwire, not proof.120ProvenanceYes

Stores that could not be read are told apart

Synthetic

A file that is missing is not a day with no requests, and a file that is damaged is not an empty one. Each state is counted on its own, and none is treated as zero.

Every state a read can be in
StateMeaningIn the demonstration
okRead, and every line opened1
partialRead, but some lines would not open: the records that did are kept, and the gap is shown1
corruptThe file was there and no line would open: not an empty day1
no recordsOpened, with nothing written yet0
missingNo such file: not zero requests1
unreadableThe file exists and could not be read1
emptyA file with nothing in it1
wrong guardA file that does not start with the exit guard: not read as a store1
malformedNot the shape the reader returns, so it is never looked into1

Predictive readiness: not assessed

Not measured

Predictive validation Not measured

Whether these records could support a fair test of a prediction is not assessed here. The structural checks say only that records are well formed.

What would measure it: A frozen prediction and a decision time for each record, supplied to the checker, and an evaluation on measured records that scores later outcomes against them. This checker is not given those, and that evaluation is not built. (The synthetic prediction engine on the Predictions page is separate, and only ever uses synthetic records.)

Request coverage Not measured

No independent request total is supplied, so what share of requests left a record cannot be worked out. Coverage is unknown, not zero.

What would measure it: A counter updated at the start of each request, separate from the timing record (see Q-08 in the improvement queue).

Where records come from

Synthetic Not measured
Provenance of the records on this page
KindRecordsStatus
Synthetic1,146Made by a generator for this demonstration. Declared synthetic.
MeasuredNoneNo store was read and none was supplied.

Provenance is a label given by whoever supplies the records. The gate does not verify it. It only raises a warning when records declared as measured carry the identifiers a generator makes. The list of allowed fields limits what a record may hold. It is not a privacy or compliance certification.

Engineering details: schema, finding codes, limits and notes
Fixed numbers
NameValue
Validator versionrd-0.1
Records in one batch (a local capacity choice, not a measured volume)10,000
Reads in one batch2,000
Nodes in one record6,500
Depth of one record6
Length of one text64
Largest duration or gap, ms3,600,000
Group duration against end minus start, ms0.002
Out-of-time flag against time left, ms0.1
A transfer against its group, ms5
Fingerprint of the kept records8e5bc55b1f1623e0db0f418ca2355967ad4c61b3b0eeffc6b2fc443872199453
  • Real request volume has never been read or counted here, so no figure on this page says how many records a real day holds.
  • The existing reader's leaf walker (tm_leaves) keeps self-referencing garbage until PHP collects it, so a bulk loop over thousands of records should collect cycles as it goes. The reader is unchanged. This is a limit of using it in bulk, not something this page fixes.
  • Passing these checks is a statement about how records are formed. It is not a clearance to train, to score or to deploy anything.
Finding codes
CodeLevelFamilyMeaning
RD-SHAPErejectStructureNot the shape of a timing record (not a record, a list where a group belongs, too long, too deep or too large)
RD-UNKNOWNrejectAllowlistCarries a field the contract does not list (its name is withheld)
RD-MISSINGrejectSchemaA field the contract requires is absent
RD-TYPErejectSchemaA field has the wrong kind of value (a number written as text, a yes/no written as a number, and so on)
RD-NULLrejectSchemaA field that may never be empty is empty
RD-VALUErejectSchemaA value outside what the field may hold (not one of the allowed names, out of range, not a finite number)
RD-IDENTrejectAllowlistText that looks like an identifier, a link or a contact detail sits in a field that may only hold a fixed name
RD-TIME-FORMATrejectTimeA clock reading that is not a real UTC time in the fixed format
RD-TIME-ORDERrejectTimeTimes that cannot be true together (a step before the request began, after it ended, or out of sequence)
RD-CONSISTENCYrejectConsistencyTwo fields of one record contradict each other
RD-CONFLICTrejectDuplicatesThe same request identifier appears with different contents, so none of them can be trusted
RD-TRUNCATEDincompleteCompletenessThe service cut this record short (a list reached its limit): valid, but not complete
RD-OPEN-GROUPincompleteCompletenessA group of lookups was never closed, so its end and duration are unknown (not zero)
RD-AVAIL-UNKNOWNinfoAvailabilityThe read has no ingestion time, so nobody can say when these records could first have been used
RD-NOT-RECORDEDinfoMissing is not zeroA value the writer may leave empty is empty: it is unknown, and is never counted as zero
RD-W-AVAIL-ORDERwarnAvailabilityEvery read that held this record is stamped as ingested before the record was assembled: those clocks disagree, so no availability is claimed
RD-W-CURLwarnConsistencyA transfer reports a longer time than the group that contains it
RD-W-CURL-ZEROwarnMissing is not zeroA failed transfer reports 0 ms: that is not measured, not instant
RD-W-BUDGETwarnConsistencyTime left at the end does not match the budget less the request time
RD-W-ASSEMBLYwarnTimeThe gap between the start and assembly stamps differs from the request time by over a second
RD-W-ZEROwarnMissing is not zeroA request time of exactly zero: recorded, not measured
RD-W-SYNTH-MARKwarnProvenanceDeclared as measured, but the identifiers look like the demonstration generator's counter
Every field a record may hold
FieldKindMay be emptyAllowedRoleDated by
schemafixed textNofs.telemetry.request.v0metarecord_assembly
scopefixed textNoserver_requestmetarecord_assembly
request_id16 lowercase hex charactersNometarequest_start
event_time_utcUTC time, fixed formatNofeature_candidaterequest_start
record_assembled_at_utcUTC time, fixed formatNometarecord_assembly
truncatedtrue or falseNometarequest_end
clock.durationsfixed textNohrtime_monotonicmetarecord_assembly
clock.wallfixed textNosystem_utcmetarecord_assembly
clock.budget_clock_skew_msnumber, may be negativeNometarequest_start
clock.pre_script_wall_msnumber, may be negativeYesmetarequest_start
request.actionone of a listNobriefing, flight-planfeature_candidaterequest_start
request.channel_hintone of a listNotool_header, nonefeature_candidaterequest_start
request.purposeone of a listNostandard, alternate, otherfeature_candidaterequest_start
stages[].stageone of a listNoidents_resolved, endpoints_fetched, hazards_done, route_weather_done, tfrs_done, response_builtfeature_candidateat_ms
stages[].at_msnumber, 0 or moreNofeature_candidateat_ms
cache[].sourceone of a listNonoaa.metar, noaa.taf, noaa.windtemp, noaa.airsigmet, noaa.gairmet, noaa.cwa, noaa.pirep, noaa.isigmet, noaa.airmet, noaa.airport, noaa.other, noaa.stations_table, faa.tfr_list, faa.tfr_detail, faa.other, other, winds.fb_table, ident.indexfeature_candidateat_ms
cache[].ttl_swhole number, 0 or moreNofeature_candidateat_ms
cache[].hittrue or falseNofeature_candidateat_ms
cache[].at_msnumber, 0 or moreNofeature_candidateat_ms
fetch_groups[].seqwhole number, 0 or moreNometastart_ms
fetch_groups[].start_msnumber, 0 or moreNofeature_candidatestart_ms
fetch_groups[].n_urlswhole number, 0 or moreNofeature_candidatestart_ms
fetch_groups[].retry_allowedtrue or falseNofeature_candidatestart_ms
fetch_groups[].retry_passtrue or falseNofeature_candidatestart_ms
fetch_groups[].cap_mswhole number, 0 or moreNofeature_candidatestart_ms
fetch_groups[].budget_left_before_msnumber, may be negativeNofeature_candidatestart_ms
fetch_groups[].skipped_for_budgettrue or falseNooutcomeend_ms
fetch_groups[].end_msnumber, 0 or moreYesoutcomeend_ms
fetch_groups[].dur_msnumber, 0 or moreYesoutcomeend_ms
fetch_groups[].sources.*.nwhole number, 0 or moreNooutcomeend_ms
fetch_groups[].sources.*.okwhole number, 0 or moreNooutcomeend_ms
fetch_groups[].sources.*.failedwhole number, 0 or moreNooutcomeend_ms
fetch_groups[].sources.*.max_curl_msnumber, 0 or moreNooutcomeend_ms
budget.budget_mswhole number, 0 or moreNometarequest_start
budget.left_at_end_msnumber, may be negativeNooutcomerequest_end
budget.out_of_time_at_endtrue or falseNooutcomerequest_end
budget.groups_skippedwhole number, 0 or moreNooutcomerequest_end
server.http_statuswhole number 100 to 599Yesoutcomerequest_end
server.script_end_msnumber, 0 or moreNooutcomerequest_end
server.handoffone of a listNofastcgi_finish, flushmetarequest_end
server.handoff_msnumber, 0 or moreYesoutcomerequest_end