You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
This commit was created on GitHub.com and signed with GitHub鈥檚 verified signature.
Bug Fixes
redis
restore key scanning after the redis 6 upgrade. (b6598c4)
redis 5 changed SCAN in three ways that this app depended on:
the cursor is passed as a string, not a number. Passing a number now
throws "arguments[1]" must be of type "string | Buffer", which is why
the key list came back empty
the cursor comes back as a string too
HSCAN renamed its reply field from tuples to entries
The app counts cursors in numbers and checks them for truthiness in several
places, where the string '0' would be wrongly truthy, so the conversion is
done at the redis boundary rather than threaded through. The same three
changes affected hScan/sScan/zScan behind useCursorScanner, so hash, set and
sorted set contents were broken in the same way.
Also fixes the macOS e2e failure: the window is created asynchronously and evaluate could run before it existed, so getAllWindows()[0] was
undefined. beforeAll now waits for the first window. afterAll no longer
throws a second, misleading error when launch itself failed.
Claude-Session: https://claude.ai/code/session_01PKe4oRSiqf3CeVyWxFv5xw
Continuous Integration
unblock the release gate and clear the remaining advisories. (7b85df9)
The release draft job waits on every check for the commit, and Dependabot
reports its security updates as one of them, so a single failing security
update stopped the release even though all ten CI jobs passed. That check is
now ignored: a dependency with no safe version available yet should not be
able to block releasing.
The Dependabot run itself failed with security_update_not_possible for
minimatch, reporting 3.1.2 as the latest resolvable version against a
lowest-non-vulnerable of 3.1.4. Nothing actually pinned it there. The
dependants ask for ^3.0.4, which already allows the patched release; the
lockfile simply still held a resolution from before that release existed and yarn upgrade only touches direct dependencies.
Every remaining open advisory turned out to be the same stale-resolution
pattern, so those entries were re-resolved too:
brace-expansion 1.1.11 -> 1.1.18, 2.0.1 -> 2.1.4
js-yaml 4.1.0 -> 4.3.2
lodash 4.17.21 -> 4.18.1
minimatch 3.1.2 -> 3.1.5, 5.1.0 -> 5.1.9
tmp 0.2.1 -> 0.2.7
No manifest ranges changed, so this is a lockfile refresh rather than an
upgrade. Open alerts go from 13 to 0; they were 146 before the dependency
work started.
Claude-Session: https://claude.ai/code/session_01PKe4oRSiqf3CeVyWxFv5xw
release
publish artifacts again and stop snap from blocking. (5ea8d34)
Nothing has been published for two runs, including the jobs that reported
success. package.json still read 2.3.0, and v2.3.0 is a published pre-release
from 2023, so electron-builder found an existing pre-release where it wanted a
draft and skipped every file:
GitHub release not created reason=existing type not compatible with
publishing type tag=v2.3.0 existingType=pre-release publishingType=draft
Bumping to 2.4.0 gives the workflow a tag it can actually create.
The Snap Store then rejected the upload with "Exported credentials are no
longer valid", which failed the ubuntu job and, through fail-fast, cancelled
windows. snapcraft 7 replaced the auth format that action-snapcraft@v1 used to
log in with, so the existing token cannot work as-is and needs regenerating
with snapcraft export-login.
Until then the store should not gate the release. electron-builder now
publishes the snap to GitHub only, and the store upload is a separate
best-effort step, on edge to match the channel electron-builder defaulted to
when it owned the upload. The matrix no longer fails fast either, so one
platform cannot discard artifacts the others already built.
Claude-Session: https://claude.ai/code/session_01PKe4oRSiqf3CeVyWxFv5xw
button contrast and invalid table nesting after the Tailwind 4 upgrade. (38e3845)
Tailwind 4 moved utilities into a cascade layer, and unlayered rules beat
any layer regardless of specificity. Button.vue styles every button through
a global button { @apply text-gray-500 }, which therefore started
overriding the text colour utilities its own variants set. PrimaryButton
rendered grey-on-blue. Moving those defaults into @layer base puts them
back below utilities.
Vue builds elements through createElement, so unlike the HTML parser it
does not insert an implicit tbody. Three tables put directly inside
, producing invalid DOM and dev-mode nesting warnings; the other
three tables in the app already had one.
Also fixes a race the Electron upgrade left in the e2e test: it still waited
on `ready-to-show`, which no longer fires now that the window is shown once
loadURL resolves. It only passed when the check happened to run after the
window appeared. It waits on `show` instead.
Claude-Session: https://claude.ai/code/session_01PKe4oRSiqf3CeVyWxFv5xw
adding and editing set keys. (0a3f79e)
Creating a set passed the name ref to sAdd instead of name.value, unlike
every other branch of the switch. The call rejected, and because save() had
no error handling the rejection went unhandled: the modal stayed open, no
toast appeared, and nothing reached redis. Both are fixed, so a failure of
any key type now surfaces as an error toast instead of silence.
Editing a set member also added the row index back as a member. key is the
position in the rendered list, which is meaningful as a score for a sorted
set but not for a set, where only the new value belongs.
Both predate the dependency upgrade.
Claude-Session: https://claude.ai/code/session_01PKe4oRSiqf3CeVyWxFv5xw
crash when the selected server is not in the list. (c15fb36) serversStore.selected is only assigned after redis.connect() resolves,
but connected flips to true inside the ready handler that fires during
it, so NoKeySelected could render and look up an empty key. Deleting the
selected server leaves the same dangling reference.
Both routes go through representServer, so that is where the missing server
is handled rather than at each call site.
Claude-Session: https://claude.ai/code/session_01PKe4oRSiqf3CeVyWxFv5xw
Build System
deps-dev
bump vite from 3.2.5 to 3.2.7. (36b47e4)
Bumps vite from 3.2.5 to 3.2.7.
modernize GitHub workflows. (8cd5f85)
Several pinned actions had stopped working rather than just aged.
Runtimes GitHub no longer runs:
the local release-notes action still declared node12, now node24
samuelmeuli/action-electron-builder is unmaintained since 2020 and also
declares node12, so electron-builder is invoked directly instead
Removed GitHub features:
::set-output replaced with $GITHUB_OUTPUT, in both release.yml and the
release-notes action, which needs the heredoc form for its multi-line
release notes
Action bumps: checkout and setup-node v2 -> v5, action-gh-release v1 -> v3,
create-pull-request v3 -> v8, wait-on-check-action v0.2 -> v1.9.1,
delete-draft-releases v1 -> v3, action-snapcraft v1 -> v2. The snapcraft
action dropped its login inputs in v2, so the store credentials now reach
electron-builder through SNAPCRAFT_STORE_CREDENTIALS instead.
Node 14/16 -> 24, matching the engines field after the Electron upgrade.
Also two pre-existing bugs: the pull_request triggers filtered on
package-lock.json in a yarn project, so lockfile changes never triggered
the lint and test workflows, and plain yarn install let CI drift from the
lockfile, now --frozen-lockfile.
Claude-Session: https://claude.ai/code/session_01PKe4oRSiqf3CeVyWxFv5xw
Chores
Dependency updates
upgrade all dependencies to latest. (9917231)
The project had been idle for a while and every dependency was behind.
Upgrades follow each project's official migration guide.
Toolchain:
vite configs renamed to .mjs and moved off __dirname / bare JSON imports
ssh2 and redis marked external in the preload build; the new bundler
otherwise tries to inline their native .node binaries
typescript 4.9 -> 7, with @typescript/typescript6 alongside it because
vue-tsc and typescript-eslint both still need the TypeScript 6 JS API
eslint 8 -> 10, migrated to flat config; eslint-plugin-vue was installed
but never wired up, so it is enabled now
Electron 19 -> 44:
preload is sandboxed by default since Electron 20 and this one loads
ssh2/redis from node_modules, so sandbox is disabled explicitly
the window is shown once loadURL resolves; ready-to-show never fires for
a hidden window on Wayland, so the app came up invisible
custom-electron-titlebar 4.1 -> 4.4 replaces the hand-rolled menu IPC
with the library's own setupTitlebar/attachTitlebarToWindow
redis 4 -> 6:
dropped the @redis/client/dist/lib internal imports
multiExecutor is gone; rebuilt on top of client.multi().addCommand()
command names no longer live on RedisClient.prototype
Tailwind 3 -> 4 via @tailwindcss/upgrade, plus @reference in the .vue
style blocks that use @apply.
Also: pinia 2 -> 4, vue 3.2 -> 3.5, lowdb 3 -> 7, splitpanes 3 -> 4,
floating-vue beta -> 5.
Removed @types/node_redis, @types/splitpanes, autoprefixer and
postcss-import as no longer needed.
Fixes found along the way:
SetContent passed its commands to multi(), which ignores arguments, so
editing a set item silently did nothing
contextBridge rebuilds an Error without its message and redis v6 wraps
socket failures in an empty AggregateError, which together turned every
error toast into a bare "Error"
Claude-Session: https://claude.ai/code/session_01PKe4oRSiqf3CeVyWxFv5xw
Other Changes
Merge pull request #72 from ekvedaras/dependabot/npm_and_yarn/vite-3.2.7. (c089ef6)
build(deps-dev): bump vite from 3.2.5 to 3.2.7
Merge pull request #73 from ekvedaras/dependabot/npm_and_yarn/semver-6.3.1. (b280a41)
Merge pull request #74 from ekvedaras/dependabot/npm_and_yarn/word-wrap-1.2.4. (198a34f)
build(deps): bump word-wrap from 1.2.3 to 1.2.4
Merge pull request #78 from ekvedaras/dependabot/npm_and_yarn/get-func-name-2.0.2. (70b2ce9)
Merge pull request #80 from ekvedaras/dependabot/npm_and_yarn/postcss-8.4.31. (7a5de24)
Merge pull request #84 from ekvedaras/dependabot/npm_and_yarn/vite-3.2.8. (ef472a3)
build(deps-dev): bump vite from 3.2.7 to 3.2.8
Merge pull request #85 from ekvedaras/dependabot/npm_and_yarn/vite-3.2.10. (61876d5)
build(deps-dev): bump vite from 3.2.8 to 3.2.10
Merge pull request #86 from ekvedaras/dependabot/npm_and_yarn/tar-6.2.1. (049f499)
build(deps): bump tar from 6.1.11 to 6.2.1
Merge pull request #87 from ekvedaras/dependabot/npm_and_yarn/ejs-3.1.10. (a3c0fdb)
build(deps): bump ejs from 3.1.8 to 3.1.10
Merge pull request #88 from ekvedaras/dependabot/npm_and_yarn/braces-3.0.3. (d37de93)
build(deps): bump braces from 3.0.2 to 3.0.3
Merge pull request #89 from ekvedaras/dependabot/npm_and_yarn/micromatch-4.0.8. (38cd252)
build(deps): bump micromatch from 4.0.4 to 4.0.8
Merge pull request #90 from ekvedaras/dependabot/npm_and_yarn/electron-updater-6.3.0. (7fc087d)
build(deps): bump electron-updater from 5.3.0 to 6.3.0
Merge pull request #91 from ekvedaras/dependabot/npm_and_yarn/vite-3.2.11. (dff2068)
build(deps-dev): bump vite from 3.2.10 to 3.2.11
Merge pull request #94 from ekvedaras/dependabot/npm_and_yarn/cross-spawn-7.0.6. (c4399ae)
build(deps): bump cross-spawn from 7.0.3 to 7.0.6
Merge pull request #98 from ekvedaras/dependabot/npm_and_yarn/vite-4.5.6. (6852ed3)
build(deps-dev): bump vite from 3.2.11 to 4.5.6
Merge pull request #136 from ekvedaras/chore/modernize-dependencies. (4790198)
chore: modernize dependencies, Electron 44, and CI workflows
Merge pull request #137 from ekvedaras/fix/security-alerts-and-release-gate. (a307bf1)
fix(ci): unblock the release gate and clear the remaining advisories
Merge pull request #138 from ekvedaras/fix/release-publishing. (1dc6b25)
fix(release): publish artifacts again and stop snap from blocking