setuhq 0.1.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (96) hide show
  1. setuhq-0.1.0/CHANGELOG.md +184 -0
  2. setuhq-0.1.0/CITATION.cff +36 -0
  3. setuhq-0.1.0/LICENSE +661 -0
  4. setuhq-0.1.0/LICENSING.md +120 -0
  5. setuhq-0.1.0/MANIFEST.in +17 -0
  6. setuhq-0.1.0/NOTICE +130 -0
  7. setuhq-0.1.0/PKG-INFO +140 -0
  8. setuhq-0.1.0/README.md +1053 -0
  9. setuhq-0.1.0/README.pypi.md +85 -0
  10. setuhq-0.1.0/TRADEMARKS.md +44 -0
  11. setuhq-0.1.0/codemeta.json +49 -0
  12. setuhq-0.1.0/pyproject.toml +87 -0
  13. setuhq-0.1.0/setup.cfg +4 -0
  14. setuhq-0.1.0/src/setuhq/__init__.py +10 -0
  15. setuhq-0.1.0/src/setuhq/aggregate.py +208 -0
  16. setuhq-0.1.0/src/setuhq/agreement.py +83 -0
  17. setuhq-0.1.0/src/setuhq/app.py +3163 -0
  18. setuhq-0.1.0/src/setuhq/batch.py +168 -0
  19. setuhq-0.1.0/src/setuhq/benchmark.py +147 -0
  20. setuhq-0.1.0/src/setuhq/benchmark_toi.py +954 -0
  21. setuhq-0.1.0/src/setuhq/brand.py +101 -0
  22. setuhq-0.1.0/src/setuhq/calibrate.py +196 -0
  23. setuhq-0.1.0/src/setuhq/catalogue.py +653 -0
  24. setuhq-0.1.0/src/setuhq/cli.py +630 -0
  25. setuhq-0.1.0/src/setuhq/codenote.py +109 -0
  26. setuhq-0.1.0/src/setuhq/config.py +159 -0
  27. setuhq-0.1.0/src/setuhq/contrib.py +592 -0
  28. setuhq-0.1.0/src/setuhq/dashboard.py +415 -0
  29. setuhq-0.1.0/src/setuhq/data/claret2017_tess_quadratic.json +1 -0
  30. setuhq-0.1.0/src/setuhq/data/secondary_calibration.json +2114 -0
  31. setuhq-0.1.0/src/setuhq/dipslugs.py +112 -0
  32. setuhq-0.1.0/src/setuhq/discover.py +372 -0
  33. setuhq-0.1.0/src/setuhq/docket.py +1644 -0
  34. setuhq-0.1.0/src/setuhq/dvtests.py +639 -0
  35. setuhq-0.1.0/src/setuhq/ephemeris.py +84 -0
  36. setuhq-0.1.0/src/setuhq/everything.py +580 -0
  37. setuhq-0.1.0/src/setuhq/exofop.py +265 -0
  38. setuhq-0.1.0/src/setuhq/fonts/OFL-geist-mono.txt +93 -0
  39. setuhq-0.1.0/src/setuhq/fonts/OFL-geist.txt +93 -0
  40. setuhq-0.1.0/src/setuhq/fonts/OFL-unbounded.txt +93 -0
  41. setuhq-0.1.0/src/setuhq/fonts/files/geist-gyByhwUxId8gMEwSGFWNOITddY4.woff2 +0 -0
  42. setuhq-0.1.0/src/setuhq/fonts/files/geist-gyByhwUxId8gMEwcGFWNOITd.woff2 +0 -0
  43. setuhq-0.1.0/src/setuhq/fonts/files/geistmono-or3nQ6H-1_WfwkMZI_qYFrcdmhHkjko.woff2 +0 -0
  44. setuhq-0.1.0/src/setuhq/fonts/files/geistmono-or3nQ6H-1_WfwkMZI_qYFrkdmhHkjkotbA.woff2 +0 -0
  45. setuhq-0.1.0/src/setuhq/fonts/files/unbounded-Yq6W-LOTXCb04q32xlpwtcZfvRIkSYZH.woff2 +0 -0
  46. setuhq-0.1.0/src/setuhq/fonts/files/unbounded-Yq6W-LOTXCb04q32xlpwu8ZfvRIkSQ.woff2 +0 -0
  47. setuhq-0.1.0/src/setuhq/fonts/fonts.css +131 -0
  48. setuhq-0.1.0/src/setuhq/galaxy.py +1639 -0
  49. setuhq-0.1.0/src/setuhq/injection.py +124 -0
  50. setuhq-0.1.0/src/setuhq/leaderboard.py +639 -0
  51. setuhq-0.1.0/src/setuhq/learn.py +162 -0
  52. setuhq-0.1.0/src/setuhq/lightcurve.py +55 -0
  53. setuhq-0.1.0/src/setuhq/loaders.py +269 -0
  54. setuhq-0.1.0/src/setuhq/mcp_server.py +171 -0
  55. setuhq-0.1.0/src/setuhq/methods.py +3240 -0
  56. setuhq-0.1.0/src/setuhq/mission.py +352 -0
  57. setuhq-0.1.0/src/setuhq/names.py +156 -0
  58. setuhq-0.1.0/src/setuhq/objects.py +36 -0
  59. setuhq-0.1.0/src/setuhq/pipeline.py +874 -0
  60. setuhq-0.1.0/src/setuhq/pixel.py +904 -0
  61. setuhq-0.1.0/src/setuhq/plate.py +733 -0
  62. setuhq-0.1.0/src/setuhq/preprocess.py +183 -0
  63. setuhq-0.1.0/src/setuhq/py.typed +0 -0
  64. setuhq-0.1.0/src/setuhq/render.py +37 -0
  65. setuhq-0.1.0/src/setuhq/report.py +357 -0
  66. setuhq-0.1.0/src/setuhq/reviewers/__init__.py +38 -0
  67. setuhq-0.1.0/src/setuhq/reviewers/base.py +68 -0
  68. setuhq-0.1.0/src/setuhq/reviewers/claude.py +102 -0
  69. setuhq-0.1.0/src/setuhq/reviewers/claude_code.py +107 -0
  70. setuhq-0.1.0/src/setuhq/reviewers/gemini.py +101 -0
  71. setuhq-0.1.0/src/setuhq/reviewers/http.py +155 -0
  72. setuhq-0.1.0/src/setuhq/reviewers/openai_compat.py +148 -0
  73. setuhq-0.1.0/src/setuhq/reviewers/sentinel.py +195 -0
  74. setuhq-0.1.0/src/setuhq/reviewers/simulated.py +105 -0
  75. setuhq-0.1.0/src/setuhq/reviewers/task.py +134 -0
  76. setuhq-0.1.0/src/setuhq/routes.py +231 -0
  77. setuhq-0.1.0/src/setuhq/search.py +421 -0
  78. setuhq-0.1.0/src/setuhq/site.py +915 -0
  79. setuhq-0.1.0/src/setuhq/starsearch.py +278 -0
  80. setuhq-0.1.0/src/setuhq/stellar.py +71 -0
  81. setuhq-0.1.0/src/setuhq/store.py +157 -0
  82. setuhq-0.1.0/src/setuhq/story.py +316 -0
  83. setuhq-0.1.0/src/setuhq/stubs.py +152 -0
  84. setuhq-0.1.0/src/setuhq/subjects.py +80 -0
  85. setuhq-0.1.0/src/setuhq/sweep.py +907 -0
  86. setuhq-0.1.0/src/setuhq/tools.py +637 -0
  87. setuhq-0.1.0/src/setuhq/transitfit.py +499 -0
  88. setuhq-0.1.0/src/setuhq/validate.py +438 -0
  89. setuhq-0.1.0/src/setuhq/variables.py +650 -0
  90. setuhq-0.1.0/src/setuhq/vet.py +142 -0
  91. setuhq-0.1.0/src/setuhq.egg-info/PKG-INFO +140 -0
  92. setuhq-0.1.0/src/setuhq.egg-info/SOURCES.txt +94 -0
  93. setuhq-0.1.0/src/setuhq.egg-info/dependency_links.txt +1 -0
  94. setuhq-0.1.0/src/setuhq.egg-info/entry_points.txt +5 -0
  95. setuhq-0.1.0/src/setuhq.egg-info/requires.txt +32 -0
  96. setuhq-0.1.0/src/setuhq.egg-info/top_level.txt +1 -0
@@ -0,0 +1,184 @@
1
+ <!-- SPDX-License-Identifier: AGPL-3.0-only -->
2
+ # Changelog
3
+
4
+ All notable changes to SetuHQ are documented here.
5
+
6
+ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
7
+ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
8
+ While the project is pre-1.0, file formats and the command line may still change;
9
+ breaking changes are called out explicitly.
10
+
11
+ ## [Unreleased]
12
+
13
+ ## [0.1.0] - 2026-10-22
14
+
15
+ The first public release, under the name **SetuHQ** (*setu*, Sanskrit for bridge). Until this
16
+ release the code was developed privately as `exoplan`; the history before this entry is that
17
+ project's, and it is kept as it was.
18
+
19
+ ### Changed
20
+
21
+ - **Every stored result that can be re-run without calling a Sentinel is re-run on the fixed code**
22
+ (after the two fixes that change default results: `preprocess.clean` keeps deep dips, and `vet.py`'s
23
+ odd/even test no longer fails clean deep planets). The first runs are kept beside the re-runs, each
24
+ with the pre-fix note in its own file (`codenote.HISTORICAL`).
25
+ - The stored pi Men run, from the start (`scripts/rerun_pi_men.py`): every dip, vetting result, fit
26
+ and FAP equals the first run's (Rp/R★ 0.0179 ± 0.0017 and T14 3.07 ± 0.17 h against Huang et al.
27
+ 2018); the Sentinels' stored answers were reused because the subject images and prompts are
28
+ byte-identical.
29
+ - The real-TOI benchmark, all 662 TOIs, protocol unchanged (`benchmark_real_tois.py --edition
30
+ clipfix`): held-out completeness 60% (90/150) against 57% (86/150), 5 stars gained and 1 lost
31
+ (paired bootstrap 95% CI 0 to +6 points, McNemar p = 0.22); FP found 77% and flagged 68% as
32
+ before; controls 641 and 861 vetted dips per 1,000 star-sectors (573 and 848 before).
33
+ - The pre-registered feed rule, evaluated again unchanged: noise 6.1 (4.0–9.4) false signals per
34
+ 100 targets under it, 27.8 (23.1–33.1) under the old rule; feed-level completeness 17%.
35
+ - Why the controls and FP rates moved: on the inverted control 16 of the 24 newly passing dips were
36
+ rejected by the old odd/even test and 5 are deep inverted features the old cleaning deleted; 4 of the
37
+ 5 newly passing FP TOIs were rejected by the old odd/even test.
38
+ - The calibration record's provenance is corrected: its Probe rates were measured on the code of
39
+ 2026-10-16 (03f23bd); since the limb-darkened injections (fbc1ed9) the same seed gives 0.9, 0.8 and
40
+ 0.6. The weights stay frozen; a test shows both sets make the same two-of-three decisions.
41
+ - The threshold sweep's held-out score fell from 0.875 to 0.833 (2 of 48 injections at 1000 ppm), a
42
+ change that came with the limb-darkened injections, not the two fixes: the sweep dates from 2026-10-16.
43
+ - Each historical record's note now names its re-run instead of "Not re-run since".
44
+ - The re-run's report adds a stale-ephemeris audit (one held-out CP/KP miss, TOI 1905.01: no dip on the
45
+ published ephemeris, a comparable dip within 12 h and at least 3σ of the propagated ephemeris error off
46
+ it) and the window-measurement limit; the matching rule is unchanged.
47
+ - The live catalogue, the injection-recovery benchmark and the threshold sweep; the leaderboard
48
+ (Probes J 0.35 against the metadata floor's 0.39, paired ΔJ +0.04, −0.10 to +0.17: still not
49
+ shown to beat it) and the methods paper read the re-run.
50
+ - The Sentinels were not asked again: their stored answers are used on the 37 of the 40 subsample
51
+ stars whose subjects are byte-identical; the 3 others are left out.
52
+ - **No site-wide banner.** A page built from a record that carries a code note states it once, in
53
+ plain language, at the top of that page; no page of the current site carries one.
54
+ - **`candidates.csv` and `candidates.json` carry 10 more columns** on runs made with the current code:
55
+ `sector`, `crowdsap`, `secondary_phase`, `secondary_snr`, `centroid_offset_arcsec`, `centroid_sigma`, `fpp`,
56
+ `nfpp`, `fpp_method` and `validation_label` (the extended-vetting and reduced-FPP results; the full records are
57
+ under `metrics`). The stored pi Men run now has them: FPP 0.0186 and 0.0148 per subject, class "undetermined".
58
+ - The Docket's page data keeps only the metrics the page reads (the extended-vetting record per dip
59
+ stays in `candidates.json`).
60
+
61
+ - **Python 3.11 or later.** `setuhq.config` reads TOML with `tomllib`, which the standard library has from
62
+ 3.11.
63
+
64
+ - **Renamed from exoplan to SetuHQ.** The Python package is `setuhq` (`src/setuhq`), the
65
+ distribution `setuhq`, the command `setuhq` and the MCP server `setuhq-mcp`. The Claude Code
66
+ plugin, its MCP server entry and its slash commands are `setuhq` and `/setuhq-…`
67
+ (`/setuhq-vet`, `/setuhq-explain`, `/setuhq-sweep`, `/setuhq-catalogue`, `/setuhq-physics`,
68
+ `/setuhq-benchmarks`). The data root is `SETUHQ_ROOT` and the ledger base `SETUHQ_BASE`. The
69
+ repository is https://github.com/ashfordeOU/SetuHQ (the old `ashfordeOU/EXOPLAN` URL redirects)
70
+ and the site is https://setuhq.com.
71
+ - **Compatibility kept on purpose:**
72
+ - the `exoplan` and `exoplan-mcp` commands still work as deprecated aliases: each prints one line
73
+ on stderr naming its replacement, then runs it unchanged. They will be removed in a later
74
+ release. There is no `exoplan` import shim: `import exoplan` must become `import setuhq`;
75
+ - `EXOPLAN_ROOT` and `EXOPLAN_BASE` are still read when the new variables are not set;
76
+ - **data format names keep their `exoplan-` prefix** (`exoplan-sweep/1`,
77
+ `exoplan-everything-that-dims/1`, `exoplan-contribution/2`, `exoplan-leaderboard/2`,
78
+ `exoplan-leaderboard-inputs/1`, `exoplan-leaderboard-results/4`): they name schema versions,
79
+ and the committed records, submissions and catalogues carry them;
80
+ - a stored run's manifest from before the rename names its version `exoplan_version`; the pages
81
+ and the MCP tools read it as `setuhq_version`;
82
+ - committed results, the stored run and the archived catalogues are not renamed, and their
83
+ numbers are not touched. Two pieces of display text in them were updated: the pre-fix note now
84
+ reads "Pre-fix code: made with SetuHQ (then called exoplan) up to commit 5a03087" in the code and
85
+ in every stored copy (no fingerprint or ledger covers those files' bytes; the README manifest that
86
+ hashes the stored run was regenerated), and the stored pi Men cross-match names
87
+ `setuhq crossmatch`. The leaderboard's seeded submitters and the sweep's
88
+ contributor credit keep the name `exoplan` they were written with.
89
+ - **Code fingerprints survive the rename.** A fingerprint hashes each file's path relative to the
90
+ package and its canonical text: the leading SPDX header lines removed and the package name
91
+ written as it was when the committed results were made (`setuhq`/`SetuHQ` as `exoplan`,
92
+ `SETUHQ` as `EXOPLAN`; `setuhq.starsearch.canonical_source`). Files from before the rename have
93
+ neither, so every committed fingerprint is unchanged and still verifies against its commit:
94
+ the sector-1 sweep record's search code (`20a2c1b2…`, commit 0e87409) and classification code
95
+ (`78b84333…`, the current rules), and the real-TOI benchmark's per-star code fingerprints
96
+ (`14f6f4830a525d78` = 76de67d, `e4fe4c99663ccba8` = 40cceca). `scripts/benchmark_real_tois.py`
97
+ hashes each file under the path it had then (`src/exoplan/…`) and reads old commits from either
98
+ path. The classification fingerprint is unchanged.
99
+ **The fingerprints of the current code change.** The search fingerprint goes from `ff5f2568…` before
100
+ this release to `f7317ec9…`: `starsearch.py`, which holds the fingerprint function, is itself one of the
101
+ fingerprinted search files and gained the canonicalisation, and `transitfit.py` now reads its
102
+ limb-darkening table from the package. For that second reason the real-TOI benchmark's fingerprint of
103
+ the current code goes from `0b8e86a1fb71e777` to `b1bf1166c71abdff`. No committed file records an old
104
+ value: the committed sweep record names the search code of 0e87409, and the benchmark names the
105
+ per-star codes above, which all still verify. The benchmark's threshold audit at the results' own
106
+ commit is unchanged and clean; it now also tracks the sha256 of the reference tables, and accepts the
107
+ table's move into the package only as that exact change of `LD_TABLE`. It therefore records 114 values
108
+ (the 113 before, plus the limb-darkening table's hash). The practical effect is that a sweep cache or a contribution bundle made with the
109
+ pre-release code is treated as made by different search code (a fresh search, or a refused
110
+ bundle), as for any other code change.
111
+ - **Licence: AGPL-3.0-only or a commercial licence from Ashforde OÜ** (was MIT), with SetuHQ's own
112
+ data, benchmark, leaderboard data and paper under CC BY 4.0. See [`LICENSING.md`](LICENSING.md),
113
+ [`NOTICE`](NOTICE), [`TRADEMARKS.md`](TRADEMARKS.md) and [`CLA.md`](CLA.md). Every source file
114
+ carries an SPDX header. Every commit before this release was made by Ashforde OÜ's own account.
115
+ - **Workflows run on GitHub-hosted runners** (`ubuntu-latest`), not the self-hosted runner, with
116
+ every action pinned to a full commit SHA (its tag in a comment). `pages.yml` deploys on pushes to
117
+ `main` and on request.
118
+ - **The discovery batch runs only on request** (`workflow_dispatch`): its six-hourly schedule is
119
+ removed, and any commit it makes is authored as ashfordeOU. Without an `ANTHROPIC_API_KEY`
120
+ secret it runs the Probes only. Before it commits it rebuilds every page that embeds the feed's
121
+ catalogue (the app and landing page, the plates, the dashboard; `setuhq discover` writes the
122
+ feed page) and runs the fast tests, because its push does not start `ci.yml`.
123
+ - **The site serves from the domain root,** https://setuhq.com (`site/CNAME`), with the SetuHQ
124
+ logo, favicon and social card, and title, description, canonical, Open Graph and Twitter card
125
+ tags on every page. `pages.yml` deploys the committed `site/`.
126
+
127
+ ### Added
128
+
129
+ - `codemeta.json` names Ashforde OÜ as copyright holder.
130
+
131
+ - **Release machinery.** A `v*` tag runs `.github/workflows/release.yml`: it checks the tag against the
132
+ version, this changelog and CI (a green push run on `main` for that commit, which `main` contains), builds
133
+ the sdist and the wheel, runs `twine check`, checks what they carry, installs the wheel cleanly, attests
134
+ build provenance, creates the GitHub Release with this changelog's section as notes, and uploads the same
135
+ attested files to PyPI as `setuhq` by trusted publishing (no token). A re-run never replaces a file
136
+ already on the release. `mcp-publish.yml` lists the server in the official MCP registry as
137
+ `io.github.ashfordeOU/setuhq` by GitHub OIDC; `auto-tag.yml` is optional and off by default. The steps
138
+ are in [docs/RELEASING.md](docs/RELEASING.md).
139
+ - **One version.** `__version__` in `src/setuhq/__init__.py` is the only place it is written for the
140
+ package (pyproject reads it); `scripts/check_version_sync.py` fails when CITATION.cff, codemeta.json,
141
+ .zenodo.json, server.json, smithery.yaml or the plugin manifests disagree, when the release date here
142
+ differs from CITATION.cff's `date-released`, and, for a release tag, when `[Unreleased]` is not empty.
143
+ `scripts/set_release_date.py` sets both dates on the release day.
144
+ - **The package runs without a checkout.** The two reference tables the pipeline reads, the Claret 2017
145
+ limb-darkening coefficients and the secondary-eclipse calibration, ship in the package as
146
+ `src/setuhq/data/claret2017_tess_quadratic.json` and `src/setuhq/data/secondary_calibration.json`, and
147
+ `transitfit` and `dvtests` read them with `importlib.resources`. They are byte-identical copies of the
148
+ canonical files in `docs/results/`; `tests/test_release.py` fails until a rewritten original is copied
149
+ over. `setuhq run` from a plain `pip install "setuhq[tess]"` searches, vets and fits outside a checkout.
150
+ - **`setuhq mcp`** starts the MCP server over stdio, as `setuhq-mcp` does, and says which extra to install
151
+ when the MCP SDK is missing. The MCP registry entry (`server.json`) launches it as
152
+ `uvx --with=mcp>=1.10 setuhq==<version> mcp`.
153
+ - The package ships `py.typed`; its PyPI page is `README.pypi.md` (absolute links only). The exact versions
154
+ the README figures need are in `requirements-readme.txt`, not in the package metadata.
155
+ - `examples/quickstart.ipynb`: the stored pi Men run offline, from candidates to an MCP tool call; a test
156
+ runs it. `paper/` holds the JOSS paper; issue forms, a pull request template, Dependabot and
157
+ `.editorconfig` are under `.github/` and at the root. CI also runs the fast tests on Python 3.11.
158
+
159
+ - [`CITATION.cff`](CITATION.cff), [`codemeta.json`](codemeta.json),
160
+ [`GOVERNANCE.md`](GOVERNANCE.md), [`SECURITY.md`](SECURITY.md),
161
+ [`CODE_OF_CONDUCT.md`](CODE_OF_CONDUCT.md), [`ROADMAP.md`](ROADMAP.md) and this changelog.
162
+ - [`docs/PRO.md`](docs/PRO.md): SetuHQ Pro, **planned and not built**, and the README's Editions
163
+ section (Free, SetuHQ Pro, Custom study). Every paid route starts with a message to
164
+ contact@ashforde.org; there are no prices.
165
+
166
+ ### Removed
167
+
168
+ - `scripts/session_runner.sh`, which registered a self-hosted Actions runner from a short-lived
169
+ session with a repository-administration token. Hosted runners replace it, and a public
170
+ repository should not route its pull requests to a self-hosted runner.
171
+
172
+ ### What the release contains
173
+
174
+ Everything developed as exoplan, unchanged in behaviour by this release: the blind-coded panel
175
+ of AI Sentinels and deterministic Probes; limb-darkened transit fits, bounded false-alarm
176
+ probabilities and DV-style and pixel-level vetting; the reduced false-positive probability with
177
+ its stability gate; the ephemeris cone and ExoFOP-style export; the frozen 662-TOI benchmark with
178
+ controls, its leaderboard with a catalogue-metadata floor (which the Probes are not shown to beat)
179
+ and the methods paper draft; the pre-registered two-sector feed rule (the feed is still dominated
180
+ by false alarms); the everything-that-dims sweep with contribution bundles and the append-only
181
+ ingest ledger; Sentinels on several providers; the MCP server, the Claude Code plugin and an
182
+ example agent; and the app (Mission Control, Galaxy, the catalogue, fifteen Methods chapters, the
183
+ Docket and the Plates). The real-TOI benchmark, its leaderboard and the paper's numbers were
184
+ measured before the deep-dip clipping fix and have not been re-run.
@@ -0,0 +1,36 @@
1
+ cff-version: 1.2.0
2
+ title: "SetuHQ — the open exoplanet observatory"
3
+ message: "If you use SetuHQ, its benchmark or its leaderboard in your work, please cite it using this metadata, with the commit you used."
4
+ type: software
5
+ authors:
6
+ - family-names: Baweja
7
+ given-names: Chakshu
8
+ orcid: "https://orcid.org/0009-0008-2098-0751"
9
+ email: contact@ashforde.org
10
+ affiliation: "Ashforde OÜ"
11
+ repository-code: "https://github.com/ashfordeOU/SetuHQ"
12
+ url: "https://setuhq.com"
13
+ abstract: >-
14
+ Open, reproducible transit search of public NASA TESS light curves. A calibrated
15
+ reviewer panel of AI Sentinels (Claude by default; other providers supported and
16
+ labelled) and deterministic matched-filter Probes marks every dip in blind-coded
17
+ light curves, in the style of Planet Hunters; the pipeline then vets each dip, fits
18
+ a limb-darkened transit model and bounds its false-alarm probability. It includes a
19
+ frozen, blind benchmark of 662 real TESS Objects of Interest with controls, a public
20
+ leaderboard with a catalogue-metadata floor, an all-sky sweep that classifies
21
+ everything that dims, an MCP server and an app that maps every known exoplanet.
22
+ Every output is a candidate, never a confirmation.
23
+ keywords:
24
+ - exoplanets
25
+ - transit search
26
+ - TESS
27
+ - benchmark
28
+ - citizen science
29
+ - large language models
30
+ # The code is AGPL-3.0-only (or a commercial licence from Ashforde OÜ); SetuHQ's own data, benchmark,
31
+ # leaderboard data and paper are CC-BY-4.0. See LICENSING.md.
32
+ license:
33
+ - AGPL-3.0-only
34
+ - CC-BY-4.0
35
+ version: 0.1.0
36
+ date-released: "2026-10-22"