# Community playbook

The testers are the moat. This playbook describes how the community is
structured, how people join and grow, how we keep it healthy, and what we
measure.

## Structure

- **Workspace pools.** Each developer manages tiers and members for their own
  campaigns (Testers page). Weight and permissions are per tier and enforced
  server-side.
- **House Pool.** A platform-operated pool (the `Customer` flagged
  `isPlatformPool`) whose members carry reputation across campaigns. Tiers:

| Tier | Weight | How you get there |
|---|---|---|
| Newcomer | 0 → 1 after 3 cleared contributions and 48 h account age | apply |
| Trusted | 2 | 10 cleared, ≥ 1 deployed, no BLOCKED in 90 days |
| Senior | 3 | 50 cleared, ≥ 5 deployed, 3 confirmed re-verifications |
| Lead | 4 | operator promotion; may moderate public campaigns |

- **Public campaigns.** Developers opt in per campaign
  (`Campaign.visibility = PUBLIC`, `minTierWeight`). They appear in Discover for
  qualifying House Pool members.

## Joining

1. Tester Hub → **Apply to the House Pool** (`TesterApplication`: motivation,
   devices, browsers, languages, optional X handle, referrer).
2. Operators review in the operator view (`/admin` → Applications); automatic
   approval to Newcomer is available (`HOUSE_POOL_AUTO_APPROVE=true`) for open
   beta phases.
3. Enrollment: Authentik enrollment flow on the tester application slug
   (operator step — see [operations](./operations.md)). New identities get a
   `Tester` row on first hub visit.

## Referrals

A tester can issue referral invites (`TesterInvite.referrerTesterId`). When the
newcomer's first contribution is cleared and later deployed, both receive a
`REFERRAL` ledger entry. Referral invites are capped per tester per month.

## Rituals

- **Weekly digest** (`POST /api/platform-admin/digests/run`, scheduled in
  Coolify): each active tester gets a notification with their contributions,
  deploys they influenced, points, and one recommended public campaign.
- **Ship notifications**: when an item deploys, every contributor and voter is
  notified and asked to re-verify.
- **Share (opt-in, default off)**: after a confirmed deploy the hub offers a
  pre-filled X post ("A change I proposed just shipped on <product>") through a
  web intent. No hosted post generation; the tester edits and sends. Rate
  limited (25 per 30 minutes per tester).
- **Leaderboard**: opt-in, per workspace and House Pool, weekly and all-time.

## Moderation

- The safety pipeline flags before humans see anything; Lead testers and
  operators clear or block public-campaign items from `/moderation`.
- Reputation, not funds, is slashed for BLOCKED submissions; three BLOCKED
  items in 90 days suspend House Pool membership pending review.
- Disputes: a tester may contest a REJECTED status from My contributions; the
  developer has 7 days to respond or the reputation effect is reversed.
- Code of conduct is linked from the hub and the extension panel.

## Growth loop and metrics

```
public campaign → discover → contribute → deploy notification → confirm → share → new tester
```

| Metric | Target for beta |
|---|---|
| Weekly active testers | growth week over week |
| Median time to first feedback after joining | < 24 h |
| Cleared / submitted | > 85 % |
| Deployed / THRESHOLD_MET | > 60 % |
| 4-week tester retention | > 40 % |
| Referral share of new testers | > 20 % |

## Developer-facing promises

- Testers see only what a campaign exposes; emails are never shown to
  developers unless a tester accepts a pool invite.
- Public campaigns receive only House Pool members at or above the chosen
  tier.
- Developers can revoke any member; operators can suspend across the network.
