# UJ-002 Display character estimate before translation

Audience: AI coding agents first.

- Actor + entry point: WordPress administrator; `wp-admin/admin.php?page=international-press-zone#/translate-posts/posts`.
- Priority: MUST-HAVE.
- Preconditions: Create post through WordPress REST API; configure target languages through plugin REST API; provision API key through UJ-001.
- Test layer: L2.

## Steps

1. Open posts screen → seeded post row renders.
2. Select seeded post → bulk bar renders `<N> selected` and `~<characters> characters` from `estimated_characters_total` (`admin/src/pages/translate-posts.js:1193-1244`).
3. Open translation modal → post estimate remains visible before queue action (`admin/src/pages/translate-posts.js:631`).

## Failure branches

- Auth failure `401`, forbidden `403`, or rate limit `429` from `POST /v1/estimate` → local estimate still renders; UI MUST NOT become blank (`docs/contracts/plugin-client-contract.md:111-118`).
- Backend unreachable → local estimate renders; failure may log but MUST NOT block selection (`docs/contracts/plugin-client-contract.md:117-118`).

## Backend touchpoints

`POST /v1/estimate`; plugin `GET /wp-json/international-press-zone/v1/posts`.

