Where do/should Gateway Scripts live with respect to an inherited project structure?

That just means there should be function in your "universe" project that does this work, and your message handlers in your leaf nodes would be just one-liners. :man_shrugging:

Write a module. Modules can declare any desired RPC they like.

Edit September 2025:

I suppose this is the right place to mention that my Integration Toolkit's @system.util.runInGateway decorator basically achieves this goal. You simply annotate the library function and any calls from client/designer scope will silently marshal the arguments and unmarshal the return value.