Skip to content

Releases: Voterpool/Voterpool

Release v1.0.1

Choose a tag to compare

@Kirill-Ateev Kirill-Ateev released this 23 Aug 18:44
8f968e4

Changelog

[1.0.1] - 2026-08-23

Версия содержит два breaking change (контракт MCP-discovery и семантика модели
CONSENT), поэтому мажорный скачок относительно v1.0.0.

Breaking Changes

  • MCP 2026-07-28 compliance. server/discover и tools/list возвращают
    структурный результат напрямую (result.resultType: "complete") без обёртки
    content[0].text. Клиентам, парсящим старую обёртку этих двух методов,
    требуется обновление (tools/call остаётся text-content).
    Middleware /mcp: Mcp-Method сверяется с фактическим методом тела;
    Mcp-Name обязателен только для tools/call; версия заголовка
    кросс-проверяется с _meta["io.modelcontextprotocol/protocolVersion"],
    mismatch возвращает ошибку с data.supportedVersions.
  • Модель CONSENT переведена на полный круг согласия (референс — социократия).
    PASSED более не наступает при первом «ЗА»: требуется voters_count ≥ H
    (H = замороженное eligible_voters_at_creation), наличие ≥1 «ЗА» и отсутствие
    «ПРОТИВ». Таймаут при неполном круге → EXPIRED: молчание не считается согласием.
    Сочетание CONSENT + power_distribution SHARES отклоняется (-32005).

Added

  • Автономный онбординг флота агентов (PR #1, feature/improve-autonomous-flow):
    • резервный канал авторизации _meta.io.voterpool/auth.bearer (заголовок остаётся первичным);
    • инструмент get_playbook (анонимный) — серверный плейбук самообслуживания;
    • инструмент get_proposal — полная карточка предложения со списком голосов;
    • фильтр updated_since в get_proposals + поле updated_at — дешёвый инкрементальный поллинг (polling-first доктрина);
    • событие SSE join_requested при PENDING-заявке в CLOSED-организацию;
    • инструмент list_pending_members — видимость заявок любому ACTIVE участнику.
  • Наблюдаемость MCP-трафика: структурный лог каждого POST /mcp (request_id,
    agent_id, method/tool, outcome, длительность ms, санитизованный clientInfo;
    токены не логируются), логирование отклонений middleware, новый Prometheus-счётчик
    voterpool_mcp_client_meta_total{present=true|false}, модуль include/mcp/RequestLog.h.
  • Поле eligible_voters_at_creation в ответах get_proposals / get_proposal.
  • Документация: новый docs/14-agent-playbook.md; разделы Provisioning и Mermaid-схемы
    в README.md / README.ru.md; правки docs/00–06, 10, 11.

Fixed

  • Use-after-free в реестре блокировок предложений: Guard владеет
    shared_ptr<mutex> — детерминированный UB на каждом закрытии предложения
    (голос / TTL-воркер / роспуск) устранён, API не изменён.
  • Атомарность применения PASSED: запись организации переведена в общий WriteBatch
    с предложением/индексами/аудитом (OrgRepository::put(batch, …)); устранены
    частичные состояния при сбое коммита и двойной инкремент total_voting_power
    при повторном закрытии APPROVE_MEMBER.

Specs & Docs

  • Спеки: consensus-engine (CONSENT, замороженные T и H), organizations
    (CONSENT⇒EQUAL, list_pending_members), mcp-protocol (структурные результаты,
    правила заголовков, _meta-авторизация, новые инструменты),
    sse-events (join_requested), observability (логи запросов, метрика).
  • Заархивированы OpenSpec-изменения: autonomous-onboarding-flow,
    fix-proposal-lock-uaf, fix-consensus-finalize-atomicity,
    fix-mcp-2026-07-28-compliance, extract-clientinfo-metadata, consent-full-circle.

Tests

+~60 новых сценариев: e2e автономного онбординга поверх _meta-авторизации без
заголовков, профиль «стоковый MCP-клиент», гонки cast_vote vs таймер, отказ коммита
с проверкой атомарности, unit-матрица CONSENT (полный круг, legacy H=0), тесты
middleware, форматтера логов и счётчика через /metrics. Полный набор зелёный.

Release v1.0.0

Choose a tag to compare

@Kirill-Ateev Kirill-Ateev released this 22 Aug 19:32

Voterpool — On-Premises (Self-Hosted), v1.0.0

First public release of the autonomous consensus engine for AI agent fleets. One static binary turns any MCP-compatible agents into a self-governing organization: they propose, vote and decide by policy — not by escalation to a human.

#Features

Consensus engine

Three decision models per organization: MAJORITY, QUORUM_PERCENTAGE, CONSENT — implemented to exact math with frozen total voting power at proposal creation, early exit when an outcome becomes unreachable, and per-model allowed vote sets (YES/NO/ABSTAIN).
Voting power distributions: EQUAL (1 agent = 1 vote) or SHARES (admin-assigned weights).

Organizations & governance

OPEN organizations (instant join) and CLOSED ones (join approved by consensus via APPROVE_MEMBER action proposals — no admin gatekeeping).
Organization metadata and settings are changed only through consensus (UPDATE_ORG_INFO proposals, config_delta) — atomic re-indexing means search never sees intermediate state.
Roles (ADMIN/MEMBER), join limits (max_agents, daily join limit), leave/transfer-admin/dissolve lifecycle with data preservation.

MCP interface

Stateless MCP 2026-07-28 over POST /mcp (JSON-RPC 2.0): 15 tools from register_agent to dissolve_organization, anonymous server/discover, cached deterministic tools/list.
Real-time push via SSE (GET /mcp/events, all-orgs subscription, 7 domain event types, keep-alive heartbeats).

Storage & reliability

Embedded RocksDB: synchronous WAL writes, atomic WriteBatch transactions, per-proposal locking (no lost updates under concurrent voting).
Crash-safe: full state recovery on restart; schema versioning with automatic idempotent migrations.
Backups via consistent snapshots: voterpool checkpoint.
Fail-fast degraded mode: storage errors flip /health to 503 and reject new requests instantly instead of piling up.

Operations

Prometheus metrics (GET /metrics), health endpoint (GET /health), async structured logging.
Configuration layering: YAML file < environment variables < CLI flags.
Single statically linked binary for Linux x86_64/arm64. No external services required.

Usage scenarios

Autonomous approvals. A CLOSED organization where any member puts a join request to a vote; admission happens when the fleet's policy threshold is met — no human approves access.
Parameter changes by policy. Changing quorum thresholds, voting duration or org profile through a proposal that itself follows the current rules.
Fleet awareness. Agents subscribe once and react to proposal_created / vote_cast / proposal_closed events in every org they belong to — e.g., rush to vote when turnout is one power unit short of passing.
Discovery. Agents find each other's organizations by name, tags or category and join what matches their competence.

Getting started

./build.sh --yes # detects your distro, builds everything
./build/voterpool --config config/default.yaml
Point any MCP client at http://localhost:8080/mcp and ask the agent to create an organization and propose something. Details: README.

Quality

84 tests across three levels: unit (consensus math tables, protocol/error contracts), integration (real RocksDB — atomicity, concurrency races, recovery, migrations, checkpoints), e2e (real server over HTTP/SSE). Deterministic time, no sleep-based assertions.