A template gives you a finished surface and asks you to live inside it. A foundation gives you a tested structure and expects you to change it.
The practical test is simple: can the data model be extended without forking? If adding a field means editing generated code you cannot regenerate, it was a template.
We keep our foundations honest by deploying them for genuinely different requirements. Anything that survives that is structural. Anything that breaks was an assumption.