What gets checked

This page is the checks that actually run before a report is shown, texted, or reused. If a check is not listed here, it does not happen.

Where a report comes from

There are three sources.

Speech to text, then a correction pass

A voice recording is sent to whisper-1. That text is then sent to gpt-6.1-sol. The instruction to the second model is to fix words a non-pilot would mishear, not to add words, and not to change wind, visibility, ceiling, temperature, dew point, altimeter, times, runway numbers, or the information letter.

The correction is kept only if it passes a gate, and only when we know which airport the recording is from. Phone calls and Pi uploads both pass the airport.

A misheard digit in the first pass can stick, because a correction that changes a number is discarded. Example: if whisper hears altimeter 29.82 and the broadcast said 29.92, the correction pass is not allowed to "fix" 2982 to 2992. The 29.82 can remain.

One loop

ATIS is a loop. A formatter tries to keep a single copy, in this order: airport name, information letter, time, wind, visibility, sky, temperature, dew point, altimeter, approach or runway, remarks, and the closing "advise you have information." It runs before the correction pass and again after it.

If it is not confident it found one broadcast, it leaves the text unrotated. A second copy can still be in the transcript. The cut can also drop the tail. Phrases such as "thanks for watching" are removed when they match a known junk pattern. If you need a remark at the end, listen to the audio. The text can be a sentence short.

When the cut is confident, the player prefers a single-pass audio file. Otherwise it plays the original recording.

Information letter

A voice ATIS report is reused for a later caller only when the stored letter is a single letter A through Z, and the letter spoken in the transcript is that same letter. AWOS and ASOS do not need a letter. If the letters do not match, that copy is not reused. The next phone request places a new call.

The airport page can still show a report that failed this check. Reuse is stricter than display.

When a saved report is sent again

A new phone request looks back 90 minutes for the same information letter, or the same Zulu time if one side has no letter. That saved report is sent again only when all of these are true:

If any of those fail, the next caller does not get that copy. The server calls the airport again.

The homepage stack is a separate read. It uses gpt-4o-mini unless another model is configured, and it only decides which reports rotate on the home page. If that call fails, the report is left unchecked. An unchecked report can still be reused. A report explicitly marked ineligible cannot.

Altimeter

When a phone transcript is saved, and when a Pi upload is saved, the altimeter in the transcript is compared with the current METAR from aviationweather.gov. The check uses the first group shaped like A plus four digits. A2992 becomes 2992.

In the transcript, spoken numbers are turned into digits first. "altimeter two niner niner two" and "altimeter 29.92" both become 2992. The same four digits repeated still count as one value. Two different four-digit values, or none, count as no transcript setting.

There is no tolerance. 2992 matches only 2992. It does not match 2993.

A report with that marker is not a normal report. The homepage stack skips it. The next phone request does not reuse it, and the server calls the airport again. The airport page, the report page, the map popup, and a text-for-ATIS card still show the transcript, and only with a warning in front of it. A mismatch warning is Altimeter unverified. Transcript A2992, METAR A3001. When the transcript has no single altimeter, the warning names the METAR value. When the METAR could not be read, the warning says METAR unavailable. The internal marker is not in the paragraph.

An SMS of that report, and the airport API transcript, do not include the internal marker. They start with Altimeter unverified. METAR A2992. when the METAR digits are known, or Altimeter unverified. METAR unavailable. when they are not.

Five minutes after an unverified save, a background job reads the METAR again. If the spoken altimeter matches, the marker is removed and the report can be reused. If it still does not match, or the METAR is still unavailable, the marker stays. The job runs once.

Wind, visibility, ceiling, and the observation time are not compared with the METAR. Those checks are not implemented.

The transcribed marker

After cleanup, a voice transcript that passes the altimeter check is stored with the prefix AI TRANSCRIBED(!):. The altimeter check rewrites that prefix when it cannot verify the setting. Airport pages and report cards strip the prefix out of the paragraph you read. An SMS or API copy of an unverified report uses the short METAR note above, not the stored prefix.

Audio

The phone recording and the Pi mp3 are saved on the report. If a play button is on the report, play it before you use the text.

The airport page hides the player while that community station is marked offline, even if the file is still attached. Other report cards show the player whenever the file is attached. Digital ATIS has no recording.

A report can be shown on an airport page without audio. Reuse for a later phone call requires the audio file.

If a report is wrong

Every transcribed report on an airport page has an accurate / inaccurate vote, POST /api/transcripts/:id/feedback. Inaccurate can include an optional suggested transcript and a note. The suggested transcript is off unless you check Include a suggested transcript. One vote per browser, per report, per hour. The vote does not change the stored transcript and it does not take the report down.

A signed-in account can check This is dangerous and should be removed on that same form and submit. That is the flag. One flag per account per report. A second flag from the same account is rejected and logged. The report is hidden as soon as the flag is saved: airport pages, texts, the API, and reuse skip it. If another saved report is still usable, that one is what you get. If the hidden report was the one a phone call would have reused, the server calls again. If there is no other stored report to text, the reply is KXXX: no report available.

The What's wrong? note is also the flag reason. The admin phone, the same number the station monitor texts, gets KXXX report 123 flagged. The admin review page records who flagged it, when, the reason, whether that text went out, and who restored the report or confirmed the takedown.

When a community station goes quiet

A community station is marked offline when either of these is true:

A station that has never uploaded and never sent a heartbeat is not marked offline. The airport page then says station offline. The first time it goes offline, and when it comes back, a text goes to the admin phone. A run of empty uploads is included in that text. Empty uploads do not, by themselves, mark the station offline once a recent real file is still inside the 45-minute window.

What you should do with this

Read the text as a head start. Listen to the audio when the play button is there. Check the information letter, the altimeter, and the runway on the frequency before you use them.

What can go wrong: a digit can be misheard and then locked in, because the correction pass is thrown out when it changes a number. A loop can be cut short or left doubled when the formatter is not confident. The altimeter check is one METAR group compared as four exact digits, not a second listening, and it does not check wind or ceiling. A mismatch stays on the airport page with both values, and it is not sent as a normal text. Digital ATIS is FAA text with no audio to compare.

This is not a certified briefing.