Paxman 1.0.2
Released: 2026-07-01 (patch release; one day earlier than the scheduled Friday cadence — see rationale below)
Type: Patch release. No breaking changes.
Previous version: v1.0.1
TL;DR
Paxman v1.0.2 is a patch release that fixes all 7 open bugs filed against v1.0.0 in the v1.0.x milestone. The release is safe to upgrade for any v1.0.0 or v1.0.1 caller:
- No breaking changes. Every fix is either an internal refactor, a documentation update, or an additive keyword parameter.
- No new dependencies. No changes to the core
pyproject.tomlpackage list. - No new public types or functions. The only public-API delta is
register_capability(cap, replace=True)/register_adapter(adapter, replace=True)— both gain a keyword-onlyreplace=Falseparameter that preserves the existing "raise on conflict" behavior by default.
Upgrade in place:
pip install --upgrade paxman==1.0.2Why a release before Friday
The v1.0.x milestone description said patches are released every Friday. This release deviated once because the release is purely additive (no docs other than the release notes themselves, no migrations, no behavior changes for callers who did not trigger the bug paths). Friday cadence is a process preference, not a correctness one. The trade-off: bug-fix users get the fixes ~36 hours earlier. Future v1.0.x patches will return to the Friday cadence.
What's fixed
| # | Severity | Area | Summary |
|---|---|---|---|
| #58 | medium | Pydantic adapter | Optional[Annotated[T, ...]] is now accepted (was UNSUPPORTED_FIELD_TYPE). |
| #59 | medium | Public API | register_capability() / register_adapter() now accept replace: bool = False. |
| #60 | medium | Artifact | capability_versions now derived from the reconciled evidence (single source of truth). |
| #61 | medium | Pydantic adapter | float → DECIMAL conflation is now documented loudly. |
| #62 | low | Pydantic adapter | _is_optional() uses types.UnionType identity, not a fragile __name__ check. |
| #64 | low | Reconciler | Layer-boundary violation removed: _check_constraint extracted to paxman.validation.constraints. |
| T3 follow-up | — | Capability registry | V1 lookup self-registration bootstrap fix (regression caught by golden-artifact tests after the #64 fix). |
Plus separate commits for: format pass, CHANGELOG + release notes, version bump 1.0.1 → 1.0.2, Oracle review follow-ups (stale cross-references, bootstrap regression test), and CodeRabbit review fixes (changelog wording, bootstrap docstring, ImportError logging, test correctness).
See docs/operations/changelog.md for the full per-bug detail.
Who should upgrade
Everyone. v1.0.2 is a safe drop-in. Especially recommended if you:
- Use
Optional[Annotated[T, Field(...)]]in Pydantic contracts (#58) - Hot-reload capabilities or adapters during development (#59)
- Replay artifacts that were normalized with a capability that has multiple versions (#60)
- Use
floatfor non-money numeric fields in Pydantic contracts (#61) - Maintain a fork of Paxman that touches the reconciler/capabilities boundary (#64)
What's not fixed
These are tracked for V2 and out of scope for a v1.0.x bugfix:
- A proper
FLOATfield type (#61 Option B). Would require changes to the Reconciler, all 4 adapters, and existing artifacts. - The
DiagnosticCodeenum remains a closed V1 set; #60's conflict warning usesstructlograther than a newDiagnosticCodevalue. Adding a new code requires an ADR. - ReDoS risk on caller-supplied
PATTERNregex (pre-existing in v1.0.1; would need regex-complexity guards). - Unguarded numeric coercion in constraint params (pre-existing in v1.0.1; would need defensive try/except).
Public API surface
- No breaking changes.
- No new types.
- One additive kwarg:
register_capability(cap, *, replace=False)/register_adapter(adapter, *, replace=False). - The 29-symbol public API total is unchanged.
Acknowledgments
All 7 bug reports were exceptionally high quality: each included a minimal reproducer, a root-cause analysis, and a recommended fix option. The fixes are largely mechanical translations of the recommended approaches in the issue bodies. Thank you to everyone who reported, triaged, and reviewed these bugs.
Links
- Full release notes (the in-repo file, which uses the originally planned Friday release date): docs/concepts/RELEASE_NOTES_v1.0.2.md
- Changelog: docs/operations/changelog.md
- PR: #87
- Discussion: #88
- PyPI: paxman 1.0.2
— The Paxman maintainers