Phase 2 — Domain Layer
Task: Create domain/inventory.py (InventoryService) and domain/brewing.py (BrewService) with validation guards and status transition enforcement; create domain/exceptions.py with DuplicateBeanNameError, BeanNotFoundError, BrewNotFoundError, InvalidTransitionError.
Effort: 1 minute
Depends on: T-003
Acceptance Criteria: InvalidTransitionError raised for forbidden transitions; DuplicateBeanNameError raised on duplicate name.
Phase 2 — Domain Layer
Task: Create
domain/inventory.py(InventoryService) anddomain/brewing.py(BrewService) with validation guards and status transition enforcement; createdomain/exceptions.pywithDuplicateBeanNameError,BeanNotFoundError,BrewNotFoundError,InvalidTransitionError.Effort: 1 minute
Depends on: T-003
Acceptance Criteria:
InvalidTransitionErrorraised for forbidden transitions;DuplicateBeanNameErrorraised on duplicate name.