# Community Experts

*12 August 2026*

A port of the `edexpert` IPS app — itself a self-hosted implementation of a
feature Invision ships only on Cloud.

## What it is

Some people know the billing forum and some people know the API forum, and they
are rarely the same people. Experts marks who is trusted where, shows that
beside their posts in *that* forum only, and — the part that actually changes
anything — **tells them when a question they could answer has gone unanswered**.

Signal, already ported, says a topic is unanswered. Experts is what does
something about it. The two were built to sit together.

## 🚨 The one place this cannot be a straight port

The original counts accepted answers from IPS core's `topic_answered_pid`.
**Convoro core has no accepted-answer concept at all** — no column, no table.
The notion of "solved" lives in Signal, which ships its own `signal_answers`.

Three ways to handle that, and only one of them is honest:

- **Require Signal.** A manifest floor is a promise, and this would make a
  module that is useful on its own refuse to install without another one.
- **Count posts instead.** Volume is not expertise. Promoting the most prolific
  poster in a forum to "expert" is worse than promoting nobody, because it is
  wrong in a way that looks official.
- **Manual assignment always works; automatic promotion needs Signal.** ←

So the module requires `forum` alone. The automatic-promotion setting is
present, disabled, and says *why* — that it counts accepted answers and Signal
is what records them. A feature that degrades visibly beats one that is absent,
and beats one that quietly does something worse.

## 🚨 Nudging is the dangerous part

A nudge is a notification sent to a person about somebody else's unanswered
question. Get it wrong and the module's entire effect is driving your most
helpful members away.

Four limits, all of them defaults rather than options to discover:

- **Never twice for the same topic and person.** A row is written when a nudge
  is sent and checked before the next one. Without this, every run re-nudges
  every open topic, for ever.
- **A cap per person per run.** Somebody who is an expert in four busy forums
  should get one message about a handful of topics, not forty messages.
- **An age limit.** A question nobody answered in a month is not urgent, and
  nudging about it reads as the software being desperate rather than helpful.
- **Off by default.** Marking experts is useful on its own. Sending mail is a
  decision somebody makes deliberately, and a module that starts messaging
  people the moment it is installed has made that decision for them.

🚨 And it runs on the **schedule**, never in a request. That is now possible for
an extension — see `docs/design/2026-08-12-scheduled-work.md`, which exists
because it was not.

## The badge is per forum, and that is the point

Somebody who knows billing inside out has no standing in the API forum, and a
badge that follows them everywhere is a badge that means nothing anywhere. The
check is always "expert **in this forum**", never "is an expert".

## What it deliberately does not do

**No leaderboard, no ranking, no score.** Points and ranks already exist in
core and answer a different question. Expertise here is a judgement somebody
made, recorded with who made it and why, not a number that went up.

**No automatic removal.** Somebody quiet for six months is not less
knowledgeable, and a module that silently demoted people would be making a
social decision on a moderator's behalf. Promotion can be automatic; taking it
away is a person's job.

**Every change is logged** — who, what, when, and the reason if one was given.
"Why am I an expert in this forum" and "who removed me" both have answers.
