feat(leveva): options { default-snomask } REHASH knob — configurable bare-+s default — P11 slice 266
Promote the bare-`+s` default snomask from a hard-coded SnoMask::ALL to a
REHASH-able `options { default-snomask }` config knob (charybdis
`default_snomask`). A bare `MODE <nick> +s` (no following mask token) now seeds
the configured categories instead of every category.
Closes the deferral named verbatim in slice 257's divergence list ("No config
knob for the default mask (a future slice could add one, the MAX_PENALTY 208->210
trajectory)") via the same ConfStore live-or-default seam MAX_PENALTY (208->210),
max-bans (245->246) and service-string (256) took.
- snomask::parse_config(s) -> Result<u32, char>: strict config parser (rejects a
typo'd letter) vs the lenient runtime apply_delta; pure+total+panic-free fuzz seam.
- Options.default_snomask + parser + ConfBlocks/ConfStore/live_default_snomask()
+ boot seed; command::mode bare-+s reads live_default_snomask().unwrap_or(ALL).
- examples/ + dist/ ircd.kdl documented line.
Tests: snomask + config-parse + control round-trip/re-seed-inverse units;
golden_default_snomask_config.rs (subprocess, isolates the global singleton:
oper bare +s -> 008 +ck, not the all-categories default); fuzz
default_snomask_proptest.rs (never-panics + subset-of-ALL round-trip +
strict-reject/lenient-ignore contrast).
Gate: cargo test -p leveva green; cargo clippy -p leveva --tests clean;
cargo build --workspace 0 warnings; no 004/221/welcome-burst snapshot churn.