Summary
Create new crates/zeph-common/ utility crate and consolidate the three independent truncate_to_bytes implementations.
Current duplicates
zeph-mcp/src/sanitize.rs — returns String
zeph-memory/src/sqlite/preferences.rs — returns &str
zeph-memory/src/graph/resolver.rs — returns &str
Acceptance criteria
truncate_to_bytes exists only in zeph-common::text; all 3 callers import from there
zeph-common has no zeph-* dependencies (pure utility, no business logic)
- All existing tests pass
Part of EPIC-01 (Shared Utilities Crate)