systemprompt-events 0.0.14

Events module for systemprompt.io - event broadcasting and routing
Documentation
# systemprompt-events Compliance

**Layer:** Infrastructure
**Reviewed:** 2026-01-21
**Verdict:** COMPLIANT

---

## Checklist

| Category | Status |
|----------|--------|
| Boundary Rules ||
| Required Structure ||
| Code Quality ||

---

## Violations

None

---

## Commands Run

```
cargo clippy -p systemprompt-events -- -D warnings  # PASS
cargo fmt -p systemprompt-events -- --check          # PASS
```

---

## Actions Required

None - fully compliant

---

## Review Details

### Section 1: Limits (rust.md §1)

| Metric | Limit | Actual | Status |
|--------|-------|--------|--------|
| Source file length | 300 lines | lib.rs:27, broadcaster.rs:191, mod.rs:10, routing.rs:51 ||
| Cognitive complexity | 15 | All functions low complexity ||
| Function length | 75 lines | Largest: `broadcast()` ~44 lines ||
| Parameters | 5 | Max 3 (`register`) ||

### Section 2: Forbidden Constructs (rust.md §2)

| Construct | Status |
|-----------|--------|
| `unsafe` | ✅ None |
| `unwrap()` | ✅ None |
| `panic!()` / `todo!()` / `unimplemented!()` | ✅ None |
| Inline comments (`//`) | ✅ None |
| Doc comments (`///`, `//!`) | ✅ None |
| TODO/FIXME/HACK | ✅ None |
| Tests in source files | ✅ Moved to `crates/tests/unit/infra/events/` |

### Section 3: Mandatory Patterns (rust.md §3)

| Pattern | Status |
|---------|--------|
| Typed identifiers | ✅ Uses `UserId` from systemprompt_identifiers |
| Logging via tracing | ✅ Uses `tracing::error!`, `tracing::debug!` |
| Repository pattern | N/A (no SQL) |
| Error handling | ✅ Graceful error handling with early return |

### Section 4: Naming (rust.md §4)

| Check | Status |
|-------|--------|
| Function prefixes | ✅ Follows conventions |
| Abbreviations | ✅ Uses allowed abbreviations (A2A, ctx) |

### Section 5: Anti-Patterns (rust.md §5)

| Anti-Pattern | Status |
|--------------|--------|
| Raw string identifiers | ✅ Uses typed UserId |
| Magic numbers/strings | ✅ Uses constants (HEARTBEAT_JSON, HEARTBEAT_INTERVAL) |
| `unwrap_or_default()` | ✅ None in production code |
| Orphan tracing calls | ✅ Uses structured logging with context |
| Unused code / dead code | ✅ Removed unused `EventBus` trait |

### Files Changed (This Review)

| File | Change |
|------|--------|
| `src/lib.rs` | Removed dead `EventBus` trait (24 lines) |
| `src/services/broadcaster.rs:70` | Removed inline comment from `#[allow]` attribute |
| `src/services/broadcaster.rs` | Removed `#[cfg(test)]` module (413 lines) |
| `src/services/routing.rs` | Removed `#[cfg(test)]` module (260 lines) |

### Tests Relocated

Tests moved to `crates/tests/unit/infra/events/`:
- `src/broadcaster.rs` - 35 test functions
- `src/routing.rs` - 18 test functions