# AGENTS.md -- html (White Antidote AAC)

<!-- BEGIN CHANGE: agent entrypoint pointing to Cursor rules -->

**Novo Portal** (runtime): `portal/` -- ver `portal/AGENTS.md` + skill `novo-portal`.
Sibling server: `../otx2_reseted`.
Gesior legado arquivado em `old/` (referencia; nao e DocumentRoot).

Na raiz (alem de `portal/` / `docs/` / regras): assets publicos
(`images/`, `animatedOutfits1092/`, `Downloads/`, `trainingoffline/`) e
templates `config/` + `system/` (em prod: `/home/ubuntu/portal/assets`).

## Read first

Cursor rules in `.cursor/rules/`:

- `novo-portal.mdc` -- portal moderno (always)
- `encoding-text.mdc` -- UTF-8 portal / anti-`?` (always)
- `database-schema.mdc` -- MySQL `ot_new`
- `project-overview.mdc` -- overview (Gesior em `old/`)
- `php-pages.mdc` / `shop-payments.mdc` / `layout-tibiacom.mdc` -- referencia legado (`old/`)
- `item-serial-tracking.mdc` -- serial tracking

Portal-specific: `portal-api.mdc`, `portal-frontend.mdc`, `portal-security.mdc`,
`docs/portal-*.md`, `docs/server-data-scan.md`, `docs/cleanup-notify.md`,
`docs/otc-custom-release-manual.md`,
`.cursor/skills/novo-portal/`, `.cursor/skills/otc-custom-release/`.

Also: `.github/copilot-instructions.md`, dump `DB-new-*.sql`, `portal/sql/drop_unused_tables.sql` (schema hygiene).

<!-- BEGIN CHANGE: contexto 2026-07-30 - vocation matcher -->
Create char: `VocationMatcher` (`/create-account`, `/account`) usa scores de `vocation-guide.php`.
<!-- END CHANGE -->

## Default approach

- **Portal:** `portal/src` + `portal/api`; deploy `portal/deploy/deploy.ps1`. Shop delivery still depends on server `shop.lua`.
- **Shop wait orphans:** if history stuck on `wait` after in-game delivery, run `portal/sql/z_shop_history_realize_orphans.sql` (fix is in OTX `shop.lua` - never free empty DB results).
- **Shop serials:** history UI lists CSV serials one-per-line; `serial_item` is VARCHAR(1024) (`z_shop_history_serial_widen.sql`).
- **Admin:** Wipe preserva historico shop/pagamentos; Tools tem `orphan_scan` + `player_trace`.
- **Legado:** so consultar `old/` se precisar de paridade/referencia; nao estender Gesior.

<!-- END CHANGE -->
