Sync upstream PRs #72 and #73: progression journal, secure updates, updater path fix - #12
Conversation
Add Loremaster progression journal and secure updates
…indows-path Fix Windows updater path assertion
Takes itsspin/spinips ca5bc5b: the adventure journal with loot and encounter history, raid context tracking from log evidence, item intelligence, and the portable/SpinUI updaters with their manifest builder. Conflicts resolved: - The workflow keeps both CI steps: this fork's explicit fetch of the stock-layout commit, which fetch-depth alone cannot reach, and upstream's update manifest self-test. - electron/main.ts is hand-merged again. This fork's Linux log discovery (Wine/Proton prefixes, Lutris YAML, Steam libraries) and upstream's portable relaunch handling are both kept; their update hooks run inside this fork's guard that shows the window even when renderer setup fails; and their new D:/E: drive paths are folded into WINDOWS_LOG_DIRECTORIES rather than lost with the inline list they replaced. - desktop_worker.py takes upstream's structure whole. Their pending raid kill now carries occurred_at, zone, character and evidence, which this fork's multi-kill dict predates. Rather than reconcile the two inside a merge, the fix is parked here and re-applied on their structure in its own PR, so what came from upstream and what this fork chose to keep stay separately revertable. pendingRaidTargets, its renderer use, and its test are parked with it. Verified: release quality gate ALL PASS, worker tests pass, renderer typechecks. The Electron project could not be fully typechecked here -- this merge adds @electron-internal/extract-zip and this machine has no pnpm to install it -- so CI's pnpm build is what covers it. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Takes itsspin/spinips f04c861. Their test-spinui-updater.cjs compared deriveEverQuestRoot()'s canonical long path against a fixture root built from os.tmpdir(), which a Windows runner may expose through an 8.3 alias, so the assertion read runneradmin against RUNNER~1 and failed. Their fix realpaths the expected root. This lands on the same branch as PR itsspin#72 rather than in its own pull request because itsspin#72 is what introduces that test: the Windows job cannot go green on itsspin#72 alone. Both stay separate merge commits, so either can still be reverted on its own with git revert -m 1. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Windows failure fixed by folding in upstream PR itsspin#73The Windows job failed on upstream's own test, not on this merge — The fixture root is built from Upstream's itsspin#73 ( The rest of that job had already passed before the failing step, which is worth recording: Updated scope of this PR:
|
Third of four staged merges.
31571ab8a4aef1ca5bc5bf04c861What comes in
The adventure journal (loot and encounter history in SQLite), raid context tracked from log evidence, item intelligence, and upstream's own updaters —
portable-updater.ts,spinui-updater.ts, and the manifest builder wired into CI.Conflict resolutions
Workflow keeps both CI steps: this fork's explicit fetch of the stock-layout commit (unreachable from every ref, so
fetch-depth: 0is necessary but not sufficient) and upstream's update-manifest self-test.electron/main.tsis hand-merged. Kept from this fork: Linux log discovery across Wine/Proton prefixes, Lutris YAML and Steam libraries, and the guard that shows the window even when renderer setup fails. Kept from upstream: portable relaunch handling, with theirrendererHealthyForUpdate/maybeAcknowledgePortableRelaunch()hooks running inside that guard. Their newD:/E:drive paths are folded intoWINDOWS_LOG_DIRECTORIESrather than lost with the inline list this fork had replaced.desktop_worker.pytakes upstream's structure whole. Their pending raid kill now carriesoccurred_at,zone,characterandevidence, which this fork's multi-kill dict predates. Reconciling those inside a merge would bury a behaviour change in a sync, so the fix is parked here and re-applied on their structure in a follow-up PR — keeping "what came from upstream" and "what this fork chose to keep" separately revertable.pendingRaidTargets, its renderer use, and its test are parked with it.Verification
ALL PASStest_desktop_worker: 25 passingtsc --noEmit(renderer): cleanOne gap, stated plainly: the Electron project could not be fully typechecked locally. This merge adds
@electron-internal/extract-zip@1.0.5and this machine has no pnpm to install it, so module resolution fails forspinui-updater.ts. The brace error my hand-merge did introduce was caught and fixed by that same typecheck; CI'spnpm install && pnpm buildis what covers the rest.Note for a follow-up
portable-updater.tshardcodeshttps://api.github.com/repos/itsspin/spinips/releases/latest, andlinux.publishinpackage.jsonpoints at upstream too. On this fork's build the in-app updater therefore checks upstream's releases, which do not carry this fork's Linux AppImage. Worth deciding separately: repoint atJDS300/spinips, or disable the updater for Linux builds.Usefully, that updater already skips
draftandprereleasereleases and understands semver prerelease ordering — so RC tags are safe to publish without any risk of being auto-offered.🤖 Generated with Claude Code