Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
43 changes: 43 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,49 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0

## [Unreleased]

### Added
- **`DslFilterGraph<InputType, OutputType>`** (`DslFilterGraph.hpp`) — runs
graphs described in the text DSL, making it a first-class way to describe
runtime graphs. Executes named-edge graphs with fan-out (every reader gets a
copy), fan-in merges (holes for dropped paths), drop propagation and dead
ends, and exposes the graph as a `MessageFilter`, so it can be nested or
registered as a stage. Construction instantiates and type-checks the whole
graph and throws a `GraphError` listing every located problem.
- **`GraphOutputs`** — the ordered, optionally keyed results of a graph with
several outputs (`get` / `take` / `has`).
- **`MergeFilter<OutputType>` / `registerMergeFilter`** (`MergeFilter.hpp`) —
fan-in stages for `(a, b) -> Merge`, using the same combiner signature as
`JoinFilter`.
- **`validateDslGraph<In, Out>(text)`** — every build-time diagnostic without
throwing; `dsl::formatDiagnostic(s)` formats them as `line:column: message`.
- `dsl::StageNode::fanIn` records whether a stage's inputs came from a group.

### Changed
- README, EXAMPLE.md and `apps/textPipeline` now describe runtime graphs in the
DSL first; the JSON format is documented as a supported alternative.
- `dsl::toMermaid` now uses generated node ids (instead of edge names such as
`end` or the internal `$out0`), labels outputs as `out` / `out.<key>`, gives
each dead end its own node, and lists stage arguments.
- DSL stages written without arguments now receive an empty config object
instead of `null`, matching JSON stages without `"config"`.
- `dsl::parseGraphProgram` now uses the lexy-based parser, which moved into
`GraphLang.hpp`. It reports located, descriptive diagnostics (the lexy parser
used to report every problem as a bare "syntax error" at column 1), gives
stages their real columns, and supports decimal numbers, string escapes and
`#` inside strings. `GraphLangLexy.hpp` / `parseGraphProgramLexy` remain as
an alias.
- DSL syntax errors say what was expected and what was found; a syntax error
ends its statement instead of producing follow-on errors; an unterminated
string no longer swallows the following lines; malformed or out-of-range
numbers and empty fan-in groups `()` are reported; messages say "argument"
instead of "config"; diagnostics are sorted by location.

### Deprecated
- The hand-written DSL parser. It moved to `GraphLangHandwritten.hpp` as
`dsl::parseGraphProgramHandwritten`, marked `[[deprecated]]`, and will be
removed in a future release. It produces the same results as
`dsl::parseGraphProgram`; the tests check the two against each other.

## [0.2.0] - 2026-09-15

### Added
Expand Down
Loading
Loading