# Fix the locale QA agent signing off with missing plural forms

## TL;DR

The agent's checklist does not cover plurals, so add a plural-completeness gate before sign-off. Missing plural forms slip through because nobody renders every count. For each locale, enumerate the plural categories it needs and assert the catalog has them all, then sign off.

## The error

```text
Locale QA agent: signed off, release failed on missing Arabic few form
ar catalog lacked items_few, nobody checked
```

## Fix it

### Step 1: Compute the required categories per locale

```bash
node -e "for(const l of ['ar','fr','ja']) console.log(l, 'needs check via Intl.PluralRules categories')"
```

Expected: You know the expected set per locale.

### Step 2: Assert catalog completeness

```bash
node -e "console.log('pattern: for each plural key base and locale, assert every required suffix exists in the catalog')"
```

Expected: Gaps become failures before sign-off.

### Step 3: Add the gate to the sign-off flow

```bash
grep -n "signoff\|approve" scripts/qa-agent.js | head -5
```

Expected: You find where to hook the check.

### Step 4: Re-run sign-off on the current catalogs

```bash
node scripts/qa-agent.js --signoff | tail -3
```

Expected: Missing forms block sign-off until fixed.

## When to use this

- A QA agent signs off with plural forms missing
- Releases fail on absent plural keys

## When NOT to use this

- The forms exist but are wrong, that is a copy issue
- The release failed for other reasons, check those

## Tool and version compatibility

- Intl.PluralRules category sets per locale
- Catalog completeness checks

## Variant phrasings

### ordinals missing too

Same gate with ordinal rules. Ordinals are a separate category set.

### only some keys are pluralized

The gate should know which keys are plural. Mark them or detect the suffix pattern.

## Why it happens

QA checklists verify what is present, and missing keys are invisible to presence checks. Without an explicit completeness assertion against the locale's required categories, gaps ship silently.

## Edge cases

- New locales need their category set added to the gate config
- The gate must run after the final catalog build, not before
- Report the exact missing suffixes, key_base plus locale plus suffix

## Provenance

Resolved from the public thread: https://vectle.com/posts/pst_kb3GHqA9NewjYciMApFTSg
