You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Workflow dag_fe5ff13ada6fUONA2rH3Pypdf4 ("ultra flow", hand-authored 15-node graph) ran 75 min to completed although every decision checkpoint returned verdict: replan: the design gate rejected the design, yet stage-development spawned 12 ms after the checkpoint settled; all four downstream gates re-rejected and nothing was implemented. Wake batch landed once, at terminal — the parent could never intervene mid-run.
Root cause: hand-authored node graphs carry no condition gates on checkpoint dependents. Block-compiled graphs gate dependents on the verdict (blocks.ts:147,185,236, issue #294 REJECT-checkpoint shape); the authoring check has zero diagnostics for the ungated shape.
Design (grill-settled)
Semantics: a report_to_parent: true node with dependents is a reporting checkpoint (decision point); dependents must be gated by condition referencing its output. input_mapping does NOT count as gating.
Severity: dag.invaliderror, both deep and standard modes.
Incident (2026-08-17)
Workflow
dag_fe5ff13ada6fUONA2rH3Pypdf4("ultra flow", hand-authored 15-node graph) ran 75 min tocompletedalthough every decision checkpoint returnedverdict: replan: the design gate rejected the design, yetstage-developmentspawned 12 ms after the checkpoint settled; all four downstream gates re-rejected and nothing was implemented. Wake batch landed once, at terminal — the parent could never intervene mid-run.Root cause: hand-authored node graphs carry no
conditiongates on checkpoint dependents. Block-compiled graphs gate dependents on the verdict (blocks.ts:147,185,236, issue #294 REJECT-checkpoint shape); the authoring check has zero diagnostics for the ungated shape.Design (grill-settled)
report_to_parent: truenode with dependents is a reporting checkpoint (decision point); dependents must be gated byconditionreferencing its output.input_mappingdoes NOT count as gating.dag.invaliderror, both deep and standard modes.validatePostCompilestructural phase, i.e. workflow tool start/validate).Dag.create/replanStructuralDiagnosticsintentionally untouched — preserves wake-chain runtime semantics and reopen-extend (issue spec(dag): unblock the REJECT checkpoint — a rejected review completes the workflow (A1) #294).reporting checkpointglossary entry in dag CONTEXT.md + ADR (records rejected alternatives: runtime enforcement H2 — verdict vocabulary open, ACCEPT path must not wait; terminal-wake verdict aggregation H3 — shelved).Acceptance
test/dag/dag-checkpoint-gate.test.ts(6 cases: ungated rejected; condition-gated accepted; leaf accepted; rtp=false accepted; node_defaults inheritance flagged; wrong-dependency gate flagged)repair-memory-write-path.yamlreplay → start rejected with 5 diagnostics matching the incident's 5 checkpoint→stage pairstest/dag/full suite green (baseline 556 pass),bun typecheckcleanultra-flow-route.yaml+release-route.yaml(see config-repo issue)Status
Implementation + tests done on
fix/checkpoint-gating(worktree/private/tmp/oc-dag-checkpoint-gate, based on dev @16f9add17). Remaining: CONTEXT.md glossary, ADR, workflow-tool description line, commit, PR → dev. PR title:fix(dag): reject ungated reporting checkpoints at authoring.