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.
- Move each WG declaration to a uniquely named
gui/gen_resources/*.jsonlist. - Replace
itemIDwith an owned dottedR.mods...ID; remove the legacyextensionfield while preserving verifiedpath,entrance, andimpl. - Replace
ModDynAccessor,manager, andon_readywith the exact nativegui.impl.gen.Raccessor. Remove helper readiness gates. - Keep
gf_mod_inject, unique injection names, and owned child carriers only for features augmenting an existing native view. - 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.
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.