There is a reason the shadow-ban was invented: when loudmouthed/trollish users are allowed to realize they are unwelcome, they get angry, and express that anger by defacing, defaming, DDoSing, etc. the community that has rejected them.
My personal belief is that the best thing to do is to not disallow this content altogether, but rather to ghettoize it.
Two examples of this:
• How Metafilter treats posts about Metafilter: they're allowed, but they have to go into a special "meta" ghetto, separate from regular content, where only people who want to see that kind of thing will have to see it.
• 4chan frequently makes new boards—new "homes" for certain content types—just to quarantine content it doesn't like. For example, /soc/ was not created because the 4chan moderators think 4chan should have a meetups+dating board, but rather because such threads were incessant on /b/.
---
Now, HN already has something quite like these approaches, but IMHO better: the "showdead" system for negative-scored posts, which ghettoizes posts but also individual comment subthreads of posts, in a very granular way.
Here's the experiment I'd like to see done, re-using the "showdead" code:
• Split downvotes into an "irrelevant/Obviously Did Not Read The Article" button and a separate "is political" button (where you can press either or both on any given post.) Track the totals separately.
• If a post's (upvotes - irrelevant) is negative, then it's "dead" as happens now, and you have to have "showdead" on to see it.
• If a post's (upvotes - is_political) is negative, then it's "politics", and you have to have "showpolitics" on to see it.
• If both scores are negative, then you have to have both filters on to see the post.
• Posts would sort/rank according to (upvotes - sqrt(irrelevant^2 + is_political^2)).
I think this alternative would ensure that the people who most want to get into tribal flamewars would "go quietly into the night" (from everyone else's perspective), rather than becoming the sworn nemesis of the community.