Car Boosting and Navigation Pre-Live Test Plan
Last updated
May be stale
This page was last updated ago, on 25 August 2026. Check what it says against the code before relying on it.
This plan is the release gate for the Car Boosting, MESKA, lockpick, hotwire,
engine hint, F1 map, minimap, compass and road-routing work on
release/20260730.
Do not run destructive database checks or promote these changes from a live
branch. Use a development server, a beta database copy and the beta directory
of service-map.
Exit criteria
A release candidate may move to live only when:
- every Critical and High case passes;
- no new client or server Lua errors appear during a two-hour soak;
- no MESKA foreign-key, nil-index or duplicate-registration errors appear;
- non-staff cannot execute any waypoint administration command;
- cold and warm F1 loads succeed in the in-game DHTML panel;
- the minimap route stays aligned during the full driving route;
- Boosting completes once in every contract class;
- reconnect and server-restart persistence checks pass;
- the database backup and rollback owner are recorded; and
- QA, development and server operations sign off the same candidate commits.
Any Critical or High failure blocks release. A Medium failure requires a written acceptance decision and owner. Cosmetic Low failures may be scheduled after release only when they do not obscure instructions, navigation or timers.
Candidate record
Record this before testing:
| Field | Value |
|---|---|
| CityRP branch | release/20260730 |
| CityRP commit | |
service-map branch |
master |
service-map commit |
|
| Web scope | beta only |
| Map | rp_evocity_v4b1_fl2 |
| Road JSON checksum | |
| Game server | |
| Beta database | |
| Tester | |
| Start and finish |
Required test coverage
Use:
- a clean player with no Boosting MESKA paths;
- an existing player with Boosting XP and achievements;
- an RP Assistant;
- a higher staff rank;
- a normal player with no staff access;
- two crew members;
- a player connected before a scripted hot reload;
- default, small and disabled minimap states;
- compass enabled and disabled;
- 1920×1080, 2560×1440 and an ultrawide resolution;
- the minimum and maximum supported HUD scale;
- cold DHTML and map-material caches;
- warm DHTML and map-material caches;
- driver, passenger and on-foot states; and
- player-owned and system-generated Boosting targets.
Capture the client console, server console, relevant database rows, screenshots and profiler samples. Label evidence with the case identifier below.
1. Deployment and startup
DEP-01 — Branch and scope guard
Priority: Critical.
- Confirm the game checkout is
release/20260730. - Confirm no live or production branch is checked out.
- Confirm every
service-mapchange is belowbeta/. - Confirm no production URL or database credential was added.
Expected: only the intended development branch and beta web content are modified.
DEP-02 — Clean server startup
Priority: Critical.
- Start a development server with the beta database.
- Capture the full startup log.
- Join once with a normal player and once with staff.
Expected:
- no Lua errors;
- no failed SQL queries;
- MESKA completes setup;
- Waypoints reports a loaded graph with 1,323 nodes;
- Car Boosting loads once;
- no duplicate network-string, hook or timer warnings; and
meska_metrics_meska_skills_name_fkdoes not fail.
DEP-03 — Hot reload safety
Priority: High.
- Keep one existing player connected.
- Hot reload the Car Boosting and Waypoints code through the normal development workflow.
- Open Skills, F1 Map and the minimap.
- Start and finish one D-class contract.
Expected: the connected player receives missing Boosting paths without reconnecting; no MESKA nil-index occurs; UI hooks and timers are not duplicated.
2. F1 map
MAP-01 — Cold load and layout
Priority: Critical.
- Clear the DHTML cache using the approved development procedure.
- Press
M. - Open the Map tab at every required resolution.
Expected:
- the beta map image loads;
- Categories remain above the location list;
- location rows do not overlap the footer;
- the map surface outside the artwork is
#1a1a1a; - controls remain visible;
- the full artwork fits after reset; and
- the console contains no HTML, JavaScript or material errors.
MAP-02 — Exact projection alignment
Priority: Critical.
- Stand at five widely separated surveyed locations, including both extreme sides of the map.
- Compare the F1 player arrow, minimap centre and corresponding F1 pin.
- Repeat in a vehicle.
Expected: all three use WorldToMapUV against the same 3896×4096 artwork.
No location has progressive X or Y drift toward the image edges.
MAP-03 — Pin selection and centring
Priority: High.
- Click a visible map pin.
- Click the matching location row.
- Click its Set waypoint button.
- Repeat after panning and at minimum and maximum zoom.
Expected: each action selects the same item and moves the pin anchor to the viewport centre. The selected row is scrolled into view. No browser focus or white outline is drawn around the pin.
MAP-04 — Pin clarity
Priority: High.
- Inspect several pin colours at reset, medium and maximum zoom.
- Pan while zoomed.
- Compare stationary and moving frames.
Expected: pin artwork remains sharp and constant in screen size, does not flicker, and stays anchored to its world position.
MAP-05 — Pan, zoom and reset
Priority: Medium.
- Drag the map in every direction.
- Use mouse-wheel zoom and all three control buttons.
- Reset after selecting a pin.
Expected: input remains smooth, zoom is centred correctly, reset fits the full map and no pin moves relative to the artwork.
MAP-06 — Warm cache
Priority: High.
- Complete MAP-01.
- Close and reopen F1 ten times.
- Reconnect and reopen it.
- Inspect requests and load timing.
Expected: the versioned service worker serves the optimized map, scripts,
styles and pin images from cityrp-f1-map-20260730-7. The page shell may
revalidate. No stale earlier-version asset is used.
MAP-07 — Cache update
Priority: High.
- With the previous beta cache present, deploy the candidate asset version.
- Reopen F1.
- Confirm the new cache activates and the earlier version is deleted.
Expected: the candidate map and JavaScript load without requiring players to clear browser data manually.
MAP-08 — Runtime locations and Nearest
Priority: Critical.
- Confirm saved and registered locations appear.
- Move or recreate a dynamic Nearest entity.
- Wait for the next map refresh.
- Select the Nearest row and its action button.
Expected: Nearest entries remain list-only, resolve the current closest entity and never draw a map pin. Ordinary locations refresh without duplicating rows.
MAP-09 — Player direction
Priority: High.
- Rotate the camera and model together on foot.
- Drive straight while free-looking left, right and backwards.
- Repeat as a passenger.
Expected: on foot the arrow follows camera/model facing. While seated it follows the rendered player/vehicle direction and is unaffected by free-look. The 32-pixel base player arrow remains clearly visible without obscuring nearby pins.
MAP-10 — M key toggle
Priority: High.
- Press
Mwith F1 closed. - Press
Magain after the Map tab is active. - Hold
Mdown for at least two seconds after opening and after closing. - Open another F1 tab and press
M. - Focus the hosted map before repeating the close action.
Expected: the first press opens Map, the second closes F1 even after DHTML
focus, and pressing M from a different F1 tab switches to Map. Holding the key
causes exactly one state change, and the M close releases mouse focus, dropdowns
and panels identically to the X button.
3. Minimap and compass
HUD-01 — Context-menu settings
Priority: Critical.
- Hold
Cand open HUD Options → Toggle Minimap. - Select Default Size, Small Size and Toggle Compass.
- Close and reopen the menu after each choice.
- Reconnect.
Expected: child options draw and remain clickable; checkmarks reflect current archived values; settings persist; no old position choices or minimap chat commands exist.
HUD-02 — Minimap controls
Priority: High.
- Test
−, reset and+whileCis held. - Repeat in both minimap sizes and at every HUD scale.
- Release
Cand click the same screen positions.
Expected: the compact 22-pixel-scaled controls do not obscure the player arrow;
only C mode accepts clicks; zoom remains within configured limits; reset
returns to 1.0.
HUD-03 — Minimap presentation
Priority: High.
- Walk and drive across map and artwork boundaries.
- Inspect the frame, corners and area beyond the PNG.
Expected: the border matches other HUD elements, the outer map colour is
#1a1a1a, no north pointer is present, and no redundant destination name or
distance is drawn below the minimap.
HUD-04 — Heading rules
Priority: Critical.
- On foot, rotate the view through 360 degrees.
- Enter a driver seat and drive in all cardinal directions.
- Free-look through 360 degrees while the vehicle keeps its heading.
- Repeat as a passenger.
Expected: on-foot minimap and compass follow camera yaw; seated navigation follows model/vehicle-aligned render yaw; no 90-degree offset or skew occurs.
HUD-05 — Compact compass
Priority: High.
- Enable small minimap mode.
- Rotate slowly through 360 degrees.
- Set and clear a waypoint.
Expected: primary cardinals and numeric subheadings form an even 30-degree sequence; labels do not collide; no waypoint icon appears on the compass.
HUD-06 — Through-wall marker
Priority: Medium.
- Set a waypoint behind a building and outside the minimap crop.
- Approach and pass it.
Expected: the separate world marker and edge-clamped minimap destination remain usable; removing the compass icon does not remove destination guidance.
4. Road navigation
NAV-01 — Graph diagnostics
Priority: Critical.
- Run
!waypointdebug status. - Run
!waypointdebug roads. - Run
!waypointdebug off.
Expected: status prints the packaged JSON path, graph state and active route; roads mode overlays recognized nodes; off removes all debug drawing.
NAV-02 — On-road route
Priority: Critical.
- Set routes between at least six distant location pairs.
- Include inner city, outer city, industrial, docks and mountain approaches.
- Drive each route.
Expected: #0D47A1 follows recognized roads, corners and caps are rounded, the
stroke is clearly visible at the approved thickness, and the route advances
without reversing to completed points.
NAV-03 — Off-road connection
Priority: Critical.
- Start off-road and set an on-road destination.
- Start on-road and set an off-road destination.
- Test both endpoints off-road.
Expected: only the connection between the endpoint and nearest recognized road
uses #546E7A; the road section stays #0D47A1.
NAV-04 — Reroute and arrival
Priority: Critical.
- Leave the shown route by more than three 256-unit cells.
- Rejoin at a later road.
- Enter the destination radius.
Expected: the server recalculates without rapid oscillation, sends the updated route once, and clears navigation on arrival.
NAV-05 — Missing or invalid road data
Priority: High.
- On a development copy, start with missing and malformed road JSON.
- Set a waypoint.
Expected: startup reports the graph failure without crashing; navigation falls back to a direct off-road segment; F1 and minimap remain functional.
5. Waypoint commands and access
CMD-01 — Public commands
Priority: High.
Test:
/waypoint <location>
/waypoint goto <location>
/waypoint clear
/waypoint end
/waypoint stop
/waypoints list
Expected: named navigation and clearing work for a normal player. Staff action
words are not interpreted by /waypoint. /waypoints list prints the
server-authoritative public destination names, categories and matching commands
to the client console without opening Derma.
CMD-02 — Guide bridge
Priority: High.
- Open the New Player Guide.
- Use its map/waypoint action.
Expected: it opens the F1 Map tab through cityrp_open_map; it does not send
/waypoints to chat.
CMD-03 — Command discovery
Priority: High.
- Open F1 Commands as an RP Assistant.
- Locate all waypoint administration commands.
- Repeat as a normal player.
Expected: assistants see each complete example and description below; non-staff do not see the Assistant category.
| Command example | Expected purpose |
|---|---|
!waypointset "Industrial Road" visible |
Save the aimed position |
!waypointcategory add "Fuel Stations" red diamond |
Add or edit a category |
!waypointsetcategory "Inner City BP" "Fuel Stations" |
Move a location |
!waypointhide "Staff Garage" |
Hide a pin |
!waypointshow "Staff Garage" |
Restore a pin |
!waypointdelete "Old Location" |
Delete a saved location |
!waypointplayer Vadar "Inner City BP" |
Assign another player |
!waypointexport |
Print saved JSON |
!waypointdebug roads |
Show routing diagnostics |
CMD-04 — Access enforcement
Priority: Critical.
- Attempt every
!waypoint...administration command as a normal player. - Repeat as RP Assistant and higher staff.
- Check command logs.
Expected: normal players are rejected before callbacks run; assistants and higher staff succeed; every attempt is logged by the normal acommands path.
CMD-05 — Mutation and persistence
Priority: Critical.
- Create a category.
- Save a visible and hidden point.
- Move, hide, show and delete points.
- Export the JSON.
- Restart the server.
Expected: validation messages use the new command syntax; changes persist; hidden points remain directly addressable; the F1 list reflects each mutation after refresh.
CMD-06 — Staff assignment
Priority: High.
- Assign a named location to another player.
- Assign the aimed position.
- Clear it.
- Test invalid and ambiguous player names.
Expected: the intended player alone receives the waypoint; errors are clear; legacy place coordinates are available only through staff assignment.
CMD-07 — Boosting administration
Priority: Critical.
- Confirm
/boostingis no longer registered. - Locate
!boosting admin statuswith its example and description in F1 Commands. - Exercise point, spawn, admin and debug actions as an administrator.
- Repeat as a normal player and test debug as a non-superadmin.
- Add delivery and spawn points, restart, then run both reload actions.
Expected: the acommand access path enforces administrator and debug permissions;
usage messages use !boosting; delivery points persist in
cityrp/plugins/carboosting/<map>.txt; spawn anchors persist in
cityrp/plugins/carboosting/spawns_<map>.txt.
6. Lockpick, hotwire and engine hint
VEH-01 — Lockpick HUD clearance
Priority: High.
- Lockpick at all required resolutions and HUD scales.
- Trigger low durability and bending warnings.
- Move the pick without pressure, then apply and release tension at incorrect and correct angles.
Expected: condition, warning and instructions stay below the barrel and do not overlap the minimap or integrated compass. Guidance arrows are hidden without pressure, appear only while tension is applied and disappear when released.
VEH-02 — Hotwire presentation
Priority: High.
- Start the hotwire task.
- Drag correct and incorrect wires.
- Cancel, retry and complete it.
Expected: the panel matches Car Boosting styling; NO TIME LIMIT is absent; buttons show correct enabled, hover and disabled states; cancelling sends once.
VEH-03 — Hotwire authority
Priority: Critical.
- Submit incomplete, incorrect, malformed and replayed answers.
- Move away, leave the vehicle and disconnect mid-task.
Expected: the server rejects invalid answers, interrupted sessions close, and the client cannot start an engine by forging only the completion message.
VEH-04 — Engine guidance
Priority: Medium.
- Look at an engine-off vehicle with hints enabled.
- Enter its driver seat while the engine remains off.
- Start the engine and re-enter it.
- Enter as a passenger.
- Disable hints.
Expected: the hold-to-start instruction appears only while the engine is off and hints are enabled; entering the driver seat with an engine-off vehicle shows the HUD hint instead of a chat reminder; running vehicles and passengers receive no reminder.
7. Car Boosting contracts
BST-01 — Offer and class gating
Priority: Critical.
- Test MESKA levels 1 through 5.
- Refresh offers and attempt forged acceptance above the player's level.
Expected: D, C, B, A and S unlock at levels 1, 2, 3, 4 and 5; the server rejects unauthorized class acceptance regardless of tablet UI.
BST-02 — Target lifecycle
Priority: Critical.
- Accept one player-owned and one generated target.
- Inspect engine, lock, ownership and reservation state.
- Fail and complete each type.
Expected: targets start with engines off; persistent garage ownership is not transferred or deleted; cleanup releases reservations and generated entities.
BST-03 — Required actions and timing
Priority: Critical.
Test every class and contract archetype.
Expected:
- the initial search window is ten minutes;
- D/C use the baseline window;
- B adds Fake Plate and one tracker allowance;
- A/S add Fake Plate and two tracker allowances;
- the archetype multiplier applies after allowances; and
- timers transition once and cannot be bypassed by re-entry or reconnect.
BST-04 — LimeTrack and police reports
Priority: High.
- Drive with an active tracker at low and high Heat.
- Complete the final challenge with and without a valid driver.
Expected: standard 911 formatting uses LimeTrack™:; reporting frequency follows
Heat; the final location is sent through the correct fallback actor.
BST-05 — Crew contribution and payout
Priority: Critical.
- Invite three tablet carriers.
- Test distant, nearby, accepted and declined members.
- Complete A/S with too few and sufficient members.
- Exercise every contribution source.
Expected: only eligible nearby accepted members join; contribution is recorded;
cash, parts and XP split correctly; crew_boosts increments only for qualifying
successful crews.
BST-05A — Crew controls and realtime roster
Priority: Critical.
- Open the Crew page as an owner with an ungrouped tablet user online.
- Confirm the full Invite button is visible and invite that user.
- Accept the invitation while both Crew pages remain open.
- Leave from the member account without reopening either tablet.
- Rejoin, then use the owner's Kick button and confirmation.
- Disconnect a member while the owner's Crew page remains open.
- Repeat at every required resolution and HUD scale.
Expected: invite and owner controls retain their full width and height; accepted, left, kicked and disconnected members update on every open Crew page without reopening or stealing focus; kicked members receive a notification; only the owner sees Kick and Make Owner; membership changes remain locked during an active contract.
BST-06 — Failure and cleanup
Priority: Critical.
Trigger acquisition timeout, delivery timeout, destruction, abandonment, disconnect and staff termination.
Expected: Heat, metrics, reservations, waypoint, tracker, plate and target state settle exactly once with no orphan hooks or timers.
BST-07 — Target signal
Priority: High.
- Stand at the target, then at 256, 5,000, 9,999 and more than 10,000 units.
- Enter the target vehicle and compare the server state with the HUD.
- Repeat with live-target client adjustment active.
- Repeat the full signal-strength approach in first and third person.
Expected: the target and any position within the full-strength radius show exactly 100%; signal falls smoothly to zero across the doubled 10,000-unit range; server and client calculations agree. Every signal beep remains audible in both camera modes and its interval accelerates as strength increases.
8. MESKA
MSK-01 — Parent registry ordering
Priority: Critical.
- Remove Boosting rows only from a disposable beta test identity/schema.
- Start the server.
- Inspect
meska_skills, thenmeska_metrics.
Expected: meska_skills.name = boosting exists before the metrics upsert; no
foreign-key failure occurs.
MSK-02 — Skills page
Priority: High.
- Open Skills on new and existing players.
- Inspect category, level, XP and achievements.
Expected: Boosting Skill is visible as its own category, all configured Boosting achievements are present, and no Boosting guides are shown. Guidance remains available only through the Boosting tablet.
MSK-03 — D achievement gate
Priority: Critical.
- Use a new player at Boosting level 1 with 0 XP.
- Run an achievement scan.
- Complete one successful job and earn XP.
- Run or wait for the next scan.
Expected: D Is for Driveaway is not awarded at 0 XP and is awarded once
boosting_exp >= 1.
MSK-04 — Metric requirements
Priority: Critical.
- Test a player whose MESKA cache lacks
skills.boosting. - Test each Boosting metric achievement threshold.
Expected: a missing skill is treated as unmet without indexing nil; each achievement awards once at its exact threshold.
MSK-05 — Persistence
Priority: Critical.
- Record Boosting metrics, XP, level and achievements.
- Reconnect.
- Restart the server and reconnect again.
Expected: database and in-memory values agree; no duplicate achievements or XP are granted.
MSK-06 — Reset procedure control
Priority: High.
Confirm no unrestricted MESKA reset command exists. If QA needs a reset, use a reviewed, SteamID-scoped beta database procedure with a backup and reconnect. Never test it against live data.
9. Performance, networking and security
PERF-01 — Client frame cost
Priority: High.
Profile:
- minimap alone;
- minimap with a long route;
- compact compass;
- F1 open with all pins; and
- staff road overlay.
Expected: no sustained frame-time spike or allocation growth; closing F1 releases its hook and panel; disabling the minimap removes its draw work. Record the same stationary, walking, driving and routed samples with the minimap disabled and enabled. The enabled result must not cause a material sustained FPS collapse, and the optimized scissor/route path must not introduce flicker, clipping leaks or broken route joins.
PERF-02 — Server route cost
Priority: High.
- Profile simultaneous routes for the expected peak player count.
- Force off-route recalculation.
- Soak for two hours.
Expected: A-star work remains bounded, recalculation occurs at most on its two-second check and only when route state requires it, and server tick remains within the existing budget.
PERF-03 — Network cadence
Priority: High.
Expected:
- F1 player location sync is no faster than every 0.15 seconds;
- navigation state is sent to DHTML only after a state change;
- map data refresh is no faster than every 30 seconds per open panel;
- server map requests remain rate-limited;
- route points never exceed the 255-point network limit; and
- debug nodes never exceed 4,095.
SEC-01 — DHTML boundary
Priority: Critical.
Confirm the F1 DHTML has general Lua disabled and exposes only the explicit
setWaypoint and endNavigation bridge functions. Runtime coordinates remain
in-memory and are not uploaded to the web service.
SEC-02 — Net-message validation
Priority: Critical.
Send oversized, unknown and repeated destination identifiers, rapid map requests, repeated end requests and invalid hotwire payloads from a development client.
Expected: the server bounds, sanitizes, throttles or safely rejects each input; no arbitrary coordinate or staff mutation path is exposed.
10. Regression suite
Priority: Critical unless stated otherwise.
Confirm:
- normal F1 tabs still open and lay out correctly;
- F1 Commands filters commands by rank and shows player commands;
- the New Player Guide loads with and without Waypoints;
- vehicle ownership, keys, locks,
/engineand ordinary hotwiring still work; - non-Boosting lockpicks retain durability and cancellation behavior;
- HUD, stats, daily bonus and custom bonus context-menu controls still work;
- map material retry and cache validation handle a failed download;
- death and disconnect clear active waypoint state;
- other MESKA skills, metrics and achievements still award normally;
- normal 911 messages remain unchanged;
- non-Boosting vehicle spawn and cleanup behavior is unchanged; and
- Car Boosting disabled state prevents new contracts without corrupting active or saved data.
11. Rollout and rollback
Rollout order
- Freeze and record both candidate commits.
- Back up affected MESKA tables and Car Boosting/Waypoint data files.
- Publish only the
service-map/betacandidate. - Verify the public beta F1 URL and cache update.
- Deploy the CityRP development candidate to one test server.
- Run DEP, MAP, HUD, NAV, CMD, VEH and MSK smoke cases.
- Run the complete Boosting class matrix.
- Complete the two-hour soak and compare logs/performance.
- Obtain QA, development and operations sign-off.
- Schedule live promotion as a separate reviewed change.
Rollback triggers
Rollback immediately for:
- MESKA foreign-key or player-load errors;
- persistent Lua errors;
- route calculation causing server hitching;
- F1 blank map or unusable categories;
- unauthorized waypoint mutations;
- Boosting target ownership loss;
- duplicated payout, XP or achievements; or
- contract cleanup leaving reserved vehicles.
Rollback procedure
- Stop new Boosting contracts.
- Preserve logs and affected player identifiers.
- Revert the game candidate to the recorded previous commit.
- Revert the beta web assets/cache version if the fault is web-only.
- Restore database rows only when the defect changed persistent data and the operations owner approves the scoped restore.
- Restart, run startup smoke checks and confirm active sessions are clean.
- Document cause, impact and retest requirements before another candidate.
Sign-off
| Role | Name | Result | Date | Evidence link |
|---|---|---|---|---|
| QA | ||||
| Development | ||||
| Server operations | ||||
| Product owner |