TriangleDef.validate() now rejects relationship constraints where with_role references a role not in the triangle's three roles. Catches authoring errors at load time instead of silently producing broken constraint data. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>