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.
- setuhq-0.1.0/CHANGELOG.md +184 -0
- setuhq-0.1.0/CITATION.cff +36 -0
- setuhq-0.1.0/LICENSE +661 -0
- setuhq-0.1.0/LICENSING.md +120 -0
- setuhq-0.1.0/MANIFEST.in +17 -0
- setuhq-0.1.0/NOTICE +130 -0
- setuhq-0.1.0/PKG-INFO +140 -0
- setuhq-0.1.0/README.md +1053 -0
- setuhq-0.1.0/README.pypi.md +85 -0
- setuhq-0.1.0/TRADEMARKS.md +44 -0
- setuhq-0.1.0/codemeta.json +49 -0
- setuhq-0.1.0/pyproject.toml +87 -0
- setuhq-0.1.0/setup.cfg +4 -0
- setuhq-0.1.0/src/setuhq/__init__.py +10 -0
- setuhq-0.1.0/src/setuhq/aggregate.py +208 -0
- setuhq-0.1.0/src/setuhq/agreement.py +83 -0
- setuhq-0.1.0/src/setuhq/app.py +3163 -0
- setuhq-0.1.0/src/setuhq/batch.py +168 -0
- setuhq-0.1.0/src/setuhq/benchmark.py +147 -0
- setuhq-0.1.0/src/setuhq/benchmark_toi.py +954 -0
- setuhq-0.1.0/src/setuhq/brand.py +101 -0
- setuhq-0.1.0/src/setuhq/calibrate.py +196 -0
- setuhq-0.1.0/src/setuhq/catalogue.py +653 -0
- setuhq-0.1.0/src/setuhq/cli.py +630 -0
- setuhq-0.1.0/src/setuhq/codenote.py +109 -0
- setuhq-0.1.0/src/setuhq/config.py +159 -0
- setuhq-0.1.0/src/setuhq/contrib.py +592 -0
- setuhq-0.1.0/src/setuhq/dashboard.py +415 -0
- setuhq-0.1.0/src/setuhq/data/claret2017_tess_quadratic.json +1 -0
- setuhq-0.1.0/src/setuhq/data/secondary_calibration.json +2114 -0
- setuhq-0.1.0/src/setuhq/dipslugs.py +112 -0
- setuhq-0.1.0/src/setuhq/discover.py +372 -0
- setuhq-0.1.0/src/setuhq/docket.py +1644 -0
- setuhq-0.1.0/src/setuhq/dvtests.py +639 -0
- setuhq-0.1.0/src/setuhq/ephemeris.py +84 -0
- setuhq-0.1.0/src/setuhq/everything.py +580 -0
- setuhq-0.1.0/src/setuhq/exofop.py +265 -0
- setuhq-0.1.0/src/setuhq/fonts/OFL-geist-mono.txt +93 -0
- setuhq-0.1.0/src/setuhq/fonts/OFL-geist.txt +93 -0
- setuhq-0.1.0/src/setuhq/fonts/OFL-unbounded.txt +93 -0
- setuhq-0.1.0/src/setuhq/fonts/files/geist-gyByhwUxId8gMEwSGFWNOITddY4.woff2 +0 -0
- setuhq-0.1.0/src/setuhq/fonts/files/geist-gyByhwUxId8gMEwcGFWNOITd.woff2 +0 -0
- setuhq-0.1.0/src/setuhq/fonts/files/geistmono-or3nQ6H-1_WfwkMZI_qYFrcdmhHkjko.woff2 +0 -0
- setuhq-0.1.0/src/setuhq/fonts/files/geistmono-or3nQ6H-1_WfwkMZI_qYFrkdmhHkjkotbA.woff2 +0 -0
- setuhq-0.1.0/src/setuhq/fonts/files/unbounded-Yq6W-LOTXCb04q32xlpwtcZfvRIkSYZH.woff2 +0 -0
- setuhq-0.1.0/src/setuhq/fonts/files/unbounded-Yq6W-LOTXCb04q32xlpwu8ZfvRIkSQ.woff2 +0 -0
- setuhq-0.1.0/src/setuhq/fonts/fonts.css +131 -0
- setuhq-0.1.0/src/setuhq/galaxy.py +1639 -0
- setuhq-0.1.0/src/setuhq/injection.py +124 -0
- setuhq-0.1.0/src/setuhq/leaderboard.py +639 -0
- setuhq-0.1.0/src/setuhq/learn.py +162 -0
- setuhq-0.1.0/src/setuhq/lightcurve.py +55 -0
- setuhq-0.1.0/src/setuhq/loaders.py +269 -0
- setuhq-0.1.0/src/setuhq/mcp_server.py +171 -0
- setuhq-0.1.0/src/setuhq/methods.py +3240 -0
- setuhq-0.1.0/src/setuhq/mission.py +352 -0
- setuhq-0.1.0/src/setuhq/names.py +156 -0
- setuhq-0.1.0/src/setuhq/objects.py +36 -0
- setuhq-0.1.0/src/setuhq/pipeline.py +874 -0
- setuhq-0.1.0/src/setuhq/pixel.py +904 -0
- setuhq-0.1.0/src/setuhq/plate.py +733 -0
- setuhq-0.1.0/src/setuhq/preprocess.py +183 -0
- setuhq-0.1.0/src/setuhq/py.typed +0 -0
- setuhq-0.1.0/src/setuhq/render.py +37 -0
- setuhq-0.1.0/src/setuhq/report.py +357 -0
- setuhq-0.1.0/src/setuhq/reviewers/__init__.py +38 -0
- setuhq-0.1.0/src/setuhq/reviewers/base.py +68 -0
- setuhq-0.1.0/src/setuhq/reviewers/claude.py +102 -0
- setuhq-0.1.0/src/setuhq/reviewers/claude_code.py +107 -0
- setuhq-0.1.0/src/setuhq/reviewers/gemini.py +101 -0
- setuhq-0.1.0/src/setuhq/reviewers/http.py +155 -0
- setuhq-0.1.0/src/setuhq/reviewers/openai_compat.py +148 -0
- setuhq-0.1.0/src/setuhq/reviewers/sentinel.py +195 -0
- setuhq-0.1.0/src/setuhq/reviewers/simulated.py +105 -0
- setuhq-0.1.0/src/setuhq/reviewers/task.py +134 -0
- setuhq-0.1.0/src/setuhq/routes.py +231 -0
- setuhq-0.1.0/src/setuhq/search.py +421 -0
- setuhq-0.1.0/src/setuhq/site.py +915 -0
- setuhq-0.1.0/src/setuhq/starsearch.py +278 -0
- setuhq-0.1.0/src/setuhq/stellar.py +71 -0
- setuhq-0.1.0/src/setuhq/store.py +157 -0
- setuhq-0.1.0/src/setuhq/story.py +316 -0
- setuhq-0.1.0/src/setuhq/stubs.py +152 -0
- setuhq-0.1.0/src/setuhq/subjects.py +80 -0
- setuhq-0.1.0/src/setuhq/sweep.py +907 -0
- setuhq-0.1.0/src/setuhq/tools.py +637 -0
- setuhq-0.1.0/src/setuhq/transitfit.py +499 -0
- setuhq-0.1.0/src/setuhq/validate.py +438 -0
- setuhq-0.1.0/src/setuhq/variables.py +650 -0
- setuhq-0.1.0/src/setuhq/vet.py +142 -0
- setuhq-0.1.0/src/setuhq.egg-info/PKG-INFO +140 -0
- setuhq-0.1.0/src/setuhq.egg-info/SOURCES.txt +94 -0
- setuhq-0.1.0/src/setuhq.egg-info/dependency_links.txt +1 -0
- setuhq-0.1.0/src/setuhq.egg-info/entry_points.txt +5 -0
- setuhq-0.1.0/src/setuhq.egg-info/requires.txt +32 -0
- 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"
|