Reload the data owner as well as the resource
A fresh section does not replace data already copied into a Python cache. messages_panel_reader.readXML returns its cached tuple immediately for a known path, and the module-level GuiColorsLoader.load reuses an existing singleton. Calling those entry points again is not a general reload operation.
For your own data, build a new configuration rather than updating a retained dictionary in place, so removed entries do not survive by accident. Then explicitly apply the new state to its consumer. For images, models, Python code, archives and framework registrations, use the separate invalidation boundaries; a section purge is not a universal asset reload.
Image bytes, texture IDs and UI links
A resource path, its bytes and an onscreen image reference are different values. The current image helper makes each boundary explicit:
| Value | Source operation | Use boundary |
|---|---|---|
| Virtual file path | readLocalImage(path) opens a section and reads its asBinary value. | The result is bytes, or None for a missing section; it has not been assigned to a GUI component. |
| Mapped texture ID | ImageHelper.getMemoryTexturePath(image, temp) returns the mapping helper's result. | Despite the name, this is an ID, not a filesystem path. Validate the result and retain the ID required by its cleanup owner. |
| Formatted UI link | getTextureLinkByID(imageID, prefix) prefixes the ID for its consumer. | Link formatting does not load new bytes or validate the mapping. Inspect the receiving view/model's expected representation. |
For an owned GUI.Window or GUI.Simple image, follow the virtual texture-path example. For a view that consumes mapped images, follow that view's ID/link contract and release its owned mappings separately. Do not treat a binary blob, mapped ID and formatted link as interchangeable arguments.
readLocalImage contains no explicit purge step. Reading bytes, receiving an ID or formatting a link is not proof that replacing a same-path image refreshed the renderer. The image-cache owner adds another lifetime boundary.
Evidence and invalidation
ResMgr can establish useful evidence for a resource path, but cache behavior still
belongs to the framework that loaded the resource. Pair a ResMgr check with the
relevant owner page before deciding whether view reconstruction, application reconstruction, or
a full restart is required.
- Use Resource & Cache Invalidation for the cross-system refresh matrix.
- Use Resources & Models for engine model and matrix ownership.
- Use Resources & Localization for generated accessors and localized text.
- Use Gameface Resources for map entries,
coui://URLs, and browser assets.
Verification checklist
- The path being tested is the runtime virtual path, not only a local filesystem path.
- The package containing the resource is active for the target client version.
- The current client source still calls the same path, accessor, or section key.
- The higher-level owner has reached its readiness boundary before the value is consumed.
- Stale-resource behavior was retested after a full restart before adding code fallbacks.
A resource suffix does not determine its representation
Inspect a selected resource's content before choosing a reader. The public plane.model contains a visual reference, plane.visual_processed exposes node/transform and material references, and noise.texanim lists texture entries as readable structural text. These suffixes alone do not establish that the inspected file is opaque binary data or ordinary source XML.
Converted repository text describes an extracted representation. It is not the installed packed bytes, complete compiled geometry or the texture pixels named by those references. A filename-shaped root may also come from the converter. Keep content classification, schema interpretation and native resource loading separate; readable text is not proof of strict XML validity, asset completeness or successful rendering.
These representative files and the repository's conversion source were inspected statically. No converter, asset parser, resource loader or native API was executed, and no installed-asset parity was established. Check the actual member being used rather than extending these examples into a claim that every resource with the same suffix has the same format.