Two roles#

Catalog Internal paths start at Purpose
ext_01.cat + .dat Extension folder Normal extension files, including diffs
subst_01.cat + .dat Game root Complete substitution of an existing file

subst_ does not turn its content into an XML patch. Check conflicts separately when two extensions substitute one complete file.

Why an edit is invisible#

A packed copy of the same virtual path outranks a loose file. An old catalog can therefore hide a newly edited XML beside it.

List the copies in your own test package:

TEXT
libraries/wiki_demo.xml -> loose: revision 2
libraries/wiki_demo.xml -> ext_01: revision 1

Expect packed revision 1. This illustrates selection; it is neither an actual game file nor console output.

Inspect the package#

Open your CAT with X Catalog Tool. Check the path, matching DAT and relevant entry. Compare that entry with your edited XML. Choose one working source of truth: loose files or rebuilt catalogs.

Keep content.xml outside. Version catalogs have separate rules. For UI substitutions, verify the exact target resource name and extension rather than guessing from your source Lua filename.

Verification boundary#

These loading rules come from the primary guide. The diagram is not an executed game experiment. After packing, repeat the same scenario that worked with your original file set.