Our team is currently working on a live service game (A game that will be updated regularly post-launch) and is using a trunk-based development strategy.
The trunk-based development strategy is great. But the only issue is that it's incredibly hard to prevent future content (i.e. UI graphics, game assets) and features from being included in the build before its official release. This is not ideal, as players are now decompiling the game and extracting the WIP UI assets and peeking the game code to figure out future update contents.
The issue is easier to solve on the code side, with conditional compilation flags as feature toggles. But for content, especially content that could not be self-isolated (e.g. a new UI element that lives on an existing screen), it's very easy to get accidentally included in the final build.
How do other game dev teams prevent this issue?
Is there any better branching strategy, better version control tools, or some architectural pattern that could prevent this issue from happening?
(FYI, we are using Unity + Git for development. The solution we have come up with is to put these assets in addressable and label them with a specific feature flag. In a build script, we will remove all addressable with feature flags that aren't enabled in the current build. As for content that lives on existing UIs, we have two different versions of addressables labeled with two different flags, each only differs on the modified UI elements. As you could imagine, this is very time-consuming to set up and is very error-prone.)