Skip to content
This repository was archived by the owner on Oct 2, 2026. It is now read-only.

feature/Pipe-io-client · L-260830-f5b65e - #53

Merged
lchoquel merged 7 commits into
devfrom
feature/Pipe-io-client
Oct 1, 2026
Merged

lchoquel merged 7 commits into
devfrom
feature/Pipe-io-client

Conversation

@lchoquel

@lchoquel lchoquel commented Sep 30, 2026 •

Copy link
Copy Markdown
Member

Adds pipe_io(), the typed wrapper for POST /v1/pipe-io, which returns a method's pipe I/O contracts, input form and output form with no dry run, with the selector XOR enforced at request construction as the rest of the crate family does. prepare_inputs now reads its signature from that route and lets the server select the pipe, so the client-side default chain and the bundle-blueprint read are deleted; a bare pipe_ref is still refused before any request, and a 422 whose error_type is the runner's entry-lookup error becomes an InputPreparationError carrying the server's reason. It must not merge or release before the hosted API serves the route, since a published prepare_inputs on /v1/pipe-io fails against any API that lacks it.

Closes L-260830-f5b65e
Closes L-260921-e61f30

🤖 Generated with Claude Code

https://claude.ai/code/session_01EWwzmAGtZvzvQqeC1SvzJ1


Summary by cubic

Adds pipe_io(), the typed wrapper for POST /v1/pipe-io, and moves prepare_inputs onto that route so the server selects the pipe.

  • pipe_io() returns a method's pipe I/O contracts, input form and output form with no dry run, typed from mthds.protocol, with the selector XOR enforced at request construction.
  • prepare_inputs drops the client-side default chain and the bundle-blueprint read; a bare pipe_ref and an alias→domain.pipe_code ref naming a dependency package's pipe are each refused before any request, and a 422 whose error_type is the runner's entry-lookup error becomes an InputPreparationError whose message is the server's detail alone.
  • The artifacts e2e bundle now reads its declared document input (via an empty {% if doc %} block) because pipelex refuses a bundle whose template never reads a declared input.

Migration

  • prepare_inputs needs a runner serving /v1/pipe-io (pipelex-api v0.33.1 or later) and raises ApiResponseError against one that does not. Do not merge or release before the hosted API serves the route.

Written for commit e5b69f0. Summary will update on new commits.

Review in cubic

lchoquel and others added 7 commits September 30, 2026 11:07
pipe_io() wraps the new crate route that returns a method's pipe I/O
contracts, input form and output form with no dry run, typed from
mthds.protocol, with the selector XOR enforced at request construction.
prepare_inputs now reads its signature from that route, which selects the
pipe: the client-side default chain and the bundle-blueprint read are
gone, a bare pipe_ref is still refused before any request, and a 422 whose
error_type is the runner's entry-lookup error becomes an
InputPreparationError carrying the server's reason.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01EWwzmAGtZvzvQqeC1SvzJ1
The changelog now names the address-based cross-package dependency the
route refuses, and the docs say that a runner which renders a refused
selection as a generic ValidationError is answered with ApiResponseError.
The README example narrows pipe_ref before indexing, and the validate
report's default_pipe_ref docstring no longer describes the blueprint
fallback prepare_inputs dropped, nor the "none or several" rule validate
never followed.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01EWwzmAGtZvzvQqeC1SvzJ1
…x-api v0.33.1

The runner types a refused selection with the engine's entry-lookup
error_type from pipelex-api v0.33.1, and names the candidates in its
detail only, so prepare_inputs no longer reads a speculative candidates
member: its message is the server's detail. The unit fixtures are the
bodies the fixed runner answers, the docs and changelog name the runner
floor, and the e2e suite gains a live ambiguous-selection case.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01EWwzmAGtZvzvQqeC1SvzJ1
pipelex now refuses a bundle whose template never reads a declared input
(extraneous_input_variable), so prepare_inputs refused the round-trip
bundle before any upload. An empty {% if doc %} block reads doc without
rendering it, so the run still outputs the note alone.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01EWwzmAGtZvzvQqeC1SvzJ1
…x/sdk does

prepare_inputs now refuses an alias->domain.pipe_code ref before the bare
check, with normalizePipeRef's wording: the alias names a dependency
package's pipe, and the crate routes load no address-based dependency, so
preparation covers the method's own pipes. The run routes take such a ref;
the asymmetry is deliberate.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01EWwzmAGtZvzvQqeC1SvzJ1
The hosted method_id case no longer creates a catalog method: it reads
one already stored in the key's organization, named by
PIPELEX_E2E_METHOD_ID, describes it under all_pipes with include_files,
and prepares inputs by id with an upload at each file position. The
method_ref case now runs under all_pipes and include_files too, and each
refused-selection case checks the typed 422 relayed through the hosted
proxy: the entry-lookup error_type, error_domain input, and the refused
ref or the candidates in detail. The docstrings of PipeIORequest and
pipe_io no longer call a refused selection a request-shape 422.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01EWwzmAGtZvzvQqeC1SvzJ1
The [Unreleased] entry for pipe_io() and prepare_inputs now sits above the [v0.15.0] section.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@lchoquel
lchoquel merged commit 096eb71 into dev Oct 1, 2026
18 checks passed
@lchoquel
lchoquel deleted the feature/Pipe-io-client branch October 1, 2026 20:12
@github-actions github-actions Bot locked and limited conversation to collaborators Oct 1, 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