62cee15549
Parse the 1135 forbidden airway segments in RAD Annex 2B (rows with Airway/From/To + "NOT AVBL FOR TFC") into structured ForbiddenSeg records (FL band + arrival/departure applicability), and route around the ones that apply to a flight from the start: - core::rad: ForbiddenSeg + RadData.forbidden_segs + forbidden_segments( adep, ades, fl) -> applicable (airway,from,to) triples. - rad crate: parse_forbidden_segments() wired into parse(); rad-tool `forbidden [ADEP ADES FL]` to inspect. - graph: seg_key() encodes a segment ban into the existing avoid channel; build_avoiding skips those segments. discover seeds the avoid set with the flight's Annex-2B bans before generating the airway candidate. Measured: no regression (coverage 4/10 unchanged on the batch) — this is the *forbidden* half. The coverage mover is mandatory routing (PROF205: "must route via X"), which pure avoidance can't provide; that's phase 2. 49 tests green. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>