Part of #11
Steps
Step 33. The symbolic layer: rules over braid events.
Create crates/braid/src/rules.rs — pure, no I/O, no clocks:
pub enum EventPattern { MissionClosed { outcome: String }, PromotionRolledBack, Quarantined, DriftAbove { threshold: f32 } }
pub enum BraidAction { LowerCoupling { factor: f32 }, RequestTraining, RollBackGeneration, EnterObserveOnly, RequestSafeStop }
pub struct Rule { pub when: EventPattern, pub then: BraidAction }
pub fn default_rules() -> Vec<Rule>;
pub fn evaluate(event: &BraidEvent, rules: &[Rule]) -> Vec<BraidAction>;
default_rules() returns, in order: MissionClosed { outcome: "failed" } → LowerCoupling { factor: 0.90 },
PromotionRolledBack → EnterObserveOnly, Quarantined → RequestTraining (the quarantine is a reason
to learn from what survived), DriftAbove { threshold: 3.0 } → EnterObserveOnly. Rules are data, so a
later rule set is a new vector, not a code change.
Test written first
default_rules_are_ordered_and_pure
Commands
cargo test -p qualia-braid
Evidence
pending
Journal
the-ladder
Blocked by
Definition of done (2026-09-11)
- the package builds and its tests pass on the dev host (
cargo build -p <pkg> && cargo test -p <pkg>);
- the artifact is built for the robot (aarch64) and exercised on Pinkie, the Waveshare-carried
Jetson Orin NX at jetson@192.168.55.1 (see docs/decisions.md D-010), by this ticket's own smoke
path or command;
- the handoff comment quotes the build/deploy command and the output observed on the board;
- a host-only package that cannot run there (the macOS
metal backend) records the aarch64 build as
its board evidence and states why execution on the board is impossible.
Part of #11
Steps
Step 33. The symbolic layer: rules over braid events.
Create
crates/braid/src/rules.rs— pure, no I/O, no clocks:default_rules()returns, in order:MissionClosed { outcome: "failed" } → LowerCoupling { factor: 0.90 },PromotionRolledBack → EnterObserveOnly,Quarantined → RequestTraining(the quarantine is a reasonto learn from what survived),
DriftAbove { threshold: 3.0 } → EnterObserveOnly. Rules are data, so alater rule set is a new vector, not a code change.
Test written first
default_rules_are_ordered_and_pureCommands
cargo test -p qualia-braidEvidence
pending
Journal
the-ladder
Blocked by
Definition of done (2026-09-11)
cargo build -p <pkg> && cargo test -p <pkg>);Jetson Orin NX at
jetson@192.168.55.1(seedocs/decisions.mdD-010), by this ticket's own smokepath or command;
metalbackend) records the aarch64 build asits board evidence and states why execution on the board is impossible.