ruvnet/ruflo · error · QEHiveError

BFT consensus failed: only ${results.length}/${replicaCount}

Error message

BFT consensus failed: only ${results.length}/${replicaCount} replicas succeeded

What it means

executeWithBFT() gathered all replica outcomes and too few succeeded to meet the 2f+1 agreement bound for the replica count (f = floor((n-1)/3)). The BFT quorum is not met, so the operation is reported as failed rather than acting on an unquorumed result; the counts in the message show succeeded/total.

Source

Thrown at v3/plugins/agentic-qe/src/bridges/QEHiveBridge.ts:333

    const outcomes = await Promise.all(promises);

    for (const outcome of outcomes) {
      if (outcome.success) {
        results.push(outcome.result as T);
      } else {
        errors.push(outcome.error as Error);
      }
    }

    // BFT requires 2f+1 agreeing results (f = max faults tolerated)
    // For 3 replicas: f=1, need 2 agreeing
    // For 5 replicas: f=2, need 3 agreeing
    const maxFaults = Math.floor((replicaCount - 1) / 3);
    const requiredAgreement = 2 * maxFaults + 1;

    if (results.length < requiredAgreement) {
      this.logger.error(`BFT consensus failed: ${results.length}/${replicaCount} replicas succeeded`);
      throw new QEHiveError(
        `BFT consensus failed: only ${results.length}/${replicaCount} replicas succeeded`,
        errors[0]
      );
    }

    // Return first successful result (in production, would compare for consensus)
    this.logger.debug(`BFT consensus achieved: ${results.length}/${replicaCount} replicas agreed`);
    return results[0];
  }

  /**
   * Propose task allocation via consensus
   */
  async proposeTaskAllocation(
    task: QESwarmTask,
    requiredAgents: string[]
  ): Promise<ConsensusResult> {
    this.ensureInitialized();

View on GitHub (pinned to fa13ee4ad6)

Solutions

  1. Investigate the failed replicas and restore them before rerunning consensus.
  2. Reduce replica count or fix the fault causing replica failures.
Defensive patterns

Strategy: retry

When it happens

Trigger: Thrown at v3/plugins/agentic-qe/src/bridges/QEHiveBridge.ts:333 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of ruvnet/ruflo@fa13ee4ad6 (2026-08-18). Data as JSON: /api/errors/5800fac23bfe1d95. Report an issue: GitHub.