Skip to content

fix(runtime): preserve committed mutation effects and honor hook configuration - #261

Merged
rrrodzilla merged 1 commit into
mainfrom
fix/hooks-and-mutation-completion
Oct 12, 2026
Merged

rrrodzilla merged 1 commit into
mainfrom
fix/hooks-and-mutation-completion

Conversation

@rrrodzilla

@rrrodzilla rrrodzilla commented Oct 12, 2026 •

Copy link
Copy Markdown
Contributor

Writes that took longer than five seconds could return 500 even though storage later committed them. Post-commit hooks, audit events, and webhook dispatch also depended on the HTTP handler staying alive. Mutation replies now wait for the storage outcome, and actor-owned completion runs these effects after a commit, including after the client disconnects. Lost replies return 504 mutation_outcome_unknown with reconciliation guidance.

The gRPC dispatcher now honors the configured default timeout, and background hooks enforce max_concurrent_async. Hook queue admission happens before mutation submission so a full hook mailbox cannot block ForgeActor completion. Runtime webhook subscription lookup uses storage directly to avoid calling back into the committing actor.

Prepare patch release v0.52.4, with runtime crate v0.50.3, changelog, and operating notes.

Validation:

  • Portable runtime suite: 780 tests passed.
  • Focused hook and mutation regressions passed with SSE and GraphQL enabled, including writes beyond five seconds and cancelled requests for POST, PUT, PATCH, and DELETE.
  • Audit syslog export and webhook subscription lookup are asserted after cancelled requests; failed storage emits no success hook.
  • Runtime Clippy with SSE and GraphQL, and server CLI Clippy with OAuth and SSE: zero warnings.
  • Semver review confirmed compatible patch versions.
  • Signed commit, formatting, and release metadata verified.
  • GitHub CI will validate the final commit and supported database/server combinations before merge and publication.

Fixes #259
Fixes #260

Keep committed hooks, audit events, and webhook dispatch independent of the HTTP receiver. Await mutation outcomes without a reply deadline and return an explicit unknown-outcome status when the actor reply is lost.

Fixes #259

Fixes #260
@rrrodzilla
rrrodzilla merged commit d1525be into main Oct 12, 2026
15 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

1 participant