peat-schema
Protocol Buffer message definitions for the Capability Aggregation Protocol (CAP).
Overview
This crate provides schema-first message definitions that enable:
- Multi-transport support: HTTP, gRPC, ROS2, WebSocket, MQTT
- Multi-language integration: Rust, Python, Java, C++, JavaScript
- Schema versioning: Backward compatibility guarantees
- Code generation: Automatic bindings for all supported languages
Quick Reference
📖 Complete Schema Reference - Detailed documentation for all 8 protobuf schemas
Message Packages
Core Types (1 schema)
cap.common.v1 - Common types used across all messages
Position,Timestamp,Uuid,Metadata
Entity Schemas (2 schemas)
cap.capability.v1 - Capability definitions and queries
Capability,CapabilityType,CapabilityQuery,CapabilityResponse
cap.node.v1 - Node configuration and state
NodeConfig,NodeState,NodeOperator,HumanMachinePair- Enums:
Phase,HealthStatus,OperatorRank,AuthorityLevel,BindingType
Organization Schemas (3 schemas)
cap.cell.v1 - Cell (squad) formation and management
CellConfig,CellState,CellCellFormationRequest/Response,CellMembershipChange
cap.zone.v1 - Zone (hierarchy) coordination
ZoneConfig,ZoneState,Zone,ZoneStatsZoneFormationRequest/Response,ZoneMembershipChange
cap.role.v1 - Tactical role assignments
RoleCapabilities,RoleAssignment,RoleScoringFactorsRoleAssignmentRequest/Response,RoleChangeEvent- Enum:
CellRole(LEADER, SENSOR, COMPUTE, RELAY, STRIKE, SUPPORT, FOLLOWER)
Protocol Schemas (2 schemas)
cap.beacon.v1 - Discovery phase beacons
Beacon,BeaconQuery,BeaconQueryResponse,BeaconRecord
cap.composition.v1 - Capability composition rules
CompositionRule,CompositionResultApplyCompositionRequest/Response- Enum:
CompositionRuleType(ADDITIVE, EMERGENT, REDUNDANT, CONSTRAINT)
Usage
Rust
use ;
use ;
// Create a node configuration
let config = NodeConfig ;
// Create a node state
let state = NodeState ;
Python
# Create a node configuration
=
# Create a node state
=
Java
;
;
;
// Create a node configuration
NodeConfig config ;
// Create a node state
NodeState state ;
Schema Versioning Strategy
Version Numbering
- Schemas use semantic versioning via package namespaces (e.g.,
cap.node.v1,cap.node.v2) - Major version changes (v1 → v2) indicate breaking changes
- Minor changes within a version are backward compatible
Backward Compatibility Rules
- Never remove fields: Mark as deprecated instead
- Never change field numbers: Field numbers are immutable
- Never change field types: Create a new field if type must change
- Always provide default values: For optional fields
- Additive changes only: New fields must be optional
Deprecation Process
When a field needs to be deprecated:
message NodeConfig {
string id = 1;
string platform_type = 2;
// DEPRECATED: Use `capabilities_v2` instead
repeated Capability capabilities = 3 [deprecated = true];
// New field with improved design
repeated CapabilityV2 capabilities_v2 = 4;
}
Version Migration
When creating a new major version:
- Create new package namespace (e.g.,
cap.node.v2) - Copy existing messages to new namespace
- Make breaking changes in new namespace
- Provide migration utilities in Rust code
- Support both versions during transition period (minimum 6 months)
- Deprecate old version after transition period
Example migration utility:
Compatibility Testing
All schema changes must pass:
- Forward compatibility: New clients can read old messages
- Backward compatibility: Old clients can read new messages
- Round-trip serialization:
serialize(deserialize(msg)) == msg
Validation
The crate provides validation utilities in validation.rs:
use ;
let cap = Capability ;
validate_capability?; // Returns ValidationError if invalid
Validation checks:
- Confidence scores are in range [0.0, 1.0]
- Required fields are present
- Semantic constraints are satisfied (e.g., min_size ≤ max_size)
- CRDT invariants are maintained
Ontology
The crate includes a domain ontology in ontology.rs:
use build_cap_ontology;
let ontology = build_cap_ontology;
// Check if UAV is a subtype of platform
assert!; // true
// Get all capability concepts
let capabilities = ontology.concepts_by_category;
The ontology defines:
- Domain concepts (entities, organizations, capabilities, processes, roles)
- Semantic relationships (is-a, related-to)
- Concept properties and metadata
Building
Requirements
- Rust 1.70+
- Protocol Buffer compiler (
protoc)
Install protoc:
# macOS
# Ubuntu/Debian
# From source
# See https://github.com/protocolbuffers/protobuf/releases
Build
The build script (build.rs) automatically generates Rust code from .proto files using prost.
Test
Code Generation for Other Languages
Python
# Install protoc Python plugin
# Generate Python code
Java
# Install protoc Java plugin
# https://github.com/grpc/grpc-java
# Generate Java code
C++
# Generate C++ code
JavaScript/TypeScript
# Install protoc JavaScript plugin
# Generate TypeScript code
Documentation
- Protobuf Language Guide: https://protobuf.dev/programming-guides/proto3/
- prost Documentation: https://docs.rs/prost/
- tonic Documentation: https://docs.rs/tonic/
License
MIT
References
- ADR-012: Schema Definition and Protocol Extensibility
- Peat Protocol Documentation:
/docs - Protobuf Style Guide: https://protobuf.dev/programming-guides/style/