Contributor guide¶
The domain crate is storage- and framework-neutral. SQLite implements domain-shaped contracts, filesystem inspection lives in the media crate, and the CLI and public C ABI are adapters. Rust layouts and backend handles never cross the ABI.
A change to schema, public API, ABI, or domain meaning must include:
an updated or new architecture decision record;
a standards-impact check;
domain and audience-appropriate documentation;
persistence changes and fixtures where relevant;
coordinated Rust, C, C++, Python, and example updates for affected surfaces;
invariant-focused tests and fuzzing where relevant;
a changelog entry.
Use explicit SQL rather than an ORM, preserve unknown external data, keep transactions atomic, and make corruption return errors rather than panics.