The boundary is a contract: ports
A port is the promise the core owns and adapters fulfill.
The seam between the core and an adapter is a port — an interface the core owns. The core says, in its own words, “I need to be able to save a workspace and load it back.” That’s a port. Somewhere out at the edge, an adapter implements it against a real database. The core never knows which database. It only knows the promise.
This is what makes the boundary real rather than cosmetic: the core can be exercised against any implementation of the port, including a fake one. Which, as we’ll see in Module 3, is the entire basis of fast, trustworthy tests.