When products don't have departments assigned, generatePickingTickets() skips
them entirely, resulting in no picking tickets being created. This causes the
"All Items Picked" banner to show immediately due to a vacuous truth bug
(zero tickets = all tickets complete).
Changes:
- Add migration to assign default department to products without one
- Make department_id NOT NULL in products table
- Update DevSeeder to create default department before products
- Update CannabrandsSeeder to assign department_id to all products
- Add test coverage for department requirement (4 tests, all passing)
The graceful handling in FulfillmentWorkOrderService (lines 46-48) is kept
as defensive programming, though it won't be triggered with this constraint.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>