Product Bundles works by creating an app variant for the selected product to represent the discounted price. If the customer is eligible, this variant is added to the cart instead of the products regular-priced variant.
The bundle variants don't have their own inventory, they share the inventory of the regular variant that it's created from. As long as the regular variant is in stock, the bundle variant will be listed as "n/a", which is technically in stock at an unlimited amount.
If the product has inventory tracking enabled, when a bundle variant is purchased, the app will reduce the inventory of the regular variant. When the regular variant is out of stock, the inventory of the bundle variant will be changed to 0.
If you add inventory to the regular variant and you want the bundle variant to be listed as "in stock", you would Manually Sync Inventory in Product Bundles. This will cause the app to go through the bundle variants and list them as back in stock if the regular variant has inventory.
Shopify doesn't allow variants created from an app to be created at a specific stock quantity, so when the app variants are created they always have a value as "n/a", regardless if the variant that they're created from is out of stock. To have those variants listed as out of stock if the regular variant is out of stock, you'd need to Manually Sync Inventory in Product Bundles. It's a good idea to do this whenever a product bundle group is updated or you create a new group.
Product Bundles handles inventory within the limitations of the Shopify Framework. Because of this, there is the potential for an item to be oversold, but it will only happen once.
If only the base item is being purchased, inventory is being counted toward that variant inventory. Generally, if they are trying to buy more than what is available, the checkout page would state that there isn't enough inventory and will reduce the quantity of the product.
When eligible for special pricing, the customer is purchasing the bundle variant, the one where the inventory is N/A. Within Shopify, N/A means that the inventory is unlimited and not being tracked. Because that variant is technically in stock, Shopify's inventory validation doesn't kick in.
After the sale, the app does a little bit of magic, reducing the base variant inventory by the quantity purchased. Once the base variant has been reduced to zero, the bundle variant will switch from N/A to zero, making the product unavailable for purchase. So until this occurs the bundle variant is able to be purchased.
To better illustrate this, suppose a t-shirt has 3 in stock. When looking at the product within Shopify, it would look like this:
- shirt - 3 in stock
- shirt (wholesale) - N/A
If the first customer buys the shirt and nothing else, inventory is reduced as normal. The 3 now becomes 2.
The next customer logs into their wholesale tagged customer account and buys 2 of the shirt. What they are actually purchasing is 2 of the bundle variant (the N/A variant one). After the sale, the base variant is reduced by 2, down to zero. As the base variant is now zero, the bundle variant is automatically switched from N/A to zero until stock is re-added.
If instead of 2, the second customer purchases 3 shirts, the same process happens. Order proceeds through as they are purchasing the N/A variant that does not track inventory. After the sale, the base variant is reduced from 2 down to -1. The bundle variant is also switched from N/A to zero, preventing any further items from being purchased.
There are a couple workarounds. Something simple is showing the base inventory quantity on the product page, informing the customer how much is on hand. This doesn't prevent overselling, but the customer would know up-front what is available. Preventing overselling, even on bundle variants, could be done with some custom, theme-specific enhancements.