Hi Stephen !
Sorry to hear that you couldn't find what you were looking for in the docs - but thanks for mailing the list and letting us know, that's how we get to improve them :)
To answer your question specifically, Opal looks for subrecord templates using the Django template loader logic in the following ways:
Display templates: {{ template_dir }}/records/{{ subrecord api name }}.html
Form templates: {{ template_dir }}/forms/{{ subrecord api name }}_form.html
That means you should be able to override e.g. the diagnosis display template from Opal by creating a template at yourapp/templates/records/diagnosis.html
Although, I suspect you'd have to understand the way things are wired up to make that an obvious place to look, which is clearly suboptimal.
(e.g. It's actually documenting the methods used to find the templates)
Would be interested to know where you looked / expected it to be...
For new models specifically, we also have a commandline tool that will do some code generation that checks for migrations to be made/run and creates the display and form templates:
Interesting to know that there's not enough logging explaining what's going wrong.
From my perspective that's probably a bug - if a model template doesn't exist, we should be able to know that and at least tell you what we're expecting to find.
Do you have steps to reproduce the situation where you're not getting what you expect and some extra logging would help?
This is one of those things where we don't have/notice the problem because we're not new to Opal - but if it's happened to you it'll probably happen to someone else, so good to make it clearer!
Best
David