Reservations are their own layer, and one shopping list is built from low stock, project shortage and wishlist.
A project reserves stock without consuming it. A reservation whose physical stock has vanished gets flagged broken rather than silently going negative.
Below minimum, blocked by a project, or just on the wishlist — one list, ordered / received tracked per line.