发布

  • v1261 eb996294fb

    feat(adr-118/p1.3): Sink marker traits + PrivacyClass::try_from (17/17 GREEN)

    frostbyte_neo 发布于 2026-05-24 17:43:05 +00:00

    Iter 3. Lands the structural enforcement of ADR-118 invariant I1
    ("raw BFI never exits the node") and ADR-120 §2.2 ("Sink marker types").

    Added:

    • src/sink.rs:
      • Sink trait with MIN_CLASS and KIND associated constants
      • LocalSink (Raw OK), NetworkSink (Derived+ only), MatterSink (Anonymous+)
      • Hierarchy: MatterSink: NetworkSink (every Matter sink is a NetworkSink)
      • check_class(class) runtime gate, returns PrivacyViolation{reason:KIND}
      • Zero-sized kind tags: LocalKind / NetworkKind / MatterKind
    • PrivacyClass::as_u8() const helper
    • TryFrom for PrivacyClass (0..=3 valid; 4..=255 → InvalidPrivacyClass)
    • BfldError::InvalidPrivacyClass(u8) variant

    tests/sink_enforcement.rs adds 8 tests:
    privacy_class_try_from_accepts_all_four_valid_bytes
    privacy_class_try_from_rejects_out_of_range_bytes
    privacy_class_byte_roundtrip_is_stable
    local_sink_accepts_all_classes
    network_sink_rejects_raw_frames
    network_sink_accepts_derived_anonymous_restricted
    matter_sink_rejects_raw_and_derived
    matter_sink_accepts_anonymous_and_restricted

    Out of scope (next iter):

    • BfldFrame (header + payload + section length-prefixes + CRC32 over payload)
      — needs the crc crate dependency.
    • PrivacyGate::demote(frame, target_class) transformer (ADR-120 §2.4).
    • compile-fail test that proves a sink-trait bound rejects Raw at compile
      time — needs trybuild integration; deferred to a separate iter.

    cargo test -p wifi-densepose-bfld --no-default-features → 17 passed, 0 failed
    (3 frame_header_size + 6 header_roundtrip + 8 sink_enforcement)

    Co-Authored-By: claude-flow ruv@ruv.net

    下载附件