Skip to content

Commit 35509f3

Browse files
committed
docs: record the step-model split in the changelog (#517)
1 parent b0ba1bd commit 35509f3

1 file changed

Lines changed: 27 additions & 0 deletions

File tree

CHANGELOG.md

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,33 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
4141
without replacing tool-based output, weakening schema validation, or
4242
changing authored system prompts.
4343

44+
### Changed
45+
46+
- **Step definitions split into concrete models with a discriminated union**
47+
(#517) — the single monolithic `AgentDef` that carried every step type's
48+
fields is now a set of focused Pydantic models: `AgentDef` (provider-backed
49+
LLM agents only), `HumanGateStepDef`, `QuestionsStepDef`, `ScriptStepDef`,
50+
`MCPStepDef`, `WaitStepDef`, `SetStepDef`, `TerminateStepDef`, and
51+
`WorkflowStepDef`, united by the static `StepDef` union discriminated on
52+
`type`. Every model owns exactly the fields meaningful for its kind with
53+
`extra="forbid"`, so a misplaced field is rejected next to its step instead
54+
of being silently ignored, and the published JSON Schema now exposes a
55+
`oneOf` + `discriminator` mapping with per-variant
56+
`additionalProperties: false` for editors and tooling. Compatibility:
57+
workflow YAML is unchanged — an omitted `type` or an explicit `type: null`
58+
still loads as an LLM agent (now canonicalized to `type: "agent"` at parse
59+
time) — and `AgentDef(...)` keeps working for LLM agents, including
60+
`AgentDef(type=None, ...)`. What changed: constructing a non-LLM step
61+
programmatically via `AgentDef(type="script", ...)` no longer works — use
62+
the named step class (e.g. `ScriptStepDef(...)`) — and a field that belongs
63+
to a different step type now fails with Pydantic's standard
64+
`extra_forbidden` error rather than the previous custom
65+
`"<type> agents cannot have '<field>'"` messages. Human gates additionally
66+
lost the inert `model` field and can no longer appear as a `for_each`
67+
inline agent (concurrent iterations would compete for one interactive
68+
channel; route to a gate from the group's `routes:` instead). All classes
69+
are exported from `conductor.config` and `conductor.config.schema`.
70+
4471
## [0.1.37](https://github.com/microsoft/conductor/compare/v0.1.36...v0.1.37) - 2026-09-09
4572

4673
### Added

0 commit comments

Comments
 (0)