# serde-error-thiserror ## AUDIT (2026-01-31) Pattern: SerdeError in stemedb-core/src/serde.rs uses manual `impl fmt::Display` and `impl std::error::Error` instead of `#[derive(thiserror::Error)]` like all other error types. Found: 3 items to fix in 1 file (enum + Display impl + Error impl) All 5 other error types in the workspace use thiserror: - stemedb-storage/src/error.rs: StorageError - stemedb-api/src/error.rs: ApiError - stemedb-wal/src/error.rs: QuarantineError - stemedb-query/src/error.rs: QueryError - stemedb-ingest/src/error.rs: IngestError ## FIX (2026-01-31) - [x] crates/stemedb-core/src/serde.rs:52-69 - Replaced manual `impl fmt::Display` + `impl std::error::Error` with `#[derive(Debug, Error)]` and `#[error(...)]` attributes. Removed `use std::fmt`, added `use thiserror::Error`. ## VERIFY (2026-01-31) - grep for `impl fmt::Display for SerdeError`: 0 matches - grep for `impl std::error::Error for SerdeError`: 0 matches - grep for `#[derive.*Error.*]` on error enums: 6/6 use thiserror - cargo build: OK - cargo clippy: OK (0 warnings) - cargo test: 158 passed, 0 failed ## ENFORCE (2026-01-31) - Updated `ai-lookup/patterns/error-handling.md` with explicit rule: "NEVER use manual impl Display + impl Error — use thiserror derives" - Listed all 6 error types confirming compliance ## COMPLETE Before: 3 items (enum definition, Display impl, Error impl) After: 0 manual impls remaining