2. Phase‑1: Space Force RTT/Inside overlay kit#

2.1 Core types#

// phase1/types.ts
export interface OrbitalTrack {
  objectId: string;
  name: string;
  class: "ACTIVE" | "DEBRIS" | "ROCKET_BODY";
  state: {
    frame: "ECI" | "ECEF";
    position_km: [number, number, number];
    velocity_km_s: [number, number, number];
  };
  epoch: string;
}
 
export interface Corridor {
  corridorId: string;
  type: "LAUNCH" | "REENTRY";
  time_window: { start: string; end: string };
}
 
export interface RttSpaceMetrics {
  orbital_stability: number;
  conjunction_resonance: number;
  corridor_conflict_risk: number;
  time_horizon_sec: number;
  advisory_level: "NORMAL" | "WATCH" | "ALERT";
}
 
export interface AugmentedOrbitalTrack extends OrbitalTrack {
  rtt: RttSpaceMetrics;
}

2.2 Phase‑1 engine + middleware#

// phase1/rttSpaceEngine.ts
import { OrbitalTrack, Corridor, RttSpaceMetrics } from "./types";
 
export class RttSpaceEngine {
  constructor(private horizonSec: number = 86400) {}
 
  computeMetrics(
    track: OrbitalTrack,
    neighbors: OrbitalTrack[],
    corridors: Corridor[]
  ): RttSpaceMetrics {
    const stability = this.estimateOrbitalStability(track);
    const conjRes = this.estimateConjunctionResonance(track, neighbors);
    const corridorRisk = this.estimateCorridorConflict(track, corridors);
 
    const advisory =
      corridorRisk > 0.7 || conjRes > 0.7 ? "ALERT" :
      corridorRisk > 0.4 || conjRes > 0.4 ? "WATCH" :
      "NORMAL";
 
    return {
      orbital_stability: stability,
      conjunction_resonance: conjRes,
      corridor_conflict_risk: corridorRisk,
      time_horizon_sec: this.horizonSec,
      advisory_level: advisory
    };
  }
 
  private estimateOrbitalStability(track: OrbitalTrack): number { return 0.9; }
  private estimateConjunctionResonance(t: OrbitalTrack, n: OrbitalTrack[]): number { return 0.2; }
  private estimateCorridorConflict(t: OrbitalTrack, c: Corridor[]): number { return 0.1; }
}
// phase1/middleware.ts
import {
  OrbitalTrack,
  Corridor,
  AugmentedOrbitalTrack
} from "./types";
import { RttSpaceEngine } from "./rttSpaceEngine";
 
export class RttSpaceMiddleware {
  private engine = new RttSpaceEngine();
  private corridors: Corridor[] = [];
 
  constructor(
    private subscribeTracks: (cb: (tracks: OrbitalTrack[]) => void) => void,
    private subscribeCorridors: (cb: (corridors: Corridor[]) => void) => void,
    private publishAugmented: (tracks: AugmentedOrbitalTrack[]) => void
  ) {}
 
  start() {
    this.subscribeCorridors(c => { this.corridors = c; });
 
    this.subscribeTracks((tracks) => {
      const augmented = tracks.map(t => {
        const neighbors = tracks.filter(n => n.objectId !== t.objectId);
        const rtt = this.engine.computeMetrics(t, neighbors, this.corridors);
        return { ...t, rtt };
      });
      this.publishAugmented(augmented);
    });
  }
}

2.3 Phase‑1 overlay hook#

// phase1/overlay.ts
import { AugmentedOrbitalTrack } from "./types";
 
export interface OverlayStyle {
  trackColor: string;
  haloRadius: number;
  labelBadge: "NORMAL" | "WATCH" | "ALERT";
}
 
export function buildOverlayStyle(track: AugmentedOrbitalTrack): OverlayStyle {
  const { orbital_stability, advisory_level } = track.rtt;
 
  const trackColor =
    advisory_level === "ALERT" ? "#ff4d4f" :
    advisory_level === "WATCH" ? "#faad14" :
    orbital_stability > 0.9 ? "#52c41a" :
    "#1890ff";
 
  const haloRadius = 1 + (1 - orbital_stability) * 4;
 
  return { trackColor, haloRadius, labelBadge: advisory_level };
}

Outcome: Space Force unit gets overlays in their SDA/launch displays with zero impact on core tools.