# ADR-057: Federated RVF Format for Real-Time Transfer Learning **Status**: Proposed **Date**: 2026-02-26 **Authors**: ruv.io, RuVector Architecture Team **Deciders**: Architecture Review Board **SDK**: Claude-Flow **Supersedes**: None **Related**: ADR-029 (RVF Canonical Format), ADR-030 (Cognitive Containers), ADR-056 (Knowledge Export) ## Context ### The Federation Problem RuVector users independently develop modules and crates, each accumulating valuable learning patterns: SONA weight trajectories, policy kernel configurations, domain expansion priors, HNSW tuning parameters, and convergence data. Today, this learning is siloed. User A discovers that a specific LoRA rank and EWC lambda combination works well for code review tasks, but User B must rediscover this independently. The existing infrastructure already supports local federated learning within a single deployment: 1. **SONA `FederatedCoordinator`** (`crates/sona/src/training/federated.rs`) aggregates `AgentExport` from `EphemeralAgent` instances, replaying trajectories above a quality threshold into a master engine. Supports `Star`, `Hierarchical`, and `PeerToPeer` topologies. 2. **Domain Expansion Engine** (`crates/ruvector-domain-expansion/`) implements cross-domain transfer via `MetaThompsonEngine` with `TransferPrior` (compact Beta posteriors), `PolicyKernel` (population-based policy search), and `CostCurve` (acceleration scoreboard). The `rvf_bridge` module already serializes these into RVF segments `0x30`, `0x31`, `0x32`. 3. **RVF Format** (`crates/rvf/`) provides 25 segment types with 64-byte headers, SHAKE-256 hashing, Ed25519 signing, WITNESS_SEG audit trails, and forward-compatible unknown-segment passthrough. Segments `TransferPrior (0x30)`, `PolicyKernel (0x31)`, and `CostCurve (0x32)` already exist. 4. **Google Cloud example** (`examples/google-cloud/`) demonstrates Cloud Run deployment with axum HTTP server, GPU benchmarking, and self-learning models. What is missing is the **inter-user federation layer**: the ability to strip PII, package transferable learning as RVF segments, publish them to a shared registry, and merge incoming learning with differential privacy guarantees. ### Why Now - The RVF segment model is stable with 25 types and a clear allocation map - The `rvf_bridge` proves that `TransferPrior`/`PolicyKernel`/`CostCurve` round-trip cleanly through RVF segments - SONA's `FederatedCoordinator` demonstrates that trajectory aggregation with quality gating works - The Google Cloud example provides the deployment foundation - Users are building domain-specific crates and would benefit from shared learning ### Design Principles 1. **Optional**: Core RuVector works without federation. All new crates are feature-gated. 2. **Privacy-First**: PII stripping happens before any data leaves the local system. Differential privacy noise is injected at the export boundary. 3. **RVF-Native**: Learning is exchanged as RVF segments, not custom wire formats. Unknown segments pass through unchanged. 4. **Cryptographically Verifiable**: Every export carries a WITNESS_SEG chain and Ed25519/ML-DSA-65 signatures. 5. **Incremental**: Users can share only what they choose. No all-or-nothing. ## Decision ### 1. New Segment Types Add four new segment types to the `0x33-0x36` range in `rvf-types`: | Code | Name | Purpose | |------|------|---------| | `0x33` | `FederatedManifest` | Describes a federated learning export: contributor pseudonym, export timestamp, included segment IDs, privacy budget spent, format version | | `0x34` | `DiffPrivacyProof` | Differential privacy attestation: epsilon/delta values, noise mechanism used, sensitivity bounds, clipping parameters | | `0x35` | `RedactionLog` | PII stripping attestation: which fields were redacted, which rules fired, hash of pre-redaction content (for audit without revealing content) | | `0x36` | `AggregateWeights` | Federated-averaged SONA weights: aggregated LoRA deltas, participation count, round number, convergence metrics | The existing `TransferPrior (0x30)`, `PolicyKernel (0x31)`, `CostCurve (0x32)`, `Witness (0x0A)`, `Crypto (0x0C)`, and `Meta (0x07)` segments are reused as-is. ### 2. New Crates Nine new crates (seven within `crates/rvf/`, two interface crates): | Crate | Path | no_std | Purpose | |-------|------|--------|---------| | `rvf-federation` | `crates/rvf/rvf-federation` | no (std-only) | Core federation protocol: export builder, import merger, version-aware conflict resolution, selective sharing | | `rvf-pii-strip` | `crates/rvf/rvf-pii-strip` | core: yes, full: no | PII detection and stripping pipeline: regex patterns, path normalization, credential detection, configurable rules, REDACTION_LOG segment generation | | `rvf-diff-privacy` | `crates/rvf/rvf-diff-privacy` | core: yes, full: no | Differential privacy primitives: Gaussian/Laplace mechanisms, privacy accountant (RDP), gradient clipping, per-parameter noise calibration | | `rvf-gcloud` | `crates/rvf/rvf-gcloud` | no (std-only) | Google Cloud integration: Pub/Sub publisher/subscriber, GCS object store, Firestore metadata registry, Cloud IAM auth | | `rvf-fed-aggregate` | `crates/rvf/rvf-fed-aggregate` | no (std-only) | Federated aggregation server: FedAvg, FedProx, weighted averaging, Byzantine-tolerant aggregation, round management | | `rvf-fed-wasm` | `crates/rvf/rvf-fed-wasm` | no (wasm32) | WASM-compatible export path: browser-side PII stripping and export packaging | | `mcp-federation` | `crates/mcp-federation` | no (std-only) | MCP server for AI agent access: 6 tools + 4 resources over JSON-RPC 2.0 stdio | | `rvf-fed-server` | `crates/rvf/rvf-fed-server` | no (std-only) | REST API server (axum): export/import/aggregate endpoints, SSE events, Prometheus metrics | | `rvf-adapters/federation` | `crates/rvf/rvf-adapters/federation` | no (std-only) | Adapter connecting SONA's `FederatedCoordinator` and domain expansion's `MetaThompsonEngine` to the federation protocol | ### 3. PII Stripping Pipeline The `rvf-pii-strip` crate implements a three-stage pipeline: **Stage 1: Detection** -- Scan all string fields in RVF segment payloads for PII patterns: - File paths (`/home/user/...`, `C:\Users\...`) - IP addresses (IPv4, IPv6, loopback) - Email addresses - API keys (common patterns: `sk-...`, `AKIA...`, `ghp_...`, Bearer tokens) - Usernames and hostnames - Environment variable references (`$HOME`, `%USERPROFILE%`) - Custom regex rules from configuration **Stage 2: Redaction** -- Replace detected PII with deterministic pseudonyms: - Paths become `` where N is a per-export incrementing counter - IPs become `` - Keys become `` - Usernames become `` - Preserves structural relationships (same path always maps to same pseudonym within one export) **Stage 3: Attestation** -- Generate a `RedactionLog (0x35)` segment containing: - Count of each redaction type - SHAKE-256 hash of the pre-redaction content (proves content was scanned without revealing it) - Rules that fired - Timestamp ### 4. Differential Privacy The `rvf-diff-privacy` crate provides mathematical privacy guarantees: - **Gradient Clipping**: Before aggregation, clip per-user gradient norms to bound sensitivity - **Noise Injection**: Add calibrated Gaussian noise (for (epsilon, delta)-DP) to aggregated weights - **Privacy Accountant**: Track cumulative privacy loss using Renyi Differential Privacy (RDP) composition - **Per-Export Budget**: Each federated export consumes a portion of the user's privacy budget. The `DiffPrivacyProof (0x34)` segment records the spent budget. - **Configurable Epsilon**: Users set their comfort level. Default: epsilon=1.0, delta=1e-5 (strong privacy) ### 5. Google Cloud Architecture The `rvf-gcloud` crate integrates with Google Cloud Platform: **Pub/Sub**: Real-time learning event propagation - Topic: `ruvector-federation-events` - Messages: serialized `FederatedManifest` headers (small, <1KB) - Subscribers filter by domain, version, and contributor reputation **Cloud Storage (GCS)**: RVF file exchange - Bucket: `ruvector-federation-{region}` - Object naming: `{domain}/{version}/{contributor_pseudonym}/{timestamp}.rvf` - Lifecycle: auto-archive after 90 days, delete after 365 days - Server-side encryption with CMEK **Firestore**: Metadata registry - Collection: `federation_manifests` - Documents: manifest metadata, contributor reputation scores, merge history - Real-time listeners for new contribution notifications **Cloud Run**: Aggregation service - Extends the existing `examples/google-cloud/` server - New endpoints: `POST /federation/submit`, `GET /federation/pull`, `POST /federation/aggregate` - Rate limiting: 100 submissions/hour per contributor - IAM-based access control ### 6. Transfer Learning Protocol **Export Flow**: 1. User triggers export (CLI: `rvf federation export --domain --epsilon 1.0`) 2. `rvf-adapters/federation` extracts `TransferPrior`, `PolicyKernel`, `CostCurve`, and SONA weights from local engines 3. `rvf-pii-strip` scans and redacts all payloads, generating `RedactionLog` segment 4. `rvf-diff-privacy` adds calibrated noise to numerical parameters, generating `DiffPrivacyProof` segment 5. `rvf-federation` assembles the export: `FederatedManifest` + learning segments + `RedactionLog` + `DiffPrivacyProof` + `Witness` chain + `Crypto` signature 6. `rvf-gcloud` uploads to GCS and publishes notification to Pub/Sub **Import Flow**: 1. User subscribes to federation updates (CLI: `rvf federation subscribe --domains `) 2. `rvf-gcloud` receives Pub/Sub notification, downloads RVF file from GCS 3. `rvf-federation` validates: signature check, witness chain verification, privacy proof verification, version compatibility check 4. `rvf-federation` merges: version-aware prior dampening (same sqrt-scaling as `MetaThompsonEngine::init_domain_with_transfer`), conflict resolution for competing patterns 5. `rvf-adapters/federation` imports merged learning into local SONA and domain expansion engines **Federated Averaging**: 1. Aggregation server collects N exports for a given domain/version 2. `rvf-fed-aggregate` computes weighted average (weight = contributor reputation * trajectory count * quality score) 3. Byzantine tolerance: exclude outliers beyond 2 standard deviations from the mean 4. Generate aggregate `AggregateWeights (0x36)` segment 5. Publish aggregate back to GCS for all subscribers ### 7. Version-Aware Merging Learning from different RVF versions must be handled: - **Same version**: Direct merge using federated averaging - **Newer to older**: Newer learning carries a version tag; older clients skip segments they cannot parse (RVF forward compatibility) - **Older to newer**: Accepted with dampened confidence (lower weight in averaging) - **Conflict resolution**: When two priors disagree on a bucket/arm, merge using `BetaParams::merge()` (sum parameters minus uniform prior) ### 8. MCP Server Interface A dedicated `mcp-federation` crate provides AI agent access to federation through MCP (JSON-RPC 2.0 over stdio), following the same pattern as the existing `mcp-gate` crate: | Tool | Purpose | |------|---------| | `federation_export` | Extract learning, strip PII, apply DP noise, sign, and upload | | `federation_import` | Pull, validate, and merge federated learning into local engines | | `federation_status` | Read privacy budget, recent activity, contributor reputation | | `federation_search` | Query the registry for available learning by domain/quality | | `federation_budget` | Check remaining privacy budget and export history | | `federation_aggregate` | Trigger server-side aggregation round | Resources (read-only): `federation://domains`, `federation://contributors`, `federation://rounds/{id}`, `federation://budget` Registration: `claude mcp add mcp-federation -- cargo run -p mcp-federation` ### 9. REST API Interface The `rvf-fed-server` crate provides a REST API (axum-based, deployed on Cloud Run) for programmatic access: - **Export/Import**: `POST /v1/exports`, `GET /v1/exports/{id}`, `DELETE /v1/exports/{id}` - **Aggregation**: `POST /v1/aggregates`, `GET /v1/aggregates/{round_id}`, `GET /v1/aggregates/latest` - **Registry**: `GET /v1/domains`, `GET /v1/contributors/{pseudonym}`, `GET /v1/contributors/{pseudonym}/budget` - **Events**: `GET /v1/events?domain=X` (Server-Sent Events for real-time notifications) - **Health**: `GET /v1/health`, `GET /v1/metrics` (Prometheus) Authentication: API key (Bearer token) or Ed25519 signed requests. Rate-limited per contributor. SDKs: Rust (`rvf_federation::client::FederationClient`) and TypeScript (`@ruvector/rvf-federation`). ### 10. Selective Sharing Users control what they share via a `FederationPolicy`: - **Allowlist/Denylist**: Specific segment types or domains to include/exclude - **Quality Gate**: Only export learning from trajectories above a quality threshold (reuses SONA's `quality_threshold`) - **Minimum Evidence**: Only export priors with sufficient observations (reuses `TransferPrior::extract_summary()`'s >12 observation filter) - **Rate Limit**: Maximum exports per time period - **Privacy Budget**: Cumulative epsilon limit before exports are blocked ## Consequences ### Benefits 1. **Knowledge acceleration**: New users bootstrap from community learning instead of starting cold 2. **Privacy-preserving**: PII stripping + differential privacy ensure no sensitive data leaks 3. **RVF-native**: No new wire formats; everything is standard RVF segments 4. **Cryptographically auditable**: Witness chains prove provenance without revealing content 5. **Incremental adoption**: Feature-gated, optional, selective sharing 6. **Cloud-native**: Google Cloud Pub/Sub + GCS + Firestore provide scalable infrastructure 7. **WASM-compatible**: Browser-based exports via `rvf-fed-wasm` 8. **MCP-integrated**: AI agents access federation through standard MCP tools (JSON-RPC 2.0) 9. **API-first**: REST API with SSE events for programmatic access, Rust and TypeScript SDKs ### Risks | Risk | Severity | Mitigation | |------|----------|------------| | Poisoning attacks (malicious learning) | High | Byzantine-tolerant aggregation, reputation system, signature verification | | Privacy budget exhaustion | Medium | Configurable epsilon, budget tracking per-export, admin alerts at 80% budget | | Version skew causing merge failures | Medium | RVF forward compatibility, version-tagged manifests, graceful skip of unknown segments | | GCS cost escalation | Low | Lifecycle policies, per-contributor quotas, compression (ZSTD segment compression) | | Latency of federated averaging | Low | Async aggregation, Pub/Sub decoupling, local-first operation | | Regulatory compliance (GDPR, CCPA) | High | PII stripping attestation, data retention policies, right-to-deletion via contributor pseudonym revocation | ### Segment Allocation Map (Updated) ``` 0x00 Invalid 0x01-0x0F Core segments (Vec, Index, Overlay, Journal, Manifest, Quant, Meta, Hot, Sketch, Witness, Profile, Crypto, MetaIdx, Kernel, Ebpf) 0x10-0x11 Extension segments (Wasm, Dashboard) 0x12-0x1F RESERVED (12 slots available) 0x20-0x23 Storage segments (CowMap, Refcount, Membership, Delta) 0x24-0x2F RESERVED (12 slots available) 0x30-0x32 Domain expansion (TransferPrior, PolicyKernel, CostCurve) 0x33-0x36 Federation (FederatedManifest, DiffPrivacyProof, RedactionLog, AggregateWeights) <-- NEW 0x37-0xEF RESERVED (future use) 0xF0-0xFF RESERVED (system) ``` ## Compliance - **GDPR Article 25**: Privacy by design -- PII stripping is mandatory before export, not optional - **GDPR Article 17**: Right to erasure -- contributor pseudonym revocation removes all associated exports from GCS - **CCPA Section 1798.105**: Deletion requests honored via pseudonym revocation - **NIST SP 800-188**: De-identification via differential privacy with formal epsilon guarantees ## References - McMahan et al., "Communication-Efficient Learning of Deep Networks from Decentralized Data" (FedAvg) - Abadi et al., "Deep Learning with Differential Privacy" (DP-SGD) - Mironov, "Renyi Differential Privacy" (RDP composition) - Blanchard et al., "Machine Learning with Adversaries: Byzantine Tolerant Gradient Descent" (Byzantine tolerance) - RVF Format Specification (ADR-029) - SONA Architecture (crates/sona) - Domain Expansion Engine (crates/ruvector-domain-expansion)