v3/docs/adr/ADR-359-swarm-inverse-wisdom-dissent-mechanism.md
Status: Proposed
Authors: claude (dream-cycle agent, 2026-07-04)
Dream Cycle Issue: #2559
Related: ADR-026 (3-tier model routing), CLAUDE.md swarm configuration
The 2026 paper Inverse-Wisdom Law (Shehata & Li, arXiv:2604.27274) provides a formal mathematical proof with empirical confirmation (Grade A) that adding agents to a consensus swarm statistically increases the probability of erroneous consensus rather than reducing it. The mechanism: once a plurality of agents commit to a wrong trajectory, majority voting amplifies that trajectory with each additional agent, making correction progressively harder.
Ruflo's current swarm coordinator uses Raft consensus (leader-based majority voting) with a soft maxAgents: 8 default. There is no dissent preservation channel — when the majority votes one way, minority positions are silently dropped.
A companion finding (arXiv:2605.10698, "Bystander Effect in LLM Swarms") independently confirms that dissent suppression is the failure mode, not the agent count per se. The fix is architectural: expose a minority-opinion channel, not merely cap the agent count.
Add a dissent channel to the Ruflo swarm coordinator:
dissent_threshold parameter (default: floor(N/4), minimum 2): when this many or more agents vote against the majority conclusion, the coordinator surfaces a dissent field in the swarm result alongside the consensus field rather than suppressing the minority position.
dissent_weight parameter (default: 0.0, range 0.0–1.0): controls how much the dissenting position influences the final merged output. At 0.0, dissent is logged only. At 1.0, dissent is blended equally with consensus.
Dissent metadata: each dissent record includes the count of dissenting agents, their IDs, and a summarised position.
max_agents formal cap (default: 8, hard maximum: 12): backed by the Inverse-Wisdom Law finding. Values >12 are rejected at configuration validation time with an explanatory error referencing this ADR.
v3/@claude-flow/cli/src/swarm/coordinator.ts — add dissent_threshold, dissent_weight, enforce max_agents hard capv3/@claude-flow/cli/src/swarm/consensus.ts — add dissent extraction before majority resolutionv3/@claude-flow/cli/src/swarm/types.ts — add SwarmDissent type to SwarmResultEstimated effort: 1 sprint (3-4 days).
max_agents cap prevents pathological swarm sizes that provably degrade correctnessdissent_weight > 0 requires a merge step that may produce incoherent blended outputs if not carefully prompteddissent field in swarm results to avoid ignoring itdissent_weight: 0.0 makes this a non-breaking change — existing callers see a new field but behaviour is unchanged unless they opt inSimply cap max_agents at 4: Addresses the Inverse-Wisdom Law quantitatively but loses the parallelism benefit of larger swarms. Dissent channel preserves parallelism while fixing the silencing problem.
Use adversarial subagents: Spawning a dedicated "devil's advocate" agent is more expensive and architecturally complex. The dissent channel extracts minority positions from agents already running.
No action: The Inverse-Wisdom Law is a Grade A formal result. Ignoring it means Ruflo's 8-agent default provably degrades consensus quality on misaligned tasks.