Skip to content

Add OSS foundations: LICENSE, CI, CITATION.cff, release checklist, package metadata - #100

Merged
tim-nish merged 9 commits into
mainfrom
chore/oss-p0-foundations
Jul 9, 2026
Merged

tim-nish merged 9 commits into
mainfrom
chore/oss-p0-foundations

Conversation

@tim-nish

@tim-nish tim-nish commented Jul 9, 2026

Copy link
Copy Markdown
Owner

Summary

P0 open-source hygiene items from the QSB long-term roadmap review — everything a researcher or reviewer checks in the first five minutes, none of which existed before this PR.

  • LICENSE — MIT text. The README has declared "MIT" since v1.0.0 but no license file existed, legally leaving the project unlicensed (blocks citation, redistribution, JOSS). Also declares license = {text = "MIT"} in pyproject.toml.
  • .github/workflows/ci.yml — first automated testing for the repo: full pytest suite on every push to main and every PR, Python 3.11 + 3.12, CPU-only JAX, no network secrets. CI badge added to the README.
  • CITATION.cff — makes the project citable in one click (GitHub "Cite this repository" button). Author: Tomoya Imanishi with GitHub alias tim-nish and ORCID 0009-0007-0920-536X; pinned to the Zenodo concept DOI so it never needs a per-release DOI bump (only version/date-released change, now a checklist step). New "Citing" section in the README.
  • docs/RELEASE_CHECKLIST.md — the release process as a permanent document, reverse-engineered from how v1.0.0–v1.2.1 were actually released and extended with the Hugging Face steps (dataset publishing, Hub revision pinning, Space redeploy, EvaluationResult smoke test). Linked from the README's Development section.
  • pyproject.toml: readme = "README.md" — the built METADATA previously had no long description; twine check dist/* now passes with no warnings for both sdist and wheel.

Points to review

  • LICENSE copyright holder / CFF author is Tomoya Imanishi (confirmed: academic name; tim-nish recorded as alias).
  • CI matrix deliberately excludes Python 3.13 until the JAX/diffrax stack is verified against it.
  • No CHANGELOG entry here — per repo convention these land in the v1.3.0 release-prep PR.

Verification

  • Full suite on this branch: 661 passed, 1 skipped (~8 min).
  • python -m build + python -m twine check → both artifacts PASSED, no warnings.
  • Workflow + CFF validated as parseable YAML. Nothing uploaded to (Test)PyPI.

Note: this PR introduces the CI workflow, so this is the first PR CI will run on. Merge this before #99's fix PR so that PR gets a CI run too.

🤖 Generated with Claude Code

tim-nish and others added 7 commits July 9, 2026 07:14
The README has declared "MIT" since v1.0.0, but no license text existed
in the repository — legally leaving the project unlicensed and blocking
citation, redistribution, and JOSS/institutional use. Adds the standard
MIT text and points the README's License section at it.

Copyright holder "Tomoya Imanishi" is taken from the repository's commit
author identity — flagged for maintainer review in the PR.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
First automated testing for the repository: the full pytest suite runs
on every push to main and every pull request, on Python 3.11 (the
requires-python floor) and 3.12, CPU-only JAX, no network secrets.
Python 3.13 is deliberately left out until the JAX/diffrax stack is
verified against it. Adds the CI badge to the README.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Makes the project citable in one click: GitHub renders a "Cite this
repository" button from this file. Wired to the existing Zenodo concept
DOI (10.5281/zenodo.21097248), which always resolves to the latest
archived release; version/date-released track the latest published
release (v1.2.1) and are bumped per release via docs/RELEASE_CHECKLIST.md.
Adds a Citing section to the README.

Author identity "Tomoya Imanishi" is taken from the repository's commit
author — flagged for maintainer review (ORCID can be added later).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Documents the full release process — reverse-engineered from how
v1.0.0–v1.2.1 were actually released (docs/vX.Y.Z-release-notes prep
branch → PR → tag → Zenodo DOI) and extended with the Hugging Face
steps: dataset publishing with dataset_version bumps, recording Hub
revision hashes for downstream pinning, Leaderboard Space redeploy, and
an end-to-end EvaluationResult smoke test. Flags that the package is
not yet on PyPI despite the README's install instructions, so first
PyPI publication (or a README fix) gates the next release. Linked from
the README's Development section.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Citations must credit the paper-author identity (Tomoya Imanishi) so
they consolidate with other publications; the alias field ties in the
GitHub maintainer identity (tim-nish).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
CITATION.cff stays the single canonical citation-metadata file; Zenodo
reads it via the GitHub integration, so the ORCID propagates to the
archived-release record on the next release without a .zenodo.json.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
python -m build succeeded but twine check warned that long_description
and long_description_content_type were missing: [project] had no readme
key, so the built METADATA carried no Description. readme = "README.md"
fills both fields (content type is inferred from the .md suffix), so the
PyPI project page will render the README. twine check dist/* now passes
for both the sdist and the wheel.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
tim-nish and others added 2 commits July 9, 2026 08:17
The Leaderboard Space tests (23 of them) import gradio via
spaces/leaderboard/app.py, but the [dev] extras never declared it, so
the documented fresh-clone flow — pip install -e ".[dev]" && pytest —
failed in CI on both Python versions (ModuleNotFoundError; every other
test passed: 638 passed, 1 skipped). Local dev environments had gradio
installed out-of-band, which is why this was never seen before. Pinned
>=6.19 to match spaces/leaderboard/requirements.txt.

Deliberately NOT installing spaces/leaderboard/requirements.txt in CI
instead: it pins quantscenariobench to a released git tag, which would
silently replace the editable install under test.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The guard test enforced "gradio is not a dependency of the installable
package" (AD-27) with a whole-file string scan of pyproject.toml, which
cannot tell the package's own dependency list apart from dev tooling —
so it rejected the previous commit's legitimate [dev]-extra addition.
Replaced with a tomllib check: gradio must be absent from
[project].dependencies and from every extra except dev, which is the
one sanctioned exception because the test suite itself imports
spaces/leaderboard/app.py. The architectural invariant — plain
`pip install quantscenariobench` never pulls gradio — is enforced
unchanged, and now more precisely.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@tim-nish

tim-nish commented Jul 9, 2026

Copy link
Copy Markdown
Owner Author

Design decision made during CI stabilization (please review):

The first CI run failed 23 Leaderboard Space tests with ModuleNotFoundError: No module named 'gradio' — every other test passed (638 passed, 1 skipped, both Pythons). The documented contributor flow (pip install -e ".[dev]" && pytest) never actually provided gradio; local environments had it out-of-band.

Two commits address it:

  • bdd74bb adds gradio>=6.19 to the dev extras (matching spaces/leaderboard/requirements.txt). The alternative — installing the Space's requirements.txt in CI — was rejected because it pins quantscenariobench to a released git tag and would silently replace the editable install under test.
  • c3d19d2 narrows the AD-27 guard test, which enforced "gradio is not a dependency of the installable package" via a whole-file string scan of pyproject.toml and therefore rejected the dev-extra addition. It now checks the actual dependency lists via tomllib: gradio must be absent from [project].dependencies and from every extra except dev. The architectural invariant — plain pip install quantscenariobench never pulls gradio — is enforced unchanged.

If you'd rather keep pyproject.toml completely gradio-free, the fallback is reverting both commits and adding an explicit pip install "gradio>=6.19" step to the workflow — at the cost of the README's dev-setup instructions remaining broken for fresh clones.

🤖 Generated with Claude Code

@tim-nish
tim-nish merged commit c4ee89b into main Jul 9, 2026
2 checks passed
@tim-nish
tim-nish deleted the chore/oss-p0-foundations branch July 9, 2026 09:30
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant