feat(leveva): +Q no-forward user mode (charybdis UMODE_NOFORWARD) — P11 slice 250
The user-side counterpart of the channel +f forwarding feature (slice 242),
closing the +f family. A client that sets +Q on itself is never redirected by
a +f channel: a forwardable JOIN reject (+i/+l/+b/+r) falls through to the
source channel's original reject numeric instead of a 470 RPL_LINKCHANNEL +
re-JOIN of the target.
Client-settable, purely-local umode (letter Q, bit 0x8000) — like +D/+R/+g/+G:
the forward decision runs only at the joining user's home server (a remote
NJOIN is never forwarded), so the bit is not in SEND_UMODES. Decision core
mode::is_noforward; the JOIN forward condition gains !is_noforward(joiner.modes).
(Disjoint from the channel +Q DisableForward, which reuses the letter in its
own table — the channel refuses incoming forwards; this user refuses being
forwarded.)
Tests: boot-golden golden_noforward.rs (a +Q user gets a plain 473, no 470/no
forward; -Q restores the redirect) and proptest noforward_proptest.rs (the
forward composite is false for every reject/allow_forward/co-set-mode combo
when +Q is set, exactly allow_forward && forwardable when clear; bit + letter
round-trip uniquely). Updated the s2s::umode local-only exclusion + the two
004/ISUPPORT literals; regenerated the 5 welcome-burst snapshots (004 usermode
param …GZDR → …GZDRQ).