Foundation0

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.

Candidates Not confirmed Not peer reviewed As of 14 Oct 2026 · commit 58c6318

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.

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.

Source: candidates.json, the counted tiers of candidates_allsky.csv and tiers_earlier_candidates.csv, with positions from ephemerides.csv, at commit 58c6318 (14 Oct 2026; CC BY 4.0, eumemic).
Show all 665 as a table

Loading…

  • 4,039,203
    stars searched in the full-sky search, using every TESS sector from 1 to 104 (2018 to 2026)
    README · full-sky search
  • 665
    candidates counted on 14 Oct 2026: 607 from the full-sky search and 58 from earlier searches, on 651 stars
    candidates.json · 58c6318
  • 1,770,906
    full-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 counted
    README · 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 cover
    validation/findability.md
  • 798,769
    stars searched again with their light curves turned upside down, to count how often noise fools the search
    README · false alarms, measured

00//First principles

Computed from geometry

You 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
—
Planet //
Try //

Computed in your browser: the star’s brightness falls from centre to edge by the quadratic rule with coefficients 0.5 and 0.2, the values the project’s own site uses; the dip is the light of the covered part of the disc. Sizes: Earth 1, Neptune 3.88 and Jupiter 11.2 Earth radii, crossing a star the size of the Sun at Earth’s distance (one orbit a year). The TIC 4206066 preset uses that signal’s published depth, duration and 3.18-day period (README, Validation). The 665 candidates counted on 14 October have a median depth of 1,098 ppm (candidates.json).
Show the numbers
Three planets crossing a Sun-sized star at Earth’s distance, through the centre (b = 0)
PlanetRadius (Earths)Depth by (Rp ÷ R∗)2 (ppm)Deepest point of the curve (ppm)Duration (h)

01//Find the heartbeat

Real TESS data · TIC 4206066

Stack 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
—
Period //
Try //
View //

Light curve: video/public/data/lc.json (eumemic, CC BY 4.0), copied to lightcurves.json. Fitted periods and depths: the project’s blind recovery (README, Validation). The search and its signal-to-noise are Foundation0’s simplified version (one box 1.70 h wide), not the project’s pipeline. Rabtsevich’s study: doi:10.5281/zenodo.22967456.
Show the numbers
The deepest dip at a few trial periods (computed from the light curve as the figure does)
Trial periodDaysOff from the fitDeepest dip (ppm)Signal-to-noise

02//Why stacking works

Real TESS data · 28 transits

Noise 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
—
Ctrl //

Same light curve and fitted period as figure 01 (lightcurves.json). The 7.1 line is the single-sector threshold of NASA’s SPOC pipeline, quoted in findability.md.
Show the numbers
Signal-to-noise as transits are added, oldest first
TransitsLast one addedPoints in the dipDepth (ppm)Error (ppm)Signal-to-noise√N rule

03//Turn the sky upside down

Measured on 798,769 stars

To 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.

Ctrl // known planet transits b, c, d

L 98-59 has three known planets. As observed, their transits are dips (marked). Press Flip.

Light curves: lightcurves.json (from the project’s video data, CC BY 4.0). Rates and counts: README, “False alarms, measured”; the false alarm: inverted_lightcurves_vetted.csv.
Show the numbers
The three known planets of L 98-59 in this stretch of Sector 2
PlanetPeriod (d)Transits shownMean 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 2026

Seven 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.

  1. Stars searched4,039,203
  2. Repeating dips found7,459,491
  3. Strong enough, 3+ transits609,021
  4. Unknown, pass all 17 tests13,986
  5. Consistent across sectors9,962
  6. Clean in the pixels726
Source: README, full-sky funnel and funnel_allsky.csv, the first pass. The first row counts stars; the others count signals. The re-search of 13 October, on the stars that gained light curves, ran the same steps: 3,633,674 repeating dips, 5,742 passing all 17 tests, 122 clean in the pixels.

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 README

One 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.

  1. 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.

  2. 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.

  3. 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.

  4. 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.

  5. 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.

  6. 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

CandidatesNot confirmedNot peer reviewed

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.

Predicted, not observedConfirming needs a telescope
    Times //
    Source: predictions.csv and ephemerides.csv at 58c6318 (CC BY 4.0, eumemic), compacted into transits.json: each candidate’s period, a reference transit and its uncertainty. Times are worked out in your browser from those, so they never go stale; they match all 41,176 published times for the counted candidates to within 9 seconds of the published minute. Times are at Earth’s centre; they assume a constant period, and an observer also needs the star above the horizon in a dark sky.
    Show every transit in the next 48 hours

    Loading…

    How the search checks itself (all by the same team; not independent replication)
    CheckResult
    Blind recovery of known signalsBoth of Rabtsevich’s signals on TIC 4206066; the known planets of TOI-700 and L 98-59
    Known candidates in its own light curves6,258 of 6,321 TESS Objects of Interest (99.0%) detected at their catalogue periods
    Fake transits injected at signal-to-noise 10300 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 alarmsFlipped light curves of 798,769 stars; rates by strength (section 03)
    Which star dimmedPer-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 companionsGaia 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 2026

    Every 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.

    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.