v0.35.0
[v0.35.0] - 2026-06-18
Added
- Structured validation errors: Bundle validation failures now emit categorized
validation_errors[]items with identity locators, so machine consumers can readerror_typeand locators instead of parsing text. Categories: unresolved concept reference (pipe_validation/unresolved_conceptwithpipe_code,concept_code,field_name; orblueprint_validation/unresolved_conceptwith owningconcept_code), undefined pipe dependency (pipe_validation/unresolved_pipe_dependencywithpipe_codeand the newmissing_pipe_codelocator), and unknown pipe type (blueprint_validation/unknown_pipe_typewithpipe_code). - New error locators and types: Added the
missing_pipe_codelocator field and thePipeValidationErrorTypevaluesunresolved_concept,unresolved_pipe_dependency, andunknown_pipe_type. - String utilities: Added
pluralizeandcount_with_nountopipelex.tools.misc.string_utilsfor correct CLI output grammar (e.g. "1 pipe" instead of "1 pipe(s)"). - Documentation: Documented the 0/1/2 exit-code policy in
docs/under-the-hood/error-model.mdand addedwip/structured-validation-errors-deferred-findings.mdtracking deferred follow-ups.
Changed
- Validate exit-code policy (pre-1.0 breaking): Both
pipelex validateandpipelex-agent validatenow use a three-tier exit code mirroring the hosted/validateAPI:0= valid (including valid-but-not-runnable with--allow-signatures),1= negative verdict (invalid, or valid-but-not-runnable without--allow-signatures),2= no verdict (bad arguments, unresolvable target, or setup/internal errors). Consumers testing zero vs. non-zero are unaffected; machine consumers should rely on the structuredis_validJSON field. - Relocated markdown renderer: Moved
format_validate_markdownfrom CLI internals to the publicpipelex.pipeline.validation_rendermodule so other surfaces (e.g. thepipelex-api/validateroute) can use it without Typer/CLI dependencies, and addedrender_invalid_validation_markdownfor invalid verdicts. - Error class hierarchy:
ConceptLibraryErrornow extendsLibraryLoadingError(instead ofLibraryError) so it can carry per-reference structured items through the existing error cascade. - Strict protocol arguments:
PipelexMTHDSProtocolnow rejectsextraextension arguments, raisingPipelineRequestError, since the local runtime defines no extension arguments. - Bumped
mthdsdependency from>=0.4.1to>=0.5.0.
Fixed
- Dropped
pipe_codeon blueprint errors: The blueprint validation-error categorizer matched the wrong Pydanticlockey (pipesinstead ofpipe), causing categorized items (e.g.missing_input_variable) to silently lose theirpipe_codelocator; it now populates correctly. - CLI output grammar: Validation CLI output now uses the new string utilities, fixing awkward pluralizations (e.g. "Validated 1 pipe(s)" is now "Validated 1 pipe").
What's Changed
- feat(validate): 0/1/2 exit-code policy + lift the validate Markdown renderer by @lchoquel in #994
- Release v0.35.0 by @lchoquel in #995
Full Changelog: v0.34.0...v0.35.0