Well Ashley I am glad to know my way of doing things is at least working. If in the future a disaster happens because of my own addons, please let me know and I will do my best to help in any way I can, as quickly as I can.
About Animate Text, while I know it was hypothetical, I think it's still a great example: My addon does exactly what you suggest it does, and still I have to use undocumented features of the engine to make it work.
Animate Text does not have any "hacks" in it as I offloaded all of them into my Experimental Text Fix addon. I made sure not to change any parts of the engine for my addon.
Now you might think that everything you mentionned should and would absolutely fit inside the documented features but in fact they dont. I will refrain from going too much into the specifics to avoid derailing the subject, but in short I do my best to work around the limitations.
I rewrote code that I know is in the engine but don't have access to because it's "reasonable" for me to do so. (Like easings, tag parsing and typewriter) I even rewrote a bbcode parser to handle special cases like icon tags and tags with no params for animation before giving them back to C3's BBCode class.
Now, doing this means there will be very specific details that I cannot do without using undocumented features (or rewriting huge chunks of the engine). Very tiny details that make all the difference and that most people will be bothered by. These things I cannot work around, and most likely my addon is the only existing use case for having them available, so they will probably not be exposed.
In this case what am I supposed to do? Drop the whole addon because of one implementation detail? Ship without a core feature of the addon? Beg for months for a super niche feature that we all know full well will not be exposed to the SDK because nobody will ever use it ever again after me? Or just use undocumented features and maintain it when it breaks?
In fact this is what I think Ruskul meant by
Basically, its seems like Scirra recognizes the need for engine tweaking to support behavior interaction, but is adamant that isn't how you should develop (do as we say, not as we do). So instead you end up with behaviors that, in order to function correctly, need some back and forth boiler plate added either to the event side, or through scripting.
If the addon was made by Scirra this would not have been a problem at all, because you can just accomodate just fine for these kinds of minor changes. These kind of mini tweaks are done all the time in vanilla addons, and most of the time they are not exposed to the SDK because they are so niche it's reasonable to think no one will ever need them again.
Now, Animate Text is an outlier in the fact that it's the only addon I don't advertise as "Experimental" or "Unstable" while also relying on using undocumented features for a core feature. That's mostly because said undocumented feature is accessing your line and fragment count after your tag parser runs, and it's VERY reasonable to assume you will not remove line and fragments from your text renderer. Even if you break my code and change your entire architecture, these info would still be there somewhere. I can always fix my addon ad vitam eternam.
Anyway, this is mostly why I keep doing stuff that way. I make cool addons, make them available for free and make them open source. I keep maintaining my addons, and provide support for free as long as I can, and do my best to stay out of your way. In turn staying out of your way means not clogging the ideas board with sdk requests I think are useless to the community at large and doing whatever I need to do that's reasonable.
Staying out of your way also means that sometimes to prove an idea is doable, there is no better way than to just make it happen and show the result. Stuff like dynamic layers I've been asking for 5 years, and they were finally added as soon as I was able to prove the concept worked by making an addon that does it. I see no way of doing that without dabbling in a bit of engine hackery.
Anyway, I think we both made our points clear and I don't wanna engage in this SDK topic any more. Most other addon devs will agree that we do not want to bother the Construct team by making addons, far from it. I know Mikal for example has specifically avoided using engine hacks or undocumented features in his released addons for the reasons you outlined, and he has half a dozen proof of concept addons he is sitting on for the day they are possible without engine hacks.
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.
About this: I've been doing consulting work on many games for a while and from experience, this does happen. It's just that it's never EVER that simple. And it's not only on Construct, this kind of stuff happens all the time, because it's expected when making larger scale games. You WILL write bad code that WILL cause problems. You WILL stop updating your engine (not only due to hacks, but also to avoid regressions, and to make the engine codebase more stable for late development) and you WILL cry because an engine bug was fixed 10 versions later. You WILL learn to deal with it, and you WILL find a way to still release.
You are not lucky, you are just hoping not to be asked to deal with a problem most game dev teams are already dealing with themselves.
Astral Ascent is one of the biggest Construct games, and having read the code, it's a Construct game that scaled FAAAAR beyond what anyone in this thread seems to be able to imagine using Construct's core features. They have ran into MANY issues, as you do when making games and they have just dealt with it. They have locked their engine version to r225 that released 3 years ago.
In general, in game development if you start a large project, it's common practice to not update the engine that's under the game too much in the process because you risk creating regressions and unforseen issues. Stuff you cannot just see coming when writing backwards compatible code, or even just by using documented features. Updating the engine should only be done very carefully when you make 200% sure you absolutely need whatever fix or feature was added. It sometimes takes weeks to properly update, and in some other engines, the team are sometimes dedicated to remaking the entire game from scratch on the new engine version.
In Construct games, it's often not that dramatic because of the backwards compatibility work being done, but also because there are very few large Construct projects that have full teams collaborating on them. So we just forget how things are supposed to be done and complain when we hit the same walls we've been warned about.