The Factory

⚠ In development — prototype · Project management and author: Adrien Normier (with grateful acknowledgment to Jonathan Justman and V. Nakache for help in the project's earliest steps) · Ontological development grounded in the works of the Cosmic Footprint Society (2024 ISSI Forum on Cosmic Footprint) · Dataset © Adrien Normier · Licence: SSR-GPL v2.0

What the Factory is

The Factory is the registry's single licensed maker of values nobody measured. When a real object is missing a parameter — a diameter, a mass, an orbit plane — or when a region of the scene has no catalogued content at all, the Factory supplies an explicit, modelled estimate. It never measures and never invents ad-hoc: every output is deterministic from a seed and a paper pack (a named, swappable bundle of published distributions), and every value is tagged so it reads as an estimate wherever it appears — synthetic and fitted content renders dimmed or translucent, and each factory-supplied parameter is listed per object with the method that produced it.

The Factory is a watertight block (architecture §4): it imports only the shared record contract, it never fetches data, never reads disk, never emits measured records. Registry truth (from the ingest block) always comes first; the Factory only fills what truth left empty. It is the in-repo embryo of an external Factory service — stateless, reproducible, replaceable behind one door.

Three domains

The Factory's published model spans three domains, mirroring the functional specification:

DomainGeneratesOrigin
Astrophysicsstars, planets, moons, galaxies, surfaces, atmospheresNATURAL
Exobiologyabiogenesis, biospheres, biosignatures (reserved — not yet generating)NATURAL
Footprintinfrastructure, emissions, debris, maneuver exhaust, deposition footprintsARTIFICIAL

Three operations

Each domain offers the same three operations:

All three are the same function shape — (seed, paperPack, request) → output, stateless, deterministic, estimate-only. What differs is only where the subject comes from: fit is handed a known object, fill is handed a known region or host, and full is handed nothing at all.

Functions developed so far

This is the current, honest inventory of what the prototype Factory implements. Everything below is reached through the Factory's single public door (src/factory/index.ts); nothing else in the codebase calls its internals.

fill — synthetic backdrop population

Reached via fillSync / fillStreaming, budgeted by a scale preset (TINY → HUGE) and the paper pack's category mix. All output is SYNTHETIC, seeded and reproducible, rendered dimmed — a setting, never a census.

FunctionGeneratesOrigin
emitGalaxies
natural/galaxies.ts
synthetic galaxies populating the Local Group beyond the catalogued members, each with a seeded disc orientationNATURAL
emitStars
natural/stars.ts
synthetic stars filling the Milky Way beyond the Gaia catalogue's reach — circulating about the GALACTIC CENTRE (8.1 kpc along +x̂gal, clockwise seen from the north galactic pole) on the cited flat 229 km/s curve (Eilers et al. 2019, DOI); the pre-2026-07-21 version circled the frame origin (= Sol) — a display fix on SYNTHETIC data, seed/pack unchangedNATURAL
emitGalacticStars
natural/milkyway.ts
“generate galaxy from image” — ≈30,000 field stars sampled from the NASA/JPL-Caltech (R. Hurt) Milky Way structure map: luminance drives the spiral-arm density (CDF sharpened ^1.5, circular cutout), the map's colour tints each star, with a bulge-thickened exponential disc and a flat 229 km/s rotation curve (Eilers et al. 2019, DOI). An artist-informed density proxy, not a stellar census (real stars are the Gaia layer)NATURAL
emitPlanets
natural/planets.ts
synthetic planets on log-uniform orbits around synthetic starsNATURAL
emitMoons
natural/moons.ts
procedural moons on the generated planetsNATURAL
emitOrbiters · emitLanders
artificial/artifacts.ts
synthetic artefacts (orbiters, landers) on the synthetic bodies — the Footprint domain's backdropARTIFICIAL

full — GENESIS: a whole system from a seed and a stack of papers

The third operation, and the one that needs a fence. GENESIS generates a complete stellar system with no measured input at all: a seed and a set of cited paper packs go in, a star and its planets come out. The rule it is built around is the project's Factory/Worldbuilding line — the Factory may invent an INSTANCE, never a LAW and never a DISTRIBUTION. So a generated system here is a draw from published distributions: the seed picks which sample, the papers decide what is sampled. A world whose rules we chose is legitimate, but it belongs to the worldbuilding module and carries its own provenance — it has no expression in this mode.

Everything the literature does not constrain is refused and counted, never filled in. A generated system deliberately has no moons (no published exomoon occurrence rate exists), no age, no metallicity, no stellar companion, no debris disc, no position of its own, and no catalogue-shaped name. Each refusal is recorded with the exact pack or dataset that would close it. Two measured consequences of that discipline, on 2,000 generated systems: 38.2 % of the mass draws are refused outright — they fall below the 0.179 M floor of the mass–luminosity relation, and a fit is not extrapolated past its own sample — and a further 95 stars are built but get no planets, being hotter than any published occurrence grid.

FunctionGeneratesOrigin
generateSystem · generateSystems
genesis/genesis.ts
one complete synthetic stellar system (or a batch, with its refusal census): the star's mass drawn from a published initial mass function, its luminosity/radius/temperature derived from that mass, its planets drawn from the published Kepler occurrence grids, its habitable annulus derived by a published method. Deterministic in (seed, system id, pack ids) — the dice is a seed re-run, never a stored variantNATURAL
sampleImfMass · imfCdf · imfQuantile
genesis/imf.ts
a stellar mass drawn from a cited initial mass function, through one generic numerical inverse-CDF that serves any pack: Kroupa 2001 canonical two-part power law (DOI) and Chabrier 2003 disc IMF for individual stars (DOI). Normalisation cancels and piecewise branches are joined by computed continuity, so no pack quotes a constant it could mis-copy. Anchor: the Kroupa fraction below 0.5 M is 76.1 %, against the published ≈70–75 % M-dwarf fraction of the solar neighbourhoodNATURAL
mainSequenceStructure
genesis/mainsequence.ts
the star itself from its mass — luminosity, radius and effective temperature via the Eker et al. 2018 interrelated main-sequence relations (DOI), measured on 509 components of detached eclipsing binaries, with the third quantity closed by the Stefan–Boltzmann law exactly as that paper prescribes. Refuses outside its calibrated 0.179–31 M sample. Anchor: one solar mass returns Teff = 5771.9 K against the IAU nominal 5772 K (0.001 %), L = 0.984 L, R = 0.992 RNATURAL
genesisRecords · emitGenesisSystems
genesis/records.ts
the generated system as registry records — a synthetic star and its drawn planets, each carrying its recipe (seed + every pack id) in its own note. Placement is always the caller's: a system has no position of its own, so this never invents a coordinate; ids and names stay visibly synthetic rather than imitating a catalogue designation; and no colour is painted, because nobody derived oneNATURAL

fit — completing a known object

Reached via fitNode — the LIGHT-mode half of the VIZ→Factory pull. It supplies only what the registry left empty, so a real but under-described object can still be drawn and inspected.

FunctionCompletesOrigin
fitNode
fit.ts
radius ↔ mass power laws and a class-procedural generic surface for imagery-less known planets (most exoplanets), each listed as “provided by factory” with its methodmatches the host
classifyPlanet
natural/planetclass.ts
the planet's coarse class from MEASURED parameters only — telluric / lava-hot telluric / Neptunian / cold–hot gas giant — driving which generic procedural texture the fit assigns, with the class + its published basis NAMED in the inspector's “provided by factory” line. Thresholds are taken from the literature, never invented: rocky bound 1.6 R⊕ (Rogers 2015 — the same bound the telluric census uses), giant bound 6 R⊕ (Kepler size classes, Borucki et al. 2011), mass regimes 2 / 130 M⊕ (Chen & Kipping 2017 — the same regime boundaries as the mass–radius law above), hot-giant T_eq ≥ 900 K (alkali-haze appearance class, Sudarsky et al. 2000 / 2003), lava-hot telluric T_eq ≥ 1500 K (silicate-melt regime, Chao et al. 2021), with the zero-albedo T_eq = T_eff·√(R★/2a) computed only when the host's sourced temperature + radius and the orbit exist. Missing radius AND mass ⇒ no class (the plain generic default — absence never invents a class); no computable irradiation ⇒ no hot/cold claim. Deterministic, seedless; the class render is a GENERIC texture, never imagery (this is the honest equivalent of NASA's Eyes-on-Exoplanets class-based artist renders — no per-planet exoplanet texture database exists to ingest)NATURAL
fitTrajectory
artificial/trajectory.ts
the multistage maneuver catalog: for each phase boundary it classifies a same-parent burn (Δv), a patched-conic handover, a landing or a launch — the inspector's per-segment voyage breakdownARTIFICIAL
fitDeposition
fit.ts
the ballistic plume footprint of a lander on an airless body (≈ v²/g), oriented by the curated approach bearing where one exists. An unphased surface point with no catalogued mass (curated impact scars, artifacts) inherits the landing-class envelope at the unknown-mass default — an OWNER-CHOSEN knowledge-marker visual (2026-07-02: "return the phantom envelopes, it was nice"), MODELLED and labelled, not a fitted plume. Footprint outlines/fills are drawn conformally ON the sphere (geodesic ellipse sampling, sphereellipse.ts) — never a flat tangent-plane ellipseARTIFICIAL
asteroidShape
natural/asteroidshape.ts
the seeded irregular 3D form (“potato”) of a minor body with a measured radius but no observed shape model — a direction-displaced icosphere with baked lambert shading, emitted as plain position+colour arrays (tier-pure, no THREE). The SIZE is real (the node's radius); the SHAPE is modelled — the record card reads “3D shape: procedural [factory · seeded, modelled]”, distinct from an observed radar/GLB meshNATURAL
habitableZone
natural/habitablezone.ts
the habitable annulus of a star — its luminosity derived from the SOURCED radius + effective temperature (Stefan–Boltzmann). There is no single “the” habitable zone, so the method is SELECTABLE among five published models: Kopparapu 2014 (the T_eff-dependent S_eff polynomial, more accurate across spectral type, the default), flux-scaled (the simple sqrt(L) scaling of the solar boundary distances, Kopparapu 2013), Kasting 1993 (constant effective-flux boundaries — runaway/maximum-greenhouse conservative, recent-Venus/early-Mars empirical optimistic — scaled by sqrt(L); DOI), Selsis 2007 (its OWN scaling law: each boundary distance is a quadratic in T_eff × sqrt(L), eqs. 2-3; DOI) and Kaltenegger & Sasselov 2011 (the equilibrium-temperature band 175 K < T_eq < 270 K from their §4, converted to distances via T_eq = T_eff·√(R★/2a)·(1−A)^¼ at the stated Earth-like Bond albedo A = 0.29 — one published band, so its conservative and optimistic limits coincide; DOI). Conservative (moist … maximum greenhouse) and optimistic (recent Venus … early Mars) limits; absent radius or temperature ⇒ no estimate (never invented). Drawn as ring overlays (incl. all-methods overlay) + read out in the inspector; modelled, declared. The Kasting boundaries, Selsis coefficients + the T_eq bounds are taken verbatim from the papers (A5)NATURAL
hillRadius
natural/hillsphere.ts
the Hill sphere of a body — the radius within which its own gravity dominates over its primary's and it can hold satellites, r_H ≈ a(1−e)(m/3M)^⅓ at periapsis. Computed only from the SOURCED orbit (a, e) and the body + primary masses; any missing ⇒ no estimate (never invents a mass). Drawn as a faint translucent shell around a framed bodyNATURAL
screenKeplerFidelity
natural/perturbers.ts
a statement about the MODEL, not about the object: is the FIXED two-body ellipse the registry draws for this orbit a defensible long-term prediction, or does the orbit cross a third body's gravitational reach so that the drawn path and the real path are different curves? The classical crossing-orbit screen — radial-band overlap measured in Hill radii, q ≤ aM+k·RH and Q ≥ aM−k·RH (built on hillRadius above), with k = 3 exposed as a parameter rather than buried, because the screening scale is a judgement and should be visible as one. The case that forced it: the Falcon 9 upper stage 2025-010D, whose stored ellipse tops out 15,500 km SHORT of the lunar orbital radius — so a naive “do the radii meet?” test says no — and which is nevertheless going to strike the Moon on 2026 Aug 5; the Hill band flags it 2.73 RH deep. Measured over the shipped bake: 4,558 of 52,847 screened orbits are flagged (8.6%) — 88.9% of the core layer (the near-Earth-asteroid and comet population, which is defined by crossing, so this is the screen agreeing with the catalogue), 2.7% of exoplanets (tightly-packed multiplanet systems), 0.9% of GCAT, of which 184 are Earth-frame objects crossing the Moon's reach. Deliberately crude in one direction and honest about it: overlap makes an encounter POSSIBLE, not certain — inclination and phase can keep a crossing orbit clear for a long time. A5 limits stated in the note it carries: it cannot see NON-gravitational forces (solar radiation pressure on a light, large body — decisive for this very object), and a perturber whose mass the registry does not carry is SKIPPED and counted, never assigned a plausible oneNATURAL
reachBandOf · bandsCanMeet
natural/perturbers.ts
the SAME geometry read symmetrically: the band of radii a body sweeps about its primary, widened by its own reach — its Hill radius where a mass is known, else its physical radius, else ZERO (never a guessed size, A5) — and whether two such bands overlap. Answers “could these two ever meet?” for a pair sharing a primary, including the case where NEITHER has a usable mass (two satellites). Why the radial band and not a minimum-orbital-intersection-distance test: nodes and apsides PRECESS at rates that differ with semi-major axis and inclination, so over many revolutions the angular configuration sweeps through everything, while the range of radii each body visits does not change — the band test is the LONG-TERM criterion, and a MOID test answers a different question (this pass, not ever). This is the classical apogee/perigee pre-filter of conjunction screening, used the way it is honest: as a NECESSARY condition. Overlap does not make an encounter likely and nothing here says it does; what it EXCLUDES is certain. Feeds the per-object potential-impactor groups (engine/impactors.ts) — measured on the shipped bake: Earth 2,788 natural candidates · the Moon 205 artificial · the ISS 5,345 · Phobos 0NATURAL
impactGate
natural/perturbers.ts
where a clear criterion stops, and why it stops there (owner 2026-07-28: “quel est le choix de gate ? est-ce que c’est le fait qu’il passe dans la sphère de Hill ?”). The answer: the Hill sphere is the right gate for one question and the WRONG gate for the other. Crossing it gates “the two-body model has stopped being predictive” — a statement about OUR MODEL. An IMPACT needs the target’s PHYSICAL radius, the disc that must actually be struck, enlarged by gravitational focusing (Safronov, R·√(1+vesc²/vrel²) ≈ 1.1–1.3 at typical encounter speeds — stated, not computed, because a relative velocity we do not measure is not one to invent). For the Earth those radii are ~1.5 million km against 6,371 km: the region where the model already fails is ~200× wider than the target, ~40,000× its area. So the verdict has TWO values and deliberately no “likely”: excluded (bands disjoint — no collision possible while these elements hold; PROVABLE, the strong half) and open, with the basis recorded — crossing (the orbits reach the same radii) or gravitational-grip (the object enters the Hill reach, so the answer is not merely unknown but provably ABSENT from this data). A grip verdict reports gripToTargetRatio, the measured number that justifies leaving it open (the Moon: ~100×); a target with no measured radius reports NO ratio rather than an estimate (A5). Closing it needs an n-body integration with a covariance — NASA/JPL Sentry — and until such a source is ingested no probability is producedNATURAL
deriveGalacticOrbit · circularVelocityMs · escapeVelocityMs · galacticAccel · galacticPotential
natural/galacticorbit.ts
the galactic orbit of a single star — a test-particle trajectory integrated (fixed-step RK4, ≤512 samples, deterministic) in the Irrgang et al. 2013 Model I Milky Way potential (revised Allen & Santillán 1991: Plummer bulge + Miyamoto–Nagai disc + truncated spherical dark halo; DOI), from the star's MEASURED position + full 3-D space velocity and the galactic-centre offset taken from registry data. NOT a Kepler ellipse about the centre: the Galaxy's mass is extended, so the measured rotation curve stays near-flat across 5–25 kpc (Eilers et al. 2019, DOI; the classic flat-curve result: Rubin & Ford 1970, DOI) where a point-mass orbit would fall as r−½. The paper's own derived anchors — vc(8.40 kpc) = 242.0 km/s and vesc,⊙ = 616.4 km/s — are reproduced in the test file; energy conservation is pinned <10−6. MODELLED, display-only, single-element on-demand (§4.5, never a population sweep) — feeds the star-trajectory line (so=gal); a star without a measured full 3-D velocity ⇒ no orbit (never invented); an unbound state is flagged UNBOUND, never hidden. Caveats stated in the note: static axisymmetric model (no bar/spiral). The registry's stellar velocity convention (2026-07-21) is the Sun's FULL galactocentric motion — vc = 229 km/s (Eilers et al. 2019, DOI) + the measured solar peculiar motion (U,V,W) = (11.10, 12.24, 7.25) km/s (Schönrich et al. 2010, DOI) — whose total solar tangential speed (241.2 km/s) agrees to 0.8 km/s with this potential's own vc(8.40 kpc) = 242.0 km/s: one convention, no drift-vs-potential mismatchNATURAL
deriveEpicyclic · evalEpicyclic · epicyclicFrequencies
natural/epicyclic.ts
the epicyclic closed-form orbit of a single near-circular disc star about its guiding centre (the standard small-amplitude approximation, Binney & Tremaine 2008, Galactic Dynamics 2nd ed. §3.2.3) in the SAME Irrgang et al. 2013 Model I potential (DOI) the RK4 integrator uses: R(t)=Rg+X·cos(κt+α), z(t)=Z·cos(νt+β), azimuth by Lz conservation. A per-star CLOSED FORM whose coefficients derive ONCE off the frame path (guiding radius from Lz; radial frequency κ²=R·dΩc²/dR+4Ωc², vertical ν²=∂²Φ/∂z²) and evaluate in ~113 ns — a flat rotation curve gives κ=√2·Ωc, a Kepler curve κ=Ωc (test-pinned; κ/Ωc=1.39 at 8.1 kpc). Faithful ONLY for near-circular orbits: a small-amplitude gate (X/Rg ≤ 0.20, Z/Rg ≤ 0.10) flags halo/high-velocity stars OUTSIDE it (still returns coefficients, never hidden). A calibrate mode fits κeffeffeff from ONE integrated radial period, killing the textbook secular phase drift (max error over ±100 Myr at X/Rg ≤ 0.1: 20%→3.9% of Rg). Cross-pinned against deriveGalacticOrbit for near-circular orbits; reproduces the input position + velocity exactly at Δt = 0 (a seamless piecewise switch). MODELLED — GROUNDWORK for a possible whole-population galactic-orbit DEFAULT (the §4.5 batch-scope decision; ARCHIVE.md “Galactic-orbit default design 2026-07-21”); NOT yet wired into any hot path. A5: missing 3-D velocity / a radial plunge (|vφ| < 1 km/s) ⇒ null, never inventedNATURAL
deriveSystemFill · mutualHillDelta
natural/systemfill.ts
the statistically-expected unseen planets of a single host star — the Astrophysics fill (spec §3): for one host, a deterministic seeded draw of the synthetic planetary complement from PUBLISHED Kepler occurrence grids, one Bernoulli trial per (size class × period bin) cell. Paper packs (swappable cited coefficient tables, the HZ discipline — never an invented split): kepler-fgkm@1 = Fressin et al. 2013 FGK Table 2 (DOI) + Dressing & Charbonneau 2015 M-dwarf Table 4 (DOI); petigura13@1 = Petigura, Howard & Marcy 2013 Sun-like GK (DOI). A system's KNOWN planets CONSTRAIN the draw (their occupied class×bin cells are never re-drawn) and a candidate is rejected when it sits closer than Δ = 10 mutual Hill radii to any known or accepted planet (mutualHillDelta; Pu & Wu 2015 circular-coplanar survival minimum, DOI). Orbit shape from published Kepler-multi distributions: e ~ Rayleigh(0.04) (Xie et al. 2016, DOI), mutual inclination ~ Rayleigh(1.4°) (Fabrycky et al. 2014, DOI), Ω/ω/M₀ uniform (stated convention); mass from radius via the Chen & Kipping 2017 class law (DOI). SYNTHETIC by definition — an AVERAGE-occurrence draw (framing: Zhu & Dong 2021 review, DOI), never a claim about THIS system; the recipe {seed, packId} rides in every note (the dice re-runs the seed — no variant baking). Single-element on-demand (§4.5) — feeds the full-system fill overlay (sf=1); a host without a measured mass+temperature, or outside the pack's sample bounds, gets nothing (the reason stated, A5)NATURAL
deriveLocalGroupOrbits
natural/lgnbody.ts
the Local Group few-body motion — the mutual gravitational trajectories of the three massive members (Milky Way · M31 · M33) integrated together (fixed-step RK4, ≤511 samples, deterministic, symmetric softened point masses) from the CANONICAL initial conditions of van der Marel, Besla, Cox, Sohn & Anderson 2012 III (DOI): the MEASURED M31 velocity vector from HST proper motions (Sohn et al. 2012, DOI) and the M33 velocity from VLBA water masers (Brunthaler et al. 2005, DOI). Reproduces the classic timing-argument approach of Andromeda (Kahn & Woltjer 1959, DOI): the friction-free MW–M31 first pericenter lands at ~4.3 Gyr, the +1σ end of the paper's 3.87 +0.42/−0.32 Gyr (the omitted dynamical friction hastens the paper's value); energy conservation pinned <10−8. WHY few-body and not a smooth potential: at Local Group scale the point masses DO dominate and DO move under each other (M31 is a comparable mass to the MW, not a test particle) — unlike a single star. MODELLED, display-only, single on-demand integration (§4.5, never a population sweep) — feeds the Local-Group-dynamics model (lgd, default on) so Andromeda moves in deep time; NO dynamical friction (first approach representative, merger not modelled), the LMC/SMC and dwarfs excluded, close-passage physics approximate (all stated in the note)NATURAL
deriveOverdensityRadius · zFromComovingDistanceM
natural/overdensityradius.ts
the overdensity radius RΔ of a galaxy cluster from its published overdensity mass MΔ — the identity that DEFINES the SZ/X-ray mass convention, inverted: MΔ = (4/3)π·Δ·ρcrit(z)·RΔ³ with ρcrit(z) = 3H(z)²/8πG, flat ΛCDM (Planck 2018 results VI, DOI). Δ = 500 by default, matching the Planck PSZ2 catalogue's MSZ ≡ M500 convention (DOI) — an OVERDENSITY radius, deliberately never labelled "virial". Verified against published MCXC (z, M500, R500) rows (Piffaretti et al. 2011, DOI: A2029 · A0085 · A2163 reproduce to <0.2% under that paper's own cosmology). zFromComovingDistanceM recovers a ΛCDM-placed node's catalogued redshift by inverting the comoving-distance placement (Hogg 1999, arXiv). MODELLED, single-element on-demand (§4.5) — feeds the zoom relevance floor at a cluster marker; missing mass/redshift ⇒ no estimate (never invented)NATURAL
yarkovskyDrift · yarkovskyColor
yarkovsky.ts
the MODELLED Yarkovsky semimajor-axis drift da/dt (m/yr, signed: + prograde/outward, − retrograde/inward) of a small body — the slow secular push from anisotropic thermal re-emission. A transparent ORDER-OF-MAGNITUDE scaled diurnal relation, da/dt ∝ cos(γ)/(D·ρ·√a), with the constant anchored to (101955) Bennu's measured −284 m/yr; no thermal integration. Reported at 2 sig-figs with a disclosed model equation, a per-input variance budget (obliquity 45% · thermal inertia 30% · density 15% · diameter 10%) and a ~factor-2 1σ (k=1) — “modelled, not a measurement”. yarkovskyColor is the pure diverging blue/red tint for a future overlayNATURAL
orbitPhaseSigmaRad · orbitAlongTrackSigmaM · alongTrackSaturationM · driftPositionSigmaM
lib/sigmagrowth.ts
σ through time — how a value's registry σ honestly GROWS away from its epoch of knowledge (MODELLED, k=1; symmetric in ±Δt — uncertainty grows both ways from when you last looked). The primitive the game module's door names as "a FACTORY request" (physical fog of war: "uncertainty grows while you are not looking", design doc §5.8 B) and any far-observer honesty display needs. TWO cited models, each with its domain refused rather than smoothed (A5): (1) two-body along-track growth from σ_a — the classical covariance-propagation result, derived in the header from Kepler's third law alone (n²a³=μ ⇒ δn=−(3/2)(n/a)·δa), σ_M(Δt)=σ_M(0)+(3/2)(n/a)·σ_a·|Δt| and σ_s(Δt)=σ_s(0)+(3/2)·n·σ_a·|Δt| ≡ (3/2)(σ_a/a)·v·|Δt|; test-pinned to the textbook figure — a LEO orbit (a=6,778 km) with σ_a=10 m grows 1,466 m of along-track σ per day (GEO, n smaller: 94.5 m/day). Standard treatments: Vallado, Fundamentals of Astrodynamics and Applications, 4th ed., Microcosm 2013 (no registered DOI — CrossRef checked 2026-07-29, cited as plain text); Montenbruck & Gill 2000, Satellite Orbits (DOI); Battin 1999 (DOI) — both book DOIs verified via CrossRef to resolve to those titles. Variance budget: ONE driving term (σ_a through ∂n/∂a = 100% of the growth); omitted and NAMED: σ_e/σ_i (bounded oscillatory, not secular), the a–M₀ covariance (not published per-object ⇒ the epoch term adds LINEARLY, the conservative bound), every non-two-body force. Stated domain: two-body only (a drag/resonance/close-encounter orbit — anything screenKeplerFidelity flags — grows FASTER than this floor); first-order (σ_a ≥ a refused, null); near-circular for the metre mapping (eccentric callers use the phase form, which is eccentricity-independent); and a declared SATURATION — beyond σ_M ≈ π (σ_s ≈ π·a, exported as alongTrackSaturationM — ~40 yr for the pinned LEO case) the phase has wrapped and only the ellipse is still known, never a silent clamp. (2) linear-drift growth from σ_v — EXACT first-order propagation of x=x₀+v·Δt: σ_pos(Δt)²=σ_pos(0)²+(σ_v·|Δt|)², cross-covariance dropped and SAID (the registry carries per-value σ only); test-pinned: σ_v=1 km/s over 100 yr → 3.16×10¹² m ≈ 21 AU. Guards on every function: a driving σ ≤ 0 / non-finite, a broken orbit, a non-finite Δt ⇒ null — never a fabricated growth. Pure, deterministic, single-element on-demand (§4.5); consumed through the factory door onlymatches the object

Footprint derivation

FunctionDerivesOrigin
deriveExhaustPuffs
artificial/exhaust.ts
maneuver exhaust puffs located at navigation-arc Δv discontinuities, with Tsiolkovsky propellant masses — upper-bound proxies, limits declared in the method articleARTIFICIAL
deriveBioburden
artificial/bioburden.ts
the maximal viable-spore burden a landed/impacting mission could deliver while satisfying the planetary-protection standard in force at its launch (the compliance regime is computed registry-side and passed in; the factory models the spore count from the regime + the craft's exposed area) — MODELLED upper bound, method & the per-body governance metric in the method articleARTIFICIAL

Dynamics — two-body preliminary-design maths

Closed-form, two-body preliminary-design maths, implemented and tested as a pure library behind the factory door. Everything here is MODELLED / PROJECTED (patched-conic / Lambert fidelity) — real preliminary-design accuracy, never an integrated truth, never baked into the registry. Each function DECLARES the conditions under which it is true and REFUSES outside them, returning nothing rather than a number about a different trajectory: a formula applied outside its regime is not approximate, it is wrong. Their first consumer is the mission-design manoeuvre grammar (a closed vocabulary of manoeuvre types for students and for mission planning); drawing a costed plan as a trajectory in the scene is still future work.

FunctionComputesOrigin
solveLambert
dynamics/lambert.ts
Lambert's two-point boundary-value problem — given r1, r2, a time-of-flight and µ, the transfer conic's departure/arrival velocities (universal-variable / Stumpff formulation, prograde or retrograde). Refuses degenerate or collinear geometry rather than invent a planeARTIFICIAL
hohmannTransfer
dynamics/transfer.ts
the Hohmann transfer between two coplanar circular orbits — the two burn Δv's, the total budget, the transfer-ellipse semi-major axis and the time of flight (LEO→GEO ≈ 3.9 km/s)ARTIFICIAL
biellipticTransfer
dynamics/transfer.ts
the THREE-burn transfer between coplanar circular orbits by way of a high intermediate apoapsis — the three Δv's, the budget and the (much longer) time of flight. Beyond a radius ratio of ≈11.94 some bi-elliptic beats the Hohmann and beyond ≈15.58 every one does; those published crossovers are recovered from this code by bisection rather than asserted at a point. Refuses an intermediate apoapsis inside the terminal radii — that is a different trajectory, not a cheaper oneARTIFICIAL
planeChangeDv · combinedPlaneChangeDv
dynamics/transfer.ts
rotating an orbit plane at constant speed, Δv = 2·v·sin(Δi/2) (28.5° costs ≈1.51 km/s at GEO but ≈3.80 km/s in low orbit — the standing argument for buying an inclination change at apogee); and changing radius and plane in ONE burn by the law of cosines, which is always cheaper (a GTO→GEO apogee kick from Cape Canaveral: 1.84 km/s combined against 2.99 km/s split). Both refuse |Δi| > π, where the sine turns back down and a larger rotation would be reported as cheaperARTIFICIAL
escapeC3FromVinf · injectionDvForVinf
dynamics/transfer.ts
the escape characteristic energy C3 = v∞² and the injection Δv from a circular parking orbit onto a hyperbola of a given v∞ARTIFICIAL
finiteBurnLoss · impulsiveArcLimitRad · finiteBurnDuration
dynamics/finiteburn.ts
where the IMPULSIVE idealisation stops being true. A burn of duration T sweeps an orbital arc Δθ = n·T, and thrust held along a rotating velocity achieves only sin(Δθ/2)/(Δθ/2) of what it spends — the sinc steering loss, derived in the module and re-derived in its test by numerical quadrature. impulsiveArcLimitRad inverts it (the 1% point is 0.4906 rad ≈ 28°), so the impulsive ceiling is COMPUTED from one definition instead of restated as a second; finiteBurnDuration gives the burn time from thrust, mass and exhaust velocity. Refuses past half a revolution, where the constant-rate assumption fails rather than blursARTIFICIAL
flybyTurn · maxFlybyTurnRad
dynamics/flyby.ts
the gravity assist as geometry — the hyperbola's eccentricity e = 1 + rp·v∞²/µ, its turn angle δ = 2·asin(1/e), the impact parameter, and the free central-frame velocity change |Δv| = 2·v∞/e the turn is worth (so a flyby can never deliver a full 2·v∞). The same 5.6 km/s pass turns 158.6° at Jupiter, 81.9° at Earth and 32.0° at Mars. Domain bounds (the body's own radius; its gravitational reach) are optional and the result states WHICH were checked — an absent bound is never reported as a passed oneARTIFICIAL
sphereOfInfluenceM · patchedConicDepart · patchedConicArrive · interplanetaryTransfer
dynamics/patchedconic.ts
CHANGING CENTRAL BODY — the patched-conic handover, without which an interplanetary mission (escape · cruise · capture) cannot be costed as one plan. The Laplace sphere of influence a·(m/M)2/5 (Earth 924,600 km; deliberately NOT the Hill radius, 1,471,600 km — different criteria, 59% apart, and Laplace is the one the patched-conic method wants), the departure handover returning the resulting heliocentric conic, its mirror at arrival, and the whole coplanar-circular mission budget as a composition of the doors above. Earth→Mars: 2.946 + 2.650 km/s heliocentric over 258.9 days, 3.590 km/s out of a 300 km parking orbit, 2.070 km/s into a 500 km Mars orbit. The approximation is quantified ON the result rather than hidden — treating the sphere of influence as a point is 0.62% wrong in position and understates the body-relative speed by 143 m/s (4.9%) at Earth, but only 1.1% at MarsARTIFICIAL
tsiolkovskyPropellant · tsiolkovskyMassRatio
dynamics/transfer.ts
the rocket equation — propellant mass mp = mdry·(eΔv/ve−1) and the wet/dry mass ratio for a Δv budget (the reusable form of the propellant law the exhaust layer computes inline)ARTIFICIAL
porkchopGrid
dynamics/porkchop.ts
the launch-window survey — over a grid of departure × arrival dates it solves Lambert between two bodies (their ephemerides supplied as callbacks — tier-pure) and records the departure C3 (or total Δv) per cell, with the finite minimum — the data a porkchop plot contoursARTIFICIAL
elementsToState
dynamics/applydv.ts
evaluate a conic at a Julian Date → the full state vector (position + velocity) in the parent frame, for both branches (elliptic e<1, hyperbolic e>1) — the inverse of the registry's state→elements recoveryARTIFICIAL
applyDeltaV · progradeDeltaV
dynamics/applydv.ts
add an instantaneous Δv to a state and recover the NEW conic it flies (a prograde burn raises apoapsis, retrograde lowers it; a large enough burn reaches escape, e≥1) — the analytical core a trajectory-play interaction would needARTIFICIAL
integrate · totalEnergy
dynamics/nbody.ts
a small DETERMINISTIC symplectic (kick-drift-kick velocity-Verlet leapfrog) n-body integrator over a bounded set of gravitating sources (Sun + planets) plus massless test particles — fixed timestep so the result is permalink-reproducible; for close encounters / the chaotic regime. totalEnergy is the conserved-energy invariant it preservesARTIFICIAL

Determinism, seeds and paper packs

Every run is a pure function of (seed, paperPack, request). The backdrop-fill pack is proto-uniform@0 — honest log-uniform toy distributions for stress-testing, not literature models; real packs replace it without touching any caller. The GENESIS mode already runs on literature packs and nothing else: kroupa01@1 · chabrier03@1 (initial mass function), eker18@1 (mass → luminosity/radius/temperature), kepler-fgkm@1 · petigura13@1 (planet occurrence). Swapping one is not cosmetic — holding the seed fixed and changing only the initial mass function can move a generated star across a boundary of the published literature, so that the same dice yields a system with planets under one paper and a system whose planets are honestly refused under another. Scale presets TINY · SMALL · MEDIUM · LARGE · HUGE set the node budget; the same seed and pack reproduce the same scene bit-for-bit, and every bake is recorded in the append-only archive.

How estimated content reads

Epistemic transparency is a hard rule. Factory output is always visibly an estimate: synthetic populations render dimmed and translucent against the measured catalogue, and each fitted parameter is named in the object's inspector under “provided by factory”, with the model that produced it. The Factory never overwrites a registry value and never passes an estimate off as an observation.