All notable changes to this project will be documented in this file.
This project uses PEP 440 versioning with release candidates (rcN) for pre-release versions.
- BREAKING: Type resolution is now async and contextual;
can_cast_to()andcast_to()receive aValidationContextenabling context-dependent type compatibility (#94) - All node hooks (
on_node_expand,on_node_finish,on_node_error) now consistently receive the post-cast input (#94)
- Deep output field selection on edges: output fields can now be selected using dot-separated paths to extract nested values (#90)
remove_node_classandremove_value_classmethods on registry builders; in lazy builders, removals are applied after all additions at build time so a removal always wins regardless of call order (#82)
- BREAKING: Workflow execution methods now return
WorkflowExecutionResultinstead oftuple[WorkflowErrors, DataMapping]. The result object unifies output, errors, and node yields into a single value with astatusfield (SUCCESS,ERROR, orYIELDED) (#84) - BREAKING:
WorkflowYieldexception removed; yields are now surfaced viaWorkflowExecutionResultand theon_workflow_yieldcontext hook (previouslyon_workflow_yieldreceived aWorkflowYieldexception, now it receivespartial_outputandnode_yieldsdirectly) (#84) on_node_starthook now receives the fully type-cast input instead of the raw pre-cast input (#81)
Datahelper methods (to_dict,to_value_schema,field_annotations,only_field) moved to module-level functions (get_data_dict,get_data_schema,get_field_annotations,get_only_field) to eliminate the risk of user-defined field names shadowing them (#81)BaseValueSchema.value_typealias (x-value-type) now handled via explicit serializer/validator instead of Pydantic field aliases, fixing pyright errors (#83)- Fixed pyright errors in constrained sequence and map value builders (#83)
on_workflow_yieldcontext hook called when a workflow raisesWorkflowYield; receivespartial_outputfrom nodes that completed before the yield (#79)node_yieldsparameter onon_workflow_errorhook to expose anyShouldYieldexceptions collected before the error (#79)AddNodeis now variadic: accepts any number of inputs (≥2) via anum_argumentsparameter, with input fields named using an infinite alphabetic sequence (a,b, …,z,aa,ab, …) (#80)- Titles and descriptions on all built-in node input, output, and parameter fields for non-technical display (#78)
- Error state takes precedence over yield state in
ParallelExecutionAlgorithmCONTINUE mode:on_workflow_erroris called instead ofon_workflow_yieldwhen both occur (#79)
ParallelExecutionAlgorithmCONTINUE mode no longer raises a spuriousUserExceptionfor missing output when errors are present; partial output is computed directly and forwarded toon_workflow_error(#79)
ShouldYield/WorkflowYieldcontrol-flow signals for nodes that dispatch external work and cannot return a value in the current execution (#77)on_node_yield(node, input, exception)context hook, called once per yielded node beforeWorkflowYieldis raised (#77)on_node_expandcontext hook called when a node'srun()returns aWorkflowinstead of aDataMapping(#74)- Constrained Value subclasses:
build_value_cls()on primitive schema classes now enforces JSON Schema keywords (minimum,maxLength,minItems, etc.) at runtime via PydanticFieldconstraints (#76) x-value-typeJSON Schema extension field for stable Value type detection;titleretained as a backwards-compatible fallback (#76)
$defskey collisions when multiple constrained variants of the same base Value type appear in a singleDataValueschema (#76)- Bug in
ParallelExecutionAlgorithmwhere yielded nodes were missing from the ready-node exclusion filter, which would have caused an infinite re-dispatch loop (#77)
2.0.0rc2 - 2026-02-13
- Adaptive
ForEachNodewiring based on inner workflow I/O (#72) FieldSchemaMappingValueconvenience data type for string-field schema mappings (#71)- First-class support for CSV, DocX, and Markdown file types (#69)
- Iterable APIs and typed
extend()method for registries (#64) - Comprehensive tests for round-trip type (de)serialization and failure cases (#73)
- Schemas now allow extra fields (#70)
- Updated
cryptographydependency from 46.0.3 to 46.0.5
2.0.0rc1 - 2025-02-05
WorkflowEngineclass with node and workflow deserialization capabilities- Execution capabilities to
WorkflowEngine
- BREAKING: Migrated workflow format from
InputEdge/OutputEdgetoInputNode/OutputNode - Moved node/edge validation from
WorkflowtoWorkflowEngine - Updated examples and documentation for new
InputNode/OutputNodeformat
1.2.0rc1 - 2025-02-01
- Generic
ModelValue[M]type for arbitrary Pydantic models ExtractionResultValuetype- Comprehensive tests for
NodeRegistryimplementations - Coding best practices to CLAUDE.md about explicit methods vs dunder overrides
- Refactored
ValueRegistrywith builder pattern and comprehensive tests - Updated codebase to use new
ValueRegistryAPI
- Pytest warning by renaming
TestValuetoExampleValue
1.1.0rc1 - 2025-01-30
- Workflow migration utilities for safely loading and migrating workflows (
load_workflow_with_migration,clean_edges_after_migration) - Typecasts from
JSONValueto primitive types (NullValue,BooleanValue,IntegerValue,FloatValue) - Optional
input_typeandoutput_typefields onWorkflowfor explicit type declarations - Logging for previously unlogged exception handlers
- Project documentation: getting started guide, architecture overview, node reference, value types, execution, contexts
NodeExpansionExceptionproperty setter bug- Unlogged exceptions in execution error handlers now produce proper log output
- Version bump from
1.0.0rc2to1.1.0rc1 - Documentation URL updated to point to GitHub docs
1.0.0rc2 - 2025-01-15
- Converted optional dependencies (
pyright,pytest,ruff, etc.) into dev dependencies - Updated to Python 3.12+ minimum
- Made type checking non-blocking in CI
- Improved release script
1.0.0rc1 - 2025-01-10
- PyPI publishing via GitHub Actions
- Node retry system with exponential backoff (
ShouldRetry,RetryTracker) - Rate limiting per node type (
RateLimitConfig,RateLimiter,RateLimitRegistry) - Node versioning and migration system (
Migration,MigrationRegistry,MigrationRunner) - Parallel node execution algorithm (
ParallelExecutionAlgorithm) with eager dispatch - Value typecasting graph visualization in README
- Registration logs changed from INFO to DEBUG level
- Migrated from Poetry to uv for dependency management
0.3.3 - 2024-12-20
- Release script for streamlined publishing
0.3.2 - 2024-12-15
- JSON type support
- CLAUDE.md for Claude Code guidance
- Double-typecast issue with Files to JSONFile
0.3.1 - 2024-12-10
- MIME type support for file values
- Iteration and property accessors on collection types to reduce
.rootusage __getitem__access onSequenceValueandStringMapValue- Direct equality comparison with Values
- MIME type inconsistencies
- Type inconsistencies in file handling
- Missing exports
0.3.0 - 2024-12-01
ForEachNodefor workflow iteration over sequencesIfNodeandIfElseNodefor conditional branching- Composite node system (
ExpandSequenceNode,GatherSequenceNode,ExpandMappingNode,GatherMappingNode,ExpandDataNode,GatherDataNode) - Serializable metadata for node types
- Input/output schemas on nodes
- Support for type unions in JSON schemas
- Require semantic versioning in node type definitions
0.2.0 - 2024-11-15
- Asynchronous workflow execution
- Value type casting system (async)
- Error handling with partial results (
WorkflowErrors)
- All node I/O now uses Value types
- Workflows are fully asynchronous
- Initial workflow engine implementation
- Core types:
Node,Workflow,Edge,Context,Value,Data - Storage backends:
SupabaseContext,LocalContext,InMemoryContext - Basic arithmetic, constant, text, and error nodes
- Topological execution algorithm