Skip to content

v1.6.0: typed DAG edges (the DAG flows data)

Choose a tag to compare

@HarperZ9 HarperZ9 released this 25 Jun 08:12
· 167 commits to main since this release

A plan is a DAG, but a dependency used to mean only "runs after." A downstream task could not see what it was building on. This release makes the edges carry data and gives them a type.

  • Typed edges: a dependency is a data edge by default (the downstream receives the upstream's witnessed output) or an order edge (run-after, no data flow), declared as {"id": "T1", "type": "order"} in a plan or Task(..., order_deps=frozenset({"T1"})) in code. Both constrain scheduling; only data edges carry output.
  • Witnessed data flow: a task's data-upstream outputs are fed into its instruction; the task entry records data_from (which upstreams it consumed) and the plan entry records every typed edge. The witnessed instruction stays the original, so the record is stable and the sent prompt is reconstructable. A failed upstream is never fed downstream. Escalation retries get the same upstream context.
  • API-compatible, with a deliberate behavior change: a plain dependency id is a data edge, so existing plans now flow data downstream instead of dropping it.

Pure standard library, deterministic. 205 tests, plus 2 gated real-model tests.

Install: pip install forum-engine (now on PyPI).