Skip to content

Add Zenodo DOI auto-minting config for GitHub Releases#321

Merged
igerber merged 1 commit intomainfrom
zenodo-setup
Apr 18, 2026
Merged

Add Zenodo DOI auto-minting config for GitHub Releases#321
igerber merged 1 commit intomainfrom
zenodo-setup

Conversation

@igerber
Copy link
Copy Markdown
Owner

@igerber igerber commented Apr 18, 2026

Summary

  • Add .zenodo.json at repo root so Zenodo's GitHub App can mint a concept DOI + per-version DOI on every future release. Metadata: upload_type=software, MIT license, ORCID-tagged creator, related identifiers linking the record to the GitHub source (isSupplementTo) and ReadTheDocs (isDocumentedBy).
  • Add LICENSE (standard MIT, single-holder copyright) — the repo declared MIT in pyproject.toml and CITATION.cff but had no LICENSE file.
  • Bump CITATION.cff from 3.1.1 to 3.1.2 (matching the shipped release) and update date-released.
  • Extend [tool.maturin].include to cover LICENSE so the file lands in the sdist tarball, not just in PKG-INFO's License-File: metadata.

One-time Zenodo setup (done out-of-band, not part of this PR):

Methodology references

  • N/A — no methodology or estimator changes.

Validation

  • No test changes (pure release-infrastructure metadata).
  • .zenodo.json parses as valid JSON; enums (upload_type, access_right, license, relation) spot-checked against https://developers.zenodo.org/#deposit-metadata.
  • maturin sdist runs clean, no license-file warnings, and the produced tarball contains LICENSE at its root plus License-File: LICENSE in PKG-INFO.

Security / privacy

  • Confirm no secrets/PII in this PR: Yes.

Follow-up (out of scope here)

  • After the first Zenodo-minted release, a small PR will add the concept-DOI badge to README and a doi: line to CITATION.cff.

Generated with Claude Code

Enables Zenodo to mint a concept DOI + per-version DOI on every future
GitHub Release. Zenodo's GitHub App reads `.zenodo.json` at the tagged
commit and publishes a software record.

Changes:
- `.zenodo.json` (new): upload_type=software, MIT license, creators block
  (Gerber, Isaac; ORCID 0009-0009-3275-5591), related_identifiers linking
  to the GitHub source (isSupplementTo) and ReadTheDocs (isDocumentedBy).
- `LICENSE` (new): standard MIT text with single-holder copyright.
- `CITATION.cff`: version 3.1.1 -> 3.1.2, date-released updated to the
  v3.1.2 release date.
- `pyproject.toml`: add `LICENSE` to `[tool.maturin].include` so it lands
  in the sdist tarball (not only in PKG-INFO's License-File metadata).

Manual one-time setup (done out-of-band): Zenodo account linked to GitHub,
the igerber/diff-diff repo toggled ON at
https://zenodo.org/account/settings/github/. The next release tag after
v3.1.2 will trigger the Zenodo webhook and mint DOIs.

A follow-up PR will add the concept-DOI badge to README and a `doi:`
field to CITATION.cff once the first DOI has been minted.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@github-actions
Copy link
Copy Markdown

Overall assessment

✅ Looks good. No unmitigated P0/P1 findings in the changed scope.

Findings

  • P3 The PR adds a second release-metadata source in .zenodo.json:L1 alongside CITATION.cff:L1, but it does not add any automated validation to keep overlapping fields aligned. Zenodo’s GitHub integration uses .zenodo.json in preference to CITATION.cff, so future drift would silently produce different metadata in Zenodo than in the GitHub citation box. Impact: low, release-metadata inconsistency only. Concrete fix: add a small CI/test step that parses .zenodo.json, validates CITATION.cff, and asserts shared fields stay in sync. (support.zenodo.org)

Executive summary

Methodology

  • Severity: none. Impact: no estimator, math, weighting, variance/SE, identification assumption, or default-behavior code changed; after checking REGISTRY.md:L1, there is no affected method to cross-check against source papers. Concrete fix: none.

Code Quality

  • Severity: none. Impact: the changed metadata is mechanically sound in scope; .zenodo.json parses cleanly, and version metadata is consistent between CITATION.cff:L10 and pyproject.toml:L7. Concrete fix: none.

Performance

  • Severity: none. Impact: no runtime or estimator path changed, and adding LICENSE to pyproject.toml:L98 is negligible at build time. Concrete fix: none.

Maintainability

  • Severity: none. Impact: the diff is small and localized, and the new metadata remains consistent with existing package metadata in this PR. Concrete fix: none.

Tech Debt

  • Severity: none. Impact: no new deferred correctness debt was introduced, and I did not find a changed-scope issue that needs TODO.md tracking to make this PR acceptable. Concrete fix: none.

Security

  • Severity: none. Impact: no secrets, tokens, or executable attack surface were introduced; the changes are limited to public citation, license, and release metadata. Concrete fix: none.

Documentation/Tests

Open questions / assumptions

  • This checkout does not include release tags, so I could verify internal consistency only; I could not independently confirm whether CITATION.cff:L11 matches the externally published date of release 3.1.2. This does not change the assessment.

@igerber igerber added the ready-for-ci Triggers CI test workflows label Apr 18, 2026
@igerber igerber merged commit da9d3d3 into main Apr 18, 2026
24 of 25 checks passed
@igerber igerber deleted the zenodo-setup branch April 18, 2026 21:19
igerber added a commit that referenced this pull request Apr 18, 2026
…odo config

Packages five merged PRs since v3.1.2 as patch release 3.1.3:

- #311 Replicate-weight variance and PSU-level bootstrap for dCDH — new
  variance_method="replicate" (BRR / Fay / JK1 / JKn / SDR) and PSU-level
  multiplier bootstrap, with df-aware inference and group-level PSU map.
- #321 Zenodo DOI auto-minting config — .zenodo.json + top-level LICENSE
  so the next GitHub Release mints a concept + versioned DOI automatically.
- #319 Silent sparse->dense lstsq fallback signaling in ImputationDiD and
  TwoStageDiD — emits ConvergenceWarning instead of switching paths silently.
- #317 Non-convergence signaling in TROP alternating-minimization solvers,
  including LOOCV and bootstrap aggregation. Top-level warning aggregation.
- #320 /bump-version skill now updates CITATION.cff; single RELEASE_DATE
  resolved upfront and threaded through all date-bearing files.

Version strings bumped in diff_diff/__init__.py, pyproject.toml,
rust/Cargo.toml, diff_diff/guides/llms-full.txt, and CITATION.cff
(version: 3.1.3, date-released: 2026-04-18). CHANGELOG populated with
Added / Fixed / Changed sections and comparison-link footer.

Per project SemVer convention, minor bumps are reserved for new estimators
or new module-level API; additive extensions to existing estimators (like
PR #311's new variance_method values) are patch-level.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

ready-for-ci Triggers CI test workflows

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant