Make a first change¶
- Read the concept and architecture page for the area being changed.
- Change the source contract first: protobuf for API shape, SQL query/schema for persistence, or IIIF domain code for annotation semantics.
- Add a failing test at the narrowest useful boundary.
- Implement the behavior.
- Run
make generatewhen protobuf or SQL sources changed. - Run the focused tests, then
make ci. - Update the relevant documentation and acceptance criterion.
Do not hand-edit generated files under internal/db, proto/scribe, or
web/src/proto. CI regenerates them and rejects drift.
For behavior involving saved OCR, test the complete invariant: save a canonical AnnotationPage, reload it from a new client session, dereference the advertised IIIF resource, and verify an export is derived from the same revision.