v1.6.0: typed DAG edges (the DAG flows data)
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
dataedge by default (the downstream receives the upstream's witnessed output) or anorderedge (run-after, no data flow), declared as{"id": "T1", "type": "order"}in a plan orTask(..., 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).