From 8ca04f93bccf3c84dbfb084c7b7b147f891c698a Mon Sep 17 00:00:00 2001 From: Draco Whitefire Date: Tue, 20 Oct 2026 21:21:17 +0200 Subject: [PATCH] Clean up design principles --- src/principles.md | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/principles.md b/src/principles.md index 2d51d23..33a4265 100644 --- a/src/principles.md +++ b/src/principles.md @@ -1,12 +1,16 @@ # Principles -- **Hardware behind traits.** SCDC transport and PHY control are injected, so all protocol - logic is testable without hardware. +- **Policy at the right layer.** Parsing layers make no judgements. The negotiation layer is + explicitly opinionated but configurable. Hardware layers implement specification, not policy. +- **Modular: pick, combine, replace.** Every layer can be used on its own, combined with + the others, or replaced by an implementation of the trait the layer above defines +- **Extensible without forking.** Every library in the stack is designed to be customized + and configured without modifying its source. - **Diagnostics are first-class.** Structured reasoning traces and typed warnings instead of logs. Rejected candidates are explained; nothing fails silently. -- **Spec-complete, judgment-free lower layers.** Parsing and protocol crates implement the - spec in full; policy lives in the negotiation layer, and you can override it. - **`no_std` where it matters**, async companions where they help. +- **Hardware behind traits.** SCDC transport and PHY control are injected, so all protocol + logic is testable without hardware. - **No unsafe code.** `#![forbid(unsafe_code)]` across the stack. - **Stable output types.** Consumer-facing structs are `#[non_exhaustive]`, so new fields do not break you.