There we have it:
https://github.com/prometheus/alertmanager/blob/1f3796c5cc58bdcf6fedfb427580c7bfab1f88ba/silence/silence.go#L464So at least one defined matcher must fail for empty string, which explains failure for alertname=~".*" matcher.
However, it doesn't explain why matchers fail (not on validation stage though) for ".+" or ".+[ae].+" regexp.
So by setting alertname=~".+", matcher will get "^(?:.+)$" which should work as well. It works more than less, but some alerts are still being sent to receivers, not all but some and sometimes, which doesn't show anything special in debug logs.