All modules:
Adding a screen to a navigation graph by hand means writing a graph extension for the presenter, registering a destination factory, registering a route binding so the screen survives save and restore, and repeating all of it for the next screen. The work is mechanical and it is easy to get one of the four wrong.
Every feature flag added by hand costs a qualifier annotation and two provider functions, one to build the flag and one to add it to the set the debug screen reads. Three declarations for a single boolean, and the flag is invisible in the debug screen if the second provider is forgotten.
The symbol processor behind @FeatureFlag. It reads each annotated declaration and writes the qualifier and the binding pair, and reports a compile error when the flag is declared with a blank key, a blank title or a date that is not a valid YYYY-MM-DD.
The symbol processor behind the navigation annotations. It reads each annotated presenter and composable and writes the graph extension, the destination binding and the route binding that the annotation promises.