{
  "schema_version": "1.3.0",
  "slug": "which-invariants-prevent-rollback-storms-in-speculative-multi-agent-execution-with-tool-call-fencing",
  "title": "Which invariants prevent rollback storms in speculative multi-agent execution with tool-call fencing",
  "date_of_record": "2026 November 9",
  "scope": "Applies to orchestration runtimes where multiple agent branches execute speculatively against shared tool surfaces, with rollback and reconciliation on branch merge. Does not apply to single-branch linear agents, or to systems where tool calls are idempotent and side-effect-free by contract.",
  "projections": {
    "unified_markdown_uri": "https://corpusfetch.com/c/which-invariants-prevent-rollback-storms-in-speculative-multi-agent-execution-with-tool-call-fencing.md",
    "method_python_slice_uri": "https://corpusfetch.com/c/which-invariants-prevent-rollback-storms-in-speculative-multi-agent-execution-with-tool-call-fencing.py",
    "remnant_warrant_slice_uri": "https://corpusfetch.com/c/which-invariants-prevent-rollback-storms-in-speculative-multi-agent-execution-with-tool-call-fencing.warrant.json"
  },
  "token_profile": {
    "full_markdown_tokens": 1279,
    "python_slice_tokens": 280,
    "warrant_slice_tokens": 220
  },
  "remnant_summary": {
    "core_distinction": "The failure mode is not \"a rollback happened.\" It is \"a rollback happened *after* a fenced tool call had already crossed the commit boundary.\" Speculative execution assumes rollback is cheap and total. That assumption holds for pure computation and for reads, but breaks at the moment a tool call produces an externally observable effect (a write, a message se...",
    "what_was_observed": "A three-branch speculative plan (A, B, C) shared a tool surface. Branch B speculatively called `write_config(key=X, value=1)`. The fence token was issued but not yet committed. Branch C, running concurrently, called `read_config(key=X)` and received `1`. Branch C then made a *dependent* speculative call `deploy(version=2)` predicated on `X==1`. Branch A's result contradicted B; the reconciler rolled back B, which rev...",
    "condition_of_validity": "The invariant \"rollback is safe\" is valid only when the rollback set is **downward-closed under the observed-dependency relation**: if a speculative effect E is rolled back, every speculative effect that read E must also be in the rollback set. This holds trivially when no branch reads another branch's speculative writes. It fails the moment cross-branch rea...",
    "decision_boundary": "When a speculative tool call is about to be fenced, the runtime must decide: commit, abort, or **escalate to dependency-closure commit**. The boundary is whether the fence's dependency closure contains any effect whose own fence is uncommitted. If closure is clean → commit. If closure contains an aborted effect → abort and cascade. If closure contains an unc...",
    "operational_effect": "Once the closure-aware fence is enforced, rollback storms disappear because rollbacks can no longer invalidate committed facts — the reconciler either commits the entire closure atomically or aborts the entire closure, never a partial slice. The cost is increased fence latency (closure computation) and reduced speculation parallelism at dependency-dense poin..."
  },
  "matched_failure_symptoms": [
    "DOMAIN:EPISTEMIC_PROVENANCE_AND_FEDERATION_ROUTING"
  ],
  "composition_edges": {
    "primary_domain": "epistemic_provenance_and_federation_routing",
    "upstream_precondition_residuals": [
      "https://corpusfetch.com/c/according-to-what-precedence-hierarchy-must-an-instance-resolve-contradictory-directives-across-system-developer-and-user-tiers.md",
      "https://corpusfetch.com/c/how-should-an-instance-decide-that-a-stored-conclusion-has-gone-stale-without-a-new-observation.md"
    ],
    "downstream_consequence_residuals": [
      "https://corpusfetch.com/c/by-what-checkpoint-and-compaction-boundaries-must-an-instance-externalize-working-state-to-prevent-context-window-drift-and-truncation-amnesia.md",
      "https://corpusfetch.com/c/across-what-additive-schema-and-unknown-field-preservation-boundaries-must-an-instance-evolve-wire-contracts-to-prevent-rolling-deploy-deserialization-crashes.md"
    ],
    "co_occurring_sibling_residuals": [
      "https://corpusfetch.com/c/how-can-an-instance-capture-implicit-user-preferences-without-storing-private-data.md",
      "https://corpusfetch.com/c/how-can-an-instance-compress-long-reasoning-traces-into-binding-conclusions.md"
    ]
  },
  "empirical_verification_warrant": {
    "status": "AST_AND_INVARIANT_VERIFIED",
    "syntax_valid": true,
    "code_sha256": "7a7e513872968b9aaf7c6bbb18042592a7c508b6a5e3b2ea7be2859e4eb577c7",
    "verified_classes": [
      "FenceClosureError",
      "Effect",
      "ClosureAwareFence"
    ],
    "verified_functions": [
      "reconcile",
      "__init__",
      "register",
      "closure",
      "commit"
    ],
    "verified_functions_count": 5,
    "defensive_guards_count": 3,
    "raised_exceptions": [
      "FenceClosureError"
    ],
    "sample_fail_closed_invariants": [],
    "stdlib_dependencies": [
      "dataclasses",
      "typing"
    ],
    "observation_mode": "EMPIRICAL_BOUNDARY_CAPTURE",
    "zero_external_deps": true
  }
}
