The annual discount field had been added everywhere except the one place that mattered.

The migration created the column. The model listed it in $fillable. The validation rule accepted it. The frontend form captured it. The service layer — ProductService::saveProduct() and updateProduct() — used explicit field assignment and never mentioned annual_discount_percent. The value traveled from the browser to the controller to the service and then fell on the floor.

Two lines added to two methods. The kind of bug where every layer does its job except one, and the silence of that one layer is invisible because the system doesn't error — it just doesn't save.