A moon-deep transit with a planet-mass dynamical companion admits a short list of mundane explanations. Each has a proposed discriminant — an observable that the genuine dark-primary configuration does not trip. The tier column is the observational cost of closing a row, aggregated by one rule: pipeline if every check that row needs comes from the survey’s own photometry, follow-up if any check needs dedicated additional observations. Two rows are pipeline under that rule. The absent-primary-transit bound is survey-photometry data wherever it is used — it is what closes both of them — but a single survey-data check does not promote a row that still needs follow-up to close. The planet-on-planet row is separated in scan by TTV morphology and is follow-up all the same, because its residual slice is left to the TDV-quadrature test. As the adversarial test below shows, this closure is demonstrated rather than guaranteed.
Code
from lastmoon.vetting import vetting_tablevetting_table()
Table length=6
scenario
mimics
tier
discriminant
rejection
str33
str152
str9
str344
str493
White-dwarf companion
a dark, massive primary paired with a small transiting body
follow-up
a WD is luminous (UV/optical excess in the SED), and a transiting WD's depth-derived radius is Earth-scale (~6e6 m), not lunar
no UV excess and a depth-derived radius consistent with a lunar-size body
Iron/ultra-dense dark planet
a high-density transiting object with a large dynamical mass
pipeline
even a pure-iron world obeys a mass-radius relation; the dynamical mass, confined within the radius allowed by the absent primary transit (R_p < R_star sqrt(delta_lim), ~1.6e3 km at 0.3 R_sun), exceeds any condensed-matter composition
primary transit absent at the per-visit floor -> rho_p > ~3e2 g/cm^3 (Earth mass, 0.3 R_sun; scales with the alias-branch mass), beyond any condensed-matter equation of state. The bound needs survey photometry alone, hence the pipeline tier; the survey prototype reports the relevant observables but implements no density classifier -- it carries no primary-transit non-detection limit; the truth-blind alias family of Section 5 is evaluated by the recovery module, not by the grid classifier
Blended eclipsing binary
a shallow moon-depth transit from a diluted deep eclipse
follow-up
centroid shift during events; chromatic depth; secondary eclipses
achromatic depth, no centroid motion, no secondary eclipses
Grazing stellar eclipse
a shallow transit from a stellar companion clipping the limb
box-consistent shape and an RV amplitude at the m/s scale
Ordinary planet carrying the moon
moon-only transits with planet-scale dynamical mass, from an ordinary planet that carries the moon on the orbit whose aliased timing the survey measures
pipeline
absent primary transit: the moon's small orbit (a_moon <~ 0.2 R_star) carries the carrying planet across the disk at every non-grazing moon transit, so an Earth-radius primary would show a ~930-5000 ppm event of its own
primary transit absent at the per-visit floor under the model's mutual-inclination prior, which bounds the carrying planet's radius exactly as it bounds the iron/ultra-dense row's -- survey photometry alone, hence the pipeline tier; as there, the survey prototype reports the relevant observables but implements no density classifier
Planet-on-planet pair
an independent planet-on-planet pair whose super-period mimics the moon's aliased timing, with no body bound to the transiting one
follow-up
TTV morphology separates a satellite from a planet-on-planet super-period: the aliased timing period and the absence of synodic chopping in scan, and the TTV/TDV quadrature test beyond it. The absent-primary-transit bound has no power here -- a pair whose perturber does not transit predicts no primary transit to be missing in the first place
timing separated in scan by TTV-morphology classification in the fiducial regime; the residual-degeneracy slice (coinciding aliased periods) is left to the TDV-quadrature test at follow-up tier, the remaining discriminant there and not a guaranteed resolver. The row is follow-up because that slice is; universal closure not claimed
The table regenerates from the package on every build, so the wording shown always matches lastmoon.vetting. The “pipeline” tier is a statement about observational cost — those rejections need no data beyond the survey’s own photometry — not a claim that the survey code performs it: the prototype reports the relevant observables but implements no density classifier.
The two ordinary-planetary alternatives are separate rows, because their data costs and their scopes both differ. An ordinary planet carrying the moon is closed by the absent-primary-transit gate alone: the moon’s small orbit carries the carrying planet across the stellar disk at every non-grazing moon transit, so an Earth-radius primary would show a ~930–5000 ppm event of its own, and its absence bounds that planet’s radius and density — survey photometry, no follow-up, so the row is pipeline tier. The escape hatch — a grazing outer orbit that keeps the primary off the disk while the moon still transits — carries 2.7% of the prior mass under the survey model’s declared geometry priors given at least one observed moon transit, and a prior-predictive miss probability below 2.8×10−6 once a regular full-chord series (≥90% of the predicted epochs) is required.
An independent planet-on-planet pair whose super-period mimics the aliased timing is a different row for a reason: the absent-primary-transit bound has no power against it at all, because a pair whose perturber does not transit predicts no primary transit to be missing in the first place. It is separated in scan by TTV morphology instead — the moon’s aliased timing period and the absence of synodic “chopping” — and its residual-degeneracy slice is left to the TDV-quadrature test, at follow-up tier, which is why that row is follow-up.
Code
from lastmoon.figures.ttv_morphology import fiducial_impostor_scan# The same fiducial M3V scan the manuscript's TTV-morphology figure uses.scan = fiducial_impostor_scan()print(f"separable fraction: {scan.separable_fraction:.2f} of {scan.n_total} impostors; "f"residual: {len(scan.residual_slice)}")
separable fraction: 1.00 of 125 impostors; residual: 0
Separation is clean across this illustrative fiducial scan (the separable fraction is printed above). A residual-degeneracy slice — where the aliased moon period coincides with the planet-planet super-period — is left to the TDV-quadrature test, at follow-up tier, as the remaining discriminant; the absent-primary-transit bound is survey photometry and has no power against a planet-on-planet pair, which predicts no primary transit to be missing. Universal closure is not claimed.
The gate is not tied to the fiducial moon orbit: rerunning the same scan with the moon at 0.35 RHill and at the Domingos stability cap (0.4895 RHill) again separates the full impostor grid. A dense sweep across the whole stable separation range does, however, find isolated long-alias pockets — at 13 of 117 separations (2-yr baseline) the moon’s aliased timing period runs to near or past the observing baseline and a few light, near-resonant impostors become residual (worst separable fraction 0.952). Those pockets are an alias/baseline effect, not a property of the moon’s separation, they shrink with a longer baseline, and every residual impostor still faces the TDV-quadrature test at follow-up tier — the remaining discriminant against a planet-on-planet pair, the density gate having no power there.
A stronger, adversarial test backs this up — and marks its limits. The paper runs a formal three-template cross-fit — a dense transiter, a moon plus dark primary, and a perturbed planet — on synthetic data, and for each case searches for the worst-case planet-planet impostor that best mimics the moon rather than scoring an arbitrary one. For a bright, strong target (TRAPPIST-1) the moon template wins decisively; yet even there the adversarial impostor is left undistinguished in ~9% of noise realizations, and at the marginal candidacy threshold (an M5V at 20 pc) the comparison is inconclusive in both directions. This is a template comparison over a declared, locally-convergent search — deliberately not a Bayes factor and not a calibrated false-positive rate, and a full false-positive-rate calibration is left to future work. Morphology is load-bearing, but not a global guarantee.