{
  "client_version": "0.8.0.32-037-GENERIC-CATALOG-RUNTIME-V1",
  "protocol": "AMT_CLIENT_V2",
  "mode_policy": "launcher_full_or_legacy_fallback",
  "full_mode": {
    "managed_client": "SA-MP 0.3.7 R1/R3-1",
    "extension": "amt_client/bin/AMTClient.asi",
    "injection": "launcher-only"
  },
  "legacy_mode": {
    "allowed": true,
    "visual_fallback": "base GTA models",
    "gameplay_authority": "server"
  },
  "asset_catalog": "amt_client/catalog.json",
  "vehicle_visual_poc": {
    "enabled": true,
    "base_model": 411,
    "visual_id": 1001,
    "protocol": "vehicle-ID keyed snapshot; Direct IPC VP preferred, vehicle_assignments_v1.txt fallback; assignment seq is also the runtime revision token",
    "runtime": "one private RwObject/node-state instance per assigned SA-MP vehicle ID; assignment-seq changes force entity/node rebind for ID reuse/resync",
    "bridge": "/lpoc carpair broadcasts the actual special vehicle runtime ID; multiple players can keep Visual1001 cars simultaneously",
    "legacy": "assigned vehicles remain base GTA Infernus model 411"
  },
  "character_visual_poc": {
    "enabled": true,
    "base_skin": 29,
    "visual_id": 20001,
    "policy": "render-only per-player private CPed clump/HAnim runtime; owner-keyed local/remote assignment; includes CVehicle::RenderDriverAndPassengers occupant path; local Visual20001 prewarm + server-token correlated ready-gated fallback activation",
    "legacy": "Thunder/stock clients see GTA skin 29",
    "vehicle_occupant_render_v1": "driver/passenger peds keep Visual20001 while seated; live fallback skin29 and CPed RwObject are restored after each occupant render"
  },
  "direct_transport_v1": {
    "enabled": true,
    "launcher_to_amtclient": "PID-scoped Windows named pipes",
    "pipes": "\\\\.\\pipe\\GTA_AMT_{WP|CP|VP}_{game_pid}",
    "snapshot_file_fallback": true,
    "server_to_launcher_ingress": "AMTClient in-process SA-MP CChat::AddMessage hook -> PID-scoped Windows named pipe; chatlog fallback only",
    "phase": "phase5-character-ready-gated-activation-over-existing-samp-command-plus-direct-ingress-and-client-snapshots",
    "ingress_pipe": "\\\\.\\pipe\\GTA_AMT_IN_{game_pid}",
    "chatlog_fallback": true
  },
  "production_session_capability_v1": {
    "enabled": true,
    "protocol_version": 1,
    "trigger": "AMTClient main-thread detects valid SA-MP local player/session",
    "send_path": "SA-MP CInput::Send(\"/lpoc hello <protocol> <session_nonce>\") using revision-specific R1/R3-1 profile",
    "ack": "@AMT|HS|<protocol>|<echoed_nonce>|<server_token> captured by Direct Ingress V1",
    "reset_barrier": "@AMT|RS|<server_token> remains the Launcher bridge state reset/snapshot barrier",
    "validation": "AMTClient accepts FULL session ACK only when protocol and echoed nonce match the current process/session",
    "reconnect": "re-arm with a new nonce when SA-MP player pool/local id session is recreated",
    "manual_fallback": "/lpoc hello remains available for debug",
    "startup_cadence": "V0.8.0.25A prewarms the local Visual20001 asset/private runtime as soon as local SA-MP identity is available; persisted Custom Skin fallback waits for a token-matched cready ACK"
  },
  "vehicle_runtime_revision_v1": {
    "enabled": true,
    "revision_source": "existing server-authoritative VP assignment sequence",
    "purpose": "distinguish a new/rebound vehicle entity even when an intermediate zero snapshot is coalesced by the state bridge",
    "client_action": "when an active vehicle receives a new assignment seq, clear cached CVehicle mapping and node bindings before remapping; private visual RwObject is retained",
    "compatibility": "no server protocol shape change and no new network port; V0.8.0.16 server lifecycle API remains authoritative"
  },
  "character_ready_gate_v1": {
    "enabled": true,
    "request": "@AMT|CRQ|<protocol>|<server_token>|<custom_skin_id>|<fallback_skin>|<visual_id>",
    "client_ready_ack": "/lpoc cready <protocol> <server_token> <visual_id>",
    "validation": "server token + active DB Custom Skin + ownership + enabled custom-skin catalog must all still match",
    "activation_order": "AMTClient private runtime ready -> provisional local render hold -> cready -> server CP assignment broadcast -> server SetPlayerSkin(fallback) -> authoritative CP snapshot releases hold",
    "goal": "do not intentionally expose fallback29 while Visual20001 is still loading/initializing"
  },
  "generic_catalog_runtime_v1": {
    "enabled": true,
    "catalog": "amt_client/catalog.json",
    "capacity": 32,
    "types": [
      "character",
      "weapon",
      "vehicle"
    ],
    "profile_identity": "type + base_id + visual_id + stat_id",
    "asset_layout": "amt_client/assets/{characters|weapons|vehicles}/<visual_id>/{model.dff,texture.txd,asset.json}",
    "vehicle": "catalog base GTA model remains gameplay/physics/network identity; private per-vehicle proxy runtime; V31 transactional staging isolation retained",
    "character": "catalog fallback skin + visual; private per-owner HAnim runtime; ready-gated local activation preserved",
    "weapon": "catalog GTA weapon id + visual/stat; render-only proxy; weapon ID/ammo/gameplay unchanged",
    "distribution": "signed auto updater may add catalog assets without recompiling AMTClient for each Visual ID"
  }
}
