diff --git a/.github/workflows/pull-request.yml b/.github/workflows/pull-request.yml index b3248ec5c..cf5d529f6 100644 --- a/.github/workflows/pull-request.yml +++ b/.github/workflows/pull-request.yml @@ -411,10 +411,10 @@ jobs: with: toolchain: stable # This action defaults RUSTFLAGS to -D warnings. Path-patched - # dependencies (packages/tao, packages/tauri) build without - # cap-lints, so upstream warnings in them (e.g. glib deprecations - # in tao's Linux backend) would fail the app build. Warnings in - # our own crate are enforced by the rust_lint job instead. + # dependencies (packages/tauri, packages/swift-rs) build without + # cap-lints, so upstream warnings in them would fail the app + # build. Warnings in our own crate are enforced by the rust_lint + # job instead. rustflags: '' # Disable this action's built-in rust-cache so the explicit # Swatinem/rust-cache below is the single cache (it's the one diff --git a/.gitmodules b/.gitmodules index d4f5679e9..080573993 100644 --- a/.gitmodules +++ b/.gitmodules @@ -22,6 +22,3 @@ [submodule "apps/readest-app/src-tauri/plugins/tauri-plugin-webview-upgrade"] path = apps/readest-app/src-tauri/plugins/tauri-plugin-webview-upgrade url = https://github.com/readest/tauri-plugin-webview-upgrade.git -[submodule "packages/tao"] - path = packages/tao - url = https://github.com/readest/tao.git diff --git a/apps/readest-app/.claude/memory/MEMORY.md b/apps/readest-app/.claude/memory/MEMORY.md index f63f5f03b..8d397eadf 100644 --- a/apps/readest-app/.claude/memory/MEMORY.md +++ b/apps/readest-app/.claude/memory/MEMORY.md @@ -61,9 +61,9 @@ Index only — one line per memory. Detail lives in the topic files; do not rest - Resolved/stable → [Sync Fixes](sync-fixes.md) ## Build, Testing & CI -- [tauri fork bump: exclude + swift-rs relabel](tauri-fork-bump-workspace-exclude-swift-rs.md) root must EXCLUDE packages/tauri; `patch not used` = fork silently dropped; tao patch REMOVED; cef stub PUSHED 3156d92b7 to readest + feat/cef-feature-stub; force-push BROKE nix CI (#6080), tag cef-stub-old-base repaired; NEVER orphan a pinned fork commit; iOS build UNVERIFIED +- [tauri fork bump: exclude + swift-rs relabel](tauri-fork-bump-workspace-exclude-swift-rs.md) MERGED #6081; root must EXCLUDE packages/tauri; `patch not used` = fork silently dropped; NEVER orphan a pinned fork commit; tao patch dropped; upstream 0.37.0 CarPlay VERIFIED on iOS 18.5 sim (Now Playing rendered, no crash); packages/tao submodule REMOVED (a362ac598, unpushed); iOS 26 sim + device unchecked - [TypeScript 7 upgrade #5260](typescript-7-upgrade-5260.md) MERGED #5893; no tsserver/tsgo (lint = `tsc`); next 16.3.3; rootDir fix -- [Nix FOD hash staleness](nix-fod-hash-staleness.md) MERGED #5779; hash from the PR check's `got:` line, NEVER docker/OrbStack +- [Nix FOD hash staleness](nix-fod-hash-staleness.md) MERGED #5779; hash from the PR check's `got:` line, NEVER docker/OrbStack; `--keep-going` since #6081; PR head may be chrox/readest-app (remote `chrox`) - [git push needs the SOCKS proxy](git-push-socks-proxy.md) ssh ProxyCommand only; `--no-verify` + ServerAliveInterval - [worktree:new REBASES a PR branch](worktree-new-rebases-pr-force-push.md) pushing to a fork from it = FORCE push; use the real head - [Workflow-file pushes need SSH](push-workflow-file-needs-ssh-not-gh-oauth.md) gh OAuth lacks `workflow` scope diff --git a/apps/readest-app/.claude/memory/nix-fod-hash-staleness.md b/apps/readest-app/.claude/memory/nix-fod-hash-staleness.md index 0b4455c1a..54ff349e6 100644 --- a/apps/readest-app/.claude/memory/nix-fod-hash-staleness.md +++ b/apps/readest-app/.claude/memory/nix-fod-hash-staleness.md @@ -17,3 +17,14 @@ metadata: Third hit 2026-08-26: PR #5893 (TypeScript 7 + Next 16.3) changed pnpm-lock.yaml; the fod-hashes job failed in 5m17s with `specified: sha256-jQoa1YvCJU2bmEkr70u8MENxS1cGb2ahai53TfI6DQE=` / `got: sha256-zEq7gAPixg8P9DeRtEKS0rCVlphJfBSVl7LOvvAQj+g=`, bumped in `40bda11b9`. Recipe holds exactly: push first, then read `got:`. Fastest way to the value is `gh run view --repo readest/readest --job --log-failed | grep -iE "specified:|got:"` -- the run-level `--log-failed` also works but the job id from the PR check URL is more direct. There is no local nix on chrox's Mac (`which nix` = not found), so this cannot be pre-computed before opening the PR. Second hit 2026-08-25: PR #5865 changed Cargo.lock (image crate `webp` feature -> image-webp); the fod-hashes PR check failed with specified/got, cargoHash bumped in `50d57e30d` from the got: line, check green in one round. + +Fourth hit 2026-09-06: PR #6081 (tauri fork bump, Cargo.lock + pnpm-lock.yaml +both changed) failed fod-hashes on cargoHash first (`got:` sha256-5uavqv6V...), +and only after that bump did the next run report pnpmDeps (`got:` +sha256-E6z6mXT4...): `nix build` stopped at the first FOD failure. dcf5d1e9a +added `--keep-going` to the `nix-deps-check.yml` build so ONE run now prints +every stale hash; still expect one push per unknown hash, never precompute. +Both bumped in dcf5d1e9a + 555c887bf. GOTCHA: this PR's head is +`chrox/readest-app:dev` (remote `chrox`), NOT `readest/readest:dev`; a push to +`origin dev` created a stray branch on the main repo (deleted right away). +Check `gh pr view N --json isCrossRepository,headRepositoryOwner` before pushing. diff --git a/apps/readest-app/.claude/memory/tauri-fork-bump-workspace-exclude-swift-rs.md b/apps/readest-app/.claude/memory/tauri-fork-bump-workspace-exclude-swift-rs.md index 1495991c7..7a623c6ca 100644 --- a/apps/readest-app/.claude/memory/tauri-fork-bump-workspace-exclude-swift-rs.md +++ b/apps/readest-app/.claude/memory/tauri-fork-bump-workspace-exclude-swift-rs.md @@ -35,10 +35,27 @@ iOS home indicator). Upstream ba3490b3e "Use workspace dependency management uses `--triple` on Xcode 27 and keeps the legacy path on Xcode 26.x, which is what Readest found broken, so the vendored copy stays for now. 3. `tao = { path = "packages/tao" }` (0.35.3 + 2 iOS scene fixes) can never - match `^0.37` again. Upstream tao 0.37.0 carries both fixes (#1245 - `f2163508` autorelease UISceneConfiguration, `a3ff3f03` connecting-scene - role), so the patch line was REMOVED. The `packages/tao` submodule is still - in `.gitmodules` and should be deleted in a follow-up. + match `^0.37` again, so the patch line was REMOVED in #6081. CORRECTION + (verified against tao-0.37.0 sources 2026-09-06): upstream ports only ONE + half. `f2163508` (#1245, velocitysystems) = the use-after-free fix + (`Retained::autorelease_ptr`). `a3ff3f03` (Lucas Nogueira) passes the + connecting session's ROLE through but STILL calls + `setDelegateClass(TaoSceneDelegate)` for EVERY role. The fork's 419f5bba + returns a name-less config WITHOUT a delegate override for non-window roles + so UIKit takes the Info.plist manifest entry; with plain 0.37.0 a CarPlay + session gets TaoSceneDelegate -> NSGenericException "does not implement + CarPlay template application lifecycle methods" on connect (fork comment, + real device). No upstream PR from chrox/readest exists; the fork patch does + NOT apply cleanly onto 0.37.0 (context moved). VERIFIED 2026-09-06 on the + iOS 18.5 simulator (iPhone 16 Pro, `pnpm dev-ios-sim` of main 34e4ebeeb, + binary contains tao-0.37.0): app launches and renders; CarPlay display + attached via Simulator I/O > External Displays > CarPlay; Readest opened on + CarPlay and showed the CPNowPlaying template with the current book, process + alive, no crash report, no NSGenericException. So upstream 0.37.0 is FINE + for CarPlay despite the TaoSceneDelegate override; the theoretical concern + above did NOT materialize. `packages/tao` submodule REMOVED in local dev + commit a362ac598 (2026-09-06, `git submodule deinit` + `git rm`, workflow + comment updated; NOT pushed). Not yet checked: iOS 26.3 sim, real device. Also: `rust-version` bumped 1.77.2 -> 1.90 in root `[workspace.package]` and `src-tauri/Cargo.toml` (user request). MSRV-aware fallback is NOT active with @@ -87,3 +104,28 @@ superproject ref still pins; tag it first. `.gitmodules` pins no branch. CLAUDE. version-pinned and a newer crates.io release silently drops them. - Cargo.lock changed a lot (fork crates' dev-deps left the lock); expect the Nix FOD hash to need refreshing, see [[nix-fod-hash-staleness]]. + +Outcome: shipped as PR #6081 "chore: bump tauri to version 2.11.5" (head on the +`chrox/readest-app` fork, squash-merged ee86510cc 2026-09-05T20:32Z) after two +CI fixes: cargoHash + pnpmDeps hash bumps and the `as_chunks` clippy rewrite in +epub_parser.rs. Main then took #6083 (nix Linux package on CEF). The temporary +fork tag `cef-stub-old-base` was DELETED once main pinned 3156d92b7; the +leftover `packages/tauri-plugins/` dir is gone. STILL OPEN: `packages/tao` +submodule is registered in .gitmodules but unused (remove in a follow-up PR); +iOS build with the relabelled swift-rs + upstream tao 0.37 not yet verified. + +Sim recipe that worked (2026-09-06): boot `xcrun simctl boot ` + `open -a +Simulator` FIRST, `pnpm dev-ios-sim` (Next export + cargo sim build + xcodebuild ++ `simctl install booted`, ~12 min; the install is the LAST step, so check the +installed binary mtime before launching or you test the stale July app), +`xcrun simctl launch booted com.bilingify.readest`, log via `xcrun simctl spawn +booted log stream --predicate 'process == "Readest" OR eventMessage CONTAINS +"Readest"'`. CarPlay: `osascript -e 'tell application "System Events" to tell +process "Simulator" to click menu item "CarPlay" of menu "External Displays" of +menu item "External Displays" of menu "I/O" of menu bar 1'` WORKS from this +session (older memory said TCC blocked osascript; not the case now); computer- +use screenshots hide menus and non-allowlisted windows, and its clicks on the +CarPlay window did not register as touches; `System Events click at` needs the +window raised (AXRaise errored -25204). chrox tapped the CarPlay icon by hand. +`xcrun simctl io booted screenshot --display external` captures the CarPlay +framebuffer (800x480). diff --git a/packages/tao b/packages/tao deleted file mode 160000 index 419f5bba5..000000000 --- a/packages/tao +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 419f5bba5d16b177c75b6610778fe2014f7b0ac9