Skip to content

Release v0.12.0 - #45

Merged
lchoquel merged 3 commits into
mainfrom
release/v0.12.0
Sep 24, 2026
Merged

lchoquel merged 3 commits into
mainfrom
release/v0.12.0

Conversation

@lchoquel

@lchoquel lchoquel commented Sep 24, 2026 •

Copy link
Copy Markdown
Member

Release v0.12.0

Bumps version from 0.11.0 to 0.12.0. Promotes dev → main.

Changelog

Added

  • locate_artifacts and ArtifactLocation: pipelex_sdk.artifacts.locate_artifacts(value) is the artifact walk with its paths — every pipelex-storage:// reference in a JSON value, deduplicated in discovery order exactly as collect_artifacts returns them, each as an ArtifactLocation whose found_at lists every $-rooted path at which it sits ($.rooms[3].staged_photo.url, $.items[0].url, $["a key"].url), written the way @pipelex/sdk's locateArtifacts writes them.

Changed

  • download_artifacts names each file after the field it fills, and artifact_filename takes a location (Breaking): a saved file is named after the first path at which its reference sits — $.rooms[3].staged_photo.url is saved as rooms-3-staged_photo.png, and an output that is one image as main_stuff.png — instead of after the last segment of its storage key, which now supplies only the extension, so the same run saves under the same names from either SDK. artifact_filename(location, content_type, scope) replaces artifact_filename(uri, content_type, index) and raises ArtifactOperationError for anything but an ArtifactLocation whose first path is in the walk's notation; a field whose name Windows reserves for a device (aux, nul, com1 and the like) is saved with a trailing _ (aux_.png); the full rule is on docs/artifact-download.md.
  • DownloadedArtifact carries a required found_at (Breaking): every item of a download_artifacts verdict carries its reference's found_at, on the saved arm and the error arm alike, so a file that was not saved still says which field it would have filled. DownloadedArtifact is now an ArtifactLocation, so artifact_filename takes a verdict item as it is, and code that builds DownloadedArtifact values — a test fake standing in for download_artifacts — must now supply the field.
  • Requires mthds 0.15.0 (Breaking): the exact pin moves from 0.14.0, so pipelex-sdk can again be installed beside pipelex, which has pinned mthds==0.15.0 exactly since its 0.60.0. Nothing in this client's own surface changes: the release's breaking cut to ConceptAbstract and StuffAbstract sits in protocol models this SDK does not build on, and parse_method_files / serialize_method_files stay beside the canonical mthds.protocol.method_files for the reason docs/architecture.md gives.

Closes L-260924-a14bbb

🤖 Generated with Claude Code


Summary by cubic

Bumps the version from 0.11.0 to 0.12.0 and promotes dev to main. The release changes how downloaded artifact files are named and moves the exact mthds pin.

New Features

  • locate_artifacts walks a JSON value and returns every pipelex-storage:// reference with every $-rooted path where it sits ($.rooms[3].staged_photo.url), in discovery order matching collect_artifacts.

Migrations

  • download_artifacts now names each saved file after the field its reference fills (first path) instead of the storage key's last segment, which now only supplies the extension.
  • artifact_filename(location, content_type, scope) replaces the URI-based signature and raises ArtifactOperationError for invalid input.
  • DownloadedArtifact now extends ArtifactLocation and requires found_at, so test fakes standing in for download_artifacts must supply it.
  • Moves the exact mthds pin from 0.14.0 to 0.15.0 so pipelex-sdk installs beside pipelex again; nothing in the client surface changes.

Written for commit 8c9fcd5. Summary will update on new commits.

Review in cubic

lchoquel and others added 3 commits September 24, 2026 12:33
`download_artifacts` now names each saved file after the field it fills,
following the rule `pipelex-sdk-js` states in its
`docs/artifact-download.md`, and every verdict item carries `found_at`
on both arms. The new `locate_artifacts` returns each reference with
every path it sits at, and `artifact_filename` now takes that location,
so a verdict item predicts its own saved name. A cross-SDK run of one
corpus through both implementations found no difference in the paths or
the names.

Closes L-260924-27d936
Advances L-260924-ec45a1

🤖 Generated with [Claude Code](https://claude.com/claude-code)

https://claude.ai/code/session_01KAUFtFH3dukuR2CkwoH9wv


<!-- This is an auto-generated description by cubic. -->
---
## Summary by cubic
`download_artifacts` now names each saved file after the field it fills,
matching the rule `pipelex-sdk-js` documents, and every verdict item
carries `found_at` on both arms. A new `locate_artifacts` returns each
`pipelex-storage://` reference together with every `$`-rooted path it
sits at, in the same discovery order as `collect_artifacts`, so a
consumer can predict a saved filename before downloading. A cross-SDK
run of one corpus through both implementations found no difference in
the paths or the names.

`artifact_filename` now takes an `ArtifactLocation` and scope instead of
a URI and index, and files are named from the first path at which their
reference sits (for example, `$.rooms[3].staged_photo.url` is saved as
`rooms-3-staged_photo.png`).

**Breaking changes**
- `artifact_filename(location, content_type, scope)` replaces the old
URI-based signature and raises `ArtifactOperationError` for anything
that is not a valid location.
- `DownloadedArtifact` now extends `ArtifactLocation` and requires
`found_at`; code that builds verdict items, such as test fakes, must
supply it.

Closes L-260924-27d936. Advances L-260924-ec45a1.

<sup>Written for commit 8068c41.
Summary will update on new commits.</sup>

<a
href="https://cubic.dev/pr/Pipelex/pipelex-sdk-python/pull/43?utm_source=github"
target="_blank" rel="noopener noreferrer"
data-no-image-dialog="true"><picture><source
media="(prefers-color-scheme: dark)"
srcset="https://www.cubic.dev/buttons/review-in-cubic-dark.svg"><source
media="(prefers-color-scheme: light)"
srcset="https://www.cubic.dev/buttons/review-in-cubic-light.svg"><img
alt="Review in cubic"
src="https://www.cubic.dev/buttons/review-in-cubic-dark.svg"></picture></a>

<!-- End of auto-generated description by cubic. -->

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…ved its reason (#44)

Moves the exact `mthds` pin from 0.14.0 to 0.15.0. `pipelex` has pinned
`mthds==0.15.0` exactly since 0.60.0, so the two packages could not be
installed together; this restores that. Nothing in the client changed
with the move, and the local method-files codec stays beside
`mthds.protocol.method_files` until `PipelineRequestError`'s base class
is settled upstream, which `docs/architecture.md` now records.

Closes L-260922-5f7eeb

🤖 Generated with [Claude Code](https://claude.com/claude-code)

<!-- This is an auto-generated description by cubic. -->
---
## Summary by cubic
Moves the exact `mthds` pin from 0.14.0 to 0.15.0 so `pipelex` and
`pipelex-sdk` can be installed together again: `pipelex` has pinned
`mthds==0.15.0` exactly since 0.60.0, and two exact pins on different
versions left the pair unresolvable. Nothing in the client changed with
the move.

**Breaking changes in 0.15.0** — none of them affect this SDK:
- The one breaking cut (`ConceptAbstract` reduced to a name,
`StuffAbstract` dumping its concept as the ref string) sits in protocol
models this SDK does not build on.
- The base client's run-source guard now rejects a protocol arg smuggled
through `extra` before building the body, which this client's own guard
already did.
- The canonical method-files pair ships as
`mthds.protocol.method_files`; this package keeps its own
`parse_method_files` / `serialize_method_files` until
`PipelineRequestError`'s base class is settled upstream, and
`docs/architecture.md` now records the reason.

Closes L-260922-5f7eeb.

<sup>Written for commit 261b296.
Summary will update on new commits.</sup>

<a
href="https://cubic.dev/pr/Pipelex/pipelex-sdk-python/pull/44?utm_source=github"
target="_blank" rel="noopener noreferrer"
data-no-image-dialog="true"><picture><source
media="(prefers-color-scheme: dark)"
srcset="https://www.cubic.dev/buttons/review-in-cubic-dark.svg"><source
media="(prefers-color-scheme: light)"
srcset="https://www.cubic.dev/buttons/review-in-cubic-light.svg"><img
alt="Review in cubic"
src="https://www.cubic.dev/buttons/review-in-cubic-dark.svg"></picture></a>

<!-- End of auto-generated description by cubic. -->

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@lchoquel
lchoquel merged commit eef32a7 into main Sep 24, 2026
20 checks passed
@lchoquel
lchoquel deleted the release/v0.12.0 branch September 24, 2026 11:21
@github-actions github-actions Bot locked and limited conversation to collaborators Sep 24, 2026
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant