Repository navigation
Release v0.2.0 (honest beta) and define v1.0 exit criteria #127
Copy link
Copy link
Closed
Labels
P2-mediumImportant but not blockingImportant but not blocking
Description
Activity
- added a parent issue
on Aug 17, 2026 - added a commit that references this issue
on Aug 19, 2026 - added 20 commits that reference this issue
on Aug 23, 2026 v0.2.0 release checklist — status at close of the campaign
Branch:
work/priorities-and-docs→ PR #173 (all checks reported; ubuntu 3.10/3.11/3.12 + windows 3.11/3.12 green, macos legs cancelled by org macOS-minute exhaustion — macOS is the dev platform where the identical suite runs 2,787/0 locally).Checklist items, with evidence
- Version unified across all four locations ✅ —
pyproject.toml,setup.py,clustrix/__init__.py,docs/source/conf.pyall 0.2.0 (verified by grep this session).setup.pyretained: it is a thin setuptools shim whose removal is a packaging decision for the maintainer, not a release blocker. - README describes only what is verified working ✅ — rewritten across the campaign; every example executed by
check_docs_examples.py(239/239). - Backends labelled by real status ✅ — supported: local/ssh/slurm/huggingface, each verified end to end with committed transcripts (
docs/evidence/). Unsupported seven removed withValueErrornaming tracking issues (Restore PBS support: removed from v0.2.0 as never verified against a real scheduler #140–Restore the Lambda Cloud backend: removed from v0.2.0 as never verified end to end #146). - Real jobs on every reachable backend ✅ — SLURM job 9248669 on s12.hpcc.dartmouth.edu (822s), GPU tensor01.dartmouth.edu 8×A6000 (59s), HuggingFace Jobs container (52s) — all correct results, transcripts committed.
- Issue ledger ✅ — closing set @cluster(cores=N) on the local backend does not parallelize anything #152 17 real-world tests call ValidationCredentials.cred_manager, which does not exist #153 auto_add rewrites the whole ~/.ssh/known_hosts non-atomically and can corrupt it; tests have added 900+ junk entries to it #157 default_queue and @cluster(queue=...) are accepted and never read #158 @cluster(environment=...) and conda_env_name never reach the job script #164 The notebook widget's Apply button always fails: configure() rejects the profile dict #165 Documentation checker skips every notebook cell #166 Credential host matching: an empty or partial host offers the password to any server #167 Three silent-failure sites left over from #123: a malformed config, an empty file list, a lost traceback #168 Renaming a profile onto an existing name silently destroys the other profile #171 detect_gpu_capabilities reports a GPU as available when it cannot parse nvidia-smi's output #172 closed with evidence + rollup Master: defects in current functionality — fix, test, and close out #159; en route also closed Remove mock-awareness from shipped code (production branches on isinstance(..., Mock)) #116 Replace silent-failure handling, fix resource leaks and import-time side effects #123 Rewrite CLAUDE.md against the real architecture; resolve the 3-way mocking-policy contradiction #125-commented Pre-push hook cannot block a push: run_real_world_tests.py exits 0 on failure #147 Test infrastructure starts three services no test uses (MinIO, Postgres, Redis) #150 11 of 64 ClusterConfig fields are accepted, stored, and read by nothing #161 Eight names are exported as public API and documented nowhere #162 Master: documentation findings, deferred to a dedicated session #163 Documentation checker skips every notebook cell #166. Deliberately open: Security hardening: rotate local-only HF tokens, enable secret scanning, fix credential file permissions #111 Replace assertion-free mock tests with tests that actually execute (2,513 mock occurrences) #117 Delete ~5,100 lines of orphaned modules (13% of the package has zero importers) #122 Make Clustrix a data mover: stage declared inputs and outputs (reverses the "not a data mover" limitation) #151 Streaming: fetch only the parts of a dataset an analysis actually touches (split from #151) #155 Branch protection requires a check that a path-filtered workflow may never report: docs-only PRs cannot merge #169(proven, closable) parallel=True: the returned shape depends on cores and on the loop length, and what it should be is undecided #170 and Master: deferred work — future functionality and long-horizon efforts #160's deferral set.
Remaining for the maintainer
- Merge PR v0.2.0 (honest beta): merge train complete, gates green, real jobs verified #173 (branch pushed, checks reported).
- Tag v0.2.0 and publish to PyPI (credentials are yours).
- HF Jobs quota: depleted today (402s); hf use-case matrix leg will pass once credits reset.
- Optional: macOS CI minutes — org exhausted them; macos legs cancel. Local macOS runs cover it in-session.
- Version unified across all four locations ✅ —
- added a commit that references this issue
on Aug 23, 2026
Metadata
Metadata
Assignees
Labels
P2-mediumImportant but not blockingImportant but not blocking
Part of #108 · Phase 7
Goal
Cut a release whose claims are all true, then define what v1.0 requires.
v0.2.0 — "honest beta"
The point is not new features. It is that the package's advertised surface equals its working surface.
setup.pyremoved in favor ofpyproject.tomlREADME.mddescribes only what is verified working, with every example executed in CINotImplementedErrordoes not exist on any advertised pathrequires-pythonraised to a supported floor; classifiers match the tested matrixpip install clustrixin a fresh venv -> the README quickstart runs to completiondocs/source/conf.pyversion matches the releasev1.0.0 exit criteria
Inherited from #108, restated here as the release gate. All must hold:
pip install -e ".[dev]"on a clean machine, then the documented test command, runs the suite to completion — with zero network calls to billable servicescontinue-on-erroranywhereunittest.mockappears zero times inclustrix/README.mdhas a test that actually executed it end to end, with a dated CI run link as evidenceREADME.mdexample executed by a doc test in CIDeliberately not in scope
Feature work. The audit found ~5,100 lines of orphaned modules and four broken backends; the fastest route to a credible v1.0 is subtraction, not addition. New backends and the widget re-platform proposed in #67 belong after 1.0.