Phone Book
This is a spike.
The tests are of the "barely there" variety, and were only meant to be a tracer bullet, not a design or development tool.
The code itself is not intended to be robust, it isn't feature complete, and it doesn't look at edge cases.
The purpose of this is to think about the problem of separation of concerns in a particular type of problem. I would be interested in discussing design in terms of ports-and-adapters or DDD (entity-aggregate-repository).
Eventually, when I get it right, it will provide the basis for an exercise for people who are in their second week of learning to program. In other words, there are a lot of aspects to this that will be fleshed out, and there will also be deliberate elisions, in order to focus on specific learning goals in the context of beginner programmers.