Open-World Narrative · Guides & deep dives

Feel-Test CI Runbook

Run the focused Unreal automation before pushing a feel-test change:

2sections1 minread1table

On this page

The nightly V5 Gauntlet plan runs V5.Tests.GoldenReplay first, then every scenario returned by UV5_Test_FeelTestCatalog::BuildFeelTestScenarios. Failures block the affected cell release gate because the scenarios cover the cell-specific feel promises in features section "Cell Feel Tests".

Failure Modes#

Signal Likely cause Required triage
Missing scenario record FeelTests/*.feeltest.json and the C++ catalog no longer match Add or remove both records in the same change, then rerun validate-cells.py and V5.Tests.Feel.Catalog
Golden replay output mismatch Deterministic input stream changed without updating expected outputs Confirm the gameplay change is intended, update expected outputs, and rerun V5.Tests.GoldenReplay
Gauntlet entry missing UV5_Test_GauntletDriver::BuildNightlyRun stopped wiring a catalog scenario Restore the entry before the nightly gate can pass
Runtime timeout The authored scenario exceeded its expected duration plus buffer Inspect automation capture, tighten the scenario path, or raise the timeout with producer approval
Criteria regression One or more scenario success criteria did not emit a pass signal Fix the owning system or update the criteria only when the feature promise changed

Local Verification#

Run the focused Unreal automation before pushing a feel-test change:

bash
runuser -u ueagent -- /root/workspace/UnrealEngine-5.5/Engine/Binaries/Linux/UnrealEditor-Cmd \
  /root/workspace/oshun-nisaba/V5/ue/V5.uproject \
  -NullRHI -NoSound -Unattended -NoSplash -NoP4 \
  -TestExit="Automation Test Queue Empty" \
  -ExecCmds="Automation RunTests V5.Tests; Quit"

Also run the docs and cell validators because the JSON scenario records are release-gate inputs:

bash
python3 V5/tools/validate-v5-docs.py
python3 V5/tools/validate-cells.py
pytest -q V5/tools/test_validate_v5_docs.py V5/tools/test_validate_cells.py