TKS Ephemeris · research · Level 3 · stellar encounter catalogue

Stellar encounters — one engine, four dynamical levels

Same 6D state  →  same engine  →  different physics  →  quantified divergence. Every number on this page comes from one code path applied to the published astrometry; what changes between columns is only the physics assumed.

L1 · LINEARthe star coasts past the Sun; minimum separation of the straight line — no external dynamics at all. HD 7977 · 30,571 AU
GJ 710 · 10,533 AU
L2 · TWO-BODYthe Sun–star pair as an isolated Kepler hyperbola: the exact perihelion. Still no Galaxy. HD 7977 · 30,569 AU
GJ 710 · 10,526 AU
L3 · GALACTICboth bodies integrated in a Milky-Way potential — the linearised tide for live scans, the full two-orbit integration for validation. HD 7977 · 2,200 AU (−92.8 %)
GJ 710 · 10,655 AU (+1.16 %)
L4 · ENSEMBLEnot one potential but a family of plausible ones: 128 prior-weighted parameter combinations per star (5–95 % interval below). HD 7977 · 1,613–15,451 AU
GJ 710 · 8,847–11,412 AU

L1–L3 are the same published state through richer physics; the numbers are from data/encounters/level_breakdown.json, regenerated by cargo run --release -p tks-ephemeris --example level_breakdown (L1 straight line · L2 exact two-body perihelion · L3 Galactic tide · L4 the prior-weighted ensemble interval). That progression — not the size of the catalogue — is what this page is about.

GJ 710 stops being a single page here. The same engine that computed its 1.29-Myr flyby — 3D linear propagation, the exact two-body hyperbola, the Oort-cloud impulse and (on demand) the full Milky-Way integration of Level 2 — is applied to a small traceable catalogue of stellar perturbers and to deliberate null cases. For each star the page shows what the engine finds, what the literature published, and where the two disagree — the last column is the point of the exercise.

HD 7977 — one astrometric state, a 13× different encounter

data/encounters/level_breakdown.json
L1 · straight line30,571 AU−2.80 Myr · no external dynamics
→
L2 · two-body perihelion30,569 AU−0.008 % — Sun–star gravity is not the story
→
L3 · Galactic tide2,200 AU−92.8 % · full two-orbit run 2,312.5 AU (−92.4 %)
→
L4 · ensemble 5–95 %1,613–15,451 AUmedian 7,030 AU · grid range 160–19,693 AU
Same 6D astrometric state. Different physics. The straight line and the exact two-body hyperbola agree to 3 AU; switching the Galaxy on moves the closest approach by 28,371 AU; and the model ensemble then spreads the answer over a further factor of 9.6 (1,613 → 15,451 AU within the 5–95 % interval). A catalogue that quotes one number for this star is quoting its physics assumption, not the star.
Why HD 7977 and not, say, Proxima? Four measurable quantities decide it — d, vt, vr and the flight time — and this star has all of them extreme at once:
  • nearly radial: cos θ = +1.0000 — the motion is along the line of sight, so the sky shows only vt = 0.0518 km/s;
  • long leverage arm: L = d/|vr| = 590,252 AU per km/s, i.e. σb ≈ L·σvt = 5,348 AU from a 0.0091 km/s astrometric error;
  • 2.80 Myr of flight time: long enough for the Milky Way's own field to change the transverse velocity by Δvgal = 0.0481 km/s — 92.8 % of vt. The Galaxy is not a correction to this encounter; it is comparable to the motion being measured;
  • and the astrometry is good enough to see it: Δvgal/σvt = 5.31, which is S = 5.30 — Galactic-dominated.
Numbers: level_breakdown.json (L1–L3 straight from the engine scan on the published SIMBAD state; L4 weighted over tks_ensemble.csv). Reproduce: cargo run --release -p tks-ephemeris --example level_breakdown. The live four-level integration of this same star is in the drill-down below.

GJ 710 — the counter-example: sometimes the Galaxy is the small term

data/encounters/level_breakdown.json
L1 · straight line10,533 AU+1.29 Myr · no external dynamics
→
L2 · two-body perihelion10,526 AU−0.06 %
→
L3 · Galactic tide10,655 AU+122.6 AU = +1.16 %
→
L4 · ensemble 5–95 %8,847–11,412 AUmedian 9,655 AU
The contrast is the point. Here the Galactic term (+122.6 AU) is 3.8× smaller than the astrometric uncertainty of the same quantity (σb = 460.6 AU), and Δvgal/σvt = 0.27 = S: the encounter distance is astrometry-dominated. Galactic dynamics is not always a large correction — which is exactly why the index exists.
The model ensemble, however, is still wider than the measurement: its 5–95 % interval spans 2,566 AU = 5.6× σb. For HD 7977 the same comparison gives 13,837 AU = 2.6× σb. So for GJ 710 the astrometry decides the tide question and the potential choice decides the distance question — two different uncertainties, kept separate on this page.

What actually determines the encounter?

four measurable quantities
quantityHD 7977GJ 710what it controls
distance d75.69 pc19.09 pcthe scale of everything below — and 2σπ/π enters σb
transverse velocity vt0.0518 km/s0.0387 km/sthe miss distance itself (b ≈ vt·|tc|)
radial velocity vr+26.45 km/s (receding)−14.47 km/s (approaching)the flight-time gate, and with d the leverage L = d/|vr|
flight time |tc|2.80 Myr (past)1.29 Myr (future)how long the Galaxy acts on the pair
Galactic Δv over that time0.0481 km/s = 92.8 % of vt0.00045 km/s = 1.2 % of vtwhether Galactic dynamics can move the answer at all
astrometric σvt0.0091 km/s0.0017 km/sthe noise floor the Galactic term must beat
⇒ index S = Δvgal/σvt5.30 — Galactic-dominated0.27 — astrometry-dominatedthe applicability criterion for a straight-line answer
Read the last row as a sentence: a straight-line encounter is adequate exactly when the Galaxy's contribution to the transverse velocity is smaller than the astrometric error on it. Every row above is an artifact value from data/encounters/level_breakdown.json (the Δvgal and σvt columns come from the same engine run that produced tks_sensitivity.csv).

The Galactic Sensitivity Index S — this page's own criterion

encounter::regime_of in the engine
S = |bGalactic − blinear| / σastrometry — and because σb ≈ L·σvt while b ≈ vt·|tc|, S is equivalently the Galactic perturbation of the transverse velocity divided by its astrometric uncertainty: a question about velocity, answerable from the astrometry alone.
S < 0.3 · astrometry-dominatedthe straight line is adequate; the quoted number is limited by the measurement. … of the determined-distance stars.
0.3 ≤ S < 3 · Galactic-measurablethe Galaxy matters but the error budget is mixed — quote both numbers, not one. … stars.
S ≥ 3 · Galactic-dominateda straight-line answer is then a statement about the potential, not about the star. … stars.
The two flagships sit at the two ends of this scale: HD 7977 S = 5.30 (Galactic-dominated) and GJ 710 S = 0.27 (astrometry-dominated). Within the encounter class alone — determined distance and bGalactic < 1 pc — the split is …, so for close passes the astrometry usually settles the distance and the sensitive cases are the minority. The boundaries 0.3 and 3 are the engine's own, not chosen for this page. Reproduce the per-row table: data/encounters/tks_sensitivity.csv.

Population accounting — every number on this page, and which filter produced it

…
… counting the live payload …
… filling from the live payload …
These are nested filters of one dataset, not inconsistent counts: the catalogue is the published DR2 candidate list, a candidate survives only while its current astrometry supports a distance, and only a subset of survivors still passes inside 1 pc. Every statistic on this page states which of these populations it uses.

Encounter space — |epoch| vs closest approach

log distance
x: |tc| (Myr, logarithmic; past rows to the left of the NOW line, future to the right) · y: closest approach (AU, logarithmic) with the Oort-cloud bands. GJ 710 and the published past perturbers sit deep inside the cloud; the nearest stars of today never come close — which is exactly what a catalogue has to show. Labels are placed with collision avoidance (monospace metrics, a ring of candidate anchors per star, first free candidate wins, thin line = leader) in priority order — named anchors, then stars with a published comparison, then encounter-class stars, then closest approach — and a label that cannot be placed without touching a neighbour is dropped rather than overprinted; the pill reports how many fitted, and every point carries a hover tooltip with its full state. Use Chart labels above to loosen or tighten this.

Deep-time encounter history — when do stars reach the cloud?

…
Closest approaches binned in time across the window (blue = past, green = future; opaque bars contain at least one pass inside 1 pc). This is the same information the catalogue is built from, read as a history: the Solar System's encounter rate is set by how many stars happen to be close and slow-moving in the sky, and the window can be widened with the control above.

Sensitivity study — where does the straight line break down?

…
x: the leverage arm L = d/|vr| (AU per km/s — how much a transverse-velocity error becomes a distance error), y: the sensitivity index S = |bGalactic − blinear| / σastrometry. Dashed lines: S = 0.3 and S = 3, the regime boundaries. Because σb ≈ L·σvt, S is also the Galactic perturbation of the transverse velocity divided by its astrometric uncertainty — so the question “do I need Galactic dynamics?” is answered in velocity space, from the astrometry alone. Labels are collision-avoided and limited to the named anchors plus the rows nearest the S = 3 boundary — the crowded Galactic-dominated corner would otherwise print forty names on top of each other; a dropped label is recoverable from the point's hover tooltip (name, regime, S, leverage, σb). The potential ensemble and the **weighted distribution** are in the next card. **Paper:** “Where does the straight-line approximation break down for stellar encounters with the Solar System?” — every number in it is regenerated from the artifacts named in its §7: docs/tks-sensitivity-paper.md; per-row table: data/encounters/tks_sensitivity.csv.

Product B — prior-weighted model distribution (128-node grid)

artifact …
… loading the weighted ensemble artifact …
What this is: the same quantity, weighted by stated priors on the model parameters (potential: equal weights · non-axisymmetry 0.25/0.75 · bar Ωb = 39 ± 3 km/s/kpc · bar angle 25° ± 5° · arm contrast 5 ± 1.5 % of the R₀ radial force · pitch 12.5° ± 2° · arm pattern speed 20 ± 4 km/s/kpc; 128 nodes per star). The quantiles below are therefore prior-weighted model-ensemble quantiles — the “5–95 %” is over the weighted grid of models, not over measurement noise. What it is not: a posterior (no likelihood is evaluated and no data are fitted) and not an observational confidence interval; and P(b < X) means “this share of the prior-weighted models place the encounter inside X”, not “probability that the star really passed that close”.
The six-model envelope above gives every corner of parameter space the same weight. Here the grid is weighted the way the literature constrains it — potential (equal), non-axisymmetry 0.25/0.75, bar Ωb = 39 ± 3 km/s/kpc, bar angle 25° ± 5°, arm contrast 5 ± 1.5 % of the R₀ radial force, pitch 12.5° ± 2°, arm Ωp = 20 ± 4 km/s/kpc; 128 combinations per star — and every number below is re-derived at request time from data/encounters/tks_ensemble.csv by /v1/tks/sensitivity, so this page cannot show a value the artifact does not contain. The quoted distance is the two-body perihelion of the pair. Reproduce: cargo run --release -p tks-ephemeris --example encounter_ensemble (grid) · … --example encounter_sensitivity 8 0 (six-model band) · cargo test -p tks-ephemeris --test encounter_gaia (validation, including the exact limits). Paper: docs/tks-sensitivity-paper.md.

Case study — HD 7977 through Engine C, live

live drill-down
… integrating the published HD 7977 state through the engine's four levels …
The same star's artifact-backed L1→L4 progression is the first card on this page (data/encounters/level_breakdown.json); this card is the live run of the same engine path, so the two can be compared cell by cell.

Drill-down · Engine C for the selected star

pick a row
Click “Engine C” in any row to run the full Level-2 treatment for that star (both orbits in the Milky-Way potential, linearised tide, and the comparison against its straight-line answer).
Server-side /v1/tks/gj710?star=<key> — the same tested code path the GJ 710 page uses, with the catalogue star's own published 6D state.

Featured encounters — the seven stars worth a first look

…
… selecting the featured rows …
Each card is the same three levels for one star, live from the payload: L1 straight line → L2 exact two-body perihelion → L3 with the Galactic tide (and, for the two flagship encounters, tide → full orbit plus the L4 ensemble band). Use Engine C on any card to run the full two-orbit integration for that star; the whole 164-row set is below.

Full catalogue — engine result vs published value

loading…
… querying /v1/tks/encounters …
Columns. b linear = straight-line closest approach; b + Galactic = the same state followed through the Milky-Way tide (the fast linearised model, verified against the full two-orbit integration in the drill-down) — this is the column that is comparable with the published catalogues, which integrated a Galactic potential too. q = exact two-body perihelion. Epoch negative = past; “clamped” = the minimum lies outside the window; “inputs differ” = the published analysis used a parallax that differs from the engine's by >5σ.
The Δv columns are an impulse proxy — not a final comet orbital change. They are the first-order velocity change of a test particle held at 10⁴ / 10⁵ AU on a perpendicular trajectory (Δv = 2GM/(b·v)), and the row marks near-trajectory when the impact parameter is comparable to the test particle's own separation, i.e. when that approximation is not valid. In other words this is a comparison metric between encounters, not an Oort-cloud injection probability and not the perturbation of any particular comet — the Oort-cloud engine (Level 4) does that job separately.

Model scope & limitations

read this
TRACEABLEREPRODUCIBLELIMITS DOCUMENTED
Every number on this page is regenerated from the artifacts named next to it (data/encounters/level_breakdown.json · tks_sensitivity.csv · tks_ensemble.csv · data/kernel_coverage.json, each with the command that writes it), and the limitations below are stated rather than discovered later.
What the catalogue is. A small curated list — not a complete survey. The Gaia-based catalogues (Dybczyński, Berski, Tokarek, Podlewska-Gaca, Langner & Bartczak 2022, A&A 664, A123 — 155 perturbers at a 2 pc threshold with Monte-Carlo uncertainties; Bailer-Jones, Rybizki, Andrae & Fouesneau 2018, A&A 616, A37) are the place to look for completeness. This page shows what our engine gets from the published 6D states of a representative set — and keeps the disagreements visible.
Provenance. Every astrometric value is the one SIMBAD carries for that object — parallax and proper motion from Gaia EDR3 where available, otherwise Hipparcos (Algol, α Cen and Sirius are too bright for Gaia); the radial-velocity source is printed per row. Masses marked “assumed from spectral type” are not measurements and enter the impulse metric linearly.
What is not modelled. Binaries are single point masses (Algol, α Cen, Sirius and Scholz's star are all multiple); the Sun's reflex motion is ignored; the catalogue does not search for new perturbers; and the published encounter values are quoted for comparison only.
Where the Galactic term matters — a Level-3 finding. The catalogue exposes the contrast that motivated Engine C: for GJ 710 the Milky-Way term is +122.6 AU (+1.16 %), i.e. 3.8× below its astrometric error bar (σb = 460.6 AU) — for this star the model band is the larger term (9,455 … 11,226 AU, 3.85 σb). For HD 7977 — a *nearly radial* passage — the same treatment moves the closest approach from 30,571 AU to 2,200 AU (−92.8 %) with the linearised tide, and to 2,312.5 AU (−92.4 %) in the full two-orbit integration; on top of that the six-potential band spans 2,313 … 10,663 AU. The reason is amplification, not magic: in a near-radial encounter the closest approach is a *tiny transverse velocity* divided into the radial speed (b ≈ d·vt/|vr| with vt ≈ 0.05 km/s here), so any perturbation — a Galactic tide, or one σ of proper motion — is amplified by d/|vr|. GJ 710's encounter is short and its leverage arm small; HD 7977's is 2.8 Myr long with a 76 pc arm. That is why the page quotes both the number *and* its model sensitivity.
How to read a verdict (A · B · C). A published value is not ground truth: it is "published input → published encounter". Each row therefore answers three separate questions. A — input agreement: is our 6D state the one the published analysis used? (We also run a DR2-era proxy state through the same engine, so the input revision can be isolated.) B — dynamical-model agreement: this row's S, plus the linearised-tide vs full-orbit difference Δb = b_tide − b_full. C — published-uncertainty containment: is our distance inside their 90 % interval, and if not, is that a consequence of A (the inputs), of B (the model), or of neither (their Monte-Carlo median)? A row can be "outside now, inside on the published inputs" — that is an input-revision verdict, not an engine failure. One star can also carry two rows (an ingested catalogue copy plus the curated one: HD 168442 ≡ GJ 710, HD 7977 twice): they are marked twin, and every aggregate on this page counts unique stars. Populations are stated, not implied: the catalogue is the published DR2 candidate list, so every aggregate counts only rows whose current parallax has S/N ≥ 3 (a distance exists only then), and the encounter-class subset (Galactic closest approach inside 1 pc) is reported separately. Every difference from a published value is decomposed into three named terms — input revision, our Galactic correction, their model — with the identity checked numerically on all decomposable rows: cargo run --release -p tks-ephemeris --example encounter_forensics 8.
Product A — model ensemble envelope (six named potentials). Running the same state through an ensemble of six potentials — two calibrations (MWPotential2014 and a McMillan-2017-style model) plus a Ferrers bar (a = 3.1, b = 1.0, c = 0.4 kpc, M = 1.06×10¹⁰ M☉, Ωb = 39 km/s/kpc, exact quadrature force) and spiral arms calibrated to the observed 5 % peak radial-force contrast at R₀ — gives HD 7977: 2,313 … 10,663 AU (spread 8,350 AU = 380 % of b, larger than its σb = 5,348 AU) and GJ 710: 9,455 … 11,226 AU (spread 1,771 AU = 3.85 σ). So HD 7977 is published as a range, and for GJ 710 the model — not the astrometry — is the leading term once bar and arms are included: 10.4 kAU ± 0.5 (astrometric) ± 0.8 (model). Both perturbations are validated against exact limits (sphere limit, boundary continuity, curl-free, far-field monopole) in the test suite.
What this is: the spread of the engine's answer over six named potentials with published parameters — an epistemic sensitivity envelope. What it is not: a confidence interval. No likelihood is evaluated, nothing is fitted, no sampling is claimed; it answers “how much does the answer depend on which Milky-Way model we assume?”.
The band as a distribution (grid + priors). Weighting the grid the way the literature constrains it — potential (equal weights), bar pattern speed Ωb = 39 ± 3, bar angle 25° ± 5°, arm contrast 5 ± 1.5 %, pitch 12.5° ± 2°, arm pattern speed Ωp = 20 ± 4 km/s/kpc; 128 combinations per star — gives HD 7977: weighted 5–95 % = 1,617 … 15,452 AU (median 7,032 AU, weighted P(b < 3 kAU) = 11.8 %, P(b < 10 kAU) = 64.6 %) and GJ 710: 8,846 … 11,412 AU (median 9,655 AU). The index itself is uncertain: S = 2.83–5.41 (HD 7977) and 0.65–3.66 (GJ 710). The dominant lever is the arm contrast (dln b/dln c = +1.13); pattern speeds barely matter over ±3 Myr flight times — they rotate the pattern by only 1–3°. Every grid node and its weight: data/encounters/tks_ensemble.csv (example: encounter_ensemble).

References. StePPeD / Gaia-EDR3 perturber catalogue (Dybczyński et al. 2022, A&A 664, A123) · Scholz's star (Mamajek, Barenfeld & Ivanov 2015, ApJ 800, L17) · GJ 710 (de la Fuente Marcos & de la Fuente Marcos 2022, RNAAS 6, 136; ESA/Gaia material) · HD 7977 past passage (Dybczyński et al. 2022; Kaib & Raymond 2026, PSJ, arXiv:2606.25069) · Algol and GJ 710 as Oort-cloud perturbers (Molnar & Mutel 1997, AAS 191, 69.06) · astrometry via SIMBAD (Gaia Collaboration, EDR3, 2021; Soubiran et al. 2018, A&A 616, A7; plus the per-row sources).

संस्करणः bin-1790785658