Living Document Notice
Published 2026-09-11. The evolving architecture, revisions, and connected notes for this dispatch live in the Stax Digital Garden.

Designing for Carrier Loss Without Synthetic Interpolation

Designing for Carrier Loss Without Synthetic Interpolation: Nocturnal deep violet and spectral green dual-trace CRT macro showing modulated carrier wave dropping into genuine silent gap without interpolation

Summary

Mainstream flight-tracking portals routinely mask telemetry dropouts with client-side dead reckoning. When a receiver loses line-of-sight to an aircraft transponder or when an upstream ingest node drops packets, consumer mapping engines project synthetic coordinates forward along the last known velocity vector. This smoothing technique maintains the illusion of real-time fluidity at the cost of ground truth, occasionally showing aircraft continuing in straight paths long after they have initiated turns, held patterns, or landed.

Hushwire rejects speculative dead reckoning. Because the software is built as an honest observatory instrument rather than an engagement funnel, missing data is treated as an explicit interface state: CARRIER_LOST. Instead of fabricating positions, Hushwire holds the last verified coordinate, renders an expanding uncertainty radius, and gradually fades the contact into a phosphor decay ghost. This dispatch examines the state machine mechanics behind un-interpolated contact loss and the design principles that make silence more informative than synthetic motion.

The Illusion of Continuous Coverage

ADS-B is an unencrypted, line-of-sight radio broadcast operating on 1090 MHz. Terrain obstructions, antenna nulls, banking angles, and atmospheric attenuation frequently interrupt reception between airborne transponders and terrestrial receiver nodes. In typical metropolitan coverage zones, temporary signal dropouts of 10 to 45 seconds are routine.

Consumer flight tracking services compensate for these dropouts using client-side linear extrapolation:

While this formula generates smooth sixty-frame-per-second CSS animations across the map, it introduces severe failure modes:

  • Phantom Flight Paths: An aircraft entering a standard holding pattern or initiating an approach turn will appear to continue on its previous cruise heading until the extrapolation ceiling is reached.
  • Teleportation Artifacts: When telemetry resumes after a turn, the client abruptly snaps the target from the extrapolated location to the new broadcast coordinate, creating jarring visual skips.
  • Erosion of Operational Trust: Operators monitoring local airspace cannot distinguish between an active receiver feed and an animation loop executing over cached data.

The Contact Lifecycle State Machine

Hushwire models each tracked target using a deterministic four-state finite state machine governed by reception delta ().

  +--------------+
  |    ACTIVE    | <------+ (New telemetry packet received)
  +--------------+        |
         |                |
   (Δt > 15s)             |
         v                |
  +--------------+        |
  |   DEGRADED   | -------+
  +--------------+        |
         |                |
   (Δt > 45s)             |
         v                |
  +--------------+        |
  | CARRIER_LOST | -------+
  +--------------+
         |
   (Δt > 120s)
         v
  +--------------+
  |    PURGED    |
  +--------------+

State Definitions and Transition Thresholds

State ThresholdVisual RepresentationRendering Behavior
ACTIVESolid phosphor green/amber glyph; full velocity vector.Redrawn on every radar sweep at full intensity (alpha 1.0).
DEGRADEDPulsing dashed vector; amber boundary ring.Vector freeze; dashed uncertainty circle expands proportionally to .
CARRIER_LOSTHollow glyph; static coordinate; fading ghost trail.Contact glyph loses directional chevron; text label dims to alpha 0.35.
PURGEDRemoved from active tracking registry.Memory reclaimed; contact removed from spatial index.

Implementation of the Stale Target Manager

The client manages target lifecycle inside a dedicated evaluation loop decoupled from canvas rendering. Targets are stored in a JavaScript Map keyed by the 6-character ICAO transponder address.

export type TargetStatus = "ACTIVE" | "DEGRADED" | "CARRIER_LOST" | "PURGED";
 
export interface TargetState {
  icao: string;
  callsign: string;
  lat: number;
  lon: number;
  alt: number;
  spd: number;
  hdg: number;
  lastFixEpoch: number;
  status: TargetStatus;
  uncertaintyRadiusNm: number;
}
 
export class TargetRegistry {
  private targets: Map<string, TargetState> = new Map();
 
  public ingestUpdate(record: { icao: string; callsign: string; lat: number; lon: number; alt: number; spd: number; hdg: number; ts: number }): void {
    const existing = this.targets.get(record.icao);
    
    if (existing) {
      existing.callsign = record.callsign;
      existing.lat = record.lat;
      existing.lon = record.lon;
      existing.alt = record.alt;
      existing.spd = record.spd;
      existing.hdg = record.hdg;
      existing.lastFixEpoch = record.ts;
      existing.status = "ACTIVE";
      existing.uncertaintyRadiusNm = 0;
    } else {
      this.targets.set(record.icao, {
        ...record,
        lastFixEpoch: record.ts,
        status: "ACTIVE",
        uncertaintyRadiusNm: 0
      });
    }
  }
 
  public updateLifecycle(currentEpoch: number): void {
    for (const [icao, target] of this.targets.entries()) {
      const deltaSec = currentEpoch - target.lastFixEpoch;
 
      if (deltaSec > 120) {
        target.status = "PURGED";
        this.targets.delete(icao);
      } else if (deltaSec > 45) {
        target.status = "CARRIER_LOST";
        // Calculate maximum potential deviation in nautical miles based on last known speed
        target.uncertaintyRadiusNm = (target.spd / 3600) * deltaSec;
      } else if (deltaSec > 15) {
        target.status = "DEGRADED";
        target.uncertaintyRadiusNm = (target.spd / 3600) * deltaSec;
      } else {
        target.status = "ACTIVE";
        target.uncertaintyRadiusNm = 0;
      }
    }
  }
 
  public getVisibleTargets(): TargetState[] {
    return Array.from(this.targets.values());
  }
}

Rendering Uncertainty Without Screen Clutter

When an instrument enters CARRIER_LOST, drawing an arbitrary path deceives the observer. Instead, Hushwire renders the target position frozen in place, surrounded by an uncertainty perimeter:

function drawTarget(ctx, target, projection) {
  const [x, y] = projection([target.lon, target.lat]);
 
  switch (target.status) {
    case "ACTIVE":
      ctx.strokeStyle = "#52b788";
      ctx.fillStyle = "#52b788";
      ctx.lineWidth = 1.5;
      drawAircraftGlyph(ctx, x, y, target.hdg);
      drawVelocityVector(ctx, x, y, target.hdg, target.spd);
      drawLabel(ctx, x, y, target.callsign, target.alt, 1.0);
      break;
 
    case "DEGRADED":
      ctx.strokeStyle = "#e0a96d";
      ctx.fillStyle = "#e0a96d";
      ctx.lineWidth = 1.0;
      drawAircraftGlyph(ctx, x, y, target.hdg);
      drawUncertaintyCircle(ctx, x, y, target.uncertaintyRadiusNm, projection.scale, [4, 4]);
      drawLabel(ctx, x, y, target.callsign, target.alt, 0.75);
      break;
 
    case "CARRIER_LOST":
      ctx.strokeStyle = "#7f8c8d";
      ctx.fillStyle = "#7f8c8d";
      ctx.lineWidth = 1.0;
      drawHollowSquare(ctx, x, y, 6);
      drawUncertaintyCircle(ctx, x, y, target.uncertaintyRadiusNm, projection.scale, [2, 6]);
      drawLabel(ctx, x, y, `${target.callsign} [LOST]`, target.alt, 0.35);
      break;
  }
}

The Architectural Case for Honest Silence

Displaying gaps truthfully shifts the operator’s mental model:

  1. Environmental Awareness: Observers immediately see when terrain, buildings, or atmospheric fronts block receiver line-of-sight. The tool reveals the physical limitations of the radio link rather than obscuring them.
  2. Deterministic Troubleshooting: If all contacts in a western quadrant transition to CARRIER_LOST simultaneously, the operator recognizes an antenna failure or an upstream provider outage instantly, without wading through simulated motion trails.
  3. Calm Ergonomics: Eliminating unpredictable snap-to-position jumps prevents sudden visual flashes on secondary displays. The interface transitions quietly between states, respecting user attention.

  • Directus Target: hushwire
  • Garden Source Reference: CARRIER_LOST Spec, Fail-Closed Design, Telemetry Protocols, MOC - Fleet Operations, MOC - Bosun PKM Tools