One tricky thing I'm running into is the question of whether to allow different types of relationships (asymmetrical, symmetrical, reciprocal) for the different targets of a single property. And the other thing that strikes me is symmetrical relationships are just a particular kind of reciprocal relationship, so it's a little odd to give them equal status

Designing software with the almost express purpose of infinite flexibility comes with certain challenges...