v0.0.56
Pain001 Release v0.0.56
Release Date: 2026-07-18
Tag: v0.0.56
Python: 3.10+
Status: Stable
Executive Summary
A feature release that ships the plugin substrate to PyPI for the first
time, layered on top of the 0.0.55 path-injection hardening. The plugin
work had been developed in parallel with the 0.0.55 security release; this
release merges it forward with every job-store containment guarantee fully
preserved.
What's in v0.0.56 at a glance
- Plugin substrate (
pain001.plugins): a formal, versioned plugin
contract —AbstractLoader/AbstractValidator/AbstractScheme/
AbstractWriterProtocols (contracts.py) — plus a process-level
PluginRegistry(registry.py) that registers built-ins eagerly and
discovers third-party plugins viaimportlib.metadataentry points. Built-in
loader adapters live in_builtins.py; the contract API version is pinned in
_version.py.import pain001.pluginsnow works from a PyPI install. - GPG-encrypted-input loader (
pain001[gpg]):builtins_gpg.pyregisters
an opt-in loader that decrypts.gpg/.ascinputs in memory via
python-gnupgand dispatches to the inner-extension loader
(batch.csv.gpg→ gpg → csv). Decrypted bytes still flow through the
existing path-validator and schema guards. - OpenTelemetry observability surface (
pain001[otel]): opt-in distributed
tracing (traced,init_otel,set_span_attributes), off by default and
enabled withOTEL_ENABLED=true. Metric events attach the active span's
(trace_id, span_id, is_remote)so metrics correlate back to traces. - Security carried forward from 0.0.55:
pain001/api/job_store.pykeeps
the_validate_job_idsafe-token guard
(^[A-Za-z0-9][A-Za-z0-9_-]{0,127}$,fullmatch, raisingValueError),
theFileJobStore._pathrealpath+commonpath+startswith
containment barrier, andRedisJobStore._keyvalidation. The
pain001/api/app.py_gate_output_dircontainment andmcp>=1.28.1bump
are unchanged.
Quality
- 1,422 tests passing, 100% line + branch coverage against a 100% enforced
floor. - mypy
--strictclean (including the new plugin surface), 100% docstring
coverage (interrogate), pydoclint clean, bandit clean,pip-auditreports no
known vulnerabilities. - Both the new plugin/GPG/OTel tests and the 0.0.55 job-store security
regression tests pass together at 100%.
Upgrade notes
No breaking API or configuration changes. The GPG and OpenTelemetry surfaces
are opt-in via the pain001[gpg] and pain001[otel] extras and are inert
unless installed and enabled. The job-id validation behaviour from 0.0.55 is
retained: callers relying on job identifiers containing path separators will
receive a ValueError — use plain identifier tokens (UUIDs are ideal).