Skip to content

release: dev -> main — MEMORY write-path repair + DAG gate hardening batch - #332

Merged
LeXwDeX merged 13 commits into
mainfrom
dev
Aug 17, 2026
Merged

release: dev -> main — MEMORY write-path repair + DAG gate hardening batch#332
LeXwDeX merged 13 commits into
mainfrom
dev

Conversation

@LeXwDeX

Copy link
Copy Markdown
Owner

Release batch: MEMORY write-path repair + DAG gate hardening (since graphagent-v1.0.24)

Promote the dev integration line to main. Dev's full CI (Typecheck + full test suite incl. app e2e) is green at f1c2c8c33.

MEMORY

DAG orchestration

Verification

  • Every PR passed its typecheck gate into dev; the aggregated dev full CI (Typecheck + full test suite incl. app e2e) is green at f1c2c8c33 (run 32078870791, exit 0).
  • MEMORY: test/memory/ 90 pass; DAG: test/dag/ 561 pass; compaction suites green; packages/opencode typecheck clean.

Notes

wake_reported landed only after the whole wake-driven turn completed, so a
restart or mid-turn interruption left the synthetic part durable but the mark
absent, and the startup sweep re-injected a byte-identical wake. Mark the batch
(and unregister terminal workflows) immediately after admitIfIdle, before
awaiting the turn; drop the turn-failure-redelivery semantics. Mark failures
degrade to retry-later while the admitted turn still runs.
Flips the two dag-wake-integration failure-redelivery assertions and reworks
the two timeout-escalation Q2-gate tests (their "held turn => wakeReported=false"
window no longer exists; they now hold the wake via a busy parent session).
Adds regression tests for failed-turn no-redelivery and a simulated restart.
…rns verdict replan
A reporting checkpoint submitting {verdict: "replan"} now pauses the workflow durably before any spawn round, so dependents can never run on the rejected direction; the parent is woken by the existing report_to_parent wake. control(replan) resumes a paused workflow so corrective nodes run, with TOCTOU-safe resume handling and updated pause guidance. continue verdicts and non-verdict outputs advance unchanged. Closes#322
Guarantee the literal json token at the MemoryModel seam (providers reject json_object calls without it), size match/maintain output budgets so structured replies survive reasoning, and retire the wall-clock prepare/checkpoint/in-model timeouts that killed active reasoning calls (issue #324 tracks the remaining streaming-liveness debt). Checkpoint maintenance runs in the background with an atomic per-project in-flight guard and commits under fence+lock only; prepare/search semantics unchanged.
fix(dag): halt downstream scheduling when a reporting checkpoint returns verdict replan
fix(memory): repair the MEMORY write path for thinking-mode providers
fix(dag): reject ungated reporting checkpoints at authoring
fix(dag): mark wake reported at admit time
Retire the whole-call wall clock in favor of activity-based liveness on the memory model seam: switch generateObject -> streamObject and re-arm an idle watchdog on every arriving part (reasoning deltas included), so an actively streaming call is never killed however long the reasoning runs. Add a connect timeout (no first part) and an idle timeout (gap between parts), both pure non-response detectors; generation still terminates via max_output_tokens / a natural stop. Addresses the streaming-liveness half of #324; the periodic prepare lock hardening remains tracked there.
fix(memory): replace wall-clock timeout with per-chunk SSE liveness
…ransient pause failure
Audit follow-up to #327/#322. (1) Parse a string-typed checkpoint output as JSON before matching the replan verdict, so a report_to_parent gate without output_schema (or a string-typed child reply, reachable via replan fragments which skip the authoring check) cannot bypass the pause gate and reproduce the #322 spin. (2) Retry the gate pause once before falling back to the durable status, so a transient pause failure (e.g. the workflow lock held by a concurrent long replan) never silently strands the workflow with no spawn round and no parent wake.
fix(dag): harden replan verdict gate — string-output bypass + transient pause strand
@LeXwDeX
LeXwDeX merged commit 25a711b into mainAug 17, 2026
15 checks passed
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

fix(dag): harden replan verdict gate — string-output bypass + transient pause strand (audit follow-up)

1 participant

@LeXwDeX