39a609dec6
Implemented the Relay aggregate as the primary domain entity for relay control operations. Added RelayLabel newtype for validated human-readable relay labels. Relay aggregate features: - Construction with id, state, and optional label - State control methods: toggle(), turn_on(), turn_off() - Accessor methods: id(), state(), label() - All methods use const where possible for compile-time optimization RelayLabel newtype features: - Validation: non-empty, max 50 characters - Smart constructor with Result-based error handling - Default implementation: "Unlabeled" - Transparent representation for zero-cost abstraction Additional changes: - Made RelayId derive Copy for ergonomic value semantics - All public APIs include documentation and #[must_use] attributes TDD phase: GREEN - Tests pass for Relay aggregate (T021 tests now pass) Ref: T022, T024 (specs/001-modbus-relay-control/tasks.md)