The contract stability bit rings true from my experience. I've built a few B2B integrations that follow this pattern naturally - the data layer and API contracts are rock solid because changing them means coordinating with external systems, but the application logic gets rewritten fairly often.
Where it gets messy is when your "disposable" layer accumulates implicit contracts. A dashboard that stakeholders rely on, an export format someone's built a process around, a webhook payload shape that downstream systems expect. These aren't in your documented interfaces but they become load-bearing walls.
The discipline required is treating your documented contracts like the actual boundary - version them properly, deprecate formally, keep them minimal. Most teams don't have that discipline and end up with giant surface areas where everything feels permanent.
anything exposed for others to depend on becomes part of the actual boundary. if it might break someone's system when you change it's part of your API.
the problem is not in documenting the subset of a giant surface you intend to support; the problem is having a giant surface!