Update regression workflow

A client update can break imports, generated contracts, hook signatures, resource lookup, event timing, and UI ownership independently. Test the narrow contract your mod depends on before assuming a visible failure belongs to the whole feature.

Area What to verify Failure signal
Imports Module paths, optional feature gates, Python 2-compatible dependencies. Loader traceback or a feature disabled earlier than intended.
Hooks Target existence, descriptor type, signature, return value, wrapper ownership. Missing calls, duplicate calls, swallowed return values, or stale restoration.
Events Subscription identity, firing owner, argument shape, ordering, teardown path. Handlers firing in the wrong context or surviving cleanup.
Resources Archive path, virtual path, generated accessor, native declaration for the target WG version or legacy resource-map entry, cache behavior. Changed files not appearing, missing layouts, or stale browser/SWF assets.
Generated contracts View aliases, model fields, transaction APIs, resource IDs, route names. Python succeeds while the UI fails to render or update.
Lifecycle anchors Login, hangar, battle, replay, disconnect, and return-to-lobby transitions. Work starts before the owner is ready or after it is invalid.

Replay rewind is a high-risk transition, but its implementation details belong in Results & Replays. Use this page to decide what changed after an update; use the replay page for time-warp recovery ownership.

WG 2.4.1 Gameface migration checklist

WG 2.4.1 replaces helper-managed resource registration; it does not replace the Wulf window, parent-view, model, DOM, sizing, input, or cleanup contracts.

  1. Move each WG declaration to a uniquely named gui/gen_resources/*.json list.
  2. Replace itemID with an owned dotted R.mods... ID; remove the legacy extension field while preserving verified path, entrance, and impl.
  3. Replace ModDynAccessor, manager, and on_ready with the exact native gui.impl.gen.R accessor. Remove helper readiness gates.
  4. Keep gf_mod_inject, unique injection names, and owned child carriers only for features augmenting an existing native view.
  5. Verify exact JSON/Python ID parity, strict JSON, packaged paths, a non-negative accessor, one attachment or window, repeated open/close cleanup, and absence of duplicate-resource, unknown-type, missing-path, or deprecated-helper warnings.

See Resources & Registration.

Transition test matrix

  • Clean login to hangar with no prior cached state.
  • Hangar reload or account synchronization after the initial login.
  • Battle entry, respawn or vehicle replacement when applicable, and normal battle exit.
  • Replay playback, one rewind, repeated rewinds, and rewind while the feature is disabled.
  • Disconnect, reconnect, and return to lobby after an interrupted context.

Logging and diagnostics

  • Use a named logger per mod and include useful context such as arena ID, vehicle ID, request type, or retry count.
  • Log exceptions around fragile private APIs without flooding high-frequency ticks.
  • Structured JSON-lines logs are useful for payloads and state machines.
  • Debug helpers should use deliberate modifier hotkeys and state whether each action is visual-only, local-only, or server-changing.
  • Never log web tokens, full private endpoints, or credentials.

Archive and filesystem safety

  • Resolve every archive destination and verify it remains beneath the intended extraction root.
  • Transactional writes and staging prevent partial configuration and package state.
  • Do not trust archive member names or remote filenames.