# Roleplay inventory en herstel

Roleplay Core 0.9.0 gebruikt een lokale, server-authoritative inventory. Gameplay
blijft functioneren wanneer het control-plane of de bridge niet bereikbaar is.

## Containers en items

`platform-inventory` ondersteunt `CHARACTER`, `STASH`, `TRUNK`, `GLOVEBOX` en
`SOCIETY`. Vertrouwde serverresources maken of openen containers met de
`EnsureContainer`- en `OpenContainerForPlayer`-exports. De tijdelijke toegang
voor een speler verloopt na zestig seconden.

Itemdefinities bevatten een technische naam, label, stacktype, maximum stack,
gewicht, optionele durability en een allowlist voor metadata. Unieke items hebben
altijd een stackgrootte van één. Het Operations-paneel beheert definities per
organisatie en verspreidt wijzigingen via een allowlisted `INVENTORY_MANAGE`-
command naar bridge 0.13.0.

## Shops en crafting

Het paneel beheert meerdere shops per organisatie. Iedere shop heeft een valuta,
cash- of bankrekening, locaties en per item een koopprijs, verkoopprijs,
optionele voorraad, maximumvoorraad en prijsgrenzen. Dynamische prijzen reageren
binnen die grenzen op de resterende voorraad. Kopen en verkopen vergrendelt de
shopvoorraad, charactercontainer en ledgeraccounts en commit alles in één
transactie. `/shop` opent de NUI; de server berekent altijd de actuele prijs.

Craftingrecepten leggen resultaat, hoeveelheid, ingrediënten, herbruikbaar
gereedschap, craftingtijd en optionele job-, grade- en on-duty-eisen vast.
`/crafting` opent de recepten-NUI. Na de servergestuurde wachttijd controleert de
runtime rechten en voorraad opnieuw. Ingrediënten, resultaat, snapshot, audit en
outboxevent worden atomisch opgeslagen, zodat gelijktijdige requests geen
items kunnen dupliceren.

## Mutatiegrens

Alle moves, itemuitgiftes en durabilitywijzigingen:

- vergrendelen containers in vaste sorteervolgorde;
- controleren container- en itemversies;
- valideren slots, gewicht, stackgrootte en metadata;
- vereisen een idempotency key;
- schrijven data, outboxevent, snapshot en auditregel in één InnoDB-transactie;
- vertrouwen nooit itemdata, saldo of capaciteit vanuit een client.

De NUI stuurt bij drag-and-drop alleen bron, doel, instance, hoeveelheid, slot en
de bekende containerversies. De server bepaalt de actuele itemdefinitie.

## Audit en herstel

De lokale audit is append-only en bevat een SHA-256-hash van de payload.
Voor iedere mutatie bewaart de runtime maximaal twintig snapshots per container.
Het paneel projecteert containers en auditregels realtime naar de organisatie.

Herstel vereist de aparte permissie `servers.inventory.recover`, een reden en de
bevestiging `HERSTELLEN`. De runtime maakt eerst een snapshot van de huidige
toestand en zet daarna de gekozen snapshot atomisch terug. Ook die actie wordt
opnieuw geaudit; historische records worden nooit verwijderd.
