Skip to content

Commit 3ceac81

Browse files
authored
fix: Windows chat scroll bounce; CI matrix, identity bridge, deps (#562)
* refactor: fold arm64 NSIS smoke test into packaging-smoke matrix - Move windows-11-arm WoA install test from standalone win-arm64-install job into packaging-smoke in build.yaml and release.yaml. - Keep per-arch failure-log upload steps keyed on matrix.os (runner.temp is not valid in matrix definitions). - Update windows-packaging contract test to assert matrix layout instead of the removed job name. Keeps all four packaging smoke checks under one matrix in the workflow graph while preserving arm64-on-WoA runner requirements. * fix: decouple virtualizer scroll end threshold to stop Windows bounce - Add VIRTUALIZER_SCROLL_END_THRESHOLD (30px) separate from the app UI CHAT_SCROLL_END_THRESHOLD (200px) so TanStack's independent wasAtEnd resize path clears after one Windows mouse wheel notch (~60px). - Wire the tighter threshold in ChatPanel (Meshtastic/MeshCore chat) and RoomsPanel (MeshCore rooms); harden createChatScrollAdjustPredicate with a live isAtEnd() guard for stale pin-ref races. - Mirror RoomsPanel follow-on-append in ChatPanel via scrollToEnd when isPinnedToBottomRef is true, preserving auto-scroll in the 30–200px band. Windows wheel deltas were still within the 200px wasAtEnd window, causing resizeItem to counter-adjust during flushSync and bounce the list back down while isPinnedToBottomRef had not yet updated in React onScroll. * chore: bump deps * chore: trim blank line after issue template frontmatter - Remove extra blank line between YAML frontmatter and body in bug, feature request, and translation-error issue templates. Keeps issue template formatting consistent (whitespace-only). * refactor: share prefixed id helper and centralize discovery identity patch - Add randomPrefixedId in src/shared/ and use it from ConnectionDriver and meshIdentityBridge instead of duplicate local randomId/randomIdentityId. - Introduce patchIdentityFromDiscovery in resolveOrCreateIdentity so signature, selfNodeNum, and publicKey are applied once for all code paths. - Remove redundant updateIdentity block from bindMeshcoreIngress; reuse the same helper in finalizeMeshcoreDriverIdentity. Avoids divergent identity/transport id formats and duplicate signature writes when MeshCore ingress binds with post-connect discovery info.
1 parent 0c2e79b commit 3ceac81

18 files changed

Lines changed: 200 additions & 124 deletions

.github/ISSUE_TEMPLATE/bug_report.md

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ about: Create a report to help us improve
44
title: ''
55
labels: ''
66
assignees: ''
7-
87
---
98

109
**Describe the bug**

.github/ISSUE_TEMPLATE/feature_request.md

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ about: Suggest an idea for this project
44
title: ''
55
labels: ''
66
assignees: ''
7-
87
---
98

109
**Is your feature request related to a problem? Please describe.**

.github/ISSUE_TEMPLATE/translation-error.md

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ about: Report a translation error
44
title: ''
55
labels: ''
66
assignees: ''
7-
87
---
98

109
Language (in English):

.github/workflows/build.yaml

Lines changed: 6 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -127,6 +127,10 @@ jobs:
127127
label: x64 NSIS install
128128
artifact: mesh-client-windows-${{ github.sha }}
129129
smoke_run: node scripts/test-win-nsis-install.mjs --arch x64
130+
- os: windows-11-arm
131+
label: arm64 NSIS install (WoA)
132+
artifact: mesh-client-windows-${{ github.sha }}
133+
smoke_run: node scripts/test-win-nsis-install.mjs --arch arm64 --probe-7z
130134
steps:
131135
- name: Checkout code
132136
uses: actions/checkout@v6
@@ -150,27 +154,8 @@ jobs:
150154
if-no-files-found: ignore
151155
retention-days: 7
152156

153-
win-arm64-install:
154-
name: Smoke test arm64 NSIS install (WoA)
155-
needs: build
156-
runs-on: windows-11-arm
157-
permissions:
158-
contents: read
159-
steps:
160-
- name: Checkout code
161-
uses: actions/checkout@v6
162-
163-
- name: Download Windows build artifact
164-
uses: actions/download-artifact@v7
165-
with:
166-
name: mesh-client-windows-${{ github.sha }}
167-
path: release
168-
169-
- name: Smoke test arm64 NSIS install (7z probe + install)
170-
run: node scripts/test-win-nsis-install.mjs --arch arm64 --probe-7z
171-
172-
- name: Upload arm64 install failure logs
173-
if: failure()
157+
- name: Upload Windows arm64 install failure logs
158+
if: failure() && matrix.os == 'windows-11-arm'
174159
uses: actions/upload-artifact@v7
175160
with:
176161
name: mesh-client-win-arm64-install-logs-${{ github.sha }}

.github/workflows/release.yaml

Lines changed: 6 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -130,6 +130,10 @@ jobs:
130130
label: x64 NSIS install
131131
artifact: mesh-client-windows-${{ github.sha }}
132132
smoke_run: node scripts/test-win-nsis-install.mjs --arch x64
133+
- os: windows-11-arm
134+
label: arm64 NSIS install (WoA)
135+
artifact: mesh-client-windows-${{ github.sha }}
136+
smoke_run: node scripts/test-win-nsis-install.mjs --arch arm64 --probe-7z
133137
steps:
134138
- name: Checkout code
135139
uses: actions/checkout@v6
@@ -153,27 +157,8 @@ jobs:
153157
if-no-files-found: ignore
154158
retention-days: 7
155159

156-
win-arm64-install:
157-
name: Smoke test arm64 NSIS install (WoA)
158-
needs: release
159-
runs-on: windows-11-arm
160-
permissions:
161-
contents: read
162-
steps:
163-
- name: Checkout code
164-
uses: actions/checkout@v6
165-
166-
- name: Download Windows build artifact
167-
uses: actions/download-artifact@v7
168-
with:
169-
name: mesh-client-windows-${{ github.sha }}
170-
path: release
171-
172-
- name: Smoke test arm64 NSIS install (7z probe + install)
173-
run: node scripts/test-win-nsis-install.mjs --arch arm64 --probe-7z
174-
175-
- name: Upload arm64 install failure logs
176-
if: failure()
160+
- name: Upload Windows arm64 install failure logs
161+
if: failure() && matrix.os == 'windows-11-arm'
177162
uses: actions/upload-artifact@v7
178163
with:
179164
name: mesh-client-win-arm64-install-logs-${{ github.sha }}

package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -123,7 +123,7 @@
123123
"@testing-library/react": "^16.3.2",
124124
"@testing-library/user-event": "^14.6.1",
125125
"@types/leaflet": "^1.9.21",
126-
"@types/node": "^25.9.3",
126+
"@types/node": "^25.9.4",
127127
"@types/node-forge": "^1.3.14",
128128
"@types/react": "^19.2.17",
129129
"@types/react-dom": "^19.2.3",
@@ -133,7 +133,7 @@
133133
"@vitest/coverage-v8": "^4.1.9",
134134
"concurrently": "^9.2.3",
135135
"electron": "^41.8.0",
136-
"electron-builder": "^26.15.4",
136+
"electron-builder": "^26.15.5",
137137
"esbuild": "^0.28.1",
138138
"eslint": "^10.5.0",
139139
"eslint-config-prettier": "^10.1.8",

pnpm-lock.yaml

Lines changed: 32 additions & 32 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/main/windows-packaging.contract.test.ts

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -146,12 +146,13 @@ describe('Windows packaging (contract)', () => {
146146
expect(buildWorkflow).toContain('packaging-smoke:');
147147
expect(buildWorkflow).toContain('label: x64 NSIS install');
148148
expect(buildWorkflow).toContain('node scripts/test-win-nsis-install.mjs --arch x64');
149-
expect(buildWorkflow).toContain('win-arm64-install:');
150-
expect(buildWorkflow).toContain('runs-on: windows-11-arm');
149+
expect(buildWorkflow).toContain('label: arm64 NSIS install (WoA)');
150+
expect(buildWorkflow).toContain('- os: windows-11-arm');
151151
expect(buildWorkflow).toContain(
152152
'node scripts/test-win-nsis-install.mjs --arch arm64 --probe-7z',
153153
);
154154
expect(buildWorkflow).toContain('needs: build');
155+
expect(buildWorkflow).not.toContain('win-arm64-install:');
155156

156157
const buildJobBlock = buildWorkflow.slice(
157158
buildWorkflow.indexOf(' build:'),
@@ -174,12 +175,13 @@ describe('Windows packaging (contract)', () => {
174175
expect(releaseWorkflow).toContain('packaging-smoke:');
175176
expect(releaseWorkflow).toContain('label: x64 NSIS install');
176177
expect(releaseWorkflow).toContain('node scripts/test-win-nsis-install.mjs --arch x64');
177-
expect(releaseWorkflow).toContain('win-arm64-install:');
178-
expect(releaseWorkflow).toContain('runs-on: windows-11-arm');
178+
expect(releaseWorkflow).toContain('label: arm64 NSIS install (WoA)');
179+
expect(releaseWorkflow).toContain('- os: windows-11-arm');
179180
expect(releaseWorkflow).toContain(
180181
'node scripts/test-win-nsis-install.mjs --arch arm64 --probe-7z',
181182
);
182183
expect(releaseWorkflow).toContain('needs: release');
184+
expect(releaseWorkflow).not.toContain('win-arm64-install:');
183185

184186
const releaseJobBlock = releaseWorkflow.slice(
185187
releaseWorkflow.indexOf(' release:'),

0 commit comments

Comments
 (0)