Appearance
Contract audit and compatibility
This guide describes source contracts reviewed on 15 September 2026. A deployed engine or operator adapter can use a different release.
Sources
| Component | Reviewed revision | Contract locations |
|---|---|---|
| Engine SDK 0.2.18 | 743feb4 | src/api.ts, network.ts, websocket.ts, types/. |
| Engine 1.0.5 | 04a3d08 | src/index.ts, games/util.ts, games/fixed-odds/, and each vertical handler. |
| Creator | b244de6 | BuildPicker.tsx, slot/api.ts, generate/, and each vertical exporter. |
| Operator Interface 1.6.11 | 3701ea1 | src/operatorInterface.ts. |
| Hizi settings | 1e03467 | packages/data/src/presets/jurisdiction/ and types/app-plane/game-setting.type.ts. |
| RGS Game API | bbb46a3 | Login/refresh and services/internal.service.ts response sanitization. |
The guides include the required wire fields. Access to these repositories is not a prerequisite for reading the SDK guide. Source links let maintainers verify changes later.
Known contract gaps
| Gap | Required integration behavior |
|---|---|
SDK login does not return gameVariables.rcElapsed or the singular freePlayInfo | Identity fields arrive in tokenData. Do not replace login to recover the other two: agree the owner of the reality-check offset with the operator, and read freeplay progress from freePlaysAvailable and the gameround replies. See what login() does not return. |
| SDK socket helper discards broadcasts | Use the Crash transport for request and event delivery on one connection. |
customStakes bypasses engine min/max checks | Apply independent legal and player limits. Reject conflicting release configurations. |
Engine maxPackageStake checks can use base stake | Validate the full purchase amount in the frontend. Test the operator limit contract. |
| Slot CLI export can omit rules and layout data | Supply a versioned frontend manifest. Validate all required configuration before enabling play. |
maxPayoutOdds repeats maxWinOdds | Obtain approved accumulated-payout odds when required. Do not label the duplicate as independent odds. |
| One UKGC preset covers different player tiers and products | Supply player-specific stake caps and product-specific timing. |
| German break state is not described by the preset | Integrate the approved reminder and break owner, with persistence. |
rcInterval comment says seconds | Use milliseconds. RGS documentation and the existing client implementation use milliseconds. |
| Numeric SDK orientation versus string Hizi configuration | Normalize 0/1/2 and none/landscape/portrait explicitly. |
| Some additional settings lack named SDK fields | Type-check turboDefaultEnabled, performanceMode, and progressionAnimations at runtime. |
| A bank request that rounds to a zero multiplier credits only that amount, reports the round settled, and leaves the remainder outstanding | Reject it. A complete-risk request takes the full-collect path; reject that too. Offer full collection without amount. |
| Collect can bank without crediting | Read updated result and round state. Never infer payment from a successful partial request. |
| Bought rounds can use full debit in RGS base stake | Prefer engineData.baseStake. Resolve older missing values from history. |
| SDK does not export Match or Progressive scenario types | Use the local types in those game guides. |
| Shared jackpots, common draws, storage, and operator packages lack generic SDK helpers | Implement the agreed operator protocol before exposing those controls. |
| No universal jurisdiction-message or loading-screen bundle | Supply approved localized frontend assets and loading screens. |
These are documentation compatibility requirements. This change does not modify an engine, jurisdiction preset, or operator service.
Definition of a complete frontend
A complete frontend implements the common contract, its vertical contract, and every enabled game mechanic. It also implements the operator wrapper and approved jurisdiction behavior.
An AI agent can use this guide to build that frontend. It must still receive game assets, a launch integration, approved rules, and the release's regulatory inputs. It must not invent those inputs or claim certification from passing example tests.
For new fields, update the relevant guide and the release matrix. Retain exact wire identifiers and state whether a field is optional. Regenerate the AI exports through the normal documentation build.