Releases: zachtheyek/Aetherscan
Release list
v1.2.0
Aetherscan v1.2.0 is a retrain release: it blesses the new train_20260806_063117 weights — trained with a curriculum 5× longer than the prior production run's (50 rounds vs 10) that extends into the SNR 1–10 faint decade the previous model never saw. Qualification evidence: zero false positives at the production threshold (t = 0.99) on 9,984 held-out negatives, ROC-AUC 0.9993 / recall@1%FPR 0.9951 on the hardest (SNR 1–100) eval to date, calibration ECE < 0.003, all 8 latent dims active. The model contract is unchanged (same latent_dim, z_mean/48-feature RF layout, and artifact formats — old configs still load, new code loads old weights), so the retrain is a MINOR change. The release also bundles the post-v1.1.0 inference-throughput, caching, and artifact-resolution work.
Features
- Candidate triage & RFI forensics (#404): per-candidate survey-relative and training-relative OOD scores plus a
candidate_triage_<tag>.csvreview ordering; a standalone read-only RFI report (utils/candidate_rfi_report.py) flagging multi-target frequency coincidences and known GPS/GLONASS/Iridium allocations; repeatable--report-exclude-frequency-range START_MHZ END_MHZreporting-only exclusions (detections, DB rows, and science figures are never touched); the candidate frequency map is now a per-target-colored dot-histogram (#423). - Content-addressed stamp cache (#412): cadence stamps are keyed by the energy-detection config fingerprint + the cadence's ordered raw-file identity — renamed, subset, or superset catalogs over the same files reuse preprocessing work, and re-scores with new weights/thresholds skip preprocessing entirely. Size/mtime sidecar guards re-extract stale stamps; the PFB response cache moved under the same unified
data_path/cache/root. - Catalog-derived RAM preflight (#408): startup estimates the pending catalog's worst-case prefetch footprint and warns with a suggested
--prefetch-depthwhen it exceeds ~90% of host RAM — a warning only, never a silent clamp. - Version-ceiling-bounded artifact resolution (#424): GHCR image and HF weight auto-resolution now select the newest release at or below the running code's version, with pulled-image digest tracking and automatic re-pull on retags — a checkout can never silently run weights or an image newer than its own code.
Performance
- Inference consumes prefetched cadences in completion order, eliminating head-of-line stalls behind RFI-heavy stragglers (~12% of a measured run previously idled with zero preprocessing in flight) (#404).
- The default
prefetch_depthrises 3 → 4 on full-grid evidence (~5–9% faster on the measured 350-cadence catalog; depth 5 regressed). Hosts near the 288 GB RAM floor should pass--prefetch-depth 3(#406). - SHAP-values caches now carry an input fingerprint of the explained data + persisted RF artifact, so stale explanations are recomputed instead of silently reused (#414).
Upgrade note (#412): pre-existing cache trees under the old layout are orphaned in place (delete by hand), and a --save-tag started before this release must not be resumed across the upgrade. Migration notes: docs/INFERENCE_PIPELINE.md.
Disk note: retained stamps average ~1 GB/cadence — pass --prune-stamps on catalog-scale runs.
Dependencies
- 2026-W33 dependency refresh within documented ranges (#419);
claude-code-actionrolled back to proven v1.0.183 (#425).
Docs / CI & Automation
- W33/W34 documentation inventory reconciliation (#421) and maintainer-knowledge consolidation into the agent docs (#410).
- Weekly automation workflows staggered across Monday-UTC hours with per-workflow concurrency groups (#413); Slack log buffer tuned to 20 (#418).
Versioning
MINOR per docs/RELEASE.md: new blessed weights on an unchanged model contract ("the weights are the product") + backward-compatible features + config-default changes judged per the v1.1.0/#372 precedent; no CLI removals, artifact/config-format breaks, or runtime-floor changes. Full determination: #429 (scope corrected to the retrain by maintainer direction).
Auto-generated notes
What's Changed
- chore: reset master to 1.1.1.dev0 after v1.1.0 + release-cycle follow-ups by @zachtheyek in #391
- docs(release): note the CITATION.cff coupling is CI-enforced by @zachtheyek in #393
- Inference triage + throughput: frequency filtering, OOD review ordering, completion-order streaming by @zachtheyek in #404
- Raise inference.prefetch_depth default to 4 (grid-search evidence) by @zachtheyek in #407
- Catalog-derived RAM preflight warning at inference startup by @zachtheyek in #409
- Fold local handoff-doc knowledge into CLAUDE.md and the repo-context skill by @zachtheyek in #411
- Content-addressed stamp cache + unified cache root under data_path/cache by @zachtheyek in #417
- Weekly-automation stagger + SHAP-values-cache fingerprint (+ dot-plot & Slack-buffer fold-ins) by @zachtheyek in #418
- W33 maintenance bundle: deps, doc inventories, dot-histogram frequency map, version-ceiling artifact resolution by @zachtheyek in #425
- release: v1.2.0 — inference throughput + caching features, same weights (re-bless train_20260729_152426) by @zachtheyek in #430
Full Changelog: v1.1.0...v1.2.0
v1.1.0
Aetherscan v1.1.0 — a MINOR release bundling backward-compatible features, the off-cluster tf_keras packaging fix, and raised training-scale defaults. Same weights as v1.0.0: the HF tag v1.1.0 re-blesses training run train_20260729_152426 under the unchanged model contract.
⚠️ Behavior changes to know about (backward-compatible, but read this)
- Default training scale is up (#378): a bare
trainrun now does 50 rounds (was 20) with the injection SNR window 1–100 (easiest round; the hardest narrows to 1–10; was 10–50 → 10–20). Explicit flags behave exactly as before; released artifacts and saved configs are unaffected. Plan disk accordingly:--keep-round-dataat the new default retains ~7.4 TB (~147 GB × 50). - One-time DB migration stall (#382): schema v9 adds two indexes; the first launch against an existing catalog-scale database builds them with a full-table scan + sort — expect minutes to tens of minutes on an ~80 GB DB, with transient WAL disk headroom. Later launches are unaffected; fresh databases don't stall.
pip install aetherscanis now self-contained (#340, fixes #323): the manifests declaretf_kerasand the package setsTF_USE_LEGACY_KERASat import time — the v1.0.0 two-step workaround is gone. Only a v1.0.0 install still needs it (see KNOWN_ISSUES §19).
Features
- GHCR runtime image + pull-first wrapper (#365, #369): CD publishes
ghcr.io/zachtheyek/aetherscan:vX.Y.Z;utils/run_container.shpulls it instead of requiring a local.sifbuild (build stays as the fallback). With this release,:latestexists formaster/.devNcheckouts. The v1.1.0 image is a genuine rebuild (newfp-digest) — its inputs moved via #340. - Inference-run observability (#318): variant-selection plot, RF feature guard, per-band performance plot, candidate frequency axis.
- RF variant-identity guard (#346): inference verifies the forest's self-described latent variant/active dims, not just feature count — same-width variant mispairings now fail loudly.
- Machine-scoped display tags (#322): filenames + plot titles carry
{command}_{machine}_{datetime}, collision-free across cluster nodes. HF_HOMEcontainer support (#361):run_container.shbinds + forwards a scratch HF cache (fail-fast if not an existing absolute dir).- DB schema v9 (#375/#382): a round-scoped
injection_statsindex (training-resume supersede UPDATE ~18× faster on replicas; round-bounded time-span aggregate becomes a covering scan) and a covering partial index for the latent-keys enumeration — with planner guards keeping the v7 plot-pass plans intact, pinned by builder-tracedEXPLAIN QUERY PLANcontract tests. - SHAP cache self-validation (#359/#381): the
{tag}-keyed SHAP joblibs validate shape/config on load and the clustering cache carries a content fingerprint of the SHAP matrix it was fit on — stale split-cache states recompute/refit automatically instead of IndexError-ing (or silently plotting wrong points). Manual cache deletion aftershap_max_samples_*changes is no longer needed. - Dead VAE regularization removed (#324): the never-applied L1/L2 declarations are gone after the #293 sweep found no benefit; existing artifacts unaffected.
Automation & CI
claude-update-docsis now a weekly batch scan with a deterministic window anchored on scheduled successes (#377); the contribution check skips maintainer-authored PRs and issues (#376, #385); weekly dependency-check learned the base-provided-package convention (#340).
Docs
- Post-v1.0.0 consolidation and drift sweeps (#338, #343, #348, #350, #353, #355, #358), the GHCR-canonical container setup reframe (#369), and a unified reconciliation pass (#387) covering the GHCR/publish-image surface, legacy-Keras facts,
HF_HOME, the PyPI install path, and 50-round derived numbers.
Install
pip install aetherscan==1.1.0 # off-cluster (Ampere; Blackwell needs the container)
Bare inference resolves and downloads the v1.1.0 HF weights automatically. On clusters, ./utils/run_container.sh now pulls the prebuilt image.
Full changelog: v1.0.0...v1.1.0
v1.0.0
What's Changed
- Add system monitoring and resource management infrastructure by @zachtheyek in #2
- Add Claude Code GitHub Workflow by @zachtheyek in #1
- Fix resource cleanup and memory leaks in multiprocessing pipeline by @zachtheyek in #4
- Fix exponential SNR schedule off-by-1 error by @zachtheyek in #6
- Restructure project to use src/ layout for library packaging by @zachtheyek in #7
- Fix multiprocessing pool deadlock caused by logging in signal handlers by @zachtheyek in #9
- Deprecate TensorBoard support by @zachtheyek in #11
- Improve plot formatting and add metadata to titles by @zachtheyek in #13
- Config updates and preparation for multiprocessing optimization by @zachtheyek in #14
- Feature: Database integration for training metrics and injection statistics by @zachtheyek in #19
- Feature: Slack logging integration with threaded messages and image uploads by @zachtheyek in #25
- Fix distributed dataset batch size allocation causing NaN RF training data by @zachtheyek in #29
- Add Claude GitHub Actions integration by @zachtheyek in #28
- Minor workflow and config improvements by @zachtheyek in #32
- Implement inference pipeline for SETI signal detection by @zachtheyek in #36
- Update project documentation and housekeeping by @zachtheyek in #38
- Improve GitHub Actions workflows by @zachtheyek in #41
- Fix encoder/decoder asymmetry in Beta-VAE by @zachtheyek in #43
- Fix numeric filter truthiness checks and empty list guard in db.py by @claude[bot] in #50
- Optimize plotting functions: fix memory leaks and improve query performance by @zachtheyek in #46
- Fix missing tool permissions in Claude workflow actions by @zachtheyek in #48
- Add help descriptions for plot injection CLI flags and update README by @claude[bot] in #52
- Add latent space visualization pipeline with UMAP parameter sweep by @zachtheyek in #54
- Update claude-code-action to v1.0.85 by @zachtheyek in #57
- Update DataHolder reference in AGENTS.md by @claude[bot] in #58
- Fix bot actor restriction and add CI workflow guardrails by @zachtheyek in #61
- Add Random Forest diagnostic visualization suite by @zachtheyek in #63
- Skip auto-assign for bot/agent senders by @zachtheyek in #68
- Prevent triage from re-triggering Claude via claude label by @zachtheyek in #70
- Add energy detection preprocessing for raw .h5 inference inputs by @zachtheyek in #72
- Update inference CLI reference and usage examples for energy detection by @claude[bot] in #74
- Blackwell GPU support + preflight CLI validation, docs, CI, and utils overhaul by @zachtheyek in #82
- Rename cryptic abbreviations to descriptive variable names by @claude[bot] in #85
- Harden Claude CI workflow chain (bot self-trigger + update-docs contract execution) by @zachtheyek in #89
- Add manual workflow_dispatch re-scan to claude-update-docs by @zachtheyek in #91
- Fix claude-update-docs dispatch validation (gh field name) by @zachtheyek in #93
- Raise claude-update-docs timeout to 30 min for large PRs by @zachtheyek in #96
- Fix claude-update-docs follow-up loop (bot allowlist, CI noise, CLI embedding) by @zachtheyek in #100
- Tighten follow-up loop (strict verbatim, handle-mention rule, PR label sync) by @zachtheyek in #104
- Update README CLI Reference blocks after cli.py overhaul by @claude[bot] in #106
- Neutralize --num-replicas help text + regen README CLI Reference by @zachtheyek in #108
- Untrack PIPELINE_OPTIMIZATION_HANDOFF.md; gitignore local planning docs by @zachtheyek in #110
- Housekeeping: KNOWN_ISSUES #16, GPU legend grouping fix, run_container.sh extra binds by @zachtheyek in #112
- Implement testing suite: pytest scaffolding, unit tests for existing pure logic, CI workflow by @zachtheyek in #116
- Training data pipeline: disk-backed memmap rounds, background producer, batched tf.data input by @zachtheyek in #117
- Training fault tolerance: stage-based resume, run manifest, DB supersede semantics by @zachtheyek in #122
- Latent-dimension traversal visualization (decoder-based interpretation of latent dims) by @zachtheyek in #126
- Inference performance: vectorized energy detection, fused per-channel workers, per-cadence streaming, downsample-at-extraction by @zachtheyek in #120
- PFB static passband equalization as default bandpass flattener; tag-scoped preprocess output dir by @zachtheyek in #125
- Inference: stage-aware retries (run manifest, supersede-on-retry) + visualization suite by @zachtheyek in #129
- HuggingFace Hub integration: opt-in weight upload after training, default weight download for inference, tag dedup guards by @zachtheyek in #130
- Benchmarking suite: always-on stage timing, annotated resource plots, report tooling, micro-benchmarks by @zachtheyek in #134
- Live Streamlit dashboard over the pipeline SQLite DB by @zachtheyek in #170
- Packaging + release CD: PyPI trusted publishing, GitHub Releases, version-coupled HF weights by @zachtheyek in #133
- docs: full technical documentation suite indexed in docs/README.md by @zachtheyek in #135
- docs: post-docs-suite polish (README dedup, SECURITY reorder, ARCHITECTURE format) by @zachtheyek in #186
- docs: drift sweep — SKILL.md/CONTRIBUTING/CLAUDE/SECURITY residuals the #135 suite missed by @zachtheyek in #187
- Update KNOWN_ISSUES.md for training data pipeline overhaul (PR #117) by @claude[bot] in #147
- docs: update project structure, known issues, and SKILL.md for PR #122 by @claude[bot] in #149
- Add missing None-guards for singleton accessors by @claude[bot] in #162
- style: add missing get_config() None guards by @claude[bot] in #166
- build(deps): raise setuptools + python-dotenv floors past the W30 security advisories by @zachtheyek in #188
- docs: sort the docs/README.md index table alphabetically by @zachtheyek in #189
- fix(monitor): cache psutil Process objects across intervals to fix child-CPU undercount by @zachtheyek in #193
- fix(train): runtime divisibility assert for effective_batch_size vs global train batch by @zachtheyek in #190
- fix: guard the resume footgun — round_XX load-tag validation, no silent latest-tag fallback, qualified success by @zachtheyek in #194
- misc: post-v1 nit sweep (#163, #167, #176 n1/n2) by @zachtheyek in #191
- feat(dashboard): aetherscan-dashboard console entry point for manual runs by @zachtheyek in #202
- test/docs: pin the CASPER GBT512 bug=true PFB response delta as negligible by @zachtheyek in #195
- fix: PFB follow-up nit cleanup — plot decimation, duplicate-CSV fail-fast, ratio zero-floor, stale-stamp test (#155) by @zachtheyek in #192
- PFB sanity check: residual-flatness statistic + banded float32 reads by @zachtheyek in #199
- PR #129 follow-ups: viz-collection guards, legacy --test-files supersede, inference-viz correctness nits by @zachtheyek in #197...