Release v0.7.0
Merged
LC
2mo ago+1052+1052+0123456789012345678901234567890123456789-99-99-01234567890123456789
Release v0.7.0
Bumps version from 0.6.0 to 0.7.0. This release carries breaking changes, so the minor moves per the repo's pre-1.0 rule.
Closes L-260827-4cf826
Changelog
Added
- Automation: New Claude skill (
bump-mthds) and companion script (upstream_notes.py) to automate bumping themthdsdependency, regenerating locks, and adapting the codebase to upstream protocol changes.
Changed
- Dependency: Pinned
mthdsto an exact version (mthds==0.11.1) instead of a floor (>=0.8.2), ensuring the SDK and its strictextra="forbid"protocol models are always tested against the exact upstream version and preventing runtime parse failures from uncoordinated resolutions.pipelexpins the same version, so the two co-install; the two pins must now move in step, because two exact pins on different versions do not resolve at all. (Breaking) - Typing:
PipelexValidationReport.input_formandpipe_io_contractsare now strictly typed via the standard's own client models (mthds.protocol.input_form.InputFormandmthds.protocol.pipe_io_contracts.PipeIOContracts) rather than opaque dictionaries. As a result, reports with older contracts (e.g. booleanoptionalinstead ofpresence, or missingmultiplicity/item_count) no longer parse; the hosted API emits the reshaped contracts and there is intentionally no compatibility shim for older runners. The types are used, never re-exported —mthds.protocolstays the one import path for the vocabulary — andbundle_blueprint/graph_specstay opaque, since nothing published declares them. (Breaking) - Parsing: List items in input forms now parse into nameless unions (e.g.
DocumentIteminstead ofDocumentField), so code narrowing a list's item must target the item layer (the named layer silently failsisinstancechecks). Input-form parsing is also tightened to reject contradictoryrequired/presencecombinations,gatingon optional slots, and explicitnulls on wire slots (exceptdefault_value). (Breaking) - Strictness: The imported artifacts are closed shapes, but the report envelope around them stays extension-open — an unrelated field a future server adds to the report still parses and still rides
model_extra. The two regimes nest rather than spread, and a test pins both halves. - Linting: Updated Ruff to include
mthdsmodels (ValidationReport,InvalidValidationReport,ValidationDiagnostic) inruntime-evaluated-base-classes, preventing Pydantic resolution errors from annotations mistakenly moved intoTYPE_CHECKINGblocks. - Documentation: Updated
README.mdanddocs/architecture.mdto reflect the move from opaque dictionaries to typed MTHDS imports, detailing strictness boundaries and narrowing strategies, anddocs/ci-cd.mdto record that third-party actions are allowlisted at the enterprise level by exact commit SHA.
Fixed
- Serialization: Generating a serialization-mode JSON Schema from
PipelexValidationReportnow outputs the real input-form field shapes instead of an opaque object (resolved via the bump tomthds0.11.1). - CI/CD: Fixed the GitHub Actions publish workflow by pinning
sigstore/gh-action-sigstore-pythonto an enterprise-allowlisted SHA for v3.5.0 (790bc6befb9d733738f18d8f895854b453640ec9), resolving a deterministicUnsignedMetadataErrorcaused by a Sigstore TUF trust-root rotation that broke the previousv3.0.0tag.
Summary by cubic
Releases v0.7.0 with two breaking changes: mthds moves to an exact pin, and PipelexValidationReport's input-form and pipe-I/O fields are typed by the standard's own models instead of opaque dicts. Payloads from runners predating the contract reshape now fail to parse, so the minor rolls per the pre-1.0 rule.
Breaking changes
mthdsis pinned at==0.11.1(was>=0.8.2);pipelexpins the same version, so the two pins must move in step or a co-install fails to resolve.input_formis nowInputForm | Noneandpipe_io_contractsis nowPipeIOContracts, so input slots readpresenceandmultiplicityas enums.- List items parse into nameless item models (
DocumentItem, notDocumentField); narrow a list's item at the item layer, since the named layer silently failsisinstance. - Input-form parsing rejects contradictory
required/presence,gatingon optional slots, and explicitnulls on wire slots (exceptdefault_value). - The imported artifacts are closed shapes, but the report envelope stays extension-open; unrelated future report fields still parse and ride
model_extra.
Also in this release
- Serialization-mode JSON Schema now emits the real input-form field shapes instead of an opaque object.
- Publish workflow pins
sigstore/gh-action-sigstore-pythonto an allowlisted SHA (v3.5.0), fixing the TUF root-rotationUnsignedMetadataErrorfrom thev3.0.0tag. - Ruff now treats the three
mthdsmodels as runtime-evaluated base classes, preventing pydantic resolution errors from annotations moved intoTYPE_CHECKING. - Adds the
bump-mthdsClaude skill andupstream_notes.pyscript to automate futuremthdsbumps, and updatesREADME.md,docs/architecture.md, anddocs/ci-cd.md.
Closes L-260827-4cf826.