These were not oversights by careless people. The team is competent, all senior. The gap is that the work split into layers people own, and the layer in the middle has no owner.
The data layer - owned by developers - is what entities exist and how they are stored. Documents, records, requirements, projects.
The interface layer - owned by designers - is what the user sees and clicks. Screens, flows, components.
Between them sits the product-logic layer - what the data means and how it behaves. What the word "compliant" resolves to. What states a document moves through and what triggers each transition. What "version" of a document means when two of them exist at once. Whether the AI's verdict and a human reviewer's verdict are the same field or two different ones.
The product-logic layer is not data and it is not interface. It is the rules that connect them. And in most companies nobody owns it.
The developer assumes product has defined it. Product assumes the logic will emerge from the screens. The screens get designed around assumed logic. The developer builds from the screens. The assumptions get hardcoded. And the product-logic layer gets "decided" - not in a decision, but as an accident, scattered across wireframes and one person's implementation choices.
This is how the bugs get built in.