# JetTrack v2.81 - PIREP arrival uses landed airfield

Date: 2026-07-04

Scope: final PIREP filing/preview payload only. Live ACARS is intentionally untouched.

## Changed

- Final PIREP payload now resolves the actual landed airfield at preview/submit build time and sends that value as `pirep.arrICAO`.
- The booked/scheduled destination remains audit metadata as `scheduledArrICAO`.
- `actualArrICAO` and `landedArrICAO` are populated from the resolved final PIREP arrival authority.
- The BlueSky-compatible PIREP log opening `Arrival:` line now matches the final PIREP arrival field, so the log and payload do not disagree.
- Local logbook records created after filing use the same resolved PIREP arrival.

## Guardrails

- No live ACARS change.
- No booked flight, bid, schedule, selected flight, SimBrief, SayIntentions, scoring, database, or lifecycle detector change.
- The resolver is accepted only when it confirms an airport within the configured distance gate.
- If the resolver is unavailable but a diversion was explicitly declared, the declared diversion remains the PIREP arrival fallback instead of silently reverting to the booked destination.

---

# JetTrack v2.80 - Guarded Clear Flight before departure

Date: 2026-07-04

Scope: client UI/state handling only.

## Changed

- Added a guarded **Clear** action to the JetVA booked-flight overlay.
- Clear is available for a wrong selected/loaded booked flight before Start Flight.
- Clear is also available after tracking has started, or after a sealed local draft, only when the aircraft is still on the ground and JetTrack has not recorded departure/takeoff evidence.
- Every clear requires the pilot to type `CLEAR`; there is no single-click destructive reset.
- Protected ground clears mark the local session as discarded before departure, stop/close the recorder, create a fresh recorder, clear selected flight/planning context, reset SimBrief linked context, reset per-flight SayIntentions sync state, reset route/FL locks, reset map overlay state, and return JetTrack to flight-selection state.
- If live ACARS was already started, protected ground clear sends the final offline live update before clearing local context.

## Guardrails

Clear is blocked when any of these are true:

- PIREP is submitted or submitting.
- Takeoff roll / rejected takeoff / liftoff / airborne / landing / taxi-in / parked lifecycle evidence exists.
- The last known simulator state is airborne.
- JetTrack cannot prove the active/sealed session is still on the ground.
- The aircraft is in a high-speed ground state that may be takeoff roll.

## Not changed

- No phpVMS bid/booking removal.
- No phpVMS PIREP create/delete/edit path change.
- No database/schema change.
- No scoring change.
- No reverse-thrust, pushback, runway resolver, SimBrief API, SayIntentions endpoint, or route/FL post-start lock logic change.

---

# JetTrack v2.78 - SayIntentions auto-sync on Start Flight

- SayIntentions dispatcher context now auto-syncs once when the pilot presses Start Flight and protected tracking begins.
- SayIntentions dispatcher context also auto-syncs once when the safety auto-start path begins tracking after engine-running aircraft movement.
- The SayIntentions popup remains for setup/manual re-sync only; normal operation no longer requires the pilot to press an extra sync button.
- Auto-sync uses the pilot API key saved locally in Windows Credential Manager, with fallback to `%LOCALAPPDATA%\SayIntentionsAI\flight.json` when an active SayIntentions flight exposes `flight_details.api_key`.
- No ACARS table export, no live telemetry feed to SayIntentions, no database/schema change, no scoring change, and no PIREP filing change.

# JetTrack v2.77 - SayIntentions popup open fix

- Fixed the SayIntentions bottom action button so it opens the SayIntentions settings/sync popup even when no JetVA booked flight is loaded yet.
- Changed the SayIntentions button click binding to call the popup directly, matching the SimBrief popup behaviour.
- Removed the flight-loaded gating from the SayIntentions bottom action button; missing pilot key/login/flight context remains validated inside the popup sync action.
- No live server endpoint change required.
- No scoring, PIREP, ACARS timer/payload, database/schema, route/FL lock, reverse-thrust, pushback, or runway resolver changes.

# JetTrack v2.76 - SayIntentions popup UI correction

- Changed the bottom action button label from `VA-Link` to `SayIntentions`.
- Changed the SayIntentions button to open a popup/settings dialog like SimBrief, rather than trying to sync immediately from the bottom bar.
- Removed user-facing `VA-Link` wording from the JetTrack client dialog, sync button, success message, and status/error text.
- Retained SayIntentions pilot API key storage using Windows Credential Manager.
- Retained optional pilot API key import from `%LOCALAPPDATA%\SayIntentionsAI\flight.json`.
- Retained minimum dispatcher_data-only sync through the existing JetVA server endpoint.
- No server redeploy required if the live server endpoint/shared secret already matches v2.75.

# JetTrack v2.75 - SayIntentions VA-Link client integration

- Added a VA-Link action in the JetTrack UI for syncing the currently selected JetVA flight context to SayIntentions via the JetVA server-side endpoint.
- Added local SayIntentions pilot API key storage using Windows Credential Manager. The JetVA VA-Link key remains server-side only and is not stored in the client.
- Added optional import of the pilot API key from `%LOCALAPPDATA%\SayIntentionsAI\flight.json` when SayIntentions is running an active flight.
- Sends only minimum VA-Link dispatcher context: pilot code, flight number, departure, arrival, aircraft, planned cruise level, and route.
- No ACARS table export, no PIREP logic changes, no scoring changes, and no database/schema changes.

## v2.74 - server-owned rawdata policy metadata

- Added UTC and sequence metadata to JetTrack PIREP rawdata points so the server-side PIREP module can apply the authoritative rawdata storage policy accurately.
- Removed the old hard 240-point client cap from the submitted rawdata path. The client now sends a bounded candidate stream for the server to reduce before storage.
- The client remains responsible for telemetry/event capture only; persisted phpVMS rawdata density is now a server-side policy concern.
- Preserves v2.73 interrupted-flight continuation and simulator crash/resume handling.

## Not changed
- No client-side scoring logic.
- No database/schema changes.
- No BlueSky/kACARS changes.
- No route/FL lock changes.
- No reverse-thrust, pushback, runway resolver, or icon/taskbar changes.

## v2.73 - interrupted flight continuation

- Rebuilt from the available v2.71 source baseline and reapplied the v2.72 SimConnect dispatch guard.
- Guarded SimConnect message dispatch so MSFS2024/SimConnect loss during `ReceiveMessage()` is contained and the provider is reset instead of allowing the UI dispatch path to throw.
- Added active-flight interruption handling: if SimConnect/MSFS2024 is lost while tracking, JetTrack preserves the active session and writes a `SIM_INTERRUPTED` marker to the protected event log.
- Added reconnect continuation workflow: when stable simulator data returns, the pilot can continue the same flight as `RESUMED_AFTER_SIM_CRASH`; the telemetry gap remains visible and permanent in the PIREP log.
- Added interrupted end workflow: the pilot can end the preserved session as interrupted and build a marked PIREP preview without needing engine-shutdown telemetry after the simulator crash.
- Added interruption/resume metadata to `summary.json`, the PIREP preview payload, local logbook review reasons, and the BlueSky-style PIREP log.
- No server/API, database/schema, scoring-rule, route/FL lock, reverse-thrust, pushback, runway resolver, or icon/taskbar changes.

## v2.71 production engine-handling hotfix

- Hardened engine-running derivation so engines 1/2 are still fuel/cutoff gated, but running/open evidence can be corroborated by combustion, N1, or fuel-flow instead of combustion alone.
- Prevented `abnormal_continuity_detected:all_engines_stopped_after_liftoff_before_landing` from firing from one dropped/lagged engine-running sample. The marker now requires sustained, corroborated all-engines-stopped evidence in mature airborne flight.
- Suppressed one-sample airborne engine-stop events in detector output and pilot-log rendering unless low N1/fuel-flow corroborates the stop.
- Reverse-thrust functionality is unchanged and remains command/lever based from `GENERAL ENG THROTTLE LEVER POSITION:index`; delayed nozzle telemetry and the unreliable reverse-engaged bool remain diagnostic only.
- No scoring, server/API, database/schema, BlueSky/kACARS, route/FL lock, submit/reset, logbook, pushback, runway resolver, icon/taskbar, or UI layout changes.


## v2.70 - engine start evidence restore

- Restored engine start/stop pilot-log evidence for scoring-critical single-engine taxi detection.
- The pilot log now seeds any engine already observed running at the first recorded sample, so an engine start that occurred inside skipped/unstable startup samples is not silently lost.
- Later engine transitions are compared against the last engine state actually written to the pilot log rather than only the immediately adjacent raw sample.
- No scoring, server/API, database, reverse-thrust, pushback, runway, route/FL, submit/reset, logbook, or icon changes.

# v2.70 event-sequenced runway heading fix
- Retained reverse throttle-lever event detection.
- Retained pushback stage detection and event-sequenced pilot-log cleanup.
- Fixed departure/takeoff runway-end label selection so takeoff snapshots use the actual aircraft roll heading from the snapshot instead of touchdown summary/planned runway context.
- Prevents cases such as heading 263° being labelled as runway 8 during a runway 26 departure.
- No scoring, server/API, database/schema, BlueSky/kACARS, route/FL lock, submit/reset/logbook, icon/taskbar, reverse-thrust event, or pushback detection changes.

## v2.70 - event-sequenced pilot log cleanup

- Retained reverse-throttle-lever event detection.
- Retained pushback stage detection fix.
- Retained strict RTO log sequencing so rejected-takeoff sessions cannot emit false TAKE OFF, Climb, LANDED, or airborne snapshot blocks.
- First observed parking-brake state is now labelled `Initial State - Parking Brake` instead of a state-change event.
- Rejected-takeoff maximum speed output now reports explicit `Max GS during rejected roll` and `Max IAS during rejected roll` labels.
- Rejected-takeoff closing duration now prints `Tracked Time` instead of `Flight Time` to avoid implying a completed airborne flight.
- No scoring, server, database, route/FL, submit/reset/logbook, BlueSky/kACARS, or icon/taskbar changes.

## v2.70 - event-sequenced pilot log renderer

- Retained reverse-throttle-lever event detection.
- Retained pushback stage detection fix.
- Added strict pilot-log takeoff/liftoff validation so rejected-takeoff sessions cannot emit false TAKE OFF, Climb, LANDED, or airborne snapshot blocks.
- Kept rejected-takeoff output event-driven and de-duplicated.
- Snapshot-only gear/parking-brake state is now labelled as snapshot state so it cannot be confused with a new event transition.
- Pushback phase labelling now clears after pushback completion before taxi starts.
- No scoring, server, database, route/FL, submit/reset/logbook, BlueSky/kACARS, or icon/taskbar changes.


## v2.70 - reverse events pushback stage log fix

- Retained reverse-throttle-lever event detection.
- Retained pushback stage detection fix.
- Prevented missing/null phase anchors from producing false TAKE OFF / LANDED lines at flight open.
- Prevented duplicate rejected-takeoff header/note output in the pilot flight log.
- Added rejected-takeoff reverse start/stop speeds to the pilot-facing flight log when captured.
- No scoring, server, database, route/FL, submit/reset/logbook, BlueSky/kACARS, or icon/taskbar changes.

# v2.70 reverse events + pushback stage hotfix

- Reverse-thrust event detection retained on `GENERAL ENG THROTTLE LEVER POSITION:index` negative range.
- Pushback stage detection hardened: backwards pre-departure ground movement is pushback even if an engine has already been started.
- Pushback detection no longer depends on reverse-thrust state.
- No scoring, server, database, BlueSky/kACARS, route/FL, submit/reset, or logbook changes.

# v2.70 pushback gate hotfix

- Pushback detection no longer allows reverse-thrust bool noise to suppress pre-engine, non-self-powered ground movement.
- Reverse-thrust start/stop evidence is command/lever based from `GENERAL ENG THROTTLE LEVER POSITION:index`; `GENERAL ENG REVERSE THRUST ENGAGED:index` is retained as diagnostic capture only.
- No server/API, database/schema, route/FL lock, resolver, submit verification, icon/taskbar, or BlueSky/kACARS changes.

# v2.70 reverse-thrust engaged-bool test build (superseded)

- Historical note superseded by the later throttle-lever command source: reverse thrust start/stop evidence is not scoring-authoritative from `GENERAL ENG REVERSE THRUST ENGAGED:1/2` in this release line.
- `TURB ENG REVERSE NOZZLE PERCENT` remains recorded as diagnostic evidence only and is no longer used to decide reverse active/stopped state.
- Removed the previous post-touchdown rollout speed heuristic which forced reverse inactive while the old delayed nozzle signal was still active.
- No server/API, database/schema, route/FL lock, resolver, submit verification, icon/taskbar, or BlueSky/kACARS changes.

# v2.69 engine-switch speed evidence

- Added a dedicated `GS: x knots` pilot-log line immediately after each engine started/stopped line.
- Preserves existing `Engine N: Started/Stopped` wording for server/analyser compatibility.
- Supports DB-backed single-engine taxi detection without adding client-side scoring.

# v2.68 submit verification and map centre fix

## 2.70 - Reverse events throttle-lever command source

- Changed reverse-thrust start/stop event detection to use `GENERAL ENG THROTTLE LEVER POSITION:1/2` negative command range.
- Kept `GENERAL ENG REVERSE THRUST ENGAGED:1/2` and `TURB ENG REVERSE NOZZLE PERCENT:1/2` as non-authoritative diagnostic capture only.
- No scoring/server/rule/threshold changes.
- Pushback gate hotfix retained.

## Changed
- Explicit PIREP submit no longer clears purely because a POST completed.
- A non-auth/non-session uncertain submit response now triggers an immediate JetVA logbook verification for the current flight.
- If the matching official JetVA PIREP is found, the client records that PIREP ID and runs the normal successful clear/reset path.
- If the matching official JetVA PIREP is not found, the client keeps the existing local resend protection.
- Option C live map aircraft follow now recentres on the aircraft marker after each active tracking update, removing the old route-box centre offset behaviour while tracking.

## Not changed
- No BlueSky/kACARS changes.
- No server/API changes.
- No database/schema changes.
- No scoring/profile changes.
- No route/FL lock changes.

# v2.68 submit clear return fix

- Client submit flow no longer treats a completed non-auth HTTP 500 wrapper response as an automatic local-failed resend case.
- If the explicit Send PIREP POST completed and was not auth/session/network failure, Jet Track locks as filed and runs the existing UI clear path.
- This prevents stale local resend queue entries when JetVA/phpVMS has already created and accepted the PIREP but the wrapper confirmation response is non-2xx.
- No scoring, server liveupdate, route/FL lock, evidence capture, resolver, or BlueSky logic changed.

# v2.67 reset/log cleanup
- Full post-filing and post-resend reset now clears the completed session, stale route/FL/DEP/ARR, filed badge, parked/right-side panel, PFD/status values, aircraft marker, flown path, route line and map markers.
- No-bid refresh after filing now returns to a clean idle/no-booked-flight state instead of leaving the previous completed flight visible.
- Pilot-facing excessive_vertical_speed_spike spam is compressed to one summary line containing max VS and sample count.
- Display-only negative zero values such as VS: -0 fpm and Bank: -0° are clamped to 0.
- Positive landing-rate values are labelled as possible bounce/positive contact evidence without changing raw evidence or normal landing-rate capture.
- No scoring, BlueSky/kACARS, database schema, resolver, reverse-thrust, Route/FL locking, SimBrief, engine detection, PIREP filing, auth/security, or logbook de-dupe changes.

# v2.66 route/FL lock input fix
- Fixed Option C overlay Route and Flight Level boxes still accepting typed input after Start Tracking.
- Lock state is now pushed to the overlay immediately when tracking starts or the session is sealed.
- Overlay Route/FL controls become disabled/read-only once the session Route/FL values are authoritative.
- Flight Level overlay input now accepts digits only; alphabetic and other non-numeric characters are stripped before posting to C#.
- No scoring, resolver, BlueSky, server endpoint, database, PIREP submission, or logbook logic changes.

# v2.66 cursor/input fix
- Fixed Route overlay textarea cursor jumping to the far right while typing.
- Fixed Flight Level overlay field being reformatted/re-written while the pilot is typing.
- The active Route/FL editor is no longer overwritten by overlay sync until the field is locked or focus leaves the field.
- Removed immediate overlay re-sync from Route/FL keystroke handlers to prevent feedback-loop input jitter.
- No scoring, resolver, BlueSky, database, server endpoint, PIREP submission, or logbook de-dupe changes.

# v2.66
- Route and Flight Level are editable until Start Tracking; SimBrief can prefill but is not required.
- Start Tracking locks the current Route and Flight Level as authoritative session values for the tracked flight/evidence/PIREP context.
- Locked Route/Flight Level values cannot be overwritten by later UI edits, SimBrief refresh, schedule reload, or post-start changes.
- Parked/final pilot-facing IAS/TAS/GS display now clamps negative near-zero noise to 0.
- Removed Actual Max Altitude from the flight-open/header block; final summary output remains.
- Added display-only compression for repeated post-landing flap-change lines; scoring/evidence remains intact.
- No scoring architecture, resolver, BlueSky, database, server endpoint, PIREP submission, or logbook de-dupe changes.
- Note: uploaded client source contains no JetTrack-side G-force landing display/report path, so there is no client-side G-force code change in this package.

# v2.65
- Fixed local-only completed PIREP persistence/resend state when server filing is not confirmed.
- Fixed logbook merge so unsent local flights are not hidden by loose same-day server matches.
- Fixed Send Selected to JetVA button flow: it refreshes JetVA before resend and gives feedback instead of silently doing nothing.
- Muted unreliable speedbrake armed/raw diagnostic spam while preserving actual speedbrake deployment evidence.
- Overspeed evidence now sends both the log event and explicit JetTrack boolean evidence for server scoring.

# Jet Track v2.63

- PIREP filed confirmation OK now triggers the completed-flight UI reset.
- Debrief / PIREP page closes after OK once the reset has completed.
- Retains v2.62 map/state reset, reverse-thrust correction, resolver security, and final snapshot cleanup.
- No resolver, scoring, BlueSky, PIREP count, database, or server endpoint changes.

# Jet Track v2.62

- Reverse thrust stop logging now uses the first sustained stow transition speed, not a delayed low-speed/stopped value.
- Reverse restart noise after rollout stop is locked out once a stop is logged.
- Airborne snapshots suppress irrelevant parking-brake released lines.
- Final approach snapshot now prefers a configured final sample so flap/gear events do not appear inside the snapshot block.
- Approach/final phase logging is held behind descent evidence when descent exists.
- Successful PIREP submit now clears the completed session, route/map/log state immediately on server success before the confirmation popup.
- Option C map reset clears route, aircraft, flown track, and JetVA overlay text/selection.
- v2.61 secured resolver, no-hardcoded-airport, speedbrake raw proof, and pushback cleanup retained.

## v2.66 resend reset fix
- Fixed local logbook resend flow so, when the resent local PIREP belongs to the current completed session, the same post-submit cleanup runs after the success dialog.
- This clears the active flight context, resets the live map/tracking UI, creates a fresh recorder, and closes the logbook window after successful resend.
- Older/local historical resend rows do not reset an unrelated current session.
