发布

  • Release 2.1.0: security hardening, UI fixes, version sync

    frostbyte_neo 发布于 2026-04-22 00:33:02 +00:00 | 102 次提交 在此版本后已推送到 main

    Security fixes:

    • CleaningEngine: isSafeToDelete requires trailing "/" prefix to reject
      sibling paths (#47); Downloads/Documents/Desktop no longer whole-subtree
      deletable (#48); cleanItems now deletes through the resolved URL and
      re-verifies immediately before unlink to narrow the TOCTOU window (#49)
    • ScanEngine.scanBrewCache: strips HOMEBREW_* from child env and validates
      the returned path against a known-roots allow-list (#48)
    • SchedulerService: discards a stale nextRunDate loaded from defaults (#48)
    • AppState: gates scheduler.start() on OnboardingComplete (#48); refuses
      to send high-risk home dotpaths through trashViaFinder (#50/#51)
    • AppPathFinder: minimum 5-char token length on name/path/letters/base
      matches (#50); bundleIDMatchesCondition anchors bundle-family matching
      (#50); discoverContainers requires 5-char bundle ID (#50)
    • Locations.appSearch: bare $HOME no longer scanned (root cause of #51
      Claude-dir regression); scoped subdirs retained
    • Conditions: new highRiskHomeDotPaths list (~/.claude, ~/.ssh, ~/.aws,
      ~/.kube, ~/.docker, ~/.gnupg, ~/.config, etc.) unconditionally skipped
    • OrphanSafetyPolicy: trailing-"/" in allow-list check (#47); explicit
      highRiskHomeDotPaths reject

    UI fixes:

    • MainWindow: Smart Scan pinned to a new "Home" section at the top of the
      sidebar so it is always reachable (#69)
    • AppListView: sortable Application/Size columns via KeyPathComparator
      (#59); appTable maxWidth=600 to prevent layout break when dragging the
      HSplitView (#60)

    Versioning:

    • Info.plist: use $(MARKETING_VERSION) / $(CURRENT_PROJECT_VERSION)
      macros instead of hardcoded 1.0.1/3 - fixes the About-box version
      mismatch (#44, #46, #57, #64)
    • project.yml + pbxproj: bump to 2.1.0 build 5
    下载附件