Wrap async LSP handler bodies so a panic in one request doesn’t terminate
the server connection. tower-lsp 0.20 does not catch handler panics by
default; a single bad request would otherwise kill the editor’s LSP
session and lose unsaved client-side state.
Records document lifecycle order before tower starts polling notification
futures. The transport deliberately runs up to four messages concurrently,
so handler start order alone is not the order in which the client sent them.
The one place custom methods are registered — main and the test harness
both build the service here so their method tables can never drift. The
gate methods exist only under test-hooks (test targets); a production
build answers them with MethodNotFound like any unknown method.