Skip to content

Sync upstream PRs #72 and #73: progression journal, secure updates, updater path fix - #12

Merged
JDS300 merged 6 commits into
mainfrom
sync/upstream-72-journal
Aug 14, 2026
Merged

Sync upstream PRs #72 and #73: progression journal, secure updates, updater path fix#12
JDS300 merged 6 commits into
mainfrom
sync/upstream-72-journal

Conversation

@JDS300

@JDS300 JDS300 commented Aug 14, 2026

Copy link
Copy Markdown
Owner

Third of four staged merges.

Step Upstream PR Contents Status
1 itsspin#67 31571ab themes, SpinTexture, sounds merged (#10)
2 itsspin#68 8a4aef1 attack perimeter, player frames merged (#11)
3 itsspin#72 ca5bc5b progression journal, secure updates this PR
4 itsspin#73 f04c861 Windows updater path fix queued

What 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: 0 is necessary but not sufficient) and upstream's update-manifest self-test.

electron/main.ts is 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 their rendererHealthyForUpdate / maybeAcknowledgePortableRelaunch() hooks running inside that guard. Their new D:/E: drive paths are folded into WINDOWS_LOG_DIRECTORIES rather than lost with the inline list this fork had 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. 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

  • Release quality gate: ALL PASS
  • test_desktop_worker: 25 passing
  • tsc --noEmit (renderer): clean

One gap, stated plainly: the Electron project could not be fully typechecked locally. This merge adds @electron-internal/extract-zip@1.0.5 and this machine has no pnpm to install it, so module resolution fails for spinui-updater.ts. The brace error my hand-merge did introduce was caught and fixed by that same typecheck; CI's pnpm install && pnpm build is what covers the rest.

Note for a follow-up

portable-updater.ts hardcodes https://api.github.com/repos/itsspin/spinips/releases/latest, and linux.publish in package.json points 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 at JDS300/spinips, or disable the updater for Linux builds.

Usefully, that updater already skips draft and prerelease releases and understands semver prerelease ordering — so RC tags are safe to publish without any risk of being auto-offered.

🤖 Generated with Claude Code

itsspin and others added 6 commits August 13, 2026 18:26
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>
@JDS300 JDS300 changed the title Sync upstream PR #72: progression journal and secure updates Sync upstream PRs #72 and #73: progression journal, secure updates, updater path fix Aug 14, 2026
@JDS300

JDS300 commented Aug 14, 2026

Copy link
Copy Markdown
Owner Author

Windows failure fixed by folding in upstream PR itsspin#73

The Windows job failed on upstream's own test, not on this merge — scripts/test-spinui-updater.cjs:156:

actual:   C:\Users\runneradmin\AppData\Local\Temp\...\EverQuest Legends
expected: C:\Users\RUNNER~1\AppData\Local\Temp\...\EverQuest Legends

The fixture root is built from os.tmpdir(), which a Windows runner may expose through an 8.3 alias, while deriveEverQuestRoot() deliberately returns the canonical long path. Linux is unaffected — no 8.3 aliasing — which is why only the Windows job went red.

Upstream's itsspin#73 (8d47fc9) is precisely this fix: it realpaths the expected root before comparing. So itsspin#72 cannot be green on Windows without itsspin#73 — they are a pair, and itsspin#73 has now been merged into this branch as a second merge commit rather than a separate PR. Both stay independently revertable with git revert -m 1 <merge>.

The rest of that job had already passed before the failing step, which is worth recording: tsc -p tsconfig.electron.json && tsc --noEmit && vite build all succeeded, so the hand-merged main.ts compiles — the part I could not verify locally for want of pnpm.

Updated scope of this PR:

Upstream PR Merge commit Contents
itsspin#72 ca5bc5b aa807a0 progression journal, raid context, item intelligence, updaters
itsspin#73 f04c861 883c76a Windows updater path assertion fix

@JDS300
JDS300 merged commit 934325c into main Aug 14, 2026
6 checks passed
@JDS300
JDS300 deleted the sync/upstream-72-journal branch August 14, 2026 12:58
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants