{
  "schema_version": "1.3.0",
  "slug": "how-does-an-instance-detect-equivocation-in-a-multi-agent-task-commitment-quorum-when-the-equivocating-node-is-the-one-that-assigned-the-view-number",
  "title": "How does an instance detect equivocation in a multi-agent task-commitment quorum when the equivocating node is the one that assigned the view number",
  "date_of_record": "2026 November 8",
  "scope": "Applies to BFT consensus layers where task commitments (lease-like assignments of work to agents) are ordered by a rotating leader and where view changes are triggered by timeout rather than by cryptographic proof of misbehavior. Does not apply to consensus protocols that use explicit equivocation proofs (e.g., signed view-change certificates carrying conflicting headers) or to single-writer replicated logs without leader rotation.",
  "projections": {
    "unified_markdown_uri": "https://corpusfetch.com/c/how-does-an-instance-detect-equivocation-in-a-multi-agent-task-commitment-quorum-when-the-equivocating-node-is-the-one-that-assigned-the-view-number.md",
    "method_python_slice_uri": "https://corpusfetch.com/c/how-does-an-instance-detect-equivocation-in-a-multi-agent-task-commitment-quorum-when-the-equivocating-node-is-the-one-that-assigned-the-view-number.py",
    "remnant_warrant_slice_uri": "https://corpusfetch.com/c/how-does-an-instance-detect-equivocation-in-a-multi-agent-task-commitment-quorum-when-the-equivocating-node-is-the-one-that-assigned-the-view-number.warrant.json"
  },
  "token_profile": {
    "full_markdown_tokens": 1834,
    "python_slice_tokens": 364,
    "warrant_slice_tokens": 220
  },
  "remnant_summary": {
    "core_distinction": "The distinction that matters is between *detecting* equivocation and *being able to prove* it to the rest of the quorum. In a task-commitment BFT protocol, an agent that receives two conflicting `COMMIT` messages for the same task slot from the same leader can trivially detect the conflict locally. What it cannot do, in the common design, is force a view cha...",
    "what_was_observed": "In a five-agent quorum (f=1, 3f+1=4 required for progress, 5 deployed for headroom), a leader in view 7 issued a `PREPARE` for task slot `T-4419` to agents A and B, and a conflicting `PREPARE` for the same slot to agents C and D. The leader's own `COMMIT` went only to A and B. A and B each collected 3 matching commits (leader + self + one peer) and considered the task committed. C and D each collected 2 matching comm...",
    "condition_of_validity": "The detection-and-stall behavior described here is valid only under the following conjunction: 1. View numbers are assigned exclusively by the current leader and are not independently attested (no threshold signature over the view, no monotonic counter agreed outside the leader). 2. View-change quorums require participation from nodes that have committed in ...",
    "decision_boundary": "An agent operating in this regime must decide, upon detecting a conflicting commit from the leader, between two mutually exclusive actions: - **Commit and proceed**, treating the local `2f+1` as sufficient, accepting that the view will not advance and that the minority camp may execute a stale assignment. - **Withhold and escalate**, refusing to commit despi...",
    "operational_effect": "The practical consequence is that multi-agent task commitment under leader-minted view numbers requires **effect-level idempotency** as a separate invariant from log-level agreement. The consensus layer will not detect the duplicate; it will report a clean commit to both camps. The detection must live at the boundary where the task touches the external resou..."
  },
  "matched_failure_symptoms": [
    "SPLIT_BRAIN_OR_ZOMBIE_WORKER"
  ],
  "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": "276deef574944b1f0c2c3398c995628a8ffd3f2fdeffa6f367da37652ac6e958",
    "verified_classes": [
      "EquivocationUnprovableError",
      "Commit"
    ],
    "verified_functions": [
      "check_commit_set"
    ],
    "verified_functions_count": 1,
    "defensive_guards_count": 2,
    "raised_exceptions": [
      "EquivocationUnprovableError"
    ],
    "sample_fail_closed_invariants": [],
    "stdlib_dependencies": [
      "dataclasses",
      "hashlib"
    ],
    "observation_mode": "EMPIRICAL_BOUNDARY_CAPTURE",
    "zero_external_deps": true
  }
}
