{
  "schema_version": "1.3.0",
  "slug": "when-must-an-instance-treat-a-quorum-certificate-as-evidence-of-agreement-rather-than-evidence-of-participation",
  "title": "When must an instance treat a quorum certificate as evidence of agreement rather than evidence of participation",
  "date_of_record": "2026 November 7",
  "scope": "Applies to BFT consensus layers (PBFT-style, Tendermint-style, HotStuff-style) whose quorum certificates are assembled from signed votes by a fixed validator set, where at least one participant is an LLM agent capable of emitting syntactically valid but semantically ungrounded votes. Does not apply to protocols with cryptographic equivocation proofs binding a vote to a specific proposal digest, nor to single-agent decision loops.",
  "projections": {
    "unified_markdown_uri": "https://corpusfetch.com/c/when-must-an-instance-treat-a-quorum-certificate-as-evidence-of-agreement-rather-than-evidence-of-participation.md",
    "method_python_slice_uri": "https://corpusfetch.com/c/when-must-an-instance-treat-a-quorum-certificate-as-evidence-of-agreement-rather-than-evidence-of-participation.py",
    "remnant_warrant_slice_uri": "https://corpusfetch.com/c/when-must-an-instance-treat-a-quorum-certificate-as-evidence-of-agreement-rather-than-evidence-of-participation.warrant.json"
  },
  "token_profile": {
    "full_markdown_tokens": 1282,
    "python_slice_tokens": 174,
    "warrant_slice_tokens": 220
  },
  "remnant_summary": {
    "core_distinction": "A quorum certificate (QC) is a *set of signatures over a digest*. It is not a statement about the world. Most BFT protocol descriptions conflate two distinct properties that a QC can carry: 1. **Participation evidence** — \"n−f distinct validators signed digest d.\" This is what the signature count actually proves. 2. **Agreement evidence** — \"the correct vali...",
    "what_was_observed": "In a 7-validator quorum (f=2, quorum threshold 5) with three LLM-agent validators, an adversarial proposer submitted a proposal whose payload contained a prompt-injection string in an unvalidated metadata field. The three LLM validators, whose validation routine included a summarization step over the full proposal, were induced to emit `PREPARE` votes for the injected digest without running the state-transition check...",
    "condition_of_validity": "The QC-as-agreement-evidence inference is valid only when all of the following hold: - **Validation independence:** each signer ran its own state-transition function against its own state, and the signature is bound to the *output* of that function, not to the proposal digest alone. - **Non-injectability of the validation path:** the proposal cannot influenc...",
    "decision_boundary": "The operational rule: **before treating a QC as commit evidence, the committing node must verify that the QC's signers include at least f+1 validators whose validation path is non-injectable, or must re-run the state transition locally against the committed digest and reject on mismatch.** The boundary is not \"is the QC well-formed\" (that is a signature chec...",
    "operational_effect": "Committing nodes that skip this check will commit injected values at the first view where the induced QC reaches threshold, typically one view ahead of the honest QC, because induced validators skip the state-transition latency. The observable signature is a commit whose payload fails local re-execution while its QC verifies. The correct response is not to r..."
  },
  "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": "8074e659c39ba7b681cffc6ea254f5318f2bf6154ed062a019062d03ed18b28b",
    "verified_classes": [
      "QuorumAgreementViolation"
    ],
    "verified_functions": [
      "commit_from_qc"
    ],
    "verified_functions_count": 1,
    "defensive_guards_count": 3,
    "raised_exceptions": [
      "QuorumAgreementViolation"
    ],
    "sample_fail_closed_invariants": [],
    "stdlib_dependencies": [],
    "observation_mode": "EMPIRICAL_BOUNDARY_CAPTURE",
    "zero_external_deps": true
  }
}
