tgiann-hotwire support (client + server) — GiveVehicleKey, RemoveVehicleKey (falls back to ignition removal, as this system has no native removeKey export by design)
Startup banners (server + client) expanded to show every detected module: Framework, Inventory, Target, Fuel, Vehicle Key, Garage, Banking, Notify, Progressbar, Stress (previously only 3–6 were shown depending on side)
RPS.PrintBanner redesigned with a fancier double-line box, centered title, ✔/✖ color-coded status icons (green = detected, red = none/unknown), and a version + timestamp footer
New table/string utilities in shared/core.lua: RPS.TableContains, RPS.MergeTable, RPS.TableLength, RPS.Trim, RPS.Split, RPS.Capitalise
No such export GetCoreObject in resource qbx_core (client) — same root cause as the server-side fix above, but on the client's _Core detection retry loop. The QBX branch now breaks out of the loop immediately instead of calling a non-existent export every 500ms forever.
Silent QBX data loss in GetPlayerData, GetCoreConfig, GetJobs (client + server) — these functions all started with local c = GetCore(); if not c then return {} end. Since _Core is intentionally nil for QBX (see fix above), this guard always short-circuited before reaching the QBX-specific branch below it — meaning GetPlayerData() silently returned {} for every QBX player, and GetCoreConfig()/GetJobs() always returned {} on QBX servers, even though working QBX-specific code existed a few lines later that never ran. Each function now checks _Lib.Framework == 'qbx'before the GetCore() guard, so the QBX path no longer depends on a core object that doesn't exist. GetCoreConfig on QBX now explicitly documents that it returns {} (no equivalent export exists) rather than silently failing for an unrelated reason.
No such export GetCoreObject in resource qbx_core — QBX does not expose GetCoreObject; the QBX branch now sets _Core = nil since all QBX calls go through exports.qbx_core directly
attempt to index a nil value (local '_Lib') in integration/server/inventory.lua — added a nil-guard immediately after reading _G.RPS_Lib, so a failed framework init produces a clear error instead of a cascading crash
attempt to index a nil value (field 'Callback') in integration/server/inventory.lua — the callback registration ran before framework/server/init.lua finished setting up _Lib.Callback; it's now wrapped in a polling CreateThread that waits for _Lib.Callback to exist before registering
Startup banner misalignment — box-drawing border width didn't account for the ✔/✖ status icon prefix or footer text length, causing right-edge misalignment on every row; rewritten with a single-pass content-width calculation and verified against a standalone Lua test harness
config.lua comment blocks and _validValues tables updated to reflect every newly supported system (Inventory, Target, Fuel, VehicleKey, Garage, Stress)
fxmanifest.lua updated to register integration/client/stress.lua, integration/server/stress.lua, and integration/server/garage.lua
Version bumped 1.0.0 → 2.0.0 in fxmanifest.lua, shared/core.lua, and README.md