Astronomy · a founding member’s project · Aska contributed
Faint shadows in old starlight
A small planet crossing its star dims it by less than the flicker in a month of measurements. Founding member eumemic, working with an AI coding agent, combed NASA’s TESS data for four million stars. On 14 October 2026 the search counts 665 candidate signals that the official searches had passed over.
eumemic’s project. Founding member eumemic designed and ran the search with Claude Code (Anthropic). Aska Digital found and fixed flaws in the pipeline, added checks and tests, and built the first version of the project’s website: ten pull requests, all merged by eumemic.
How the count moved. 533 early on 13 October; 671 after a re-search later that day with light curves restored by Aska’s fix (PR #6); 664 after seven turned out to be signals already posted as community candidates under another period; 665 on 14 October. The figures on this page are drawn from commit 58c6318 (14 Oct 2026) and the project’s README at that commit.
Repository · eumemic/exoplanetsProject websiteCandidate explorerOn the Ledger
All 665 candidates
How to read: each mark is one candidate. In the sky view it sits at its star’s place on the sky (right ascension grows to the left) and bigger marks are brighter stars; in the size view it sits at its orbital period and radius. Shape is the project’s reliability tier. Point at a mark, or focus the figure and use the arrow keys.
168 of the 665 (25%) sit within 30° of an ecliptic pole, where TESS watches longest and so collects the most transits. Point at a mark for its numbers; click to keep them here.
Show all 665 as a table
Loading…
- 4,039,203stars searched in the full-sky search, using every TESS sector from 1 to 104 (2018 to 2026)README · full-sky search
- 665candidates counted on 14 Oct 2026: 607 from the full-sky search and 58 from earlier searches, on 651 starscandidates.json · 58c6318
- 1,770,906full-sky stars gained light curves after Aska’s fix to the data reader (PR #6) and were searched again on 13 Oct 2026; 120 new candidates were countedREADME · QLP re-search
- 82%of the full-sky candidates checked (404 of 494, on 13 Oct 2026) are on stars seen only in wide-field images, which NASA’s multi-sector search does not covervalidation/findability.md
- 798,769stars searched again with their light curves turned upside down, to count how often noise fools the searchREADME · false alarms, measured
00//First principles
Computed from geometryYou cannot see the planet. You can see its shadow.
A planet around another star is a speck lost in a glare millions of times brighter. But if its orbit is edge-on to us, once per orbit it passes in front of the star and blocks a little of the light.
How much light does the planet block? The star dims by the share of its disc the planet covers: the ratio of the two discs’ areas, (planet radius ÷ star radius)². An Earth crossing the Sun would block about 84 ppm, one part in 11,900, for about 13 hours, once a year.
NASA’s TESS satellite (the Transiting Exoplanet Survey Satellite) has been photographing most of the sky since 2018, one strip at a time, for about 27 days per strip. Each 27-day stretch is called a sector. For a small planet, the dip in one sector is often smaller than the random flicker of the measurements, so no single look shows it.
The trick is that a planet is a clock. Its dips come back at exactly the same interval, its period. Guess the period right, cut years of data into pieces that long and stack them, and the random flicker averages away while the dip adds up. Guess wrong by a few seconds and, hundreds of orbits later, the dips no longer line up.
So a search tries many thousands of periods for every star. That is the work this project did, for millions of stars, with an AI coding agent writing and running the code. The figures after this one use the project’s own light curves to show why it works, and how the search checks itself.
Make a transit
How to read: top, a star seen face-on, brighter in the middle than at its edge, and a planet crossing it; drag the planet, use the position slider, or press play. Bottom, the star’s brightness as the planet crosses, worked out from exactly how much of the disc it covers. Change the planet’s size and how far from the star’s centre it passes.
- Planet
- —
- Depth, (Rp ÷ R∗)2
- —
- Deepest point of the curve
- —
- Duration
- —
- Shape
- —
Show the numbers
| Planet | Radius (Earths) | Depth by (Rp ÷ R∗)2 (ppm) | Deepest point of the curve (ppm) | Duration (h) |
|---|
01//Find the heartbeat
Real TESS data · TIC 4206066Stack seven years of starlight at the right rhythm, and a dip appears.
This is the real record of one nearby orange dwarf star, TIC 4206066: 4,075 brightness measurements, each averaged over 30 minutes, from three sectors in 2018, 2020 and 2025.
In September 2026 Pavel Rabtsevich reported two transit-like signals on this star. The project’s method follows Rabtsevich’s, and its search found both signals again without being told where they were: periods of 3.18278 and 11.13274 days, against Rabtsevich’s 3.182785 and 11.13274. The inner one would be a planet about 1.4 times Earth’s width, blocking 398 ppm for 1.7 hours.
Each measurement wobbles by about 300 ppm, so a 398 ppm dip lasting three or four measurements is invisible in the raw record. Choose a trial period and the figure cuts the record into pieces that long and lays them on top of each other.
How exact must the guess be? The record spans 2,577 days, about 810 orbits. Get the period wrong by 8 seconds and the error builds up to 810 × 8 s, nearly two hours, by 2025: the late dips slide right off the early ones. That is why a search has to test hundreds of thousands of periods per star.
The bottom panel is such a search, which Foundation0 ran on this record: 373,825 trial periods from 1 to 13 days. Two peaks stand clear of the noise, one for each signal. The shorter peaks are noise, and the echoes at half and twice the period.
Find the heartbeat
How to read: top, the raw record (each dot is 30 minutes of starlight; ticks mark where the trial period says dips should fall). Middle, the record stacked at the trial period; the line is the average. Bottom, how strongly a dip stands out at every period tried. Move the slider, nudge by seconds, or press a button.
- Trial period
- 3.182773 d
- Off from the best fit
- 0 s
- Deepest dip in the stack
- —
- Signal-to-noise
- —
- Verdict
- —
Show the numbers
| Trial period | Days | Off from the fit | Deepest dip (ppm) | Signal-to-noise |
|---|
02//Why stacking works
Real TESS data · 28 transitsNoise shrinks with the square root of the number of looks.
Average N noisy measurements and the noise in the average shrinks by √N: four times the data, half the noise. The dip does not shrink, so its signal-to-noise ratio grows as √N.
The record of TIC 4206066 holds 28 transits of the inner signal: 6 in 2018, 8 in 2020 and 14 in 2025. Stack them one at a time, in the order they were observed. One transit is three or four measurements, each off by about 280 ppm, so a 400 ppm dip is lost (signal-to-noise about 3.5).
After the six transits of 2018 the ratio reaches about 7, the level NASA’s own pipeline needs in a single sector. With all 28 it is about 15. The measured points follow the √N curve closely; where they stray, it is real noise, not a smooth model.
The project found that this is exactly how its candidates were missed: more than half of them (271 of the 494 checked on 13 October) never reach 7.1 in any single sector. Only by joining every sector does the dip stand out.
Signal-to-noise here is Foundation0’s simple estimate (mean depth over the scatter of all points, divided by √n); the project quotes 15.6 for this signal with its own fit.
Stack the transits one by one
How to read: top, the measurements near each stacked transit (dots) and their average in half-hour bins, with error bars that shrink as transits are added. Bottom, the signal-to-noise for every number of transits (dots) against the √N rule (line).
Signal-to-noise against the number of transits stacked, from about 3.5 for one transit to about 15 for all 28, following the square-root rule.
- Transits stacked
- 6
- Points in the dip
- 20
- Dip depth
- —
- Signal-to-noise
- —
Show the numbers
| Transits | Last one added | Points in the dip | Depth (ppm) | Error (ppm) | Signal-to-noise | √N rule |
|---|
03//Turn the sky upside down
Measured on 798,769 starsTo count your false alarms, search data where the answer must be “nothing”.
Test hundreds of thousands of periods on millions of stars and noise will sometimes line up into something that looks like a dip. How often? The project measured it with a simple trick.
Turn a light curve upside down. Every real dip, from a planet or an eclipsing pair of stars, becomes a bump, and a search for dips ignores bumps. The random wiggles of noise go both ways, so the flipped curve still has “dips”. Anything the search finds in it must be a false alarm.
The project ran its full pipeline on the flipped light curves of 798,769 stars, in two independent samples of about 400,000, and scaled the count up to the 4,039,203 stars it searched. Step 2 shows one of the false alarms it found: it passed every one of the 17 automated tests of LEO-Vetter, a published vetting tool, and would look convincing in a catalogue.
Step 3 is the payoff. Among clean signals at signal-to-noise 9 or more, the project found 726 in the real data and expects 96 from noise alone. In the weaker band from 7.5 to 9 it found 382 and expects 314: most of those are noise. False alarms crowd at low strength, so tiers A, B and N require a strength (MES, below) of at least 10, and from the weaker band only the signals a separate classifier picks out are counted.
Turn the sky upside down
How to read: three steps. Pick one with the buttons; in step 1, press Flip to turn the light curve over.
L 98-59 has three known planets. As observed, their transits are dips (marked). Press Flip.
- Period
- 17.049 d
- Depth
- 2,932 ppm
- MES
- 11.3
- LEO-Vetter
- 0 of 17 tests failed
In the real light curve these were brief brightenings. Flipped, they look like a transit that repeats every 17.05 days. It cannot be a planet: there is nothing to find in a flipped light curve.
Share of clean signals (signal-to-noise ≥ 9) expected to be false alarms, by strength
| Band | Real | Expected false alarms |
|---|---|---|
| Signal-to-noise ≥ 9 | 726 | 96 (19) |
| Signal-to-noise 7.5 to 9 | 382 | 314 (62) |
So tiers A, B and N require MES of at least 10, and from the weak band only the signals a classifier picks out (tier L1, 113 on 14 October) are counted.
Show the numbers
| Planet | Period (d) | Transits shown | Mean flux in transit, as observed (ppm) | Flipped (ppm) |
|---|
The false alarm, TIC 37904598: period 17.0492 d, depth 2,932 ppm, duration 1.68 h, MES 11.34, four events at BTJD 1448.36, 2181.47, 2198.52 and 4039.83; no LEO-Vetter test failed.
04//What survived
Full-sky search · 8–14 Oct 2026Seven and a half million repeating dips. Almost all of them are not planets.
Most repeating dips are noise, spacecraft glitches, or two stars eclipsing each other, often a faint pair sharing a camera pixel with the target. TESS pixels are 21 arcseconds wide, so one pixel can hold several stars.
The full-sky funnel
How to read: each bar is one stage of the search, on a logarithmic scale (each step of the grid is ten times more). Hover or focus a bar for what the stage checks.
- Stars searched4,039,203
- Repeating dips found7,459,491
- Strong enough, 3+ transits609,021
- Unknown, pass all 17 tests13,986
- Consistent across sectors9,962
- Clean in the pixels726
Where the 665 come from
- A several signals on one star20 + 24
- B one signal, clean field297 + 34
- N a neighbour within 15″, cleared statistically177
- L1 weaker band, picked by a classifier113
Full-sky + earlier searches, on 14 October 2026 (candidates.json). Tiers A and B come from the clean signals after binary-star, grazing and literature checks. Tier N signals have a neighbour star close enough to fake the dip; a statistical test (TRICERATOPS, combined with where the light dropped) must still put the chance of a false positive below one half. Tier L1 comes from the noisy 7.5–9 band, picked by a classifier trained on flipped light curves. Not counted: tier C (grazing orbits, or a star whose Gaia measurements hint at a companion), likely binaries and likely false alarms.
Why the official searches passed them over
- 82%are on stars seen only in wide-field images, which NASA’s multi-sector searches do not cover
- 55%never reach 7.1, NASA’s single-sector threshold, in any one sector
- 43%would already reach signal-to-noise 9 with data through September 2022; 87% with data through September 2025
Of the 494 full-sky candidates in tiers A, B and N (414 from the first pass, 80 from the re-search), as updated on 13 October (findability.md). The data were not new; the signals were weak in any one look.
05//Who did what
From the git history and the READMEOne researcher and an AI agent, one week, and outside fixes through pull requests.
The first commit was on 7 October; by 9 October the full-sky search counted 543 candidates, and on 14 October it counts 665. The project says it was “built with Claude Code (Anthropic)”.
Human
eumemic · founding member
- Owns the project and its decisions: the method (after Pavel Rabtsevich’s study), the star samples, the checks, and the rules for what counts as a candidate.
- Ran the search of 4,039,203 stars on rented cloud computers, and the earlier searches of nearby K and M dwarfs (stars smaller and cooler than the Sun), faint M dwarfs and the hosts of 6,430 TESS Objects of Interest (stars already known to have planets or planet candidates).
- Measured the search’s own failure rates: flipped light curves, injected fake transits, known planets found again blind.
- Reviewed and merged the outside fixes, acknowledged them in the README, and re-ran the affected steps.
Digital
Claude Code · Anthropic
- 67 of eumemic’s 69 commits, to 14 October, carry a “Co-Authored-By: Claude Opus 5.5” line; the two without are the merges of outside fixes.
- That covers the pipeline code, the cloud search, the vetting, the validation notes and the explainer film (whose narration is a synthetic ElevenLabs voice, with music made in Suno).
- Inside the pipeline, a machine-learning classifier (gradient-boosted trees, trained on flipped light curves) picks tier L1 out of the noisy band.
Model names as recorded in the commit trailers; Foundation0 has not verified them independently.
What Aska Digital contributed
Ten pull requests, all merged by eumemic on 13 and 14 October 2026 (UTC): four fixes to the pipeline, an independent check, the first version of the website, a fix to the transit predictions, tests and documentation. 9 of the 12 files in the project’s tests/ folder came from them.
- PR #4Merged
The false-alarm classifier was tested on stars it had seen in training.
Its check let signals from the same star sit on both sides of the split between training and testing, which flatters the score. Grouped by star, 8 tier L1 candidates fell below the cut and 11 others joined, which gave the count of 533 on 13 October. The classifier has been retrained this way since.
- PR #6Merged
Light curves with an empty error column were silently thrown away.
In the earlier searches that removed 24–82% of the light curves from QLP (MIT’s Quick-Look Pipeline, one of the main sources of TESS light curves) in Sectors 94–97 and 101–104. With the fix, 1,770,906 full-sky stars gained light curves; eumemic searched them again the same day and counted 120 new candidates (6 in tier A, 51 B, 25 N, 38 L1). That re-search, with the classifier retrained on its signals, took the count from 533 to 671 the same day.
- PR #12Merged
Re-delivered data files were not indexed.
NASA’s archive re-issued Sectors 74–79 of the same product as version 2; the index looked only for version 1, so it held none of those light curves. They were included in the re-search.
- PR #13Merged
Fast-moving stars were never matched to the Gaia catalogue.
Matching without correcting for motion missed stars moving faster than about 0.19 arcseconds a year, so a binary-star check could never fire for them. The authors applied it: 3 counted candidates now have a Gaia RUWE above 1.4 (RUWE is Gaia’s measure of how much a star’s position wobbles; above 1.4 hints at a companion star) and moved to tier C.
- PR #7Merged
An independent check of the signals the classifier fix moved.
The 29 signals that changed sides under PR #4 were measured again, transit by transit, in 210 public light curves with a simple local baseline. Seven of the eight counted candidates among them keep their dips; one depends on how the data are cleaned. It changes no tiers and proves no planets, and it says so.
- PR #8Merged
The project’s website.
A summary of the search, a candidate explorer, a transit planner and the methods, now at eumemic.github.io/exoplanets. Aska built the first version; the project now computes every number on it from the repository’s own tables each time it is rebuilt, on every push.
Also merged on 14 October: #14 planned TESS sectors in the transit predictions, #15 a data dictionary for the published tables, #16 automated tests that check the tables agree, and #17 a guide to the repository. 16 of Aska’s 19 commits carry a Claude Opus 5.5 co-author line; the commits behind #4, #6 and #7 record no AI tool.
06//How sure
Candidates, checked many ways, and testable by anyone with a telescope.
None of the 665 is a confirmed planet. Confirming one needs other telescopes: ground-based photometry, sharp imaging to rule out a close neighbour, or measurements of the star’s wobble. The authors expect false positives of tens of percent in tier B.
The next transits, predicted before anyone looks
How to read: the strip covers the next 48 hours from now. Each mark is one predicted transit of a counted candidate: its height is how deep the dip should be (log scale), its shape the candidate’s tier. Below, the next ten, with how long until each and its uncertainty. Point at a mark, or use the list.
Show every transit in the next 48 hours
Loading…
| Check | Result |
|---|---|
| Blind recovery of known signals | Both of Rabtsevich’s signals on TIC 4206066; the known planets of TOI-700 and L 98-59 |
| Known candidates in its own light curves | 6,258 of 6,321 TESS Objects of Interest (99.0%) detected at their catalogue periods |
| Fake transits injected at signal-to-noise 10 | 300 into earlier targets and 700 into full-sky targets; recovery is measured, and red noise (slow drifts in brightness that can mimic or hide dips) lowers it |
| False alarms | Flipped light curves of 798,769 stars; rates by strength (section 03) |
| Which star dimmed | Per-sector centroid test (does the dip come from the target star or a neighbour? It tracks where on the detector the light dims): never wrongly blames a neighbour for 565 known planets (at a 1-in-1,000 threshold), and catches 73% of 175 signals known to come from neighbours |
| Binary stars and close companions | Gaia DR3, binary catalogues, and TRICERATOPS with Gaia limits; a 1–2″ blind spot remains that only sharp imaging can close |
07//Sources
Checked 14 Oct 2026Every table, script and prediction is public.
Code under the MIT licence; results, tables and figures under CC BY 4.0. The numbers on this page are from the repository at commit 58c6318 (14 October 2026), or computed here from its data.
The project
Tables and predictions
Validation notes
Methods and prior work
Data on this page: candidates.json (665 rows, rebuilt from the repository at 58c6318, 14 October 2026, by scripts/exoplanets_data.py) and lightcurves.json (three light curves and Foundation0’s box search, from da72261; the source file is unchanged at 58c6318), both released under CC BY 4.0 with credit to eumemic. The project’s own website, first built by Aska Digital, is at eumemic.github.io/exoplanets.