Where the facts in this product came from. Served at /api/sources.
Why this page exists. DCS Sortie Starter makes a lot of specific claims — a
SAM's engagement radius, a squadron's callsign, the heading a stand's painted
lines run, the bearing of a 1981 raid, a contrast ratio. Every one of them is
either measured, cited, or an admitted estimate, and the difference matters. A
number nobody can trace is a number nobody should trust, including us.
If a claim can't be traced to a source, a measurement, or a stated estimate, it
is a bug — file it. tests/test_sources.py fails the build if a data pack with
external provenance has no entry.
The mission-file framework everything is built on.
vendor/dcs/COPYING.LESSER and vendor/dcs/COPYING.missiongen/_determinism.py — 33 lines of monkey-patch — precisely so the vendored library stays separable and replaceable, which is what LGPL-3.0 §4/§5 requires. Full statement: vendor/dcs/PYDCS_PROVENANCE.md.missiongen/data/scenario_stores.json supplies the verified TARPS store absent
from vendored PyDCS. It does not modify the vendor library.
{F14-TARPS} on pylon Number 6. Pinned export SHA-256: 609df992ca93abd820068d121ebb3b0e6f3516c7bef2fe0686406cedee93c526.Two terrain packages are lifted from a fork, not from upstream.
3a79b8edf923042a5b933feb64543da9e6bdfd37 (25 July 2026)missiongen/terrains/iraq/ (v1.67.0) and missiongen/terrains/afghanistan/ (v1.68.0).Terrain.__init__ requires a utc_offset and the fork's does not. Iraq gets UTC+3 (Arabia Standard Time), Afghanistan UTC+04:30. Nothing else is changed.Terrain.utc_offset. Reasoning in docs/pydcs-fork-feature-review.md.Product state, airfield lists, what is modelled and what is planned.
Full research with per-claim citations: docs/dcs-iraq-map-state.md.
AIRBASE enum — an independent, code-derived airfield list we cross-check againstThese are not cited because nobody has published them. They are measured,
by us, with the method and the date recorded.
| Data | What it is | Method |
|---|---|---|
data/parking_headings.json | 10,921 painted-line stand headings (degrees TRUE) across eleven maps | 9,524 legacy measurements after removing 26 dead stand names, plus 1,397 identified Iraq stands captured in DCS on 2026-10-03. Iraq IDs, names and coordinates match the terrain export and all headings cross-check against the supplied debrief within 0.088°. Guarded by tests/test_parking_headings.py and tests/test_parking_directions.py. Source hashes: docs/iraq-parking-liveries-2026-10-03.md. |
data/static_liveries.json | Exact-model, era/country static livery choices | Stock F-4E af standard folder is recorded in DCS updater output. Heatblur F-4E-45MC 421st_TFS_SEA_68-336 is recorded in the user's Iraq DCS log. Only Cold War USA choices are currently authored. The broader guessed liveries.json stays disabled; these sources do not establish exact squadron/date/base accuracy or validate rendered appearance on every installation. |
data/airframe_dimensions.json | Real in-sim bounding boxes (m) | BUSURVEY export read out of dcs.log. pydcs models the F-14's span as 10.15 m (swept); the real envelope is 20.34 m. Survey f14bu_survey2, 21 July 2026. |
missiongen/terrains/afghanistan/projection.py | Transverse Mercator parameters | Originally derived by us from an in-sim probe mission (probe_afghanistan.miz → scripts/import_projection.py) and marked provisional. v1.68.0 replaced it with ED's official export — which agreed with ours to 2.3 × 10⁻⁵ m of false easting. The label was over-cautious, not wrong. |
docs/mission-semantics-baseline.json | Semantic fingerprint of 52 generated missions | scripts/mission_semantics.py. Not a source so much as a control: it is how we prove a data swap changed what we think it changed. |
aar.TERRAIN_MAX_FT — the refuelling track floorA refuelling track you can fly into a mountain is not a training aid. pydcs
exposes no terrain elevation (terrain carries no height attributes and an
airport's alt is None), so the highest ground on each map is a table, and
each row is labelled with where the number came from.
"cited" rows are published summit elevations, taken as the map's ceiling because the peak is inside the playable area: Mount Elbrus, 5,642 m / 18,510 ft on Caucasus, and Noshaq, 7,492 m / 24,580 ft on Afghanistan."ours" rows are our own conservative estimates — a round number at or above the highest terrain we can identify within the map bounds. They are labelled as estimates precisely because they are not measurements, per the honest-numbers rule.max(tanker's own block, highest ground + 3,000 ft), rounded up to the next thousand, and clamped to the tanker's ceiling. The 3,000 ft is clearance for the receiver, who starts each ride 1,000 ft below the track. A tanker that cannot reach the resulting altitude is not offered for that map, and the reason is printed beside the ones the era gate removed.data/aircraft_service.json and data/weapon_service.jsonThe hard filter that keeps a Hornet out of 1978 and an AIM-120 off a 1965
Phantom is two tables of [from_year, to_year | null], one per pydcs aircraft
class and one per weapon CLSID.
tests/test_pending_aircraft.py asserts that split so it cannot drift. The F-14A remains the period-correct Cold War Tomcat./api/health under service_data_gaps. Racks (LAU-7, APU-60-2M) inherit their family's window by prefix rather than being listed individually.data/air_corridors.jsonCurated tactical lanes per map and era: a compass bearing from the friendly
base centroid and a reach in metres. Every lane traces to a published
operation — see §3 below, and docs/iraq-air-corridors.md for the full
citations, the places sources disagree, and the four candidates we rejected.
Corridors that cross terrain a map's developer has not detailed yet carry a
terrain_note that is briefed to the pilot verbatim.
bc_* Library cardsEleven Library cards follow the phase architecture, task lists and setup
geometry of **AETC Syllabus F16C0B00PL (56 FW), "F-16C/D Initial
Qualification", April 2014** — the Luke AFB Combined Wingman Syllabus. Every
card names the document and the paragraph it came from, and
tests/test_bcourse.py fails the build if one stops doing so.
.miz.docs/f16-bcourse-track.md. The 5,000 ft hard deck is now cited, not ours. It was labelled an invention until two further documents turned up stating it for exactly this activity: the 48 OG / 493 FS F-15C Flying Training Syllabus (Feb 2009 — "Floor: 5,000 ft AWL/AGL" on every BFM ride) and AFMAN 11-2F-22A Vol 3, *F-22A Operations Procedures*, 20 Sep 2018, Table 3.2 ("Aerobatics / Air Combat Training / Advanced Handling: 5,000"). Same figure, two commands, two airframes. That manual is also the source of the training-rules gates worth adopting more widely — 300 KCAS minimum for low-level navigation, 350 KCAS for low-altitude maneuvering below 5,000 ft AGL, 1,000 ft deconfliction reducing to 500 ft below 5,000 ft AGL. Review of the whole source library, with what to build from it: docs/source-library-proposals.md.missiongen/aar.pySix tankers, each on a track its receivers can actually fly. Every entry
carries a basis field, because these are a different kind of number from
the BFM perches: tuned operating points, not quotations. No document in
this library states AAR airspeed bands, so the table says so next to each value
rather than implying doctrine.
What is sourced is the instruction. The pre-contact zero-closure gate is
ATP-56; the 1-3 kt closure figure is from Stephenson's *Air Refueling
Receiver*; the boom-vs-drogue hookup benchmark (40.8 s vs 85.0 s) is a CARI
study; and the pilot-induced-oscillation explanation — phase lag, loop gain,
the 0.5-1 Hz danger band — is the standard PIO literature. Full working and
citations: docs/aar-training.md.
The card deliberately refuses to give a control-curve number. Published
recommendations for the same task span 0 to 30 depending on gimbal type and
stick length. A single figure would be confidently wrong for most readers,
which is the same failure mode as an invented range.
Admitted estimates, labelled as such. Where we could not measure or cite, we
say so in the product rather than rounding a guess into a fact:
docs/ROADMAP.md, "Verified magnetic variation".)Each corridor and scenario traces to a published account. Full write-ups with
per-claim citations, source disagreements, and the candidates we rejected:
docs/iraq-air-corridors.md.
Iran–Iraq War (1980–88)
data/nttr_corridors.json, nttr.py, v1.99.0). Every routed flight plan on the Nevada map is threaded through the published structure — the FLEX turnout, the Sally Corridor, the Alamo Corridor, the FYTTR departure west, the recoveries. Structure and rules:nttr_chart.py, /api/nttr/chart.png); every other outline on that chart is curated and marked ~approx:true, marked ~ on the F10 map and listed in the brief as curated. The far-west road goes round R-4808N because the straight line from Indian Springs to Beatty runs through the Box. Levant corridors (data/corridors/syria.json, corridors.py, v1.102.0). The same standard on the Syria map — one data file per map, four home clusters (the Galilee fields, Akrotiri and the Cyprus fields, Incirlik and the Adana MTMA, Muwaffaq Salti and the Jordanian fields), six target sectors (Lebanon, Damascus, the coast, the north, the east, central Syria). The structure is the published one — airways, FIR-boundary fixes, TMAs, the Israeli training blocks — and the roads are the ones the IAF and the coalition are reported to have flown. Sources:~); IFALPA/IFATCA Ankara–Nicosia FIR leaflet; Eurocontrol ERC04Lapprox:true, ~ on the chart, listed in the brief as curated); Syria's P/R/D areas (the eAIP prints none); the Lebanese ATS routes in usable detail. The coast and the borders on the chart are schematic polylines, not surveyed. Central Region corridors (data/corridors/germany.json, v1.103.0). The Cold War Germany map, Cold War era only, both sides of the line. Seven NATO clusters (the Eifel, the Hunsrück, the Pfalz, Rhein-Main, the Rhineland, the Weser, the Elbe) and three Warsaw Pact clusters (the Berlin ring, the southern fields, Mecklenburg) share six curated crossing gates — Boizenburg, Dömitz, Helmstedt, Herleshausen, Point Alpha, Hof. What is drawn from the printed figure and what is placed:~).~).~).~); Sperenberg, Jüterbog, Alt Daber, Templin/Groß Dölln, Parchim, Oranienburg, Werneuchen, Stendal-Borstel.~); Bundestag 16/10116 (TRA 204/304 Eifel absorbed into Lauter 2003), de.wikipedia TRA Lauter, flugzeugforum TRA 205/305 (outline approximate, ~).~; the ADIZ and the belts are bands on a schematic border; the border, the Elbe, the coast and the autobahns are schematic. Other theatres. data/historical_airspace.json carries the Berlin air corridors, the Syria/Euphrates deconfliction line, OEF airspace control and the Groom box. data/theater_identity.json carries per-map/era national ownership of each airbase. What we deliberately did not use. Two things are widely repeated and have no citable authority we could find: a named post-2003 **Baghdad restricted operating zone, and the BIAP "corkscrew" approach**. They are folk knowledge, so they are not in the product. Documented in docs/iraq-air-corridors.md.missiongen/bfm.py — the three-perch ladder. Geometry (range, aspect, altitude offset) is the difficulty knob rather than an AI skill slider, and every standards card is generated from the rung actually flown. Design and instructional rationale: docs/skillwork-syllabus.md.data/comms_plan.json — one comm ladder used by every generated mission, so a pilot learns a single plan that holds across all starters. All UHF/VHF-AM values sit on real, legal frequencies.data/callsigns.json — each entry is tagged documented (a real squadron or flight radio callsign with a known source: incident audio, callsign registries) or flavor (plausible, invented). The tag ships with the data so the distinction survives.data/squadrons.json — real squadron identities per base, used to fill ramps in contiguous single-type blocks the way a real flight line reads.data/courses.json, missiongen/courses.py). The three-school shape — UPT, FRS, MQT — is the order the US services train a pilot, and the course is laid over rides whose sources are recorded above (the White Knights documents, the AAR Academy, the timing track). The readings under data/courses/ are original writing for this product: - f4e_history.md draws on Peter E. Davies, F-4 Phantom II vs MiG-21 (Osprey, 2008) and USAF F-4 Phantom II MiG Killers 1972–73 (Osprey, 2005); Marshall L. Michel III, *Clashes: Air Combat over North Vietnam 1965–1972* (Naval Institute Press, 1997) — the Sparrow/Sidewinder probability-of-kill figures and the training story; Robert F. Dorr and Anthony M. Thornborough, Phantom: A Legend in Its Own Time; the National Museum of the USAF fact sheets for the F-4C/D/E/G; the Heatblur DCS: F-4E manual for what the Block 45 airframe models. Dates and production totals are the commonly published ones (first flight 27 May 1958; F-4E first flight 30 June 1967; 5,195 built) and the chapter avoids figures the sources disagree on. - aviation_basics.md and pipeline_howto.md are general airmanship and product description; nothing in them is a measured claim.data/brand/flightline.json, generated into the frontend by scripts/gen_theme.py. Contrast ratios are computed, not claimed.docs/wcag-audit-2026-08-12.md. Enforced in the suite by tests/test_a11y.py and scripts/axe_check.js (axe-core, vendored at vendor/axe-core/, MPL-2.0 — see its LICENSE).data/brand/fonts/: IBM Plex Mono, Source Sans 3, Source Serif 4, Barlow Condensed, Bangers.data/brand/LICENSE-lucide.txt.| Component | License |
|---|---|
| DCS Sortie Starter (our code) | MIT © Authentic Media LLC — LICENSE |
vendor/dcs (pydcs) | LGPL-3.0, unmodified — vendor/dcs/COPYING.LESSER |
missiongen/terrains/{iraq,afghanistan} | LGPL-3.0, from the dcs-retribution fork |
vendor/axe-core | MPL-2.0 |
| Vendored fonts | SIL OFL 1.1 |
| Lucide icons | ISC |
Full third-party notices: THIRD-PARTY-NOTICES.md.
Not affiliated with Eagle Dynamics. DCS World and its terrain modules are
their products; this tool generates mission files for them.
**The Thanks list is rendered below this section when this page is served, and
it is not in this file.** That is deliberate. Everything above is a citation —
a pinned commit, a license, a published source — and belongs in the repository
where it is versioned, reviewed and guarded byte-for-byte. Gratitude is a
living list: it changes between releases, and the person who should be writing
it is the one who knows the community, not the one who knows the build system.
So it lives on the server's data volume, is edited from the password-gated
/admin under Thanks, and is injected into this page at request time.
Also available as JSON at /api/credits. See missiongen/credits.py.
| Document | What it covers |
|---|---|
docs/dcs-iraq-map-state.md | What ED has actually shipped for Iraq, with per-claim citations and an explicit list of what we could not verify |
docs/iraq-air-corridors.md | The corridor research: every lane, its sources, the disagreements between them, and the four candidates rejected |
docs/skillwork-syllabus.md | The training progression and its instructional design |
docs/pydcs-strategy.md, -fork-evaluation.md, -fork-feature-review.md, -plan-critique.md | The library question, from first look to standing conclusion ("take the data, leave the engine") |
docs/wcag-audit-2026-08-12.md | Accessibility audit and remediation |
docs/how-a-terrain-module-works.md, docs/afghanistan-terrain-export-runbook.md | How terrain data is exported and verified |
docs/chart-authenticity-evaluation.md | How close the theatre chart gets to a real aeronautical product, and where it deliberately stops |
vendor/dcs/PYDCS_PROVENANCE.md | The vendoring discipline and the LGPL reasoning |
The coverage register separates routing
networks, tactical axes and overlays for all 26 supported map-era pairs.
The canonical dataset is missiongen/data/historical_coverage.json; the
research record includes primary
links, access limitations, unresolved coordinates and date conflicts.
The Falklands circle follows the 28 April 1982 Hansard announcement:
200 nautical miles around 51°40′S, 59°30′W, effective 30 April at 1100 GMT.
A later Naval War College reprint has a conflicting longitude; the published
Hansard coordinate is used. Termination and later changes are not inferred.
Normandy's transport reference uses USAF Historical Study 97, printed
pages 11–12 (official host,
reviewed primary-document mirror).
HOBOKEN's coordinate is transcribed; Portland Bill and Portbail are reconstructed
geographic terminals. No width is invented and no fighter clearance is inferred.
Iraq's parallels follow Canada DND
September 1996 is month precision; an exact amendment day is not asserted.
Finite drawing endpoints are diagram extents, not an authenticated border polygon.
ICAO RASMAG/15 WP09 identifies six Afghan ATS route designators. Its old
original URL returns 404; indexed official text establishes their names,
not coordinates or today's validity. UN annex-map fetches were unavailable;
no precise Sinai treaty polygons were manufactured. Reference dates never
substitute for operational start/end dates. No map is claimed exhaustive.
The Historical Library publishes 18 bounded readings
from selected documents in the supplied archive. Its canonical register is
missiongen/data/historical_library.json; sources carry the supplied filename,
edition SHA-256, physical PDF page count, publication precision where known,
and access limits. Original scans and private filesystem paths are not served.
The archive inventory is broader than the targeted page review; this is not an
exhaustive reading of every document.
February 1981 Nevada ATC/navaid coordinates, eight tanker reference rows and
LOTUS/PLAZA/FLEX procedure notes remain separate from the 2014 recall gates and
Elgin/Sally activation conditions. Unknown datum, closed-track geometry and
operational validity are retained. Printed mixed level notation is not silently
converted into a universal altitude basis.
USAF lineage records and the 36th Wing retrospective distinguish 1944 group
moves from squadron arrivals, Bitburg aircraft transitions and temporary GULLY
JUMP basing. Official squadron fact sheets provide independent corroboration.
1973 VF-14 histories preserve original designations and aircraft variants;
VF-11's 2003 training/workups are not relabelled as an OIF deployment. GWAPS
monthly 1991 strength records and the dated 2003 USCENTAF assessment establish
snapshots and campaign structure, not exact theater corridors.
The 1978–80 F-4 pamphlets provide period systems and crew context. The ARN-101
forecast is not a universal fielding date; a planned 1979 DACT visit is not proof
of execution. CHECO weather/weapon lessons remain dated off-map context. The
Afghanistan 1989–2001 overview is secondary background based on selected early
pages, not authenticated airspace geometry. Unverified virtual-unit SOPs,
undated adaptations, the restricted MTTP and unrelated music/link files remain
explicitly held or excluded. No restricted tables or supplied scans are copied.
Iraq Gulf carrier coverage: ED's Iraq Release FAQ
distinguishes entire-map flyability from regional scenery detail. The selected
anchor, screen and steaming window are authored geometry checked against the
Iraq projection/bounds and existing Gulf shoreline schematic; these are not a
simulator land-mask survey or a historical naval station. A public author's
corroborates Gulf carrier placement. Its scripts and mission content are not
imported into our generator. See docs/dcs-iraq-map-state.md for the dated
research snapshot and coverage correction.
This tool stands on a lot of other people's work. Some of it is code we vendored and some of it is the reason anybody knows how to fly these aircraft at all.