> ## Documentation Index
> Fetch the complete documentation index at: https://docs.dontmisstwice.org/llms.txt
> Use this file to discover all available pages before exploring further.

# Rosters

> Divisions, tiers, and moving players between them — from Discord or the dashboard.

Each division runs its own ladder of tiers — typically Main, Academy, Trial, and
Substitutes — and its own lead. Players move between tiers; the system records
every move forever.

## The commands

| Command           | When you run it                                                   |
| ----------------- | ----------------------------------------------------------------- |
| `/roster view`    | See a division's full ladder. Posts publicly so you can share it. |
| `/roster player`  | One player's tier, status, and recent history.                    |
| `/roster move`    | Add someone, promote, or demote.                                  |
| `/roster bench`   | Bench a player. The reason stays internal.                        |
| `/roster loa`     | Leave of absence, optionally with a return date.                  |
| `/roster return`  | Back to active.                                                   |
| `/roster release` | Remove from the division. History is kept.                        |
| `/roster history` | Recent changes across the division.                               |

Every one of these has an equivalent on `/admin/roster`. Same result, same
history, same audit entry.

## Announcing a move

`/roster move` takes an **announce** option:

<CardGroup cols={3}>
  <Card title="public" icon="megaphone">
    Posts to the division's announcement channel.
  </Card>

  <Card title="staff" icon="lock">
    Recorded, but nothing is posted.
  </Card>

  <Card title="silent" icon="volume-xmark">
    No announcement anywhere.
  </Card>
</CardGroup>

<Warning>
  Bench, leave, and release are **always** staff-visibility, whatever you pass.
  A public post never carries the reason somebody was benched.
</Warning>

## Status reference

A player's **tier** says where they sit. Their **status** says how they're doing.

<ResponseField name="Active" type="playing">
  On the roster and available.
</ResponseField>

<ResponseField name="Trial" type="under review">
  On a trial period with a review date attached.
</ResponseField>

<ResponseField name="Substitute" type="on call">
  Available to fill in for a match.
</ResponseField>

<ResponseField name="Benched" type="not playing">
  Still on the roster, not currently in lineups.
</ResponseField>

<ResponseField name="Leave of absence" type="away">
  Away. Never proposed as available for a scrim.
</ResponseField>

<ResponseField name="Inactive" type="dormant">
  Not playing, but still on the books.
</ResponseField>

<ResponseField name="Suspended" type="barred">
  Cannot be added to a lineup.
</ResponseField>

<ResponseField name="Released" type="off roster">
  Removed from the division. Profile and full history preserved.
</ResponseField>

## History is permanent

Every move writes a history row that is never edited or deleted. That's what
lets the site answer *who was on Main last October?*

<Note>
  It's also why an accidental move is fixed by **making another move**, not by
  trying to erase the first one. The record shows what happened, including the
  correction — which is the point.
</Note>

## Discord roles

Roles follow the database automatically: immediately after a move, and again
every two minutes as a safety net. The dashboard shows whether sync is healthy.

If something looks stuck, `/roster sync` re-queues it. Don't fix it by editing
roles in Discord — see [the overview](/site-bot/overview) for why.
