Skip to content

Release Candidate v1.0#467

Merged
achou11 merged 27 commits intorelease/v1.xfrom
rc/v1.0
Jan 29, 2026
Merged

Release Candidate v1.0#467
achou11 merged 27 commits intorelease/v1.xfrom
rc/v1.0

Conversation

@awana-release-bot
Copy link
Contributor

This PR tracks QA of the release candidate for v1.0.

🍒 All changes to this branch should be cherry-picked from main.

⚠️ Only add bug fixes, copy edits and translation updates during the QA process.

🧪 Create a new Release Candidate build by commenting on this PR with the /build-rc command.

🚧 An initial Release Candidate build will be triggered shortly, and the build URL will be posted here.

🚀 Merging this PR will trigger a release build.

@awana-release-bot
Copy link
Contributor Author

🚧 Release candidate build based on efb1aee (potential merge of 25fff58). Assets can be found in the Artifacts section of https://github.com/digidem/comapeo-desktop/actions/runs/20247667038

Updates the bounding box used for the map where there's no data to show.
Something I learned via
digidem/comapeo-map-server#2 (comment)
Fixes #470 

Now we clear the relevant editing state when leaving the page, whether
it's navigating to a different observation or navigating away from the
observation details altogether.

Probably need to rethink the global editing state setup at some point.
Feels pretty fragile and annoying to manage, but not sure if there are
better approaches.
Seeing an [error on
Sentry](https://awana-digital.sentry.io/issues/7114347194/) that's
identical to what's shown in
maplibre/maplibre-gl-js#6730 . Upgrades
`maplibre-gl-js` to include the fix for the referenced issue.
@awana-lockfile-bot
Copy link

awana-lockfile-bot bot commented Dec 17, 2025

package-lock.json changes

Summary

Status Count
ADDED 5
UPDATED 260
DOWNGRADED 1
REMOVED 9
Click to toggle table visibility
Name Status Previous Current
@babel/code-frame UPDATED 7.27.1 7.28.6
@babel/compat-data UPDATED 7.28.5 7.28.6
@babel/core UPDATED 7.28.5 7.28.6
@babel/generator UPDATED 7.28.5 7.28.6
@babel/helper-annotate-as-pure REMOVED 7.27.3 -
@babel/helper-compilation-targets UPDATED 7.27.2 7.28.6
@babel/helper-create-class-features-plugin REMOVED 7.28.5 -
@babel/helper-member-expression-to-functions REMOVED 7.28.5 -
@babel/helper-module-imports UPDATED 7.27.1 7.28.6
@babel/helper-module-transforms UPDATED 7.28.3 7.28.6
@babel/helper-optimise-call-expression REMOVED 7.27.1 -
@babel/helper-plugin-utils UPDATED 7.27.1 7.28.6
@babel/helper-replace-supers REMOVED 7.27.1 -
@babel/helper-skip-transparent-expression-wrappers REMOVED 7.27.1 -
@babel/helpers UPDATED 7.28.4 7.28.6
@babel/parser UPDATED 7.28.5 7.28.6
@babel/plugin-syntax-jsx UPDATED 7.27.1 7.28.6
@babel/plugin-syntax-typescript UPDATED 7.27.1 7.28.6
@babel/plugin-transform-modules-commonjs REMOVED 7.27.1 -
@babel/plugin-transform-typescript REMOVED 7.28.5 -
@babel/preset-typescript REMOVED 7.28.5 -
@babel/runtime UPDATED 7.28.4 7.28.6
@babel/template UPDATED 7.27.2 7.28.6
@babel/traverse UPDATED 7.28.5 7.28.6
@babel/types UPDATED 7.28.5 7.28.6
@electron-forge/cli UPDATED 7.10.2 7.11.1
@electron-forge/core-utils UPDATED 7.10.2 7.11.1
@electron-forge/core UPDATED 7.10.2 7.11.1
@electron-forge/maker-base UPDATED 7.10.2 7.11.1
@electron-forge/maker-deb UPDATED 7.10.2 7.11.1
@electron-forge/maker-dmg UPDATED 7.10.2 7.11.1
@electron-forge/maker-rpm UPDATED 7.10.2 7.11.1
@electron-forge/maker-squirrel UPDATED 7.10.2 7.11.1
@electron-forge/maker-zip UPDATED 7.10.2 7.11.1
@electron-forge/plugin-auto-unpack-natives UPDATED 7.10.2 7.11.1
@electron-forge/plugin-base UPDATED 7.10.2 7.11.1
@electron-forge/plugin-fuses UPDATED 7.10.2 7.11.1
@electron-forge/publisher-base UPDATED 7.10.2 7.11.1
@electron-forge/shared-types UPDATED 7.10.2 7.11.1
@electron-forge/template-base UPDATED 7.10.2 7.11.1
@electron-forge/template-vite-typescript UPDATED 7.10.2 7.11.1
@electron-forge/template-vite UPDATED 7.10.2 7.11.1
@electron-forge/template-webpack-typescript UPDATED 7.10.2 7.11.1
@electron-forge/template-webpack UPDATED 7.10.2 7.11.1
@electron-forge/tracer UPDATED 7.10.2 7.11.1
@emnapi/core UPDATED 1.7.1 1.8.1
@emnapi/runtime UPDATED 1.7.1 1.8.1
@esbuild/aix-ppc64 UPDATED 0.27.1 0.27.2
@esbuild/android-arm UPDATED 0.27.1 0.27.2
@esbuild/android-arm64 UPDATED 0.27.1 0.27.2
@esbuild/android-x64 UPDATED 0.27.1 0.27.2
@esbuild/darwin-arm64 UPDATED 0.27.1 0.27.2
@esbuild/darwin-x64 UPDATED 0.27.1 0.27.2
@esbuild/freebsd-arm64 UPDATED 0.27.1 0.27.2
@esbuild/freebsd-x64 UPDATED 0.27.1 0.27.2
@esbuild/linux-arm UPDATED 0.27.1 0.27.2
@esbuild/linux-arm64 UPDATED 0.27.1 0.27.2
@esbuild/linux-ia32 UPDATED 0.27.1 0.27.2
@esbuild/linux-loong64 UPDATED 0.27.1 0.27.2
@esbuild/linux-mips64el UPDATED 0.27.1 0.27.2
@esbuild/linux-ppc64 UPDATED 0.27.1 0.27.2
@esbuild/linux-riscv64 UPDATED 0.27.1 0.27.2
@esbuild/linux-s390x UPDATED 0.27.1 0.27.2
@esbuild/linux-x64 UPDATED 0.27.1 0.27.2
@esbuild/netbsd-arm64 UPDATED 0.27.1 0.27.2
@esbuild/netbsd-x64 UPDATED 0.27.1 0.27.2
@esbuild/openbsd-arm64 UPDATED 0.27.1 0.27.2
@esbuild/openbsd-x64 UPDATED 0.27.1 0.27.2
@esbuild/openharmony-arm64 UPDATED 0.27.1 0.27.2
@esbuild/sunos-x64 UPDATED 0.27.1 0.27.2
@esbuild/win32-arm64 UPDATED 0.27.1 0.27.2
@esbuild/win32-ia32 UPDATED 0.27.1 0.27.2
@esbuild/win32-x64 UPDATED 0.27.1 0.27.2
@eslint-community/eslint-utils UPDATED 4.9.0 4.9.1
@eslint-react/ast UPDATED 2.3.13 2.7.4
@eslint-react/core UPDATED 2.3.13 2.7.4
@eslint-react/eff UPDATED 2.3.13 2.7.4
@eslint-react/eslint-plugin UPDATED 2.3.13 2.7.4
@eslint-react/shared UPDATED 2.3.13 2.7.4
@eslint-react/var UPDATED 2.3.13 2.7.4
@eslint/compat UPDATED 2.0.0 2.0.1
@eslint/core UPDATED 1.0.0 1.0.1
@formatjs/cli UPDATED 6.7.4 6.12.0
@formatjs/ecma402-abstract UPDATED 2.3.6 3.1.0
@formatjs/fast-memoize UPDATED 2.2.7 3.1.0
@formatjs/icu-messageformat-parser UPDATED 2.11.4 3.5.0
@formatjs/icu-skeleton-parser UPDATED 1.8.16 2.1.0
@formatjs/intl-localematcher UPDATED 0.6.2 0.8.0
@formatjs/intl UPDATED 3.1.8 4.1.1
@isaacs/fs-minipass ADDED - 4.0.1
@maplibre/geojson-vt ADDED - 5.0.4
@maplibre/vt-pbf UPDATED 4.2.0 4.2.1
@mui/core-downloads-tracker UPDATED 7.3.6 7.3.7
@mui/material UPDATED 7.3.6 7.3.7
@mui/private-theming UPDATED 7.3.6 7.3.7
@mui/styled-engine UPDATED 7.3.6 7.3.7
@mui/system UPDATED 7.3.6 7.3.7
@mui/types UPDATED 7.4.9 7.4.10
@mui/utils UPDATED 7.3.6 7.3.7
@napi-rs/wasm-runtime UPDATED 1.1.0 1.1.1
@opentelemetry/context-async-hooks UPDATED 2.2.0 2.5.0
@opentelemetry/core UPDATED 2.2.0 2.5.0
@opentelemetry/resources UPDATED 2.2.0 2.5.0
@opentelemetry/sdk-trace-base UPDATED 2.2.0 2.5.0
@opentelemetry/semantic-conventions UPDATED 1.38.0 1.39.0
@oxc-resolver/binding-android-arm-eabi UPDATED 11.15.0 11.16.4
@oxc-resolver/binding-android-arm64 UPDATED 11.15.0 11.16.4
@oxc-resolver/binding-darwin-arm64 UPDATED 11.15.0 11.16.4
@oxc-resolver/binding-darwin-x64 UPDATED 11.15.0 11.16.4
@oxc-resolver/binding-freebsd-x64 UPDATED 11.15.0 11.16.4
@oxc-resolver/binding-linux-arm-gnueabihf UPDATED 11.15.0 11.16.4
@oxc-resolver/binding-linux-arm-musleabihf UPDATED 11.15.0 11.16.4
@oxc-resolver/binding-linux-arm64-gnu UPDATED 11.15.0 11.16.4
@oxc-resolver/binding-linux-arm64-musl UPDATED 11.15.0 11.16.4
@oxc-resolver/binding-linux-ppc64-gnu UPDATED 11.15.0 11.16.4
@oxc-resolver/binding-linux-riscv64-gnu UPDATED 11.15.0 11.16.4
@oxc-resolver/binding-linux-riscv64-musl UPDATED 11.15.0 11.16.4
@oxc-resolver/binding-linux-s390x-gnu UPDATED 11.15.0 11.16.4
@oxc-resolver/binding-linux-x64-gnu UPDATED 11.15.0 11.16.4
@oxc-resolver/binding-linux-x64-musl UPDATED 11.15.0 11.16.4
@oxc-resolver/binding-openharmony-arm64 UPDATED 11.15.0 11.16.4
@oxc-resolver/binding-wasm32-wasi UPDATED 11.15.0 11.16.4
@oxc-resolver/binding-win32-arm64-msvc UPDATED 11.15.0 11.16.4
@oxc-resolver/binding-win32-ia32-msvc UPDATED 11.15.0 11.16.4
@oxc-resolver/binding-win32-x64-msvc UPDATED 11.15.0 11.16.4
@playwright/test UPDATED 1.57.0 1.58.0
@rollup/rollup-android-arm-eabi UPDATED 4.53.4 4.56.0
@rollup/rollup-android-arm64 UPDATED 4.53.4 4.56.0
@rollup/rollup-darwin-arm64 UPDATED 4.53.4 4.56.0
@rollup/rollup-darwin-x64 UPDATED 4.53.4 4.56.0
@rollup/rollup-freebsd-arm64 UPDATED 4.53.4 4.56.0
@rollup/rollup-freebsd-x64 UPDATED 4.53.4 4.56.0
@rollup/rollup-linux-arm-gnueabihf UPDATED 4.53.4 4.56.0
@rollup/rollup-linux-arm-musleabihf UPDATED 4.53.4 4.56.0
@rollup/rollup-linux-arm64-gnu UPDATED 4.53.4 4.56.0
@rollup/rollup-linux-arm64-musl UPDATED 4.53.4 4.56.0
@rollup/rollup-linux-loong64-gnu UPDATED 4.53.4 4.56.0
@rollup/rollup-linux-loong64-musl ADDED - 4.56.0
@rollup/rollup-linux-ppc64-gnu UPDATED 4.53.4 4.56.0
@rollup/rollup-linux-ppc64-musl ADDED - 4.56.0
@rollup/rollup-linux-riscv64-gnu UPDATED 4.53.4 4.56.0
@rollup/rollup-linux-riscv64-musl UPDATED 4.53.4 4.56.0
@rollup/rollup-linux-s390x-gnu UPDATED 4.53.4 4.56.0
@rollup/rollup-linux-x64-gnu UPDATED 4.53.4 4.56.0
@rollup/rollup-linux-x64-musl UPDATED 4.53.4 4.56.0
@rollup/rollup-openbsd-x64 ADDED - 4.56.0
@rollup/rollup-openharmony-arm64 UPDATED 4.53.4 4.56.0
@rollup/rollup-win32-arm64-msvc UPDATED 4.53.4 4.56.0
@rollup/rollup-win32-ia32-msvc UPDATED 4.53.4 4.56.0
@rollup/rollup-win32-x64-gnu UPDATED 4.53.4 4.56.0
@rollup/rollup-win32-x64-msvc UPDATED 4.53.4 4.56.0
@sentry-internal/browser-utils UPDATED 10.29.0 10.34.0
@sentry-internal/feedback UPDATED 10.29.0 10.34.0
@sentry-internal/replay-canvas UPDATED 10.29.0 10.34.0
@sentry-internal/replay UPDATED 10.29.0 10.34.0
@sentry/babel-plugin-component-annotate UPDATED 4.6.1 4.8.0
@sentry/browser UPDATED 10.29.0 10.34.0
@sentry/bundler-plugin-core UPDATED 4.6.1 4.8.0
@sentry/core UPDATED 10.29.0 10.34.0
@sentry/electron UPDATED 7.5.0 7.6.0
@sentry/node-core UPDATED 10.29.0 10.34.0
@sentry/node UPDATED 10.29.0 10.34.0
@sentry/opentelemetry UPDATED 10.29.0 10.34.0
@sentry/react UPDATED 10.29.0 10.34.0
@sentry/vite-plugin UPDATED 4.6.1 4.8.0
@standard-schema/spec UPDATED 1.0.0 1.1.0
@tanstack/devtools-event-client UPDATED 0.3.5 0.4.0
@tanstack/eslint-plugin-query UPDATED 5.91.2 5.91.3
@tanstack/eslint-plugin-router UPDATED 1.141.0 1.155.0
@tanstack/form-core UPDATED 1.27.4 1.28.0
@tanstack/history UPDATED 1.141.0 1.154.14
@tanstack/query-core UPDATED 5.90.12 5.90.20
@tanstack/react-form UPDATED 1.27.4 1.28.0
@tanstack/react-query UPDATED 5.90.12 5.90.20
@tanstack/react-router UPDATED 1.141.2 1.157.15
@tanstack/react-virtual UPDATED 3.13.13 3.13.18
@tanstack/router-core UPDATED 1.141.2 1.157.15
@tanstack/router-generator UPDATED 1.141.2 1.157.15
@tanstack/router-plugin UPDATED 1.141.2 1.157.15
@tanstack/router-utils UPDATED 1.141.0 1.154.7
@tanstack/virtual-core UPDATED 3.13.13 3.13.18
@tanstack/virtual-file-routes UPDATED 1.141.0 1.154.7
@turf/bbox-polygon UPDATED 7.3.1 7.3.2
@turf/bbox UPDATED 7.3.1 7.3.2
@turf/center UPDATED 7.3.1 7.3.2
@turf/helpers UPDATED 7.3.1 7.3.2
@turf/meta UPDATED 7.3.1 7.3.2
@turf/random UPDATED 7.3.1 7.3.2
@types/node UPDATED 22.19.2 24.10.9
@types/react UPDATED 19.2.7 19.2.9
@typescript-eslint/eslint-plugin UPDATED 8.49.0 8.53.1
@typescript-eslint/parser UPDATED 8.49.0 8.53.1
@typescript-eslint/project-service UPDATED 8.49.0 8.53.1
@typescript-eslint/scope-manager UPDATED 8.49.0 8.53.1
@typescript-eslint/tsconfig-utils UPDATED 8.49.0 8.53.1
@typescript-eslint/type-utils UPDATED 8.49.0 8.53.1
@typescript-eslint/types UPDATED 8.49.0 8.53.1
@typescript-eslint/typescript-estree UPDATED 8.49.0 8.53.1
@typescript-eslint/utils UPDATED 8.49.0 8.53.1
@typescript-eslint/visitor-keys UPDATED 8.49.0 8.53.1
@vitest/expect UPDATED 4.0.15 4.0.18
@vitest/mocker UPDATED 4.0.15 4.0.18
@vitest/pretty-format UPDATED 4.0.15 4.0.18
@vitest/runner UPDATED 4.0.15 4.0.18
@vitest/snapshot UPDATED 4.0.15 4.0.18
@vitest/spy UPDATED 4.0.15 4.0.18
@vitest/utils UPDATED 4.0.15 4.0.18
@vscode/sudo-prompt UPDATED 9.3.1 9.3.2
babel-dead-code-elimination UPDATED 1.0.10 1.0.12
bare-fs UPDATED 4.5.2 4.5.3
bare-module-resolve UPDATED 1.12.0 1.12.1
baseline-browser-mapping UPDATED 2.9.7 2.9.18
better-sqlite3 UPDATED 12.5.0 12.6.2
caniuse-lite UPDATED 1.0.30001760 1.0.30001766
chai UPDATED 6.2.1 6.2.2
cjs-module-lexer UPDATED 1.4.3 2.2.0
comment-parser UPDATED 1.4.1 1.4.5
decode-named-character-reference UPDATED 1.2.0 1.3.0
diff UPDATED 8.0.2 8.0.3
dotenv DOWNGRADED 17.2.3 16.6.1
electron-playwright-helpers UPDATED 2.0.1 2.1.0
electron-to-chromium UPDATED 1.5.267 1.5.278
electron UPDATED 39.2.7 40.0.0
esbuild UPDATED 0.27.1 0.27.2
eslint-plugin-react-dom UPDATED 2.3.13 2.7.4
eslint-plugin-react-hooks-extra UPDATED 2.3.13 2.7.4
eslint-plugin-react-naming-convention UPDATED 2.3.13 2.7.4
eslint-plugin-react-refresh UPDATED 0.4.24 0.4.26
eslint-plugin-react-web-api UPDATED 2.3.13 2.7.4
eslint-plugin-react-x UPDATED 2.3.13 2.7.4
esquery UPDATED 1.6.0 1.7.0
eventemitter3 UPDATED 5.0.1 5.0.4
fastq UPDATED 1.19.1 1.20.1
globals UPDATED 16.5.0 17.1.0
hyperbee UPDATED 2.26.5 2.27.0
import-in-the-middle UPDATED 2.0.0 2.0.5
intl-messageformat UPDATED 10.7.18 11.1.1
isbot UPDATED 5.1.32 5.1.33
knip UPDATED 5.73.4 5.82.1
ky UPDATED 1.14.1 1.14.3
lodash UPDATED 4.17.21 4.17.23
magic-bytes.js UPDATED 1.12.1 1.13.0
maplibre-gl UPDATED 5.14.0 5.16.0
nan UPDATED 2.24.0 2.25.0
node-abi UPDATED 3.85.0 3.87.0
node-html-parser UPDATED 7.0.1 7.0.2
oxc-resolver UPDATED 11.15.0 11.16.4
pg-protocol UPDATED 1.10.3 1.11.0
pino-std-serializers UPDATED 7.0.0 7.1.0
playwright-core UPDATED 1.57.0 1.58.0
playwright UPDATED 1.57.0 1.58.0
postgres-bytea UPDATED 1.0.0 1.0.1
prettier UPDATED 3.7.4 3.8.1
react-intl UPDATED 7.1.14 8.1.1
rollup UPDATED 4.53.4 4.56.0
sax UPDATED 1.4.3 1.4.4
seroval-plugins UPDATED 1.4.0 1.5.0
seroval UPDATED 1.4.0 1.5.0
smol-toml UPDATED 1.5.2 1.6.0
systeminformation UPDATED 5.27.13 5.30.6
tar UPDATED 6.2.1 7.5.4
terser UPDATED 5.44.1 5.46.0
ts-api-utils UPDATED 2.1.0 2.4.0
typescript-eslint UPDATED 8.49.0 8.53.1
undici-types UPDATED 6.21.0 7.16.0
undici UPDATED 6.22.0 6.23.0
update-browserslist-db UPDATED 1.2.2 1.2.3
vite UPDATED 7.3.0 7.3.1
vitest UPDATED 4.0.15 4.0.18
watchpack UPDATED 2.4.4 2.5.1
webpack UPDATED 5.103.0 5.104.1
ws UPDATED 8.18.3 8.19.0
xstate UPDATED 5.25.0 5.25.1
zod UPDATED 4.2.0 4.3.6
zustand UPDATED 5.0.9 5.0.10

achou11 and others added 3 commits December 17, 2025 13:06
Addresses some security patches in deps.
Co-authored-by: Andrew Chou <andrewchou@fastmail.com>
- fixes a console error related to unusable react transition group props
- displays a loading state for the decline invite button when pressed.
usually imperceptible because of how fast it happens but just in case.
- updates the pending invite card to visually align with other similar
card designs
@achou11
Copy link
Member

achou11 commented Dec 17, 2025

/build-rc

@awana-release-bot
Copy link
Contributor Author

🚧 Release candidate build based on eb3c5dc (potential merge of 821ab98). Assets can be found in the Artifacts section of https://github.com/digidem/comapeo-desktop/actions/runs/20316829607

achou11 and others added 13 commits January 5, 2026 14:52
Closes #197 

Also renames all "lint" commands to "checks".
Not sure if this was a regression caused by `systeminformation` or due
to me updating my OS yesterday. Guessing the latter.
Closes #484 .

This was a gnarly one. This is what was happening during the leave
project flow from a tanstack query perspective:

1. Click confirm button to leave project, which calls the leave project
mutation (part of core-react).
2. In core-react when the mutation succeeds, it [invalidates all queries
related to
projects](https://github.com/digidem/comapeo-core-react/blob/7d148b47230ff31cfb3378d881a111891db7ae58/src/lib/react-query/projects.ts#L337-L339).
3. We then attempt to navigate to the onboarding.
4. In the `beforeLoad` for the onboarding route, we [check to
see](https://github.com/digidem/comapeo-desktop/blob/4a6bc583c09e7a0f8ac03a6bc34968cd0f96644f/src/renderer/src/routes/onboarding/route.tsx#L24-L39)
if we're already on a project, as we'd rather redirect them to a valid
project than to let the user access the onboarding.
- We ideally wouldn't need to do this and instead would redirect to some
project selection page, but that's a separate concern.

The problem was that in (4), we use
[queryClient.ensureQueryData](https://github.com/digidem/comapeo-desktop/blob/4a6bc583c09e7a0f8ac03a6bc34968cd0f96644f/src/renderer/src/routes/onboarding/route.tsx#L24)
to get the list of projects the user is still a part of. However, this
[method](https://tanstack.com/query/latest/docs/reference/QueryClient#queryclientensurequerydata)
looks in the query cache for an existing value and only resorts to
refetching if it doesn't already exist. In our case a cached value
already exists but it's the value prior to leaving successfully, meaning
that we were redirecting back to the project that we just left, hence
why nothing seems to happen and things are broken on subsequent attempts
to leave. The [`revalidateIfStale`
option](https://tanstack.com/query/latest/docs/reference/QueryClient#queryclientensurequerydata)
is almost exactly what we want in this situation, but it will still
return the cached value and do the refetch in the background, which
doesn't solve our issue in this case.

The simplest solution is to populate the query cache with the updated
projects state after leaving succeeds, but before we attempt to navigate
to the onboarding as in (3). This way the `ensureQueryData` call in (4)
is working with an updated cache and no longer has access to the project
that was just left.

I explore a different path where instead of using
`queryClient.ensureQueryData` in the `beforeLoad`, we use
`queryClient.fetchQuery`, which seems more idiomatic and safer. However,
noticed some unfortunate effects related to route loading that made the
app feel worse. Think it's something that should be revisited later.
Ideally, we avoid using stale query values for everything that's used
for determining a redirect in a route's `beforeLoad`.
Also updates the random category selection logic to be more similar to
actual app usage, where there's a defined set of categories to use based
on the type of data being created (observation vs track).
Fixes a regression introduced by #485 . Repro steps:

1. Invite mobile device from desktop
2. On mobile device, accept invite.
3. On desktop, observe the following:

<img width="600" alt="image"
src="https://github.com/user-attachments/assets/df79646c-f8ff-4992-b092-a33ee8b2bbbc"
/>
    
Still a little miffed at the behavior, as it seems to be some sort of
race condition or a misuse of router/query. Haven't really wrapped my
head around where the actual issue lies, but guessing it's on our end.
When some generic route error occurs, we typically display a panel
containing information about the error and a button that reloads the
page. However, there are cases where you can get stuck on the page due
to UI elements being intentionally disabled.

Now we provide a "restart" button which doesn't restart the application
entirely, but just loads the "index" page as opposed to the current
page, which is usually sufficient. Might be worth using different
wording eventually, especially if we introduce something that actually
restarts the application.
Using the `file://` protocol in Electron is [generally recommended
against](https://www.electronjs.org/docs/latest/tutorial/security#18-avoid-usage-of-the-file-protocol-and-prefer-usage-of-custom-protocols)
and it's preferable to use custom protocols for serving app pages. To
add to that, I believe that using a custom protocol solves [issues with
later versions of tanstack
router](https://github.com/digidem/comapeo-desktop/actions/runs/20881769030).
Poking around locally, there's something about their URL reload behavior
that changed such that it actually triggers a proper reload, which
causes errors in the app to surface and breaks things.

Using the custom protocol actually aligns a bit better with standard web
navigation and there are a couple of nice benefits, such as:

- (probably) fewer issues moving forward with tanstack router and doing
full page reloads. so many hours fighting against it and over-relying on
internal details in recent months...

- in the future, this will allow us to do deeplinking and inteception of
URLs that use the custom protocol (`comapeo://`)

I'm still unsure about the following:

- Does Sentry still generally work as expected? I see lots of new logs
related to tracing headers or something now, although they seem
harmless.

- Is the integration code of the custom protocol generally correct? 

Also worth noting that adding this introduced additional CORS errors
relating to maps. Instead of updating/adding more patches, decided to
use a fastify hook to add the appropriate header for the relevant
responses, which is a bit hacky but more holistic and easier to
maintain.
Couple of notable changes:

- [v1.146.2](https://github.com/TanStack/router/releases/tag/v1.146.2)
introduces some additional redirect safeguarding in router's core
([PR](TanStack/router#6337)) that causes issues
when using the `reloadDocument: true` when navigating, which we do in a
few places to reset the history. In order to bypass this we patch
router-core to allow redirects to URLs that use our app's custom
`comapeo:` protocol. Any security/access control measures are thus
handled in our app within the protocol handler that's set up in the main
process.

- Uses `RouteApi.redirect()` instead of the standalone `redirect()`
function, which is a little more ergonomic and shouldn't have any
user-facing effects
([docs](https://tanstack.com/router/latest/docs/framework/react/api/router/redirectFunction#using-routeredirect-file-based-routes))
Notable changes:

- Updates Electron to
[v40](https://www.electronjs.org/blog/electron-40-0)
- Updates development node version to v24.11.1 ([migration notes from
v22 to v24](https://nodejs.org/en/blog/migrations/v22-to-v24))
Co-authored-by: Andrew Chou <andrewchou@fastmail.com>
@achou11
Copy link
Member

achou11 commented Jan 20, 2026

/build-rc

@awana-release-bot
Copy link
Contributor Author

🚧 Release candidate build based on b100152 (potential merge of 850da3b). Assets can be found in the Artifacts section of https://github.com/digidem/comapeo-desktop/actions/runs/21186588202

Lays the groundwork for being able to run e2e tests in isolation from
one another, which enables the following:

1. Being able to run the tests in parallel. Before, there was a specific
sequence that needed to occur between tests because of the use of
outputs between test projects. Now each test runs with its own data
directory so there's no sharing of outputs.

2. Being able to "parameterize" tests such that we can test various
scenarios for a given flow. The old test setup was pretty limited in
that we were essentially testing a very specific flow (e.g. single
player project creator) and if we wanted to test a different flow, it
would require a pretty hard to manage implementation. The isolation
allows us to write tests that set up their own unique
environment/situation.

Notable implementation details:

- All e2e tests are run in parallel. When running locally, we allow
Playwright to attempt to use as many CPU cores as are available. In CI
we limit it to 3 max, which is based on the [specs of the GitHub Actions
runners](https://docs.github.com/en/actions/how-tos/write-workflows/choose-where-workflows-run/choose-the-runner-for-a-job#standard-github-hosted-runners-for-public-repositories).

- Each test runs an instance of the application that uses its own user
data directory, which provides data isolation.
Notable changes:

- Updates preferred development npm version to 11.8.0
- Replaces usage of `dotenv` with
[`loadEnvFile`](https://nodejs.org/docs/latest-v24.x/api/process.html#processloadenvfilepath)
(built into Node)
@socket-security
Copy link

socket-security bot commented Jan 26, 2026

Review the following changes in direct dependencies. Learn more about Socket for GitHub.

Diff Package Supply Chain
Security
Vulnerability Quality Maintenance License
Updated@​formatjs/​cli@​6.7.4 ⏵ 6.12.099 +11004197 +9100
Updated@​electron-forge/​plugin-base@​7.10.2 ⏵ 7.11.11001006598 +2100
Updated@​tanstack/​react-virtual@​3.13.13 ⏵ 3.13.18100 +110067 +197 +4100
Updated@​electron-forge/​shared-types@​7.10.2 ⏵ 7.11.11001006898 +2100
Updated@​electron-forge/​plugin-auto-unpack-natives@​7.10.2 ⏵ 7.11.110010071 +196 +1100
Updated@​electron-forge/​cli@​7.10.2 ⏵ 7.11.19910071 +196 +1100
Updated@​electron-forge/​maker-zip@​7.10.2 ⏵ 7.11.1100 +110071 +196 +1100
Updated@​formatjs/​intl@​3.1.8 ⏵ 4.1.1100 +110072 -196100
Updated@​electron-forge/​maker-dmg@​7.10.2 ⏵ 7.11.1100 +110072 +196 +1100
Updated@​tanstack/​eslint-plugin-router@​1.141.0 ⏵ 1.155.0100 +110072 +298 +4100
Updated@​electron-forge/​maker-squirrel@​7.10.2 ⏵ 7.11.1100 +110074 +196 +1100
Updated@​tanstack/​eslint-plugin-query@​5.91.2 ⏵ 5.91.3100 +110074 +194 +4100
Updated@​electron-forge/​maker-rpm@​7.10.2 ⏵ 7.11.110010074 +196 +1100
Updated@​electron-forge/​maker-deb@​7.10.2 ⏵ 7.11.110010075 +196 +1100
Updated@​tanstack/​router-plugin@​1.141.2 ⏵ 1.157.1599 +110078 +199 +1100
Updated@​electron-forge/​plugin-fuses@​7.10.2 ⏵ 7.11.110010078 +196 +1100
Updated@​tanstack/​react-router@​1.141.2 ⏵ 1.157.1578 -201008499100
Updated@​types/​react@​19.2.7 ⏵ 19.2.9100 +110079 +195100
Updated@​types/​node@​22.19.2 ⏵ 24.10.9100 +110081 +196100
Updated@​tanstack/​react-form@​1.27.4 ⏵ 1.28.0100 +110083 +199100
Updated@​turf/​bbox@​7.3.1 ⏵ 7.3.21001008591 +2100
Updatedglobals@​16.5.0 ⏵ 17.1.0100 +110086 +194 -1100
Updated@​turf/​bbox-polygon@​7.3.1 ⏵ 7.3.21001008691 +2100
Updated@​turf/​center@​7.3.1 ⏵ 7.3.21001008891 +2100
Updated@​tanstack/​react-query@​5.90.12 ⏵ 5.90.209910088 +199 +2100
Updated@​sentry/​electron@​7.5.0 ⏵ 7.6.09910099 +190 -4100
Updated@​mui/​material@​7.3.6 ⏵ 7.3.79010091 +197100
Updated@​eslint/​compat@​2.0.0 ⏵ 2.0.110010010090 -2100
Updated@​turf/​random@​7.3.1 ⏵ 7.3.210010010091 +2100
Updated@​turf/​helpers@​7.3.1 ⏵ 7.3.2100 +110010091 -2100
Updatedeslint-plugin-react-refresh@​0.4.24 ⏵ 0.4.2610010010092 -1100
See 6 more rows in the dashboard

View full report

achou11 and others added 4 commits January 27, 2026 10:10
Not sure why I went with `break-all` when initially implementing, but
`break-word` seems more appropriate and is consistent with what we do
elsewhere.
Adds the following tests:

- Initial state of main panel after project creation onboarding
- Project info popup
Only covers the scenario of no other existing members and no invitable
devices.
@achou11 achou11 merged commit 52f0aa3 into release/v1.x Jan 29, 2026
16 checks passed
@awana-release-bot
Copy link
Contributor Author

🚀 A draft release pointing to 52f0aa3 has been created at https://github.com/digidem/comapeo-desktop/releases/tag/untagged-328f8138929c93afcfb1

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