Skip to content

feat: desktop auto-updater, TEE file enrollment, and CI build workflow#360

Merged
FSM1 merged 19 commits into
mainfrom
feat/phase-25-desktop-enhancements
Mar 25, 2026
Merged

feat: desktop auto-updater, TEE file enrollment, and CI build workflow#360
FSM1 merged 19 commits into
mainfrom
feat/phase-25-desktop-enhancements

Conversation

@FSM1

@FSM1 FSM1 commented Mar 25, 2026

Copy link
Copy Markdown
Owner

Summary

  • TEE file enrollment: Files created via the desktop FUSE mount now have their IPNS private keys wrapped with the TEE public key on first publish, enabling automatic 3-hour IPNS republishing. Both macOS/Linux and Windows codepaths.
  • Auto-updater integration: Tauri v2 updater plugin checks for updates on launch (5s delay), downloads in background, and notifies via system tray. "Check for Updates..." menu item added.
  • CI desktop build workflow: GitHub Actions workflow builds signed desktop bundles for macOS (ARM64 + Intel), Linux, and Windows on Release Please publish events. Ed25519 signing keypair generated and configured.

Key files

File What
crates/fuse/src/operations.rs TEE enrollment in publish_file_metadata (Unix)
crates/fuse/src/platform/windows/operations.rs TEE enrollment (Windows)
apps/desktop/src-tauri/src/updater.rs New updater module
apps/desktop/src-tauri/src/tray/mod.rs "Check for Updates..." menu item
.github/workflows/build-desktop.yml Cross-platform release build
apps/desktop/src-tauri/tauri.conf.json Updater config with Ed25519 pubkey

Test plan

  • cargo check -p cipherbox-fuse --features fuse compiles cleanly
  • Verify updater.rs has check_on_launch and manual_check functions
  • Verify tauri.conf.json has real Ed25519 public key (not placeholder)
  • Verify build-desktop.yml triggers on release: [published] with 4-platform matrix
  • Verify GitHub secrets TAURI_SIGNING_PRIVATE_KEY and TAURI_SIGNING_PRIVATE_KEY_PASSWORD are set
  • Verify tray menu has "Check for Updates..." item
  • Manual: launch desktop app, verify no crash from updater init
  • Manual: tray menu "Check for Updates..." shows notification

🤖 Generated with Claude Code

FSM1 and others added 18 commits March 25, 2026 22:46
Entire-Checkpoint: 7c629a55631e
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Entire-Checkpoint: bb40396efd18
Entire-Checkpoint: d1c754a0f5d3
- Plan 02: acknowledge Windows force-restart as acceptable (unmount/restart/mount cycle)
- VALIDATION.md: align verification commands with actual plan commands (cargo check + grep, not cargo test)
- Set nyquist_compliant: true and wave_0_complete: true

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Entire-Checkpoint: 312d160bebe0
- Add tauri-plugin-updater = "2" to desktop Cargo.toml
- Configure updater plugin in tauri.conf.json with Ed25519 pubkey placeholder and GitHub Releases endpoint
- Enable createUpdaterArtifacts in bundle config for updater bundle generation
- Add updater:default capability permission

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Entire-Checkpoint: dae386fc0f67
- Add tee_public_key, tee_key_epoch, is_first_publish params to publish_file_metadata
- Wrap file IPNS private key with TEE public key on first publish using ECIES
- Thread TEE keys from CipherBoxFS into background upload spawn in release() handler
- Use existing is_new_file flag (CID empty) as first-publish signal

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Entire-Checkpoint: d4af47332cb3
…mation

- GitHub Actions workflow triggered on Release Please publish events
- Build matrix: macOS (aarch64 + x86_64), Ubuntu 22.04, Windows
- Ed25519 signing via TAURI_SIGNING_PRIVATE_KEY GitHub secret
- tauri-action@v1 uploads bundles + latest.json to GitHub Release
- FUSE-T install for macOS, WinFsp install for Windows, libfuse3 for Linux
- Windows uses --no-default-features --features winfsp

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Entire-Checkpoint: 2d82311f6fc9
- Create updater.rs with check_on_launch (5s delay) and manual_check functions
- Register tauri_plugin_updater plugin in main.rs Builder chain
- Call updater::check_on_launch in setup closure after tray initialization
- Add "Check for Updates..." tray menu item with event handler
- System notification on update ready or manual check result

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Entire-Checkpoint: fd2792f27a7d
- Mirror Unix TEE enrollment pattern for Windows WinFSP codepath
- Add tee_public_key, tee_key_epoch, is_first_publish params to Windows publish_file_metadata
- Wrap file IPNS private key with TEE public key on first publish
- Compute is_new_file from empty CID check before cleanup handler
- Thread TEE keys from fs into background upload spawn

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Entire-Checkpoint: 18ff0103adcc
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Entire-Checkpoint: 8f276ea1d92b
- Create 25-02-SUMMARY.md with execution results
- Update STATE.md with plan progress and metrics
- Update ROADMAP.md with phase 25 plan progress
- Mark DESKTOP-01 requirement as complete

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Entire-Checkpoint: fff06dbc5c58
- Add 25-01-SUMMARY.md with execution results
- Mark DESKTOP-02 requirement as complete in REQUIREMENTS.md

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Entire-Checkpoint: a010022aba08
Generated Ed25519 signing keypair and set GitHub secrets
(TAURI_SIGNING_PRIVATE_KEY, TAURI_SIGNING_PRIVATE_KEY_PASSWORD).
Public key now embedded in updater config for signature verification.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Entire-Checkpoint: f352abfe8301
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Entire-Checkpoint: 50c2e9405893
9/9 must-haves verified. DESKTOP-01 (auto-updater) and DESKTOP-02
(TEE file enrollment) both fully implemented and wired.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Entire-Checkpoint: 8f8cb082a144
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Entire-Checkpoint: 3ac1dc079750
- Replace nested if/let TEE wrapping with match destructuring,
  eliminating the intermediate has_tee_enrollment boolean
- Remove explicit `pnpm vite build` step from CI workflow — Tauri's
  beforeBuildCommand already handles this, saving ~90s per platform

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Entire-Checkpoint: 33ec003d123a
@coderabbitai

coderabbitai Bot commented Mar 25, 2026

Copy link
Copy Markdown

Warning

Rate limit exceeded

@FSM1 has exceeded the limit for the number of commits that can be reviewed per hour. Please wait 9 minutes and 45 seconds before requesting another review.

⌛ How to resolve this issue?

After the wait time has elapsed, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

We recommend that you space out your commits to avoid hitting the rate limit.

🚦 How do rate limits work?

CodeRabbit enforces hourly rate limits for each developer per organization.

Our paid plans have higher rate limits than the trial, open-source and free plans. In all cases, we re-allow further reviews after a brief timeout.

Please see our FAQ for further information.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: b85a1007-0a97-4f72-9a1f-d4a48918801c

📥 Commits

Reviewing files that changed from the base of the PR and between abdbcc5 and 7e8e6ad.

📒 Files selected for processing (5)
  • .github/workflows/build-desktop.yml
  • .planning/ROADMAP.md
  • .planning/STATE.md
  • crates/fuse/src/operations.rs
  • crates/fuse/src/platform/windows/operations.rs

Walkthrough

This PR implements Phase 25 "Desktop Enhancements" by adding Tauri auto-update functionality (launch-delayed checks, background downloads, tray menu integration) and TEE key enrollment for per-file IPNS publishes in the FUSE mount on Unix and Windows platforms. It includes a new GitHub Actions workflow for cross-platform signed desktop builds, supporting changes to desktop Tauri configuration and tray integration, and modifications to FUSE publish operations to conditionally wrap file IPNS private keys on first publish.

Changes

Cohort / File(s) Summary
Planning & Documentation
.planning/PROJECT.md, .planning/REQUIREMENTS.md, .planning/ROADMAP.md, .planning/STATE.md, .planning/config.json, .planning/phases/25-desktop-enhancements/*
Updated phase/project metadata and added comprehensive Phase 25 planning documents covering context, research, validation, verification, and three plan summaries (TEE file enrollment, Tauri updater integration, CI workflow) totaling 1,818 lines of planning documentation.
GitHub Actions Workflow
.github/workflows/build-desktop.yml
New workflow triggering on GitHub releases to build and sign desktop bundles across macOS (ARM64/Intel), Ubuntu 22.04, and Windows; includes platform-specific dependency setup (FUSE-T, WinFsp, Rust targets) and artifact upload to releases.
Tauri Updater Integration
apps/desktop/src-tauri/Cargo.toml, apps/desktop/src-tauri/tauri.conf.json, apps/desktop/src-tauri/capabilities/default.json, apps/desktop/src-tauri/src/main.rs, apps/desktop/src-tauri/src/tray/mod.rs
Added tauri-plugin-updater dependency, enabled updater artifact generation, added updater:default capability, registered updater plugin during app setup with Ed25519 signing and GitHub Releases endpoint, and added "Check for Updates..." tray menu item.
Tauri Updater Implementation
apps/desktop/src-tauri/src/updater.rs
New module with check_on_launch (5-second delayed check) and manual_check entry points using tauri-plugin-updater for update detection, download/install coordination, and system notifications on launch and manual triggers.
FUSE TEE Key Enrollment
crates/fuse/src/operations.rs, crates/fuse/src/read_ops.rs, crates/fuse/src/platform/windows/operations.rs, crates/fuse/src/platform/windows/write_ops.rs
Extended per-file IPNS metadata publish functions to accept TEE public key, epoch, and first-publish flag; on first publish, wraps file IPNS private key with TEE key and includes encrypted key/epoch in publish request; mirrors behavior across Unix and Windows codepaths with consistent enrollment semantics.

Sequence Diagram(s)

sequenceDiagram
    participant User as User/Desktop App
    participant Tauri as Tauri Updater Plugin
    participant GitHub as GitHub Releases
    participant Notify as System Notifications
    
    rect rgba(100, 150, 200, 0.5)
    Note over User,Notify: Launch-Time Check (5s delay)
    User->>User: App starts, setup runs
    User->>Tauri: check_on_launch() spawned async
    Tauri->>Tauri: Wait 5 seconds
    Tauri->>GitHub: GET latest.json (check())
    GitHub-->>Tauri: Version & download URL
    alt Update Available
        Tauri->>Tauri: download_and_install()
        Tauri->>GitHub: Download binary
        GitHub-->>Tauri: Binary received
        Tauri->>Notify: Emit "Update Ready" notification
        Tauri->>User: Staged for next restart
    else No Update
        Tauri->>Tauri: Log & return
    end
    end
    
    rect rgba(150, 200, 100, 0.5)
    Note over User,Notify: Manual Check (Tray Menu)
    User->>User: Click "Check for Updates..."
    User->>Tauri: manual_check()
    Tauri->>GitHub: GET latest.json (check())
    GitHub-->>Tauri: Version info
    alt Update Found
        Tauri->>Tauri: download_and_install()
        Tauri->>GitHub: Download binary
        Tauri->>Notify: Emit "Update Ready" notification
    else No Update
        Tauri->>Notify: Emit "Already on latest version" notification
    end
    end
Loading
sequenceDiagram
    participant App as Desktop App/FUSE
    participant Coordinator as Publish Coordinator
    participant Crypto as Cipherbox Crypto
    participant API as IPNS API Client
    
    rect rgba(200, 100, 150, 0.5)
    Note over App,API: First File Publish (new file, empty CID)
    App->>App: release_handle() called on new file
    App->>Coordinator: Compute is_new_file = true
    App->>Coordinator: Clone tee_public_key & epoch from FS context
    App->>Coordinator: publish_file_metadata(is_first_publish=true, tee_public_key, tee_key_epoch)
    Coordinator->>Crypto: wrap_key(ipns_private_key, tee_public_key)
    Crypto-->>Coordinator: encrypted_key (hex-encoded)
    Coordinator->>API: IpnsPublishRequest with encrypted_ipns_private_key & key_epoch
    API-->>Coordinator: Publish success
    end
    
    rect rgba(100, 200, 150, 0.5)
    Note over App,API: Subsequent File Publish (existing file)
    App->>App: release_handle() called on modified file
    App->>Coordinator: Compute is_new_file = false (CID present)
    App->>Coordinator: Clone tee_public_key & epoch (but not used)
    App->>Coordinator: publish_file_metadata(is_first_publish=false, ...)
    Coordinator->>Crypto: Skip TEE wrapping
    Coordinator->>API: IpnsPublishRequest with encrypted_ipns_private_key=None, key_epoch=None
    API-->>Coordinator: Publish success (no re-enrollment)
    end
Loading

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~25 minutes

Possibly related PRs

🚥 Pre-merge checks | ✅ 3
✅ Passed checks (3 passed)
Check name Status Explanation
Title check ✅ Passed The title clearly and specifically summarizes the three main changes: desktop auto-updater integration, TEE file enrollment for IPNS keys, and CI build workflow for cross-platform signing and release.
Docstring Coverage ✅ Passed Docstring coverage is 90.00% which is sufficient. The required threshold is 80.00%.
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feat/phase-25-desktop-enhancements

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@codecov

codecov Bot commented Mar 25, 2026

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 0% with 72 lines in your changes missing coverage. Please review.
✅ Project coverage is 69.40%. Comparing base (25bc1b3) to head (7e8e6ad).
⚠️ Report is 5 commits behind head on main.

Files with missing lines Patch % Lines
apps/desktop/src-tauri/src/updater.rs 0.00% 60 Missing ⚠️
apps/desktop/src-tauri/src/tray/mod.rs 0.00% 10 Missing ⚠️
apps/desktop/src-tauri/src/main.rs 0.00% 2 Missing ⚠️
Additional details and impacted files

Impacted file tree graph

@@             Coverage Diff             @@
##             main     #360       +/-   ##
===========================================
+ Coverage   59.31%   69.40%   +10.09%     
===========================================
  Files         126      105       -21     
  Lines        9180     6210     -2970     
  Branches      892      892               
===========================================
- Hits         5445     4310     -1135     
+ Misses       3531     1696     -1835     
  Partials      204      204               
Flag Coverage Δ
api 83.54% <ø> (ø)
api-client 83.54% <ø> (ø)
core 83.54% <ø> (ø)
crypto 83.54% <ø> (ø)
desktop 14.98% <0.00%> (-16.23%) ⬇️
sdk 83.54% <ø> (ø)
sdk-core 83.54% <ø> (ø)

Flags with carried forward coverage won't be shown. Click here to find out more.

Files with missing lines Coverage Δ
apps/desktop/src-tauri/src/main.rs 0.00% <0.00%> (ø)
apps/desktop/src-tauri/src/tray/mod.rs 0.00% <0.00%> (ø)
apps/desktop/src-tauri/src/updater.rs 0.00% <0.00%> (ø)

... and 31 files with indirect coverage changes

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR adds three desktop-focused capabilities: (1) enrolling newly created per-file IPNS keys with the TEE on first publish (to enable periodic republishing), (2) integrating the Tauri v2 updater with launch + manual checks, and (3) adding a GitHub Actions workflow to build/signed desktop release artifacts for the updater pipeline.

Changes:

  • Thread TEE public key + epoch into per-file publish_file_metadata on both Unix (FUSE) and Windows (WinFsp), wrapping the per-file IPNS private key on first publish.
  • Add a new desktop updater module, wire it into app startup, and expose a “Check for Updates…” tray menu action; enable updater capability + config.
  • Add a release-triggered CI workflow to build/signed desktop bundles (macOS arm64+x86_64, Linux, Windows) and upload updater artifacts to GitHub Releases.

Reviewed changes

Copilot reviewed 25 out of 27 changed files in this pull request and generated 3 comments.

Show a summary per file
File Description
crates/fuse/src/read_ops.rs Passes tee_public_key/tee_key_epoch + first-publish flag into per-file publish during release() uploads (Unix).
crates/fuse/src/operations.rs Adds TEE enrollment fields to per-file IPNS publish request (Unix).
crates/fuse/src/platform/windows/write_ops.rs Computes first-publish flag and passes TEE params into per-file publish path (Windows).
crates/fuse/src/platform/windows/operations.rs Adds TEE enrollment fields to per-file IPNS publish request (Windows).
apps/desktop/src-tauri/src/updater.rs New module implementing launch-delayed and manual update checks + notifications.
apps/desktop/src-tauri/src/main.rs Registers updater plugin and triggers update check on launch.
apps/desktop/src-tauri/src/tray/mod.rs Adds tray menu item + handler for manual update checks.
apps/desktop/src-tauri/tauri.conf.json Enables updater artifact generation and configures updater endpoints + Ed25519 pubkey.
apps/desktop/src-tauri/capabilities/default.json Grants updater capability permission.
apps/desktop/src-tauri/Cargo.toml Adds tauri-plugin-updater dependency.
.github/workflows/build-desktop.yml Builds signed desktop artifacts on release publish and uploads updater assets to the release.
Cargo.lock Locks new/updated Rust dependencies (including updater plugin and related transitive deps).
.planning/phases/25-desktop-enhancements/25-CONTEXT.md Phase context for desktop enhancements work.
.planning/phases/25-desktop-enhancements/25-RESEARCH.md Research notes and integration patterns for updater + TEE enrollment.
.planning/phases/25-desktop-enhancements/25-VALIDATION.md Validation strategy for Phase 25.
.planning/phases/25-desktop-enhancements/25-VERIFICATION.md Verification report for Phase 25 deliverables.
.planning/phases/25-desktop-enhancements/25-01-PLAN.md Execution plan for TEE per-file enrollment.
.planning/phases/25-desktop-enhancements/25-01-SUMMARY.md Summary of the TEE enrollment plan execution.
.planning/phases/25-desktop-enhancements/25-02-PLAN.md Execution plan for updater integration.
.planning/phases/25-desktop-enhancements/25-02-SUMMARY.md Summary of the updater integration execution.
.planning/phases/25-desktop-enhancements/25-03-PLAN.md Execution plan for desktop CI build workflow.
.planning/phases/25-desktop-enhancements/25-03-SUMMARY.md Summary of the CI workflow execution.
.planning/config.json Fixes JSON formatting/structure.
.planning/STATE.md Updates planning state and progress counters.
.planning/ROADMAP.md Marks Phase 25 as completed and updates roadmap progress section.
.planning/REQUIREMENTS.md Marks DESKTOP-01 / DESKTOP-02 as complete.
.planning/PROJECT.md Updates project “Last updated” marker for Phase 25 completion.

Comment thread .planning/ROADMAP.md Outdated
Comment thread .planning/ROADMAP.md Outdated
Comment thread .planning/STATE.md Outdated

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 3

🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In @.github/workflows/build-desktop.yml:
- Around line 80-88: In the "Install WinFsp (Windows)" step add SHA256 integrity
verification before running msiexec: after downloading to $winfspMsi compute the
file hash (e.g., use PowerShell Get-FileHash -Algorithm SHA256) and compare it
against the expected SHA256 for winfsp-2.0.23075; if the hash does not match,
fail the job and do not call Start-Process msiexec.exe; update the step to store
the expected checksum in a variable or literal and ensure comparison uses a
case-insensitive string match so the installer only runs on a verified MSI.

In `@crates/fuse/src/operations.rs`:
- Around line 165-181: The current match on (is_first_publish, tee_public_key)
can set encrypted_ipns_private_key while leaving key_epoch as None, producing a
half-configured TEE enrollment; modify the construction so that when
encrypted_ipns_private_key is Some(...) you always set key_epoch to
Some(tee_key_epoch) and when you choose None for encrypted_ipns_private_key you
also pass None for key_epoch; update the match handling around is_first_publish,
tee_public_key and tee_key_epoch that builds encrypted_ipns_for_tee and
tee_epoch to guarantee both fields are set or both are None before creating the
cipherbox_api_client::IpnsPublishRequest (fields encrypted_ipns_private_key and
key_epoch).

In `@crates/fuse/src/platform/windows/operations.rs`:
- Around line 360-379: The current TEE enrollment branch can set
encrypted_ipns_private_key while leaving key_epoch None; update the logic around
is_first_publish/tee_public_key so you only produce encrypted_ipns_for_tee and
tee_epoch together or neither: when (true, Some(tee_key)) is matched, verify
tee_key_epoch is Some and error out if it is None (reject half-configured TEE),
otherwise wrap file_ipns_private_key and set both encrypted_ipns_for_tee and
tee_epoch from tee_key_epoch; ensure the IpnsPublishRequest
(cipherbox_api_client::IpnsPublishRequest) is populated with either both
encrypted_ipns_private_key and key_epoch Some or both None so no partial
enrollment is sent.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: 4f16522f-1db8-46a1-ac02-4e85b7c4a382

📥 Commits

Reviewing files that changed from the base of the PR and between 6dcbad0 and abdbcc5.

⛔ Files ignored due to path filters (1)
  • Cargo.lock is excluded by !**/*.lock
📒 Files selected for processing (26)
  • .github/workflows/build-desktop.yml
  • .planning/PROJECT.md
  • .planning/REQUIREMENTS.md
  • .planning/ROADMAP.md
  • .planning/STATE.md
  • .planning/config.json
  • .planning/phases/25-desktop-enhancements/25-01-PLAN.md
  • .planning/phases/25-desktop-enhancements/25-01-SUMMARY.md
  • .planning/phases/25-desktop-enhancements/25-02-PLAN.md
  • .planning/phases/25-desktop-enhancements/25-02-SUMMARY.md
  • .planning/phases/25-desktop-enhancements/25-03-PLAN.md
  • .planning/phases/25-desktop-enhancements/25-03-SUMMARY.md
  • .planning/phases/25-desktop-enhancements/25-CONTEXT.md
  • .planning/phases/25-desktop-enhancements/25-RESEARCH.md
  • .planning/phases/25-desktop-enhancements/25-VALIDATION.md
  • .planning/phases/25-desktop-enhancements/25-VERIFICATION.md
  • apps/desktop/src-tauri/Cargo.toml
  • apps/desktop/src-tauri/capabilities/default.json
  • apps/desktop/src-tauri/src/main.rs
  • apps/desktop/src-tauri/src/tray/mod.rs
  • apps/desktop/src-tauri/src/updater.rs
  • apps/desktop/src-tauri/tauri.conf.json
  • crates/fuse/src/operations.rs
  • crates/fuse/src/platform/windows/operations.rs
  • crates/fuse/src/platform/windows/write_ops.rs
  • crates/fuse/src/read_ops.rs

Comment thread .github/workflows/build-desktop.yml Outdated
Comment thread crates/fuse/src/operations.rs
Comment thread crates/fuse/src/platform/windows/operations.rs
- Fix ROADMAP.md: check plan boxes, add missing v1.1 milestone column
- Fix STATE.md: update position to COMPLETE 3/3
- Add SHA256 checksum verification for WinFsp MSI download (matches
  ci.yml, deploy-staging.yml, desktop-e2e.yml pattern)
- Guard against half-configured TEE enrollment: error if tee_public_key
  is present but tee_key_epoch is missing (both Unix and Windows)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Entire-Checkpoint: 7227dc8b9ee1

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 25 out of 27 changed files in this pull request and generated no new comments.

@FSM1 FSM1 merged commit 2bf8f4b into main Mar 25, 2026
29 checks passed
@FSM1 FSM1 deleted the feat/phase-25-desktop-enhancements branch March 25, 2026 23:55
This was referenced Mar 25, 2026
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