Repository navigation
v1.6.2
Pre-releaseFTK Mod Framework 1.6.2 (preview)
Framework 1.6.2 fixes two problems: automatic bug reports were never
delivered from a real install, and resuming a save that uses content that
isn't installed hung on "Crafting adventure". It adds no new tweaks. Everything
else in 1.6.1
and 1.6.0
applies unchanged.
This is a preview release. It is published as a GitHub pre-release, so the
Stable update channel does not install it. Preview-channel installations,
including 1.6.0 and 1.6.1, receive it; you can also pin v1.6.2 in
Mods > Updates.
Fixes
Automatic bug reports are delivered
Automatic bug reports (on by default under Mods > Settings & Help) send
detected errors and unexpected exits to the public GitHub tracker. Until now none
of them arrived. There were three causes:
- The queue was in a folder the helper refuses. Automatic reports were queued
inBepInEx/ReportingAutomaticDelivery, and the helper only sends requests from
BepInEx/ReportingDelivery. The queue is now
BepInEx/ReportingDelivery/Automatic, with its own lock, pending copy and
receipt. Every helper already shipped accepts it, so no launcher update is
needed. - One stuck report blocked every later one. A saved automatic report now gets
one attempt per launch, with its original ID and bytes. Once it has failed in the
current launch, a newer unexpected-exit or error report replaces it. An
unexpected exit is sent before an error. A report that the helper or the service
can never accept is deleted instead of retried. - A game error used up the allowance. The game's sound engine throws a
NullReferenceExceptioninAkInitializer.OnApplicationFocusat startup on
every launch, with or without mods. It took the only pending slot and one of the
three reports allowed per launch, so later real errors were not reported. It is
no longer reported and no longer counts. Errors already reported in the last 30
days are also skipped before they count. Both stay in the log dump of any
report.
A replaced report that might already have reached GitHub, for example after a
timeout, is never resent under a new ID. See
Reporting a problem.
Saves with missing content are refused instead of hanging
Resuming a save that refers to an enemy, map encounter, item, class, quest or
adventure that is not installed used to stop on "Crafting adventure" for good.
Now, before anything loads, the framework reads the save from Resume or from
Load, checks those identifiers against the installed content and, if any are
missing, shows the game's own dialog Can't load this save. The dialog reads,
for example, "This save uses content that isn't installed: 1 enemy type, 1 map
encounter, 1 item", names the mod when it can, and says the save file has not been
changed. OK returns you to the title screen or the Load menu. LogOutput.log
gets one [save-guard] warning that lists the missing identifiers.
The check only reads the save. If it cannot read a save, it logs a warning and
lets the game load as before. Limits are in
Save compatibility.
Upgrade notes
- Automatic reports from 1.6.1 and earlier were never delivered. The first
launch of 1.6.2 deletes the old queue's files in
BepInEx/ReportingAutomaticDelivery, and the empty folder, without sending
them, and logs one line. Unrecognized files there are left in place. If you
want a problem from an earlier version looked at, use Options > Report Bugs. - While automatic reports are on, an unexpected exit from the last seven days that
was never reported can be reported on the first launch of 1.6.2. - Old saves that use removed content now show "Can't load this save" instead
of hanging. This mostly affects development saves and saves made with a mod that
has since been removed. Reinstall the mod, start a new adventure, or pick another
save from Load. - Stable users stay on 1.5.1 until a later stable release is published.
Preview-channel installations from 0.1.0 up to 1.6.1 on the verified game build
are in the automatic update range; other game builds keep their bundled version. - Tweak choices, Session records and save keys are unchanged from 1.6.1. Make a
backup before testing a preview. - Use a full game restart after updating.
Verification and limits
Game-free checks. The Release build and the full game-free matrix pass:
framework, Tweaks, save content guard, reporting (including the automatic queue),
player-mod and performance tests, installer fixtures, Go helper and catalog
checks, launcher and release-manifest checks, harness tests and the packaging dry
run. The reporting tests' stand-in helper enforces the real helper's path rule, so
a queue the helper would refuse fails them. Both the 1.6.1 helper and the new one
accepted the new queue in an offline run. A build or a game-free test does not
prove in-game behavior.
Live evidence for the save check comes from one macOS test copy, solo
offline, keyboard and mouse (live batch 7):
- Resume refuses a copy of a development save that uses a removed enemy, map
encounter and item: the dialog appears, one warning is logged, OK returns to the
title with Resume selected, and a second attempt refuses again. - Load, then Start, refuses the same way, and OK keeps the Load menu open.
- The save file is unchanged after four refusals.
- A valid save loads through Resume and through Load, and reaches the map. The
check took 45 to 176 ms. - The old automatic queue's removal line was logged once. No
SELF-TEST FAIL, no
[Error]line and no exception from the new code.
Known limitations:
- Save check: classes are stored by position, so a class ID now used by a
different class loads as that class. Only the identifier kinds above are
checked. A co-op client that lacks content the host has is not checked before
the load. Co-op host refusal and title-screen activation mode have not been
played. - Automatic reports: sending is best effort. An automatic error report has
not been delivered live, and Windows and Linux delivery has not been exercised. - Session tweaks are off in online co-op until the co-op contract ships.
- Open live gates from 1.6.0 and 1.6.1: the watchdog's host acknowledgement check
with a real remote client; each softlock signature firing live; a vanilla load
of a save that carries records (#253 L8); a second Find Herb in the same dungeon;
the group shield icon clearing; the Petrified and Dazed icons; the skip-turn
popup fix, which only the Scourge triggers; Skip intro on a platform where the
intro plays; controllers; local multiplayer and online co-op. - Controllers are not supported for Refund movement focus or One-press
inventory. - Windows and Linux/Proton gameplay is unverified. Windows launcher availability
remains a preview; Linux arm64 is helper tooling, not a native ARM game port.
macOS downloads are not notarized and may require right-click > Open. Steam may
need one restart to refresh shortcut artwork.
Known issue, not caused by the framework: on macOS the game can hang when you
quit, inside the game's own sound engine while it unloads its sound banks. Force
quit the game if it does not close.
The verified game assembly remains
94cab5f9be9633f7f85f6f072e0b5b919c605bbecb3414422f8f008d9b2bc1c8.