docs+chore: refresh README/STATE, cache electron in CI, lock chord by keycode, misc P3

- README: add lock-screen section, refresh test list (13 offline tests),
  updater fallback order, data locations, architecture tree
- STATE.md: v1.0.20, current release.cjs flow (no --skip-github), M11-M13
- ci.yml: actions/cache for the ~100MB Electron binary keyed on lockfile
- .gitignore: ignore .env.* but keep committed templates
- scripts/archive-releases.cjs moved in from tmp-test; KEEP_TAG is now a
  required CLI arg (a hardcoded default is how the wrong version gets wiped)
- lockShortcuts: isPanicLockChord matches input.code ('KeyL') so Dvorak and
  non-Latin layouts trigger Ctrl+L lock correctly
- settings: drop the dead single-option update-channel Select from About tab
- Workspace/App: memo(IconRail/LayoutFlyout), useMemo layoutMenu keyed on
  language, useCallback onOpenSettings; drop unused IconRail onSplit prop
This commit is contained in:
Bill committed 2026-10-07 22:06:58 +08:00
1 parent d22923aedd
commit 5ff311ea0f
14 files changed
+231 -61

No files matched your search

+11 -1
View File
@@ -24,10 +24,20 @@ jobs:
node-version: 22
cache: npm
# `npm ci` triggers electron's postinstall, which downloads the ~100MB
# binary into %LOCALAPPDATA%\electron\Cache. Keyed on the lockfile so any
# dependency bump — electron included — refetches instead of restoring a
# binary that no longer matches the pinned version.
- name: Cache Electron binary
uses: actions/cache@v4
with:
path: ~/AppData/Local/electron/Cache
key: electron-${{ runner.os }}-${{ hashFiles('package-lock.json') }}
- name: Install dependencies
run: npm ci
# npm test 会先自动跑 pretest(typecheck),再重建 esbuild bundle 并跑 10 个离线测试
# npm test 会先自动跑 pretest(typecheck),再重建 esbuild bundle 并跑 13 个离线测试
- name: Test
run: npm test