skymen - your approach sounds like probably the most responsible way to go about that kind of development. However it will only reduce, but not entirely eliminate, the risk of compatibility disasters. As I said we went through a lot of this with Construct 2 already, and this subject is all well-understood stuff in the professional software industry. If you really want to minimize the chance of disasters, the solution is: stick to the public, documented, supported APIs.
There is still the risk something like the following happens - and I still worry that it will eventually happen if people continue tinkering with the engine internals:
- Someone reads your post and thinks "sounds like it's been fine for 6 years, I'll use it anyway!" and adds some engine hack for something important in a big project.
- Later (perhaps years later) we update Construct in a way that makes it impossible to use the hack any further, due to completely changing the internal details the hack relied on.
- That user is now stuck on an old version of Construct.
- Suppose later they then run in to a showstopper bug that is fixed in the latest version of Construct. Now they're in development hell: they can't stay on the current version of Construct because it's got a showstopper bug. But they can't update to the newest version of Construct with the fix, because the hack they used in their project won't work. They have no good options and can't rely on official support.
- This could ruin their game launch. They may feel so burned by the experience they never use Construct again.
If people are still tinkering with engine internals and this has not happened yet, the main reason is luck, and I fear sooner or later our luck will run out.
If you run in to a missing feature or limitation, there is a third option you have not listed: work around it. It may not be perfect, but it's a pragmatic option and is pretty common in the software world.
I don't know how your "Animate text" addon really works, but I'll use it as a hypothetical example. Suppose you want to add a "wavy text" animation to some text. First of all it's already possible with an event sheet, so you don't have to hack the engine for that. Suppose you want to create an addon to make the task easier anyway. You might think the only way is to hack the engine internals and add a new special animated BBcode tag to the built-in Text object. But that's not the only way. You could also create a standalone plugin that just generates strings of BBcode using the existing 'offsetx' and 'offsety' BBcode tags and vary the offsets over time.
Sure, it's a bit less efficient as it has to keep re-parsing the BBcode strings. But JavaScript is super fast and I suspect it's probably fine for most reasonable use cases. So that feature can be achieved reasonably well without having to do any internal engine hacking at all. Better yet, it can be shared between the Text object and SpriteFont object, and anything else that supports those BBcode tags (including perhaps some HTML features), so it's a more flexible design. So it has its trade-offs, but overall I'd say it's a better design, and will be supported permanently, as it only uses officially supported features.
I suspect that all too often people run in to some limitation and assume they're either stuck or have to hack the engine. I don't think that's true. Usually there is in fact a couple of feasible alternative approaches and workarounds. Occasionally I do add some new feature that's been requested for some time, and in the process of doing it, I realise it was reasonably possible by some other means and point that out, but by then it's a moot point. So I do think this comes up more often than people realise. It's not an all-or-nothing situation of either hack the engine or it's impossible. There's usually lots of stuff in the middle you can do which will be fully supported. Hence my advice: stick to the public documented features, and work in terms of that - and it's probably still possible to do a lot more than you think.
Meta comment: this thread is becoming a bit of a sprawling mega-topic that covers lots of different topics. That tends to make the discussion chaotic and frustrating. Usually it's better to start separate threads to discuss separate topics. This is covered by our Forum & Community guidelines, so if this gets too out of hand I may lock the thread and ask people to start new threads with a more focused single topic of discussion.