Skip to content

BetaDeps v0.7.4 - Vortex installer fix + polish

Choose a tag to compare

@Trashpanda62 Trashpanda62 released this 25 May 16:48
· 50 commits to main since this release

BetaDeps v0.7.4 — Vortex installer fix + polish

Headline hot-fix release. Centerpiece is the Vortex installer fix that unblocks two users today (RonnieJay + Xearokk), but the version also picks up a handful of low-risk improvements that were ready to ship alongside.

Vortex installer fix (the headline)

v0.7.2/v0.7.3 fomod/ModuleConfig.xml used double-hyphens (--) inside XML comments as a stylistic dash. That's illegal per the XML 1.0 spec (Xml_InvalidCommentChars), and Vortex's FOMOD parser correctly rejected it at line 7 col 32 the moment a user clicked "Install."

Two users reported the failure within hours of the v0.7.2 push: same System.Xml.XmlException stack from FomodInstaller.Scripting.XmlScript.XmlScriptType.Validate. Both ended up installing manually, which worked fine because Bannerlord's launcher never touches fomod/. But the Vortex path advertised on the Nexus description was broken from v0.7.2 through v0.7.3.

v0.7.4 swaps the double-hyphens for colons. The Vortex FOMOD installer parses it cleanly.

Build-time XML lint (so this doesn't happen again)

New scripts/Validate-Xml.ps1 walks every shipped .xml file and checks for two failure modes: -- inside XML comment bodies (the exact bug above) and basic well-formedness via XmlDocument.LoadXml. Wired into Build-Phase1.ps1 between the DLL verification step and the zip-packaging step, so the bug class literally cannot ship again. Escape hatch via $env:BETADEPS_SKIP_XML_LINT='1' for emergency overrides.

Session-summary log lines

PatchShield and SaveShield each now write a one-line session summary to runtime.log at AppDomain.ProcessExit. The lines look like:

[BetaDeps.PatchShield] SESSION SUMMARY: shielded 590 method(s),
  unpatched 4 prefix(es), swallowed 6 exception(s)
  (MissingMethod 4, MissingField 1, TypeLoad 1, other 0).
  Top unpatched owner: AIInfluence (3).

[BetaDeps.SaveShield] SESSION SUMMARY: shielded 7 entry-point(s),
  caught 3 failure(s) (duplicate-key 0, other 3),
  swallowed 3, swallow-mode ON. Top CULPRIT: Reinforcement System (3).

Lets users grepping runtime.log get the gist in one line per shield instead of scanning the whole file. Mod authors fielding bug reports can ask for just the SESSION SUMMARY line as a first pass.

Catalog-Triage script

New scripts/Catalog-Triage.ps1 reads Modules\BetaDeps\failed-mods-catalog.txt (the SaveShield append-only ledger from v0.7.3) and prints a sorted leaderboard of which mods have caught failures across all your sessions. Output looks like:

MOD                               DIST  TOTAL  LATEST                EXCEPTIONS
--------------------------------  ----  -----  --------------------  ----------
Reinforcement System              3     8      2026-05-25 02:26:51   System.MissingMethodException (x6); System.TypeLoadException (x2)
Retinues                          1     4      2026-05-25 01:57:53   System.TypeLoadException (x4)

Drives the v1.0 wide-fleet bug bash directly — mods with high DIST (distinct failure modes) are the priority targets.

Direct-API guide updated for v0.7.3+

docs/BETADEPS-NATIVE-API.md was stuck on v0.7.1 status. v0.7.4 brings it current: full SaveShield section documenting the public surface (FailureRecord 18-field schema, RecentFailures ring buffer, three render methods, ToggleSwallow, ModManifest, FailedModsCatalog), a PatchShield.UnpatchedOwnerCounts subsection for the per-mod auto-unpatch tracker. This is the doc the Nexus "Mod Creators" section links to, so authors clicking through now get current info.

Who needs to update

  • Users who tried Vortex install on v0.7.2/v0.7.3 and got the XML error: delete the broken install (or leave your manual install in place, they don't conflict), uninstall the v0.7.2/v0.7.3 entry from Vortex, then drop the v0.7.4 zip in. Wizard will work this time.
  • Users who manually installed v0.7.3 and are happy with it: no action needed. The v0.7.4 deltas are all polish improvements (session summaries, XML lint, docs); no behavior change for already-working installs.
  • Mod authors with BetaDeps-native code: read the new SaveShield section in docs/BETADEPS-NATIVE-API.md if you want to query SaveShield's diagnostic state from your own code.

Lesson learned

XML comments cannot contain -- anywhere in their content. The spec is explicit and parsers correctly reject it. v0.7.4's build-time lint enforces this from now on.