Most multi-agent systems settle a disagreement by taking a vote and throwing the losing position away. Deliberatic specifies the other option: positions are nodes in a graph, attacks and supports are edges in the formal tuple rather than conventions on top of it, acceptability is a degree that propagates until it converges, and a position that loses is kept — because being outvoted and being wrong are different facts. It is a document. Nothing on this domain executes any of it, and the page says so in every place it could be mistaken.
Deliberatic is a specification. So is this section — it compares one document against another, and neither of them is a running system.
Can disagreement be preserved and governed rather than averaged away?
R⁻) and support (R⁺) are edges in the formal tuple rather than conventions on top of it. Each round elects a Moderator — the highest-reputation agent that submitted no position — which is where turn governance lives.σ iterated to convergence — with a Raft-derived fast path when one position leads by more than τ and a PBFT-derived conflict path when it does not. The argument for that choice is further down this page, with its citation.trigger: "vindicated_dissents >= 3", which opens a constitutional amendment vote. Being outvoted and being wrong are kept as separate facts.human_impact == true → human_review == true — and a round in which every position is rejected escalates to human review over an A2A push notification. The paper's objection to routing a task to a human-backed agent is that it is routing rather than governance; a rule that fires on a property of the decision is the difference.The difference between an argumentation framework and a chat transcript is that one of them has edges. Deliberatic extends Dung's 1995 framework into a weighted bipolar system: every position carries an evidence weight and an author, every attack and every support is a directed edge, and acceptability is computed rather than declared.
Both expressions are quoted from the specification. Neither has been evaluated on a real graph by anything in this repository.
These are the arguments the specification is a response to. They are other people's findings, cited so you can disagree with them rather than with us.
Agents exchange natural-language opinions and opaque confidence scores. There is no structured way to compare, attack or support positions. When one agent says “87% confident” and another says “91%”, those numbers are unverifiable and incomparable.
If one agent is compromised, hallucinating or adversarial, no mechanism detects it. Most frameworks use majority voting, which Wu et al. showed cannot exceed the accuracy of the strongest single agent — and over-confident agents actively degrade team output.
Deployments in finance, healthcare and government require explainable decision chains. Current frameworks produce conversation logs, not verifiable evidence. When a regulator asks why the system decided what it decided, there is no proof.
Nothing here is novel for its own sake. Every layer maps onto established work in argumentation theory, distributed consensus or agent communication, and the reference is printed beside it so the derivation can be checked.
Weighted bipolar AF with graded semantics. Agent positions are nodes in a weighted bipolar argumentation graph. Attacks and supports form directed edges. Acceptability is computed by iterative propagation — σ(a) = w(a)·ρ(α(a), dom(a)) + Σ supports − Σ attacks — converging under contraction when γ⁺ + γ⁻ < 1. Degrees, not binary accept/reject.
Adaptive two-phase, Raft → PBFT. A clear winner — gap above τ=0.15 — takes the Raft fast path: leader proposes, majority quorum commits. A close call takes the PBFT conflict path: Pre-Prepare → Prepare → Commit with 3f+1 Byzantine tolerance, and new evidence is admissible during Prepare.
A normative DSL. Hard boundaries, whose violation is an instant rejection; soft preferences, which adjust acceptability by a stated delta; and amendment rules — three vindicated dissents open a constitutional review. A pre-commit validator checks every verdict against the constitution before it is emitted.
A2A and MCP, and neither is required. Deliberation rounds are A2A Tasks; positions are A2A Messages with structured Parts; verdicts emit as A2A Artifacts. It also specifies an MCP server with seven tools, and a raw JSON-RPC 2.0 / SSE binding for anything that speaks neither. Agent Cards advertise the deliberation/v1 skill.
Merkle evidence chains. Each round produces a tree — Hash(positions) → Hash(challenges) → Hash(constitutional checks) → Hash(verdict) — and the root is published with the verdict, so any party can recompute it, trace the reasoning and audit compliance. Export is specified as JSON, PDF and OTEL spans.
Domain-aware ELO, discounted for calibration. ρ_new(a,d) = ρ_old(a,d) + K_d·(S − E_d), bounded to [800, 2400]. A vindicated dissenter takes a 1.5× K bonus, scoped to the domain. Weighting uses ρ(α(a), dom(a)) discounted for poor calibration, so rhetorical certainty cannot dominate.
The timings below are the specification's declared latency budget, in §3.2. They are a design target and not a measurement — nothing has been built to measure. They are printed because a budget that is never stated is a budget that is never missed.
A task arrives over A2A. The engine opens a round with a topic, a constitution reference, a deadline of 30s and a quorum of 3. Every agent whose Agent Card advertises deliberation/v1 is invited. A Moderator is elected: the highest-reputation agent that submitted no position of its own.
Each agent submits a Position — a structured argument with typed evidence: performance, resource, latency, schema. Positions become wBAF nodes whose initial weight is evidence strength multiplied by domain-aware, calibration-adjusted reputation. Agents may challenge(), adding an attack edge, or support(), adding a support edge.
Iterative propagation of σ until the maximum change falls below ε=0.001 — the specification expects three to seven iterations. Every position ends with a continuous acceptability degree in [0,1] rather than a verdict.
The Constitution Interpreter checks every surviving position. A hard-boundary violation is an instant rejection; a soft preference adjusts acceptability by its stated delta. If every position is rejected, the round escalates to human review over an A2A push notification — that is the G5 mechanism, in the place it actually lives.
Gap above τ commits on the Raft fast path; a close call takes the PBFT conflict path with its new-evidence window. The winning position becomes the verdict, everything is hashed into the Merkle chain, dissents are recorded, reputations are updated, and the verdict is emitted as an A2A Artifact.
This is the interface the specification describes. There is no package that exports it — no npm install, no import that resolves. It is printed here because an interface nobody can read is an interface nobody can object to, and objections are the thing this page is asking for.
// Open a deliberation round over A2A const round = await deliberatic.open({ topic: "Which agent handles user onboarding?", constitution: "cluster://production-alpha", deadline: "30s", quorum: 3, transport: "a2a", // or "mcp", "http" consensus: "adaptive" // raft fast-path, pbft conflict-path }); // A position becomes a node in the wBAF graph await round.submit({ agent: "onboarding-specialist", position: { claim: "Domain context yields better accuracy on this task", evidence: [ { type: "performance", value: 0.94, n: 1847 }, { type: "resource", tokens: 1200, latency_ms: 340 } ] } }); // A challenge adds an attack edge — R⁻ in the tuple await round.challenge({ agent: "general-agent", target: "onboarding-specialist", grounds: "resource_efficiency" }); // Resolve: graded semantics, constitutional check, consensus const verdict = await round.resolve(); // { winner, acceptability, consensus_path, dissents, evidence_chain }
# Normative constraints for one agent cluster hard_boundaries: # violation is an instant rejection - rule: "token_budget <= task.allocated" - rule: "pii_access == false || consent.explicit" - rule: "irreversible → quorum >= supermajority" soft_preferences: # adjust σ(a) by a stated delta - rule: "minimize(resource_cost)" delta: 0.08 when: "task.stakes < 'medium'" consensus: fast_path: "raft" conflict_path: "pbft" escalation_threshold: 0.15 # τ: gap below this takes the conflict path dissent: record: true vindication_bonus: 1.5 # ELO K multiplier, domain-scoped amendment_trigger: 3 # vindications that open a review
The two are separate documents on purpose, and the boundary between them is the useful part. Both are at rung spec. Neither has an implementation, and a diagram that draws them as connected components would be drawing two things that do not exist and a wire that does not carry anything.
R⁻ is in the tupleThe rung is spec. A specification has nothing to run, so this page does not offer a button that pretends otherwise — that rule is enforced by the publication gate, which refuses to emit a page whose calls to action its rung has not earned.
spec.A waitlist button. It was wired to nothing: it changed its own label to “Added ✓” and discarded the address, under a note promising you could unsubscribe from a list that never existed. A control that reports success it did not achieve is worse than one that plainly does not work, so it is gone rather than repaired. There is no engine to download and no waitlist to join, and there is nowhere on this page that suggests otherwise.
Nothing here has run, so the most useful thing a visitor can send is a hole in the formalism — a quorum rule an adversary walks through, a semantics that does not do what §4 says it does, a number on this page you think is wrong.
This box is not that one. The retraction above is about a control that reported success it had not achieved. This is a plain <form action method="POST"> posting to formspree.io when you press Send, so it delivers with scripting switched off entirely; the script that upgrades it to an inline reply prints “sent” only after the endpoint returns a 2xx, and prints what went wrong otherwise. That is the whole difference and it is the only difference worth claiming. Ruled 2026-08-17: the same endpoint computedriven.com uses. It is not a list and there is still nothing to be added to.