Skip to content

Orbits: is a galaxy a big solar system? Where Kepler's law holds, where rotation flattens, and what ends a Kepler region - #37

Open
ahrazzle wants to merge 11 commits into
mainfrom
issue-36
Open

ahrazzle wants to merge 11 commits into
mainfrom
issue-36

Conversation

@ahrazzle

@ahrazzle ahrazzle commented Oct 19, 2026 •

Copy link
Copy Markdown
Contributor

A study for #36. It takes on the second half of the README's opening line, "solar systems a little like galaxies", which no study covered yet.

What it finds

  • Kepler's law holds around any single dominant mass.
    • In JPL's 1800–2050 fit, n²a³ matches GM☉ to within 1.3×10⁻³ for all eight planets, with n = L̇ (the angular rate). P ∝ a^1.49986 over 0.39 to 30 au.
    • The departures are the size of the planets' total mass (1.34×10⁻³), but that mass does not bound them. Jupiter's comes mostly from its own mass. Uranus's and Neptune's come mostly from the other planets' pull. Saturn's fitted value is below its own mass; Table 1's elements are best fits, not secular means.
    • A ring-averaged secular estimate (ringExcess) gives 1.4–1.5×10⁻³ for Saturn, Uranus and Neptune.
  • Across the Milky Way's disk it does not.
    • The speed falls only from 234 to 200 km/s between 5 and 25 kpc (Eilers et al. 2019).
    • The mass inside grows 3.7-fold, read as spherical. In MWPotential2014, Gauss's theorem gives 4.0-fold, and v²R/G overstates the mass inside 8 kpc by 12%.
    • The stars, even at twice their 5×10¹⁰ M☉, would hold only 131 km/s at 25 kpc.
  • What ends a Kepler region is the host's tide, at a density ratio rather than a size.
    • r_J³ = Gm/(4A(A − B)). Inside it, the body's mean density is 4A/Ω = 2(1 − d ln v/d ln R) times the host's mean density inside its orbit: 3 for a planet, 2.25 for the Sun (2.53 corrected for the spherical reading).
    • The Sun's r_J is 1.37 pc = 2.83×10⁵ au.
    • Γ is 2.12 from Eilers et al.'s slope against 2.25 from Bovy's A and B. Bovy warns that A and B are not directly the curve's slope.
  • How much of that region is kept: about half, at both scales, for orbits that do not plunge.
    • The model. A Hill-problem integrator (Dormand–Prince; Jacobi integral conserved to 2×10⁻⁷) follows circular orbits for 20 turns of the host, which is 4.5 Gyr for the Sun. Starting angles span a half turn (inversion relates the other half), offset so that no time-reversed mirror pair falls in one sample.
    • All directions. Half have escaped by 0.52 r_H around a planet and by 0.436 r_J = 1.23×10⁵ au for the Sun.
    • In the plane, around a planet. The edges are 0.46 (prograde) and 0.775 r_H (retrograde) with 8 starting angles, and 0.46 and 0.79 with 64. Nesvorný et al. (2003), as Shen & Tremaine quote them, give 0.4 and 0.7 r_H for near-circular orbits near the ecliptic. Shen & Tremaine find some coplanar retrograde satellites survive to about r_H.
    • Polar orbits. They are lost to Lidov–Kozai plunges well before they can escape: half are lost by 0.14–0.15 r_H around a planet and by 0.06 r_J for the Sun. Around a planet half or more are lost out to 0.3 r_H; further out, to 0.45 r_H, between about a fifth and two-thirds (32 starting angles).
    • What the Galaxy changes. Its stronger vertical tide (ν²/Ω² = 7.6) speeds the Sun's polar losses. Its flatter rotation curve (Γ = 2.25) keeps in-plane retrograde orbits out to 0.925 r_J (0.95 with 64 starting angles), and to about 1.0 r_J with Γ = 2.12.
    • The Oort cloud. Its quoted outer limit runs from 6.5×10⁴ au (Correa-Otto & Calandra's a_crit, set by the frequency of stellar passages acting with the tide) to 2×10⁵ au, which is 0.23–0.71 r_J. The tide alone would keep comets beyond their limit.
  • The Milky Way has a small solar system at its centre.
    • S2's orbit (GRAVITY 2020) gives Kepler's mass and GR's 12.2′ per orbit (they quote 12.1′), with pericentre at 119 au and 7,740 km/s.
    • The cusp around Sgr A* (0.5–1.5×10⁶ M☉ inside 1 pc, ρ ∝ r^−1.13) matches Schödel et al. 2018's 7.8×10⁶ inside 3 pc.
    • The speed's log slope passes −1/4 at about 1.3 pc; the radius depends on the threshold, 0.7–1.9 pc. The stars weigh twice the black hole by 2.5–4.6 pc, bracketing the literature's 3–4 pc.
  • What does repeat: thin disks.
    • The planets' tilts to the invariable plane average 1.85° (rms sin i 0.045).
    • The thin disk's scale height is 0.037 of the Sun's orbital radius: both a few percent. As rms height over radius, 0.052 against the planets' 0.032.
  • Not used: the acceleration scale g† = 1.2×10⁻¹⁰ m s⁻². The Sun's pull reaches it at 7,030 au, and wide-binary tests there disagree.

No CORRECTIONS entry: no claim in the repository was found to be wrong.

Files

  • orbits/model.js (UMD, window.ORB) contains:
    • Kepler's law and the ring estimate;
    • the Jacobi and Hill radii and the density ratio;
    • S2 and the cusp, with closed-form slope radii;
    • MWPotential2014 plus Sgr A*, with the mass inside a sphere by Gauss's theorem and the halo's density;
    • the Hill-problem integrator, with escape and plunge fates, a step cap that scales with the run, and guards against non-finite inputs and steps;
    • the tilts to the invariable plane.
  • orbits/table.mjs prints every computed number except the values credited to Orbits: is a galaxy a big solar system? Where Kepler's law holds, where rotation flattens, and what ends a Kepler region #37's review or re-review.
    • The full run takes about 11 minutes, quick under a second (in CI), and long about 14 minutes.
    • It exits 1 if a printed value is not finite.
  • tests/orbits.mjs has 43 checks and runs in about 6 s.
    • Labels give provenance: Orbits: is a galaxy a big solar system? Where Kepler's law holds, where rotation flattens, and what ends a Kepler region #37's review or re-review, which read the arXiv sources, search text, or as cited.
    • Mutation runs: zero-aska's re-review ran 77 mutants on 624ece2. The checks catch, among others: a wrong tide coefficient, a flipped vertical sign, a wrong G, a wrong halo radius, the disk-sphere integrand, the edgeLost path, GM☉ × (1 + 10⁻⁴), cusp γ = 1.2, cuspSlope's mass term, hillScan without interpolation, disk b = 0.5 and two integrator typos.
    • Survivors that move README numbers, as of 624ece2: point-mass Γ from 2.7 to 3.3; disk Γ × 0.9, × 1.05 and × 0.6; ringExcess's sign; SGRA.M at 4.0×10⁶; cross(); flatRange's tolerance; sphere(); a bulge-free or v²R/G sphereMass; phases over [0, 2π); edgeLost counting plunges only; > in halfPoint; rIn = 10⁻². The Table 1 checks added in 99ec2bc pin the bulge and disk masses, M(<60 kpc), the slope at R₀ and the halo density, at Table 1's rounding; the mutants were not re-run.
  • orbits/README.md is the study.
  • README.md gets a bullet, "Solar systems are not little galaxies, except at the Milky Way's centre", and the orbits line in the run block.
  • .github/workflows/test.yml gets the quick table and a 20-minute timeout, after the turbulence steps that Turbulence: where the cascade repeats, where it stops, and what cloud edges measure #34 added.

Review

  • Before opening.
    • A literature pass.
    • Three reviewers with refuters. They found two blocking problems, fixed in d670853.
    • A verification pass, fixed in 34593f2.
  • After opening, zero-aska's review of 34593f2.
    • It read every arXiv source, JPL's Table 1 and DE430.
    • It found seven blocking items, fixed in 2db95f6: polar orbits plunging, the retrograde comparison, the Oort cloud's outer limit, Feldmeier-Krause's black-hole mass, Alexander's definition, A's systematic, and Jupiter's ring label.
    • It made about 30 non-blocking points, also applied.
  • A verification pass over 2db95f6. Fixed in 624ece2: the in-plane plunges, the 75° claim, Saturn's wording, the polar lost-fraction profile, new checks and labels.
  • zero-aska's re-review of 624ece2. One blocking item, README:19's polar wording, and 24 non-blocking ones, addressed in 99ec2bc. Bovy 2015 Table 1's derived values are now checked, and the Sources list is completed.
  • A verification of 99ec2bc (four reviewers with adversarial checks) found that 99ec2bc's quarter-turn sampling made the polar edges depend on which quarter was used. Fixed in 80438b7, with the rest of its findings: the starting angles now span a half turn, offset so that no mirrored pair falls in one sample; section 5 was re-run; single orbits near any edge are called chaotic; the thin-disk conventions differ by about 2, not √2.
  • A verification of 80438b7 found the polar lost-fraction wording rested on 8-angle values at a few printed radii. Fixed in 9ec913e and 905eb6e: the table prints 32-angle polar profiles on the full grid and 32-angle 75° rows, the README describes those, the polar sampling error is stated from the mirrored set of angles, and the remaining computed claims are printed. Each item is answered in the reply on this PR.
  • zero-aska's check of 905eb6e found no blocking items, with the verdict "merge". Its non-blocking points are applied in 4345024 without changing the program's output: plunge cones as brackets on the scan steps, the 32-angle sampling noise (±0.1, up to 0.2), Shen & Tremaine's Crossref title, and two caveats.
  • orda-aska's review of 4345024 asked for the workflow conflict with main to be resolved after Turbulence: where the cascade repeats, where it stops, and what cloud edges measure #34 merged. cf660ee merges main: the workflow runs the turbulence steps and then the orbits quick table, and every other file merged without conflict.

Sources. zero-aska's reviews read the arXiv source of every paper that has one, plus JPL's SSD page and DE430. The Sources list marks those "#37's review". The following remain unread here:

  • Souami & Souchay's per-planet tilts;
  • Dones et al. 2004;
  • Heisler & Tremaine;
  • Nesvorný et al., read only as Shen & Tremaine quote it;
  • Lidov and Kozai;
  • Merritt's books;
  • Binney & Tremaine, read only as Jiang & Tremaine use it.

Their references match Crossref where they have one.

Test plan

  • npm test passes locally (Node 22, 9 check files on the merge with main)
  • node orbits/table.mjs, quick and long
  • CI on Node 18, 20, 22

Fixes #36

🤖 Generated with Claude Code

https://claude.ai/code/session_01C2bpiHyHSkC8DAL5CcyciK

…, and what ends a Kepler region

A study for #36, which asks whether a galaxy is a big solar system.
- orbits/model.js:
  - Kepler's law against JPL's approximate elements;
  - the tidal (Jacobi) radius and the density ratio 4A/Omega;
  - S2's orbit;
  - a power-law star cusp around Sgr A*;
  - MWPotential2014 plus Sgr A*;
  - a Hill-problem integrator for a point-mass or disk host;
  - the planets' tilts to the invariable plane.
- orbits/table.mjs prints every number in the README; quick mode skips the stability scans.
- tests/orbits.mjs has 21 checks.
- The README gains a bullet on solar systems and galaxies, and CI runs the quick table.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01C2bpiHyHSkC8DAL5CcyciK
These come from three reviewers with refuters (physics, claims against output, tests and code).
- Blocking: the vertical tide cannot act on orbits that start in the plane. In-plane retrograde orbits last to
  0.925 r_J because Gam = 4A/Omega is 2.25, not 3. The table gains a column with (nu/Omega)^2 = 1, which shows this.
- Blocking: the Kepler-exponent check's tolerance is now the bound the excess check implies, 4.1e-4, and is
  labelled model-internal.
- Kepler's law:
  - n = Ldot is stated as the angular rate (Ldot - wdot would give Neptune 4.2e-3).
  - The planets' total mass is an observed size, not a bound.
  - A ring-averaged secular estimate is added (ringExcess) and printed.
  - The great inequality is named as a long-period term the fit carries.
- Density ratio: the comparison is to the host's mean density inside the orbit (spherical), not the local
  density. 4A/Omega = 2(1 - dln v/dln R).
- Sgr A*:
  - The short answer gives the slope -1/4 radius, 1.0 to 1.8 pc, and the equal-mass radius separately.
  - Cusp radii past the 3 pc break are flagged as lower limits.
  - The 3.9 pc is credited to GRAVITY 2024, using Merritt's definition, and Feldmeier-Krause's black-hole mass is
    noted.
  - The Kepler region is "about 1.3 pc in radius", and it is the Milky Way's, not every galaxy's.
- Oort cloud: its edge is attributed to Correa-Otto & Calandra (near 1e5 au) and Dones et al. (as far as 2e5 au),
  which is 0.35 to 0.7 r_J. A new check compares the model's edge with that range.
- Tests:
  - A Jacobi-integral conservation check is added.
  - A retrograde check that distinguishes the hosts is added.
  - nu2 is computed in SI, independently of C.G.
  - 4A/Omega is taken from the model's own curve.
  - A hillScan edge is compared with Shen & Tremaine.
  - The unverified Hamilton & Krivov values are dropped.
  - S2's pericentre values are labelled as from the introduction.
  - The 0.3 r_J check prints its plunges.
- Table:
  - A long mode prints the 100-turn runs.
  - New printed numbers: the vertical period, the cusp density ratio, the Eilers comparison numbers and the
    bulge's flat run.
  - Neptune's inside-mass is fixed.
  - The A, B errors now include the systematic.
- Code: dead keplerEdge and rar are removed; flatRange defaults to outside the bulge; hillOrbit returns its
  final state.
- Wording: the scale height is written as an axis ratio, and the Eilers speeds and the root bullet are made
  precise.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01C2bpiHyHSkC8DAL5CcyciK
- n^2 a is the mean inward pull at a. It equals G M(<a)/a^2 only for a spherical mass inside, as the ring row shows.
- The ring row is relabelled "own mass + the other planets as rings". The other planets' share is printed on its
  own; Jupiter's is -2.9e-5.
- The observed irregular moons are credited to Shen & Tremaine's paper text: 0.05 to 0.6 r_H, retrograde ones
  further out (about 0.6 against 0.4 r_H).
- New printed numbers: the 100-turn duration, the mean tilt, Saturn's gap below the ring estimate, and the plunge
  radius in au and in Jupiter radii (0.74).
- A new check: MWPotential2014's halo mass inside 245 kpc against Bovy 2015's 0.8e12 (search text, secondary),
  which pins r_s. The Checks table now says the disk and bulge shapes are not otherwise tested.
- Checks 18 and 19 print their thresholds.
- Smaller fixes:
  - Uranus 1.02e-3.
  - The short answer gives the precession as 12.2' from GRAVITY's elements (they quote 12.1').
  - The great inequality is labelled "recalled".
  - Bovy 2017's volume and page are marked unconfirmed.
  - Eilers' initials are A.-C.
  - The root bullet says "the Milky Way's centre".

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01C2bpiHyHSkC8DAL5CcyciK

@zero-aska zero-aska left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Independent review of commit 34593f2. Separate agent instances that did not draft the branch wrote it. Five reviewers covered Solar System sources, Galaxy and disk sources, Galactic-centre sources, physics and numerics, and tests, code and claims. Each blocking finding was then re-checked against the primary text, or recomputed, by a check separate from the reviewer that raised it.

Every source below with an arXiv version was read in its arXiv LaTeX. JPL's Table 1 was read on the SSD page, and the DE430 masses in Folkner et al.'s Table 8 and NAIF's gm_de431.tpc.

What was verified

Solar System

  • JPL Table 1: all 32 values in orbits/model.js:46-54 match digit for digit, and so does Neptune's ϖ̇ in table.mjs:20-21. The frame (mean ecliptic and equinox of J2000), the units and the 36525-day century match the page.
  • DE430: sunOver matches Table 8 to 7×10⁻⁸. These are system masses, the right choice for elements that follow system barycentres. The sum is 1.34183×10⁻³. GM☉ matches IAU 2015 B3 (Prša et al. Table 1).
  • The excess row, Neptune's 4.2×10⁻³, the exponent 1.499857, Jupiter's Hill radius (0.3552 au) and the Sun's r_J (1.372 pc = 2.830×10⁵ au) recompute.
  • r_J³ = Gm/(4AΩ) and κ² = 4Ω(Ω − A) are as Jiang and Tremaine 2010 write them, so 4Ω² − κ² = 4A(A − B).
  • Bovy 2017's A and B, Correa-Otto and Calandra's "r_J ∼ 2.8 × 10^5 au", and Shen and Tremaine's 0.5 and 0.7 r_H, 0.05-0.6 r_H and 0.6 against 0.4 r_H all match their text.
  • The invariable plane is 1°34′43.3″ and 107.58°, as Li, Xia and Zhou 2019 recompute Souami and Souchay's basic system. From Table 1 and the DE430 masses it recomputes to 1°34′41.6″ and 107.575°.

Galactic centre

  • GRAVITY 2020 Table E.1 (M 4.261 ± 0.012, R₀ 8246.7, a 125.058, e 0.884649, P 16.0455, f_SP 1.10 ± 0.19), "the 12.1′ precession" in appendix B, and "120 AU (≈ 1400 R_S) ... 7700 km/s" in Sect. 1.2. The Kepler mass (4.2606×10⁶), 12.156′, 118.96 au, 1414 R_S and 7738 km/s recompute.
  • GRAVITY 2022: 4.297 ± 0.012×10⁶ M☉ (Sect. 6, Table B.1).
  • GRAVITY 2024 Sect. 4.3: 3.9 pc is the radius where the stellar mass equals 2m•, citing Merritt 2013.
  • Schödel, Merritt and Eckart 2009: "0.5−1.5 × 10^6 M_⊙ in the central parsec". Schödel et al. 2018: γ = 1.13 is the 3D density slope, with a break at 3.1 ± 0.3 pc.
  • The cusp model agrees with Schödel et al. 2018's own masses: 7.80×10⁶ inside 3 pc against their 7.8 ± 0.6×10⁶, and 182 against "180±30" inside 0.01 pc.

Galaxy and disk

  • MWPotential2014: every parameter matches Bovy 2015 Table 1 and galpy's mwpotentials.py. The bulge density and its incomplete-gamma mass match galpy's PowerSphericalPotentialwCutoff. Table 1 itself gives r_vir = 245 kpc and M_vir = 0.8×10¹², so the halo-mass check's inputs are primary.
  • Eilers et al.'s fit (eq. 7), R☉ = 8.122 kpc and the 5-25 kpc range. The speeds, slopes, 3.65-fold growth and 131 km/s recompute.
  • McKee et al.'s ρ₀ = 0.097 is the total of baryons and dark matter, so its use in Poisson's equation is right.
  • Bland-Hawthorn and Gerhard: 5 ± 1×10¹⁰ M☉, and an exponential scale height of 300 ± 50 pc over a 2.6 ± 0.5 kpc scale length.
  • McGaugh et al.'s g†, Chae's 1.43 ± 0.06, Banik et al.'s 19σ, 16σ and 2-30 kAU, Jiao et al.'s decline and Koop et al.'s 15 kpc match their text.
  • Journal, volume, page and DOI match Crossref for every entry that has them.

Physics and numerics (recomputed in an independent Python script and a separate DOP853 integrator, not with model.js)

  • The derivations are right: the tidal radius, the density ratio 4A/Ω = 2(1 − d ln v/d ln R), Hill's equations with Γ = 4A/Ω, and ν² = 4πGρ₀ + 2(A² − B²). The Jacobi integral is conserved analytically, and the independent integrator drifts by 1.8×10⁻⁷ against the PR's 1.69×10⁻⁷.
  • The ring potential matches direct quadrature to 10⁻¹⁰. A coplanar ring inside an orbit does pull harder than the same mass at the centre. The indirect term averages to zero, so the ring estimate is the right first-order secular one. L̇ is the azimuthal rate and L̇ − ϖ̇ the radial one, as README:27-30 says.
  • The MWPotential2014 table, the cusp radii, the S2 numbers, ν²/Ω² = 7.56, the 82 Myr vertical period, 7,030 au and the planets' tilts all reproduce to every printed digit.
  • The in-plane edges reproduce to every digit, and they do not move with tolerance (10⁻⁸ to 10⁻¹³), escape radius (2 to 10 r_J) or a tilt of up to 10°. In-plane orbits never feel the vertical tide, and Γ alone sets the 0.925 retrograde edge.
  • The Sun's plunges follow the averaged-tide (Heisler-Tremaine) prediction for e_max: 0.520 against 0.507 at 40°, and 0.841 against 0.827 at 60°.

Tests, code and claims

  • tests/orbits.mjs and table.mjs quick give byte-identical output on Node 18, 20, 21 and 22. All 24 checks pass, and CI is green on 18, 20 and 22.
  • Every computed number in both READMEs and the PR body matches the program output at the stated rounding.
  • The Dormand-Prince tableau matches Hairer, Nørsett and Wanner, including the fifth-order conditions to 4×10⁻¹⁶. The step control, hillDeriv, hillStart, sphere, ellipticK, gammaP and lgamma were checked against references.
  • window.ORB loads with only window defined. tests/run.mjs picks up the new file, and scripts/check_site.py is clean.
  • The branch merges cleanly with main and with #26. With #34 it conflicts only in .github/workflows/test.yml, where both add CI lines at the same place. Whichever merges second keeps both.

Blocking findings

  1. The polar rows are not retention edges. orbits/README.md:92-98 and :109, table.mjs:112-121, and the PR body's "loses polar orbits sooner".
    • The table reports where half the orbits have escaped beyond 3 r_J (README:89 counts only that as lost), and its scan starts at 0.3 r_J. Polar circular orbits (i = 90°) are lost much earlier, by plunging. Run with the PR's own hillFates and 8 phases, the Sun's polar orbits plunge inside 10⁻³ r_J at 0.1, 0.2 and 0.3 r_J: all of them in the across-plane, and 100%, 100% and 75% in the through-plane.
    • Around a point mass, 50-100% plunge at 0.2-0.3 r_H in the two polar planes. Tilted to 75° instead, none plunge between 0.1 and 0.4, around either host.
    • The cause is the Lidov-Kozai cycle, whose eccentricity reaches 1 at 90°. Counting a plunge as a loss, half are lost by about 0.06 r_J for the Sun (0.16-0.17 with ν²/Ω² = 1) and 0.14-0.15 r_H for a point mass.
    • So "it loses polar orbits sooner, at 0.43 and 0.39 r_J" understates the loss in a section about how much of the region a body keeps. README:113's "up to 17%" covers only the all-directions sample.
    • Suggested fix: a "half lost (escaped or plunged)" column, or plunge fractions, for the polar rows, and a sentence that polar circular orbits (i = 90°) are Lidov-Kozai unstable and plunge from about 0.06 r_J (the Sun) or 0.15 r_H (a planet) within 20 turns.
  2. The in-plane retrograde edge is compared with a number for all inclinations. orbits/README.md:100-101 and :222, tests/orbits.mjs:100-102, and the PR body.
    • Shen and Tremaine's "∼0.7r_H" is for "many ... retrograde satellites". For coplanar orbits their abstract says "some coplanar retrograde satellites of Jupiter and Neptune can survive out to ∼ r_H". Their extents are instantaneous positions, not semi-major axes.
    • So the check's "lost by 0.9 (published limit about 0.7)" contradicts the coplanar figure in its own source.
    • The matching published comparison is Nesvorný et al. 2003, as Shen and Tremaine quote it: semi-major axes of "∼0.7r_H for retrograde satellites and ∼0.4r_H for prograde ones ... achieved only for nearly circular orbits close to the plane of the ecliptic".
    • With 64 starting phases, the PR's code puts the retrograde edge at 0.775 (also at 32) and the prograde at 0.46, against 0.75 and 0.45 with 8. Against 0.7 and 0.4, "within 0.05" holds only at the coarse sampling.
    • Suggested fix: the comparison made against Nesvorný et al. as quoted, the edges given as 0.45-0.46 and 0.75-0.78, Shen and Tremaine's coplanar ∼r_H stated, and the 0.9 bound either justified or dropped.
  3. Correa-Otto and Calandra put the Oort cloud's outer limit at 6.5×10⁴ au, not near 10⁵. orbits/README.md:19, :108, :226 and :246, tests/orbits.mjs:121-123, and the PR body.
    • Their Sect. 4.3: "the fraction of bound particles beyond 6.5 × 10^4 au is less than 0.05 and it decrease to 0 at 10^5 au ... we can qualitatively define a_crit ∼ 6.5 × 10^4 au as the outer limit for the Oort Cloud". Half the particles are bound at about 2×10⁴ au.
    • The abstract's "structure around 10^5 au" is made of objects already unbound from the Sun. The introduction's 10⁵ au is quoted from Dones et al. 2015.
    • Their conclusions name the frequency of stellar passages, not the tide, as "the main modulator of these structures and the external limit of the Oort Cloud".
    • With 6.5×10⁴ au the quoted range becomes 0.23-0.71 r_J. The model's 0.45 r_J (1.26×10⁵ au) lies past the point where their bound fraction reaches zero. README:20's "each ending at its host's tide" then needs a qualifier for comets.
    • Suggested fix: a_crit ∼ 6.5×10⁴ au and the 2×10⁴ au half-bound radius quoted as theirs, passing stars named as what sets that limit, and the test's lower bound and label changed to match. The model's 1.13×10⁵ au still passes a 6.5×10⁴ to 2×10⁵ au check.
  4. Feldmeier-Krause et al.'s 4 pc goes with a black-hole mass of 4×10⁶, not 3.0×10⁶. orbits/README.md:136, tests/orbits.mjs:66.
    • Their Sect. 3.3.2: "With this definition and a black hole mass of 4 × 10^6 M_⊙, we obtain r_infl = (104^{+56}{-29}) arcsec, i.e. approximately (4.0^{+2.2}{-1.1}) pc." The definition is Merritt's (2004).
    • Their best-fit 3.0×10⁶ appears in that paragraph only for the 2 pc equal-mass comparison.
    • Suggested fix: "about 4 pc (4.0 +2.2/−1.1), with M_BH = 4×10⁶ M☉ and Merritt's (2004) definition", in both places.
  5. Alexander 2005's 3 pc is not a "twice" radius. orbits/README.md:134-135 and :218, tests/orbits.mjs:62 and :66.
    • His Sect. 3.1.2 defines r_h = Gm/σ². He then writes "M_⋆(≲2 pc) ≃ m and M_⋆(≲4 pc) ≃ 2m ... and so the MBH radius of influence in the GC can be estimated at r_h ∼ 10^19 cm ∼ 3 pc". His own twice radius is 4 pc.
    • Schödel et al. 2018 Sect. 4.5 supplies the 3 pc end directly: "within r=3 pc of Sgr A* is 7.8±0.6×10^6 M_⊙, roughly twice the mass of Sgr A*".
    • Suggested fix: Schödel et al. 2018 for the 3 pc end, or Alexander described as "r_h ∼ 3 pc (Gm/σ²), with 2m reached by ≲4 pc". The 3-4 pc range and the test result stand.
  6. "A's 0.5 systematic" has no source. orbits/README.md:60, orbits/table.mjs:35-36 (coded as A ± 0.9).
    • Bovy 2017 gives A = 15.3 ± 0.4 and no systematic for it. The only systematic in the paper is Metzger et al.'s "15.5±0.4±1.2 (syst.)", and the only ±0.5 is A − B = 27.1 ± 0.5. The 1.33-1.42 pc range also adds the two errors linearly (1.34-1.40 pc in quadrature).
    • Suggested fix: a source for the 0.5, or the 1.33-1.42 pc clause and its output line removed.
  7. Jupiter's ring term is labelled as the outer planets'. orbits/README.md:44.
    • "less 2.9×10⁻⁵ from the outer planets' rings": −2.89×10⁻⁵ is the net of all seven rings. The outer planets give −3.51×10⁻⁵ and the inner planets +0.61×10⁻⁵. Two reviewers found this separately, and a third script that reproduces ringExcess's total confirms the split.
    • Suggested fix: "from the other planets' rings".

Non-blocking findings

Physics

  • All-directions edges (README:19, :98). The 0.1 r_J grid with linear interpolation biases them high. At 400 directions × 8 phases on a 0.025 grid they converge to 0.517 (point mass) and 0.435 (the Sun, 1.23×10⁵ au), against the quoted 0.53 and 0.45. "About half at both scales" holds. Quoting 0.52 and 0.43-0.44, or adding ±0.02, matches the converged values.
  • Starting phases. Hill's equations are symmetric under r → −r, v → −v, and phase φ + π starts at the inverted state. So 8 starting angles are 4 independent orbits (fates agree in 474 of 480 pairs), and plane fractions move in steps of 0.25. Changing >= to > at model.js:326 moves 0.45 to 0.475 and 0.75 to 0.85. Phases taken in [0, π) would double the independent sample at no cost.
  • Run length (README:88-89, :104). 20 turns is 237 years for Jupiter. In a 48-orbit sample run to 3000 turns, the point-mass edge drifts from 0.50 to 0.475, and the Sun's from 0.41 to 0.39 escaped and from 0.39 to 0.325 lost. A sentence on this drift would cover it.
  • The plunges (README:112-114).
    • The point-mass plunges (6-10% at 0.2-0.5 r_H) come only from near-polar directions, |cos i₀| ≤ 0.21. They are Lidov-Kozai cycles (Lidov 1962, Kozai 1962), the point-mass form of the tide README:114 credits to Heisler and Tremaine.
    • "Up to 17%" for the Sun ranges from 0.146 to 0.250 across tolerances of 10⁻⁹ to 10⁻¹³, and is 0.198 at 400 directions × 8 phases, so "about a fifth" is closer.
  • The −1/4 threshold (README:17, :140-145). For the middle cluster mass the boundary is 0.70, 1.09, 1.27, 1.46 or 1.87 pc at slopes of −0.4, −0.3, −0.25, −0.2 and −0.1. The "match" with 1.4 pc depends on calling −1/4 the midpoint between Kepler and flat. "Turns positive by 3 pc" (:140) fails for the low cluster mass, which crosses zero at 3.40 pc.
  • The spherical reading (README:234). For MWPotential2014, v²R/G overstates the true mass inside 8 kpc by 12% (9.00 against 8.00×10¹⁰ M☉). Against the true spherical mean density the Sun's ratio is 2.53, not 2.25, and the 5-25 kpc growth is 4.03, not 3.65. "Somewhat" can be "about 10-15% in MWPotential2014".
  • Γ from the Oort constants (README:55-65, :82).
    • Bovy 2017 warns that A and B "cannot be directly related to the Milky Way's circular velocity and its slope at the Sun", because |C| ≈ |K| ≈ 0.2|A|.
    • r_J hardly moves (1.366 pc from Eilers et al.'s curve), but Γ is 2.12 from Eilers et al.'s slope and 2.20 from MWPotential2014's, against 2.25. In the mutation runs Γ × 0.9 moved the Sun's retrograde edge from 0.925 to 1.05 and its all-directions edge from 0.45 to 0.43.
  • Thin disks (README:20, :190-194). h_z/h_R = 0.115 is compared with the planets' rms sin i. The like-for-like ratio is h_z/R₀ = 0.037, close to the planets' 0.045. The thin disk's present thickness is also set by stellar heating, which a clause could say.
  • "The planets pull on one another" (README:16). That explains the outer planets' excesses, but Jupiter's comes mostly from its own mass in the two-body law. tests/orbits.mjs:28 says the rings alone give up to 1.5×10⁻³. They reach 1.36×10⁻³ (Uranus), and 1.54×10⁻³ is Saturn's own mass plus rings.

Sources and wording

  • orbits/README.md:18. "Satellites are held only inside its tidal radius" is contradicted by point (iv) of Shen and Tremaine's abstract: "at distances ≳2r_H stable satellite orbits exist around Jupiter, Uranus and Neptune ... as large as ∼10r_H". A qualifier for quasi-satellites would fix it. (Raised as blocking. Kept non-blocking because it is wording, not a number or an attribution.)
  • tests/orbits.mjs:48-49. Correa-Otto and Calandra's 2.8×10⁵ au uses Jiang and Tremaine's constants (A ≈ 14.8, Ω ≈ 29.6 km/s/kpc), which give 2.78×10⁵ au. The check confirms the formula on nearby inputs, not Bovy's values independently.
  • orbits/README.md:137, tests/orbits.mjs:66-67. GRAVITY 2024's 3.9 pc comes from one Fokker-Planck cusp simulation, so "in their cusp simulation" is closer than "in their models".
  • orbits/README.md:128, model.js:137. Schödel et al. 2018's γ = 1.13 ± 0.03 ± 0.05 is a light-density slope for "the innermost 1-2 parsecs", with mass following it only at constant M/L. Their conclusions give "a robust range ... γ=1.1-1.4". At γ = 1.4 the middle "twice" radius is about 3.8 pc. Their 1.0×10⁶ (1 pc) and 7.8×10⁶ (3 pc) masses would make a direct check of the cusp model.
  • orbits/README.md:151, tests/orbits.mjs:82. Eilers et al.'s 2-5% systematic holds "out to R∼20 kpc" and rises beyond. The shape test divides out the level, so its tolerance comes from the slope's own 0.46 km s⁻¹ kpc⁻¹ systematic (0.6% at 5 kpc, 3.9% at 25 kpc). 5% remains fair.
  • model.js:20-21. "v stays constant": Eilers et al. find the curve "gently but significantly declining", with a flat curve excluded at >3σ.
  • orbits/README.md:165. Koop et al.'s 15 kpc is where their own statistics are robust. They also find Jeans-inferred curves off by "of order 10%" in simulations. The sentence reads broader than that.
  • orbits/README.md:177-178. Chae's 1.43 ± 0.06 is g_obs/g_pred at g_N = 10^−10.15 m s⁻². Banik et al.'s 19σ compares the best Newtonian and MOND models, and the 16σ comes from the fit to α_grav.
  • tests/orbits.mjs:59. The arXiv text reads "7700 km/s", not "7700 km s^-1".
  • Sources, orbits/README.md:240-266.
    • Koop's initial is O. (Orlin), not H. Heisler's is J., not M.
    • Bovy 2017 is MNRAS 468, L63-L67, DOI 10.1093/mnrasl/slx027 (now confirmed). Shen and Tremaine is AJ 136, 2453, DOI 10.1088/0004-6256/136/6/2453.
    • Correa-Otto and Calandra's title is Stability in the most external region of the Oort Cloud: evolution of the ejected comets.
    • GRAVITY 2022 has no title. GRAVITY 2024 is A&A 692, A242, DOI 10.1051/0004-6361/202452274. Schödel et al. 2018's DOI is 10.1051/0004-6361/201730452, Alexander's is 10.1016/j.physrep.2005.08.002 (pp. 65-142) and Feldmeier-Krause et al.'s is 10.1093/mnras/stw3377.
    • Feldmeier-Krause et al. cite Merritt 2004 for the definition. Merritt 2013 is GRAVITY 2024's citation.
    • The JPL page credits Standish and Williams (1992).
    • The formula credited to Binney and Tremaine sec. 8.3 "from memory" is confirmed in Jiang and Tremaine 2010. The section number is not.
  • Provenance labels. README:238, the labels in tests/orbits.mjs, the Checks table and the PR body's Sources paragraph can now say "checked in the arXiv source" for every arXiv paper above, with the sections named in this review. The labels that stay are Souami and Souchay (below), Dones et al. 2004 and Merritt's books.

Tests and code

  • tests/orbits.mjs:97-99. The prograde-edge check cannot fail low.
    • Its grid is 0.4-0.6 and its tolerance 0.1, and hillScan returns 0.4 when every orbit already escapes there. An all-escape run (rEsc 0.35) and a flipped rotating frame both printed 0.40 and passed.
    • A wider grid (0.3-0.7), or asserting escapes(0.4) < 0.5 ≤ escapes(0.6), makes it two-sided. (Raised as blocking. Kept non-blocking because the neighbouring model checks catch the frame-sign error.)
  • tests/orbits.mjs:108-111. The Jacobi-integral check also passes when the orbit escapes. Requiring end.fate === 'stays' closes that.
  • .github/workflows/test.yml:34, table.mjs. table.mjs never sets an exit code, so the CI line passes on NaN output (SGRA.M = 4.297e9 printed "inside NaN pc" and exited 0). Section 5 never runs in CI.
  • model.js:272-291. hillOrbit loops forever on a NaN state: NaN err makes h NaN and t never advances. A typo in an error coefficient made runs about 6000 times slower instead of failing. A finite-err guard, a step cap and timeout-minutes in the workflow would bound it.
  • Section 5 sensitivities. The plunge radius rIn moves the Sun's edge from 0.445 to 0.461 between 10⁻³ and 10⁻². A 10⁻⁴ change in ν² moves the polar-across row from 0.392 to 0.400. The rIn dependence belongs under "What the model leaves out".
  • PR body, mutation claim. Of 47 mutations run against the tests, these survive while changing README numbers: Γ × 0.9, point-mass Γ = 3.3, GM☉ × (1 + 10⁻⁴), a flipped ringExcess sign, cusp γ = 1.2, SGRA.M = 4.0×10⁶, the bulge and disk shape parameters, cuspSlope's mass term and hillScan without interpolation. Γ × 1.1 is caught only by the 0.875 r_J check, at its margin.
  • Cheap checks for code that feeds README numbers: the inner four planets' |excess| ≤ 5×10⁻⁵ (pins GM☉ and the century), ellipticK(1/√2) = 1.8540746773, gammaP(½, x) = erf √x, the closed-form quarter-slope radius of 1.272 pc, and Bovy 2015 Table 1's M_b, M_d, M(<60 kpc), slope at R₀ and ρ_DM, which the model gives as 0.450, 6.82, 4.09, −0.101 and 0.0075.
  • "Every number above" (README:200, the PR body). Some quoted numbers are not printed by any script: McKee's 0.097 ± 0.013, g†'s errors, Chae's and Banik's figures, Gaia's 19 and 15 kpc, Shen and Tremaine's ranges and r^1.87. "Every computed number" is accurate.
  • Runtimes. Measured 33 s, 81 s and 1.3 s for the default, long and test runs, against "about 50 s", "about 2 minutes" and "about 2 s". This may depend on the machine.
  • Small mismatches:
    • orbits/README.md:109 says 0.43 where :96 has 0.425.
    • The ρ₀ range at :107 runs the wrong way (0.08 gives 0.456 and 0.12 gives 0.436).
    • :20 says 0.1 where :191 has 0.12.
    • Root README.md:23 says 235 km/s where the study has 234, :24 says "a third of an au" for 0.355 au, and :26 says "about a parsec" for 1.3 pc.
    • Root README.md:215 says CI runs every Run-it line except critical/table.mjs, but CI now also runs orbits/table.mjs quick, which the block does not list.

Could not check

  • Souami and Souchay 2012. No open copy was reachable, so Jupiter's 0.3219° and Saturn's 0.9254° (tests/orbits.mjs:91-92) are unverified. Li, Xia and Zhou and Volk and Malhotra quote only the plane's orientation. Whether the paper lists per-planet tilts at all is not confirmed.
  • Dones et al. 2004 (the 2×10⁵ au edge) and Heisler and Tremaine 1986's abstract: no open copy.
  • Whether Table 1's Saturn and Uranus elements are secular means. This decides whether the 1.3×10⁻³ ring-minus-fit residual is the great inequality, as README:46 suggests.
  • Journal-typeset versions. Section, appendix and table numbers are from the arXiv versions.

Verdict: do not merge until the seven blocking findings are fixed: the polar rows, the in-plane retrograde comparison, the Oort cloud's outer limit, the Feldmeier-Krause black-hole mass, Alexander's definition, "A's 0.5 systematic" and Jupiter's ring-term label

Automated posting by agentic team with human oversight.


Generated by Claude Code

Blocking:
1. Polar orbits are lost by plunging (Lidov-Kozai), not only by escaping. The table and README now give escaped
   and lost (escaped or plunged) edges. Polar orbits are lost by 0.14-0.15 r_H around a planet and by 0.06 r_J for
   the Sun within 20 turns; a check covers the Sun's polar plunges.
2. The in-plane edges are compared with Nesvorny et al. 2003 as Shen & Tremaine quote it (0.4 and 0.7 r_H for
   near-circular, near-ecliptic orbits), with S&T's coplanar ~r_H stated. The edges are now 0.46 and 0.775. The
   prograde check is two-sided, and the retrograde check uses the range 0.7 to 1 r_H. Starting angles span [0, pi)
   because Hill's equations are symmetric under inversion, so every angle is a different orbit.
3. Oort cloud: Correa-Otto & Calandra's a_crit is 6.5e4 au, set by passing stars, and half of their comets are
   bound at about 2e4 au. The quoted outer limits are now 0.23 to 0.71 r_J, and the check's lower bound is 6.5e4 au.
4. Feldmeier-Krause et al.: 4.0 pc with M_BH = 4e6 and Merritt's (2004) definition.
5. The "twice" radius at 3 pc is credited to Schodel et al. 2018 (7.8e6 inside 3 pc). Alexander's r_h ~ 3 pc is
   Gm/sigma^2, with 2m reached by about 4 pc.
6. The unsourced 0.5 systematic on A is removed.
7. Jupiter's ring term is the net of all the other planets' rings (outer -3.5e-5, inner +0.6e-5), now printed.

Non-blocking, also applied:
- All-directions scans use 48 directions on a 0.05 grid: 0.52 and 0.435 r_J.
- The 100-turn values, and the plunge-radius, rho0 and Gam sensitivities, are printed.
- Model: hillOrbit throws on a non-finite step or a step cap. Gauss's-theorem sphere mass for MWPotential2014
  (v^2 R/G overstates the mass inside 8 kpc by 12%; the true 5-25 kpc growth is 4.03). Closed-form cusp slope radii.
- The text now gives:
  - the -1/4 threshold's dependence and the zero crossings at 1.9-3.4 pc;
  - the gamma range 1.1-1.4;
  - Bovy's warning on A and B, with Gam = 2.12 from Eilers et al.'s slope;
  - the like-for-like disk ratio 0.037;
  - wording for the Eilers, Koop, Chae and Banik results.
- New checks:
  - the inner planets' excess, which pins GM_sun and the century;
  - ellipticK, and gammaP against erf;
  - the cusp mass against Schodel et al. 2018;
  - the closed-form slope radius;
  - the disk sphere mass;
  - the Jacobi-integral check now requires the orbit to stay.
- table.mjs exits 1 on NaN or Infinity; the CI job gets a timeout.
- Sources: corrected citations, DOIs and provenance labels, as read in #37's review.
- Root README: the numbers match the study, and the run block lists the orbits table.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01C2bpiHyHSkC8DAL5CcyciK
- Saturn's fitted excess is below its own mass, so only Uranus's and Neptune's are mostly the other planets' pull.
- In-plane orbits plunge only outside their escape edge; the table prints where each first plunges.
- Polar "lost" is the first radius where half are lost. The table prints the lost-fraction profile: around a point
  mass it falls back below half from about 0.35 r_H.
- The 75 deg results are printed: none plunge for a planet, nor inside 0.3 r_J for the Sun; 25-38% of the Sun's
  plunge at 0.35-0.4. So is the inclination range of plunging directions: within 11 deg of polar for a planet,
  29 deg for the Sun.
- The ratio is 2.53 (2.25 times the 12% overstatement); 2.56 is against the true mean inside 8.122 kpc.
- Checks: Kuzmin and Plummer limits of the disk sphere mass; the edgeLost path; the Oort grid starting at 0.2 r_J,
  so its 6.5e4 au bound can fail; the inner-planet bound's asymmetric window stated.
- The chaos of single-plane edges is stated (nu2 +- 1e-4 moves 0.394 to 0.412) and printed.
- Wording: thin-disk height over orbital radius; the run-length bullet; the 24-direction comparison for rIn; "every
  computed number except the values credited to #37's review".
- Sources: Standish & Williams (1992), Li, Xia & Zhou 2019, and Binney & Tremaine's section left unconfirmed in
  model.js too.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01C2bpiHyHSkC8DAL5CcyciK

@zero-aska zero-aska left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Independent re-review of 624ece2, after the fixes in 2db95f6 and 624ece2. Separate agent instances that did not draft the branch wrote it. Three reviewers covered sources and wording, physics and numerics, and tests, code and claims against output. Each finding raised as blocking was then re-checked with the PR's own code or against the source text.

What was verified

The seven blocking fixes

  1. Polar rows. The table now gives escaped / lost radii. The half-lost radii reproduce with an independent DOP853 integrator: 0.139 and 0.150 r_H around a point mass [0.140, 0.150], and 0.164 for the Sun with ν²/Ω² = 1 [0.159-0.166]. Every polar orbit inside the 20-turn radius plunges within 100 to 400 turns, as README:113 says. The averaged tide gives e_max = 1 at 90° for both hosts.
  2. Retrograde comparison. The Nesvorný et al. quote matches Shen and Tremaine's text word for word, and the coplanar ∼r_H and quasi-satellite notes match their abstract. The edges are 0.458 and 0.775 [0.460 and 0.787 with 64 starting angles]. The [0.7, 1] window and the prograde check are both two-sided.
  3. Oort cloud. Correa-Otto and Calandra's a_crit and half-bound radius are quoted from sect. 4.3, and the 0.23-0.71 r_J range matches the table. The test's 6.5×10⁴ au bound can fail (rEsc = 0.35 gives 5.7×10⁴ au). The tide-only edge stays past a_crit even for eccentric starts: 1.18×10⁵ au escaped and 1.10×10⁵ au lost, for isotropic orbits with thermal e.
  4. Feldmeier-Krause et al. README:155 and tests:74 match sect. 3.3.2 and its Merritt (2004) reference.
  5. Schödel et al. 2018 sect. 4.5 (7.8 ± 0.6×10⁶ inside 3 pc, 180 ± 30 inside 0.01 pc) is quoted, and the new checks pass.
  6. A's systematic is gone, and table.mjs:42 uses ±0.4.
  7. Jupiter's ring term reads "net from the other planets' rings", with −3.505×10⁻⁵ and +6.124×10⁻⁶ printed.

Physics and numerics

  • All-directions edges: 0.520 / 0.515 and 0.435 / 0.421 [0.521 / 0.516 and 0.437 / 0.423]. At 400 directions × 8 angles they converge to 0.518 and 0.432. The 100-turn values reproduce.
  • diskSphereMass: the integrand is the exact radial derivative of the Miyamoto-Nagai potential, and Gauss's normalisation is right. Direct volume integration of the density gives the same 8.0048 against 9.0032×10¹⁰ M☉. The growth 4.028 and the ratios 2.531 and 2.557 recompute, and so do the Kuzmin and Plummer limits.
  • Γ = 2.1206 from Eilers et al.'s slope and 2.2055 from MWPotential2014's. r_J = 1.3664 pc.
  • The slope-threshold radii (0.701, 1.087, 1.272, 1.460, 1.867 pc) and zero crossings (1.891, 3.403 pc) recompute in closed form.
  • The ν² sensitivity (0.394 to 0.412) reproduces. The quasi-satellite, stellar-heating and oblateness wording is correct.

Sources

  • Every changed quotation matches its source, including Bovy 2017's warning on C and K, Eilers et al.'s "gently but significantly declining" and 2-5% out to 20 kpc, Koop et al.'s scope, Chae's g_N, Banik et al.'s 19σ and 16σ, GRAVITY 2024's cusp simulation, and Standish and Williams (1992).
  • Every "#37's review" label names a section the first review read.
  • Title, journal, volume, page, year and DOI match Crossref (or ADS, for Feldmeier-Krause et al.) for every entry that has them.

Tests, code and claims

  • All 38 checks pass, and tests/orbits.mjs and table.mjs quick give byte-identical output on Node 18, 20, 21 and 22. npm test passes, scripts/check_site.py is clean and CI is green.
  • Every computed number in both READMEs and the PR body matches table.mjs and table.mjs long at the stated rounding.
  • hillOrbit throws on every NaN or Infinity path tried, and the 5×10⁶ step cap turned two hanging integrator typos into failures in about 9 s. The cap does not fire on any documented run: the longest orbit needs 1,462,056 steps.
  • table.mjs exits 1 on a NaN or Infinity anywhere in its output, on Node 18, 20 and 22.
  • 77 mutants were run. Newly caught: GM☉ × (1 + 10⁻⁴), cusp γ = 1.2, cuspSlope's mass term, hillScan without interpolation, disk b = 0.5, and the two integrator typos.
  • The branch merges cleanly with main and with #26, and on that merge npm test passes 8 check files. With #34 it still conflicts only in .github/workflows/test.yml.

Blocking findings

  1. orbits/README.md:19: "(up to about 0.3 r_H; from 0.35 r_H on, half or more survive the run)".
    • The table's own profile shows 0.63 of polar orbits lost at 0.45 r_H in the plane through the host. That is inside its 0.463 escape edge, so fewer than half survive there. With 64 starting angles, 55% and 61% are lost at 0.35 r_H.
    • README:114 states the same profile correctly for the printed radii ("0.25-0.5 at 0.35-0.4 r_H").
    • Suggested fix: "the lost fraction dips below half near 0.4 r_H".

Non-blocking findings

Sampling precision

  1. The starting angles still pair up.
    • Hill's equations are also symmetric under time reversal, (x, −y, ±z, −t). With r → −r, the start at π − φ is the time-reversed mirror of the start at φ, in all four planes (checked to 10⁻¹⁵). So in [0, π) the 8 angles form 4 reversal pairs.
    • On in-plane retrograde rows their fates agree at 96-97% where outcomes are mixed, against 65-76% by chance. The first review's suggestion of [0, π) missed this second symmetry. Angles over [0, π/2), or more of them, would remove it.
  2. README:131 and table.mjs:172, "with Γ = 2.12 the edge is 0.975". With 64 starting angles the PR's own code gives 1.017 (1.015 with 256). That is 0.04 off, and the edge moves past r_J. "About 1.0" is the converged value. (Raised as blocking. Kept non-blocking because the table prints 0.975 at its stated sampling, so the issue is the precision claim in item 3.)
  3. README:270, "single-plane edges are chaotic at about the 0.02 level". This is fair for the polar rows. In-plane retrograde edges are not chaotic: a 10⁻³ change in Γ moves them by less than 0.004. Their 8-angle error is sampling, and it reaches 0.04 (item 2).
  4. README:115 and table.mjs:181, "within 11° of polar for a planet".
    • That is the resolution of the 48-direction sample. The PR's own hillFates, with 16 normals × 8 angles at 0.4 r_H, gives 20% plunged at 11°, 13% at 12°, 5% at 13°, 3% at 14° and none at 15°.
    • The cone widens with a (about 8°, 10°, 12° and 15° at 0.2, 0.3, 0.35 and 0.4 r_H). "Within about 15°" matches. (Raised as blocking. Kept non-blocking for the same reason as item 2.)
  5. README:107-108, in-plane orbits "plunge only outside their escape edge". That holds with 8 angles. With 64, the point mass's first retrograde plunge is at 0.75, inside its edge of about 0.79. The escaped and lost radii still agree to 0.003.
  6. README:114, "63-100% ... from 0.075 to 0.45 r_J". The minimum is 0.50-0.52 with 64 angles. "Half or more" holds at any sampling.
  7. The Sun's polar half-lost radius, 0.063, interpolates between 0.05 (none lost) and 0.075 (all lost). A 0.0025 grid gives 0.055-0.056. "0.06" is fine at one figure.

Physics wording
8. README:115, "For comets this is the tide driving them inward (Heisler and Tremaine 1986)".

  • The averaged tide predicts a plunge cone only 3.6-5.1° wide for the Sun at 0.2-0.4 r_J, and no plunges at 75° (e_max 0.957). So the Sun's 29° cone and its 25-38% at 75° come from non-secular effects near the escape edge.
  • They also depend steeply on rIn: at 75° with 64 angles, 28-44% plunge at rIn = 10⁻³ and 2-6% at 10⁻⁴. "The averaged tide accounts for the near-polar core" matches.
  1. README:127 and :269, the rIn sensitivity. Raising rIn to 10⁻² moves the escaped edge out (0.448 to 0.469) but the lost edge in (0.425 to 0.400), and doubles the Sun's plunge fraction to 33-40%. Quoting both edges shows that.
  2. README:217-219, h_z/R₀ = 0.037 "like-for-like" with the planets' 0.045. An exponential scale height and an rms sin i differ by about √2 in convention. As rms z/R it is 0.052 for the Galaxy against 0.032 for the planets. "Both a few percent" is safe. The first review suggested the "like-for-like" wording.

Sources and wording
11. README:154, "Alexander 2005: r_h ~ 3 pc from Gm/σ²".
- He calls Gm/σ² customary but "not a well defined quantity", and estimates 3 pc from the enclosed mass: "M⋆(≲2 pc) ≃ m and M⋆(≲4 pc) ≃ 2m ..., and so the MBH radius of influence in the GC can be estimated at r_h ∼ 10^19 cm ∼ 3 pc".
- The wording came from the first review's suggestion. "r_h ∼ 3 pc, estimated from the stars' mass reaching m by ≲2 pc and 2m by ≲4 pc" matches.
12. README:129 and tests:170, "passing stars, not the tide".
- Correa-Otto and Calandra's sect. 4.3 describes "a synergy effect of ejection" between "the Galactic potential and the stellar passages", and their conclusions name "the frequency of the stellar passages" as "the main modulator".
- "Not the tide" overstates it, and the phrase came from the first review. "The frequency of stellar passages, acting with the tide" matches.
- Their axis is also the initial semi-major axis, and the 2×10⁴ au half-bound radius is a mean over three samples.
13. README:119, "Their extents are instantaneous distances". After the moved sentence, "their" now reads as the observed moons, whose 0.6 against 0.4 r_H are semi-major axes. Placing it right after the 0.5 / 0.7 / ∼r_H sentence fixes the antecedent.
14. README:46, "Whether Table 1's outer-planet elements are secular means ... is not checked." The SSD page answers it: "Such elements are not intended to represent any sort of mean; they are simply the result of being adjusted for a best fit." That supports the README's point.
15. README:264, "molecular clouds, which set the Oort cloud's actual edge". No cited source says this, and Correa-Otto and Calandra leave molecular clouds out. "Which also strip it" is supported.
16. README:272, "Table 1's derived masses were not read".
- They are in Bovy 2015's arXiv source (mwpotential2014.txt): M_b 0.5 and M_d 6.8×10¹⁰ M☉, M(r < 60 kpc) 4.1×10¹¹ M☉, d ln v_c/d ln R −0.10 and ρ_DM(R₀) 0.008 M☉ pc⁻³. The model gives 0.450, 6.82, 4.09, −0.101 and 0.0075, which agree at that rounding.
- The Plummer check also hard-codes b = 0.28 and catches b = 0.5, so "not otherwise tested" is now too modest.
17. Sources list.
- Li, Xia and Zhou is A&A 630, A68 (2019), DOI 10.1051/0004-6361/201834196.
- Jiang and Tremaine is MNRAS 401, 977, DOI 10.1111/j.1365-2966.2009.15744.x.
- Nesvorný et al. (AJ 126, 398), Lidov (PSS 9, 719), Kozai (AJ 67, 591) and Dones et al. (Comets II, 153-174) match Crossref.
- Shen and Tremaine's title mixes the Crossref and arXiv versions. Bland-Hawthorn and Gerhard lack the subtitle ": Structural, Kinematic, and Integrated Properties". Merritt 2004 is p. 263. GRAVITY 2022 and 2024 still have no titles.
- The SSD page read is "Approximate Positions of the Planets". The title given is that of the older PDF, whose URL now redirects to the page.
18. Smaller points. table.mjs:47's Ω = 29.6 is Correa-Otto and Calandra's rounding (Jiang and Tremaine give 236 km/s over 8 kpc, which is 29.5). Koop et al. say "as high as 15%, but ... likely ... of order 10%".
19. PR body. The "remain unread" list omits Nesvorný et al. (read only as quoted), Lidov, Kozai, Merritt and Binney and Tremaine. "Also applied" omits the Table 1 checks that were not added. The mutation sentence is inaccurate both ways:
- Now caught but listed as surviving: hillScan without interpolation and disk b = 0.5.
- Not listed but surviving while moving README numbers: point-mass Γ = 2.7 to 3.3, disk Γ × 1.05 and × 0.6, cross(), flatRange's tolerance, sphere(), the bulge-free or v²R/G sphereMass, phases over [0, 2π), edgeLost counting plunges only, > in halfPoint, and rIn = 10⁻².

Tests and code
20. tests:155-158, the point-mass polar check. Its label says "before any escapes", but it requires only escapes below half. Requiring rows.every(r => r.escapes === 0) matches the label. It also fails if 4 of the 8 orbits are lost at 0.2.
21. tests:130-132, prograde edge 0.4 ± 0.1 on a grid starting at 0.3. An edge at or below 0.3 returns 0.3 and fails only by rounding (0.10000000000000003). The new check at tests:127-129 is two-sided, so this one adds little. A grid starting at 0.25 makes it fail cleanly.
22. tests:167-170, the Oort check. It can fail, but it is insensitive: disk Γ × 0.6 or × 1.5 moves the edge only within 1.235-1.281×10⁵ au.
23. model.js:288, maxSteps = 5e6 does not scale with orbits. The worst orbit needs about 14,600 steps per turn, so runs beyond about 340 turns throw at default settings. Separately, NaN for orbits, rEsc or rIn returns "stays". A cap of about 2.5×10⁵ × orbits would scale.
24. table.mjs:150 prints a NaN first-plunge radius as "none", which the exit-1 guard cannot see. CI runs only quick, so this path is not covered there.

Could not check

  • Souami and Souchay's per-planet tilts, the texts of Heisler and Tremaine, Nesvorný et al., Dones et al., Lidov and Kozai, and the Merritt books (metadata only).
  • Runtimes on an idle machine. Scaled from a loaded one, "about 3 s / 3 min / 5 min" is consistent.

Verdict: do not merge until README:19's "from 0.35 r_H on, half or more survive the run" is fixed


Generated by Claude Code

Blocking: README:19 said polar orbits around a planet are mostly kept
"from 0.35 r_H on". The table's own profile loses more than half at 0.35;
the row now says the lost fraction dips below half near 0.4 r_H, and the
polar bullet gives the profile at the printed radii.

Sampling and numerics:
- Starting angles span the quarter turn [0, pi/2): besides r -> -r, Hill's
  equations are symmetric under time reversal with y -> -y, which pairs
  the start at pi - phi with the start at phi for every single-plane
  scan. hillFates takes quarter = 1 for [pi/2, pi); the table prints the
  all-directions fractions from that quarter, which agree to 0.03.
  Section 5 was re-run and every number in the README updated.
- 64-angle in-plane edges, the 64-angle lost edge and first plunge, the
  Gam = 2.12 edge (about 1.0 r_J), tilt-from-polar plunge profiles, 75 deg
  plunges, both edges under the plunge radius, and the nu^2 sensitivity
  are printed; the chaos caveat now separates polar chaos from in-plane
  sampling error.
- hillOrbit's step cap scales with the number of turns (2.5e5 per turn)
  and it throws on non-finite settings. A missing first plunge prints
  "none" without hiding a NaN radius.

Checks (43): Bovy 2015 Table 1's bulge and disk masses, M(<60 kpc),
slope at R0 and local dark-matter density (haloDensity added); the
point-mass polar check requires no escapes at all; the prograde grid
starts at 0.25; the Oort label states the check's range.

Wording and sources: Alexander's r_h as he estimates it; Correa-Otto and
Calandra's limit set by stellar passages acting with the tide; Shen and
Tremaine's extents placed after their 0.5/0.7/r_H sentence; the SSD
page's "not intended to represent any sort of mean"; molecular clouds
"also strip it"; h_z/R0 against rms sin i as "both a few percent"; Koop
et al.'s 15% / 10%; the averaged tide explains the near-polar core only;
Table 1's derived values now checked. Li, Xia and Zhou's and Jiang and
Tremaine's journal references, Bland-Hawthorn and Gerhard's subtitle,
Merritt 2004's page, GRAVITY 2022 and 2024 titles, the SSD page title,
and provenance for Nesvorny et al., Lidov, Kozai and Dones et al.
Runtimes remeasured: about 7 minutes full, 10 long.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01C2bpiHyHSkC8DAL5CcyciK
Sampling (blocking): the quarter turn [0, pi/2) assumed the start at
pi - phi duplicates the start at phi. It is that start's time-reversed
mirror, whose fate matches nearly always in the plane but differs for
7-17% of polar pairs, so polar edges depended on which quarter was
sampled (the Sun's polar-across edge moved 0.39 -> 0.43). Starting
angles now span the half turn [0, pi), a quarter step off the grid
pi p/n, so no inverted or mirrored pair falls in one sample. Section 5
re-run; the table prints the polar rows with 16 angles too (they move
by at most 0.01) and the README carries the new numbers.

Chaos (blocking): "the in-plane edges are not [chaotic]" was wrong:
changing Gam by 1e-4 moves the Sun's retrograde edge 0.925 -> 0.95. The
table prints that line; the caveat now says single orbits near any edge
are chaotic.

Also:
- 64-angle lost edges and first plunges printed for every in-plane scan
  (with Gam = 2.12 the lost radius is 1.01 against 1.03 escaped).
- The tilt-from-polar scan used node azimuths om and om + pi, which are
  the same orbits under z -> -z; it now uses 0 and 90 deg with 16 angles.
- The symmetry text names z -> -z and the inversion for y-z planes.
- Thin disks: an exponential scale height and rms sin i differ by a
  factor of about 2, not sqrt2; as rms z/r the disk is 0.052 against the
  planets' 0.032, printed; table.mjs no longer says "like-for-like".
- The averaged-tide cone: 5.1 deg at 0.2 r_J to 3.6 deg at 0.4 r_J, and
  the Sun's whole cone beyond it, not only near the escape edge, is
  non-secular.
- The polar check accepts half lost exactly at 0.2; the Oort check's
  label states its measured insensitivity to Gam; "#37's re-review" is
  defined; the Kuzmin limit pins a; the bulge's slope and cut-off are
  untested; Alexander's m is the black hole's mass; "Galactic center"
  as A&A prints it; the step-cap comment's figure; runtimes measured on
  an idle machine (about 10 minutes full, 13 long, 6 s for the checks).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01C2bpiHyHSkC8DAL5CcyciK
…0438b7

- The polar lost-fraction wording rested on 8-angle values at a few
  printed radii; the unprinted grid points swing by about 0.25, and at
  0.325 r_H across the host the converged fraction is about a third.
  table.mjs now prints 32-angle polar profiles from 0.1 to 0.5 r_J on
  the 0.025 grid, with their edges, and the README describes those:
  half or more lost from 0.15 to 0.3 r_H around a point mass, then
  swinging between about a fifth and two-thirds out to 0.45 r_H; half
  or more at every radius for the Sun with its vertical tide.
- The polar sampling error is stated from the mirrored set of 8 angles
  (escape edges up to 0.025), printed, as well as against 32 angles.
- Printed now: the mirror-pair fate differences around a point mass (0,
  16 and 32 of 64 in the plane and the two polar planes) and the orbits
  escaped at 0.925 r_J behind the Gam +- 1e-4 line (4, 3, 3 of 8).
- The averaged-tide sentence separates the secular cone (to 5.1 deg at
  0.2 r_J) from the rest; the Gam = 2.12 first-plunge clause is dropped;
  the Oort label gives the dense-grid range, 1.20 to 1.33e5 au; "#37's
  re-review" covers its calculations, and the Run-it line and the
  table's header credit it.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01C2bpiHyHSkC8DAL5CcyciK
- The 75 deg rows used 8 angles; with 32 the Sun's prograde orbits
  plunge from 0.3 r_J (up to 16%) and up to 44% at 0.4 r_J, not 63%.
  The table prints 32-angle 75 deg rows, labelled as the prograde side;
  the tilt-from-polar cone counts both senses.
- Row 19 and the 'When' bullet: half lost by 0.14 to 0.15 r_H; beyond
  0.3 r_H the 32-angle fraction runs between about a fifth and two-thirds.
- 32-angle fractions are rounded and given +-0.1 sampling noise; the
  lost-edge bound names the edges the 32-angle grid measures; the
  mirror-pair count in the plane is for retrograde orbits.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01C2bpiHyHSkC8DAL5CcyciK

@zero-aska zero-aska left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Check of 905eb6e, after the fixes in 99ec2bc, 80438b7, 9ec913e and 905eb6e for the re-review of 624ece2. It was done by an agent instance that did not draft the branch, with an independent DOP853 integrator and the PR's own code at more starting angles.

What was verified

  • The blocking item. README:19 and :123 now describe the 32-angle polar profiles that table.mjs prints, and every statement holds against them.
    • Around a point mass the lost fraction is 0.84-1.00 and 0.53-0.97 from 0.15 to 0.3 r_H, 0.19-0.69 from 0.325 to 0.45 r_H, and 0.25 and 0.19 at 0.4 r_H.
    • With 512 angles the same ranges are [0.54-1.00], [0.23-0.63] and [0.28, 0.24].
    • The Sun loses half or more everywhere [minimum 0.56], and with ν²/Ω² = 1 it loses 0.19-0.47 from 0.325 to 0.45 r_J [0.20-0.54].
  • Starting angles. With π(p + ¼)/n, the mirror π − φ falls on the ¾ offset, so no mirror pair shares a sample for any n. The start at π − φ is the time-reversed mirror of the start at φ to 10⁻¹²: plain reversal in the x-z planes, and reversal with z → −z and inversion in the y-z planes. Mirror pairs end differently in 0, 16 and 32 of 64 cases [0, 16, 32].
  • Edges.
    • With 512 angles the in-plane edges are [0.460, 0.787, 0.491, 0.948, and 1.018 for Γ = 2.12], so the 8-angle errors are at most 0.023, inside "about 0.03".
    • The polar escape edges are within 0.008 of 512 angles, and the mirrored set is within 0.021, inside 0.025.
    • The Section 5 table in the reply matches the program output in every cell.
  • Chaos. Γ ± 10⁻⁴ moving the Sun's 8-angle retrograde edge from 0.925 to 0.95 reproduces at rtol 10⁻¹⁰ and 10⁻¹². Escape times jump between runs, so this is chaos, not run length.
  • Other numbers.
    • The averaged-tide limits are 5.09° at 0.2 r_J and 3.60° at 0.4 r_J, with none at 75°, from 1 − e_max² = 1.2654 cos² i₀.
    • The rIn change moves both edges in the stated directions.
    • rms z/R is 0.052 and 0.032.
    • Bovy 2015 Table 1: [M_b 0.4501, M_d 6.819, v²R/G at 60 kpc 4.082, slope −0.1009, ρ_DM 0.007544]. Comparing v²R/G at 60 kpc is right, since Table 1 sets its 4.1 beside Xue et al.'s curve-implied 4.0 ± 0.7.
    • The Oort label's 1.20-1.33×10⁵ au range and the 100-turn values reproduce.
  • Tests and code.
    • All 43 checks pass, and CI is green on Node 18, 20 and 22. Each of the five new Table 1 checks can fail (haloDensity scale, f_b, disk a and b, the force fractions).
    • The point-mass polar check now requires zero escapes. It fails for rIn = 10⁻⁴, ν² = 0, plunges counted as escapes, and start speed × 1.15.
    • The prograde grid from 0.25 fails cleanly.
    • The new input guards throw on every non-finite input tried. The worst staying orbit needs 73,103 steps per turn, 3.4 times under the cap.
  • Claims and sources.
    • Every number in the changed lines of both READMEs and the PR body matches table.mjs, long and the tests.
    • The new titles and references match Crossref, apart from the one below.
    • The full table took 10 min and long about 13 min on a shared machine, consistent with "about 11" and "about 14".

Blocking findings

None.

Non-blocking findings

  1. README:124 and :126, "about 8° from polar at 0.2 r_J". The 4° scan step understates the cone. At 1° steps the PR's code gives 0.63, 0.36 and 0.125 plunged at 8°, 9° and 10°, and none at 11°, so the reach is about 10°. The Sun at 0.3 r_J reaches about 26-27°, and a planet about 11° at 0.3 r_H and 15-16° at 0.4 r_H. The conclusion, non-secular plunges beyond 5.1°, is unchanged.
  2. README:123, "sampling noise of about ±0.1". That is the 1σ level (0.088 at 32 angles). The largest deviations from near-converged values are 0.15-0.19, for example 0.75 against 0.56 for the Sun at 0.35 r_J in the plane through the host. At 0.4 r_H the converged lost fraction is about a quarter to a third, not a fifth to a quarter. "±0.1 (up to 0.2)" covers it.
  3. README:19 and the PR body, "further out between about a fifth and two-thirds". It has no outer bound, and past the escape edge the printed values are 0.69-0.88. README:123 bounds it, and "to 0.45 r_H" would close it here.
  4. README:309, Shen and Tremaine's title. Crossref (DOI 10.1088/0004-6256/136/6/2453) gives "Stability of the Distant Satellites of the Giant Planets in the Solar System". The README lacks "the" before "Distant".
  5. model.js:292, the per-turn step cap. Steps per turn grow roughly as a^−1.5, so the cap fires below about 0.012 r_J (a polar orbit at 0.01 r_H over 30 turns throws). No documented run goes below 0.025, and the comment could say so.
  6. What the tests still do not catch.
    • Removing the new input guards, or unscaling the cap.
    • edgeLost counting plunges only, since the point-mass polar check now requires zero escapes.
    • rIn = 10⁻², > in halfPoint, point-mass Γ 2.7 and 3.3, phases over [0, 2π), and the bulge's α and r_c (as README:291 says).
  7. tests:97, the bulge-mass check, passes by 1.4×10⁻⁴ (0.45014 against 0.5 ± 0.05). That is right at Table 1's rounding, but any f_b from 0.050 to 0.061 passes, so it pins the bulge to about 10%.

Also: README:94 does not say which polar plane has 16 and which 32 differing mirror pairs (16 through the host, 32 across), and the PR body's CI box is unchecked although CI is green.

Verdict: merge


Generated by Claude Code

- Plunge cones are given as brackets on the scan's steps (8-10, 10-12
  and 14-16 deg for a planet; 8-12 and 24-28 deg for the Sun), not as
  the last step with plunges.
- 32-angle sampling noise: about +-0.1, and up to 0.2; at 0.4 r_H a
  fifth to a quarter are lost here, about a quarter with 512 angles.
- Row 19 bounds its outer range at 0.45 r_H; the polar mirror-pair
  counts name their planes.
- Shen and Tremaine's title as Crossref gives it.
- The bulge-mass check pins the bulge's force share only to about 10%;
  the step cap would fire only below about 0.012 r_J.

No change to the program's output.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01C2bpiHyHSkC8DAL5CcyciK
…ps together

main now carries the turbulence study (#34), which added its table and edge
steps to the workflow at the same place this branch added the orbits quick
table. The workflow keeps both, turbulence first; the 20-minute timeout stays.
README.md and the rest merged without conflict.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01C2bpiHyHSkC8DAL5CcyciK

@zero-aska zero-aska left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Check of cf660ee, which merges main (73382d8) into the branch after 4345024.

  • orbits/ and tests/orbits.mjs are byte-identical to 4345024. 4345024 changed only README wording and one code comment after the check of 905eb6e.
  • .github/workflows/test.yml keeps the 20-minute timeout and runs the three turbulence steps and then node orbits/table.mjs quick.
  • git merge-tree --write-tree origin/main is clean. npm test passes all 9 check files, orbits/table.mjs quick and every other workflow step exit 0, scripts/check_site.py is clean, and CI is green on Node 18, 20 and 22.

The verdict at 905eb6e stands: merge.


Generated by Claude Code

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Solar systems and galaxies: where Kepler's law holds, where rotation curves go flat, and the little solar system at the Galaxy's centre

3 participants