Skip to content

release: 2.1.0#28

Merged
gerchowl merged 9 commits intomainfrom
release/2.1.0
Apr 15, 2026
Merged

release: 2.1.0#28
gerchowl merged 9 commits intomainfrom
release/2.1.0

Conversation

@gerchowl
Copy link
Copy Markdown
Contributor

@gerchowl gerchowl commented Apr 15, 2026

Summary

Prepares the 2.1.0 release. Branching pattern matches the vigOS convention (release/X.Y.Z from dev → PR to main → tag → publish) without the full automation. The full vigOS downstream release automation is tracked in #27 for a future session.

Semver

MINOR (2.0.5 → 2.1.0). Justification:

  • New public API: Material.molar_mass, Material.molar_mass_qty, pymat.elements module
  • Expanded Python support: added 3.10 support via tomli shim
  • No breaking changes

What's in 2.1.0

See the CHANGELOG entry for the full details. Highlights:

Added

  • Material.molar_mass / molar_mass_qty computed properties (parsed from formula, uses new pymat.elements.ATOMIC_WEIGHT table mirror of rs-materials)
  • Python 3.10 support via tomli shim — contributed by @bernhard-42 in enable Python 3.10 support #6 (our first outside contribution)
  • docs/decisions/ ADR infrastructure + ADR-0001

Changed

  • requires-python = ">=3.10" (was >=3.11)
  • build123d extra now has env marker python_version<'3.13' — pip install on 3.13+ silently drops build123d instead of erroring on missing wheels
  • enrich_from_periodictable docstring clarified (compound density isn't derivable from periodictable — only pure elements; code unchanged, false promise removed)

Fixed

  • __version__ in src/pymat/__init__.py synced (was stuck at 2.0.4 after v2.0.5)
  • uv.lock workspace member rename from py-matpy-materials (CI was silently broken on --frozen since the rename)
  • 3 latently-broken tests in test_enrichers.py rewritten (no longer xfail)

Infrastructure (not user-facing)

Release mechanics

This PR uses option A from the planning: the vigOS branching pattern with the existing simple release.yml (tag-push triggered).

After merge:

  1. Tag main's merge commit: git tag -a v2.1.0 -m "Release 2.1.0" && git push origin v2.1.0
  2. release.yml fires on the tag push → builds wheel → publishes to PyPI via OIDC trusted publisher → creates GitHub Release
  3. sync-main-to-dev.yml fires on the merge commit on main → opens a sync-back PR to dev → merge that

Full vigOS release automation (prepare-release, publish-candidate, finalize-release, promote-release) is tracked in #27 for a future session.

Test plan

  • All 6 required checks green (Lint & Format, Tests, Security Scan, Dependency Review, CodeQL Analysis (python), Rust (mat-rs))
  • All 4 Tests matrix cells green (py3.10, py3.11, py3.12, py3.13)
  • Container CI green
  • After merge + tag: release.yml publishes py-materials-2.1.0 to PyPI
  • After merge + tag: GitHub Release created with autogenerated notes
  • sync-main-to-dev opens clean sync-back PR (no (conflicts) false-positive — validated on recent runs)

Refs

🤖 Generated with Claude Code

gerchowl and others added 9 commits April 15, 2026 13:35
Partial backport from `vig-os/devcontainer` upstream — only the
items that don't require infrastructure we don't have.

- codeql.yml: `github/codeql-action` SHA `0d579ffd` → `c10b8064`
  (both v4, upstream is 22 days newer)
- scorecard.yml: same `github/codeql-action/upload-sarif` pin bump
- sync-issues.yml:
  - `actions/create-github-app-token` v2 (`29824e69`) → v3 (`f8d387b6`)
  - `vig-os/commit-action` v0.1.5 (`c0024cba`) → v0.2.0 (`1bc00435`)
  - `MAX_ATTEMPTS: "3"` env on the commit step (retry commit on
    transient push failures)
  - drop `|| github.token` fallback on `GH_TOKEN` (we always have
    the App token, the fallback is dead code now)

Deliberately skipped from the upstream template:

- Container-based execution (`ghcr.io/vig-os/devcontainer` via a
  `resolve-image` action) — requires the `resolve-image` action
  which we don't ship locally, plus the devcontainer image itself
  as a hosting target. Host-runner execution is fine for our needs.
- `retry --retries 3 -- gh api ...` wrappers around API calls —
  require the `retry` CLI which ships inside the devcontainer image,
  not on bare ubuntu-22.04 runners.
- `ci.yml` upstream resync — upstream's version would delete our
  Python test matrix (3.12+all, 3.13+all), Bandit/Safety security
  scan, Dependency Review, and Rust (mat-rs) jobs. Our local version
  is strictly more capable for this repo; intentional divergence.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
chore: refresh vig-os scaffold pin drift (partial backport)
chore: sync main→dev (dependabot security bumps)
Bernhard's patch (33a86b3) adds Python 3.10 support via a
`tomllib`→`tomli` shim, but did not extend the CI matrix to
actually test on 3.10. Without a matrix cell, the package would
claim support we don't verify.

Adds three new matrix cells so every supported Python gets a
status check on every PR:

- `Tests (py3.10, all)` — tomli shim path
- `Tests (py3.11, all)` — stdlib tomllib, first supported version
- (3.12 and 3.13 cells already existed)

Verified locally: 133 passed / 11 skipped on 3.10 (parity with
3.12). 11 skipped are pymatgen-gated tests that skip on pymatgen's
own Python constraints, not a 3.10 issue.

Also refreshes uv.lock for the relaxed `requires-python = ">=3.10"`.
Some pandas/scipy/pymatgen/pint entries now carry multiple versions
in the universal resolution because they have different Python-
version compatibility windows — standard uv behavior.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
enable Python 3.10 support
- pyproject.toml: version 2.0.5 → 2.1.0
- src/pymat/__init__.py: __version__ synced to 2.1.0
  (was stuck at 2.0.4 after the 2.0.5 release — pre-existing drift)
- CHANGELOG.md: new [2.1.0] section covering everything since v2.0.5:
  Material.molar_mass + pymat.elements (new API), Python 3.10 support
  (#6), enricher docstring rewrite, ADR infrastructure, infrastructure
  work (rulesets, matrix CI, Rust gate, .typos.toml safety net,
  sync-main-to-dev merge-tree fix, template refresh, dependabot
  security bumps).

Semver: MINOR bump justified by new public API surface
(Material.molar_mass, Material.molar_mass_qty, pymat.elements module)
and expanded Python version support (3.10 added). No breaking changes.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
@gerchowl gerchowl merged commit 87f0638 into main Apr 15, 2026
16 checks passed
@gerchowl gerchowl deleted the release/2.1.0 branch April 15, 2026 13:40
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.

2 participants