{
  "schemaVersion": 1,
  "manifestVersion": "1.2.0",
  "sequence": 3,
  "rules": [
    {
      "id": "xcode-derived-data",
      "group": "Xcode",
      "label": "DerivedData",
      "path_pattern": "~/Library/Developer/Xcode/DerivedData",
      "owning_app": "Xcode",
      "why_it_exists": "Build files and search indexes Xcode creates while compiling and browsing your projects. Xcode's own build tool describes this location as where “build products and other derived data” go (xcodebuild -help).",
      "rebuildable": true,
      "consequence": "Source code, git history and project settings are not stored here, so a normal project loses nothing you cannot rebuild. The effect is that the next build of each affected project is slower while Xcode recompiles and re-indexes. If a project uses a custom build script that writes its own output into DerivedData, that output is removed too.",
      "restore_action": "Open the project in Xcode and build it (Product → Build, ⌘B) — Xcode recreates DerivedData automatically. For a guaranteed clean rebuild, use Product → Clean Build Folder (⇧⌘K) first. From Terminal, the equivalent is: xcodebuild build (run from the project directory).",
      "restore_commands": [
        "xcodebuild build"
      ],
      "confidence_risk_rating": "Green",
      "verified_by": "locally tested",
      "last_validated_macos_version": "macOS 26.6.2, Xcode 26.6"
    },
    {
      "id": "xcode-archives",
      "group": "Xcode",
      "label": "Archives",
      "path_pattern": "~/Library/Developer/Xcode/Archives",
      "owning_app": "Xcode",
      "why_it_exists": null,
      "rebuildable": null,
      "consequence": null,
      "restore_action": null,
      "restore_commands": null,
      "confidence_risk_rating": null,
      "verified_by": null,
      "last_validated_macos_version": null
    },
    {
      "id": "xcode-ios-device-support",
      "group": "Xcode",
      "label": "iOS DeviceSupport",
      "path_pattern": "~/Library/Developer/Xcode/iOS DeviceSupport",
      "owning_app": "Xcode",
      "why_it_exists": null,
      "rebuildable": null,
      "consequence": null,
      "restore_action": null,
      "restore_commands": null,
      "confidence_risk_rating": null,
      "verified_by": null,
      "last_validated_macos_version": null
    },
    {
      "id": "xcode-simulator-devices",
      "group": "Xcode",
      "label": "Simulator Devices",
      "path_pattern": "~/Library/Developer/CoreSimulator/Devices",
      "owning_app": "Xcode Simulator",
      "why_it_exists": null,
      "rebuildable": null,
      "consequence": null,
      "restore_action": null,
      "restore_commands": null,
      "confidence_risk_rating": null,
      "verified_by": null,
      "last_validated_macos_version": null
    },
    {
      "id": "npm-cache",
      "group": "Package managers",
      "label": "npm cache",
      "path_pattern": "~/.npm/_cacache",
      "owning_app": "npm",
      "why_it_exists": "Package files npm downloads and keeps so it doesn't have to fetch them again on your next install. npm's own documentation (npm help cache) describes this as a content-addressable cache of “http request data as well as other package-related data.”",
      "rebuildable": true,
      "consequence": "The next time you install a package that was cached here, npm downloads it from the registry again — that install is slower and needs an internet connection. Packages already installed into a project's node_modules folder are not touched.",
      "restore_action": "Run npm install in any project that needs it — npm re-downloads what's missing and rebuilds the cache automatically, though a package version that has since been unpublished from the registry may not come back.",
      "restore_commands": [
        "npm install"
      ],
      "confidence_risk_rating": "Green",
      "verified_by": "vendor documentation",
      "last_validated_macos_version": "macOS 26.6.2, npm 10.9.3"
    },
    {
      "id": "npm-global-packages",
      "group": "Package managers",
      "label": "npm global",
      "path_pattern": "~/.npm-global",
      "owning_app": "npm",
      "why_it_exists": null,
      "rebuildable": null,
      "consequence": null,
      "restore_action": null,
      "restore_commands": null,
      "confidence_risk_rating": null,
      "verified_by": null,
      "last_validated_macos_version": null
    },
    {
      "id": "homebrew-cache",
      "group": "Package managers",
      "label": "Homebrew cache",
      "path_pattern": "~/Library/Caches/Homebrew",
      "owning_app": "Homebrew",
      "why_it_exists": null,
      "rebuildable": null,
      "consequence": null,
      "restore_action": null,
      "restore_commands": null,
      "confidence_risk_rating": null,
      "verified_by": null,
      "last_validated_macos_version": null
    },
    {
      "id": "cargo-registry",
      "group": "Package managers",
      "label": "Cargo registry",
      "path_pattern": "~/.cargo/registry",
      "owning_app": "Cargo",
      "why_it_exists": "Crate archives Cargo downloads from crates.io, the sources it unpacks from them, and its copy of the registry index — kept so builds don't fetch them again.",
      "rebuildable": true,
      "consequence": "The next build of any Rust project downloads the crates it needs again — that build is slower and needs an internet connection. Compiled output in a project's target folder is not touched.",
      "restore_action": "Run cargo build (or cargo fetch) in any project — Cargo downloads what is missing by itself. A crate version that has since been yanked or removed from the registry may not come back.",
      "restore_commands": [
        "cargo build",
        "cargo fetch"
      ],
      "confidence_risk_rating": "Green",
      "verified_by": "vendor documentation: The Cargo Book, “Cargo Home”, section “Clearing the cache” (https://doc.rust-lang.org/cargo/guide/cargo-home.html) — “you can always remove any part of the cache”. Recreation proved in a scratch CARGO_HOME on 10 Oct 2026 with cargo 1.97.1: registry deleted, cargo build downloaded and unpacked it again.",
      "last_validated_macos_version": "macOS 26.6.2, cargo 1.97.1"
    },
    {
      "id": "rustup-toolchains",
      "group": "Package managers",
      "label": "rustup toolchains",
      "path_pattern": "~/.rustup/toolchains",
      "owning_app": "rustup",
      "why_it_exists": null,
      "rebuildable": null,
      "consequence": null,
      "restore_action": null,
      "restore_commands": null,
      "confidence_risk_rating": null,
      "verified_by": null,
      "last_validated_macos_version": null
    },
    {
      "id": "pip-cache",
      "group": "Package managers",
      "label": "pip cache",
      "path_pattern": "~/Library/Caches/pip",
      "owning_app": "pip",
      "why_it_exists": "Downloads pip has made and wheels it has built, kept so the next install doesn't fetch or build them again.",
      "rebuildable": true,
      "consequence": "The next pip install downloads packages again, and rebuilds any wheel it had built — slower, and it needs an internet connection. Installed packages are not touched.",
      "restore_action": "Nothing to do — pip fills the cache again the next time it installs something.",
      "restore_commands": null,
      "confidence_risk_rating": "Green",
      "verified_by": "vendor documentation: pip documentation, “Caching”, section “Cache management” (https://pip.pypa.io/en/stable/topics/caching/) — pip's own command “pip cache purge” clears every file from this cache. Recreation proved in a scratch PIP_CACHE_DIR on 10 Oct 2026 with pip 25.2: cache deleted, pip download filled it again.",
      "last_validated_macos_version": "macOS 26.6.2, pip 25.2"
    },
    {
      "id": "conda",
      "group": "Package managers",
      "label": "conda",
      "path_pattern": "~/.conda",
      "owning_app": "conda",
      "why_it_exists": null,
      "rebuildable": null,
      "consequence": null,
      "restore_action": null,
      "restore_commands": null,
      "confidence_risk_rating": null,
      "verified_by": null,
      "last_validated_macos_version": null
    },
    {
      "id": "swiftpm",
      "group": "Package managers",
      "label": "swiftpm",
      "path_pattern": "~/.swiftpm",
      "owning_app": "Swift Package Manager",
      "why_it_exists": null,
      "rebuildable": null,
      "consequence": null,
      "restore_action": null,
      "restore_commands": null,
      "confidence_risk_rating": null,
      "verified_by": null,
      "last_validated_macos_version": null
    },
    {
      "id": "ollama-models",
      "group": "Local AI models",
      "label": "Ollama models",
      "path_pattern": "~/.ollama/models",
      "owning_app": "Ollama",
      "why_it_exists": "The model files Ollama downloaded so it can run an AI model locally on this Mac, without sending anything over the network.",
      "rebuildable": true,
      "consequence": "The named model is removed and has to be downloaded again before anything that uses it can work — or built again, if you made it yourself with `ollama create`. Model sizes vary widely, from under 100 MB to tens of gigabytes; check this specific model's size in Spaceific before removing it.",
      "restore_action": "Run: ollama pull <model>:<tag> (for example, ollama pull qwen2.5:3b). For a pinned tag like that, you get back the exact version you had. For a :latest tag, you get whatever the current version of that model is right now — not necessarily the identical bytes you deleted, since :latest can change over time.",
      "restore_commands": null,
      "confidence_risk_rating": "Yellow",
      "verified_by": "locally tested",
      "last_validated_macos_version": "macOS 26.6.2, Ollama 0.33.3"
    },
    {
      "id": "huggingface-cache",
      "group": "Local AI models",
      "label": "Hugging Face cache",
      "path_pattern": "~/.cache/huggingface",
      "owning_app": "Hugging Face",
      "why_it_exists": null,
      "rebuildable": null,
      "consequence": null,
      "restore_action": null,
      "restore_commands": null,
      "confidence_risk_rating": null,
      "verified_by": null,
      "last_validated_macos_version": null
    },
    {
      "id": "easyocr",
      "group": "Local AI models",
      "label": "EasyOCR",
      "path_pattern": "~/.EasyOCR",
      "owning_app": "EasyOCR",
      "why_it_exists": null,
      "rebuildable": null,
      "consequence": null,
      "restore_action": null,
      "restore_commands": null,
      "confidence_risk_rating": null,
      "verified_by": null,
      "last_validated_macos_version": null
    },
    {
      "id": "cursor",
      "group": "AI coding assistants",
      "label": "Cursor",
      "path_pattern": "~/.cursor",
      "owning_app": "Cursor",
      "why_it_exists": null,
      "rebuildable": null,
      "consequence": null,
      "restore_action": null,
      "restore_commands": null,
      "confidence_risk_rating": null,
      "verified_by": null,
      "last_validated_macos_version": null
    },
    {
      "id": "codeium",
      "group": "AI coding assistants",
      "label": "Codeium",
      "path_pattern": "~/.codeium",
      "owning_app": "Codeium",
      "why_it_exists": null,
      "rebuildable": null,
      "consequence": null,
      "restore_action": null,
      "restore_commands": null,
      "confidence_risk_rating": null,
      "verified_by": null,
      "last_validated_macos_version": null
    },
    {
      "id": "github-copilot",
      "group": "AI coding assistants",
      "label": "Copilot",
      "path_pattern": "~/.copilot",
      "owning_app": "GitHub Copilot",
      "why_it_exists": null,
      "rebuildable": null,
      "consequence": null,
      "restore_action": null,
      "restore_commands": null,
      "confidence_risk_rating": null,
      "verified_by": null,
      "last_validated_macos_version": null
    },
    {
      "id": "gemini",
      "group": "AI coding assistants",
      "label": "Gemini",
      "path_pattern": "~/.gemini",
      "owning_app": "Gemini",
      "why_it_exists": null,
      "rebuildable": null,
      "consequence": null,
      "restore_action": null,
      "restore_commands": null,
      "confidence_risk_rating": null,
      "verified_by": null,
      "last_validated_macos_version": null
    },
    {
      "id": "codex",
      "group": "AI coding assistants",
      "label": "Codex",
      "path_pattern": "~/.codex",
      "owning_app": "Codex",
      "why_it_exists": null,
      "rebuildable": null,
      "consequence": null,
      "restore_action": null,
      "restore_commands": null,
      "confidence_risk_rating": null,
      "verified_by": null,
      "last_validated_macos_version": null
    },
    {
      "id": "antigravity",
      "group": "AI coding assistants",
      "label": "Antigravity",
      "path_pattern": "~/.antigravity",
      "owning_app": "Antigravity",
      "why_it_exists": null,
      "rebuildable": null,
      "consequence": null,
      "restore_action": null,
      "restore_commands": null,
      "confidence_risk_rating": null,
      "verified_by": null,
      "last_validated_macos_version": null
    },
    {
      "id": "antigravity-ide",
      "group": "AI coding assistants",
      "label": "Antigravity IDE",
      "path_pattern": "~/.antigravity-ide",
      "owning_app": "Antigravity",
      "why_it_exists": null,
      "rebuildable": null,
      "consequence": null,
      "restore_action": null,
      "restore_commands": null,
      "confidence_risk_rating": null,
      "verified_by": null,
      "last_validated_macos_version": null
    },
    {
      "id": "cagent",
      "group": "AI coding assistants",
      "label": "Cagent",
      "path_pattern": "~/.cagent",
      "owning_app": "Cagent",
      "why_it_exists": null,
      "rebuildable": null,
      "consequence": null,
      "restore_action": null,
      "restore_commands": null,
      "confidence_risk_rating": null,
      "verified_by": null,
      "last_validated_macos_version": null
    },
    {
      "id": "user-cache-root",
      "group": "Other",
      "label": "User cache root",
      "path_pattern": "~/.cache",
      "owning_app": null,
      "why_it_exists": null,
      "rebuildable": null,
      "consequence": null,
      "restore_action": null,
      "restore_commands": null,
      "confidence_risk_rating": null,
      "verified_by": null,
      "last_validated_macos_version": null
    },
    {
      "id": "puppeteer-cache",
      "group": "Other",
      "label": "Puppeteer cache",
      "path_pattern": "~/.cache/puppeteer",
      "owning_app": "Puppeteer",
      "why_it_exists": "Puppeteer's own private copy of the Chrome browser, downloaded so it can automate a browser without depending on one already being installed. Puppeteer's documentation states browsers are cached at exactly this path since v19.0.0.",
      "rebuildable": true,
      "consequence": "Puppeteer re-downloads its private copy of Chrome the next time a project needs it, which requires an internet connection and can take several minutes. Until that download finishes, anything using Puppeteer fails to launch a browser. Check this folder's size in Spaceific to see how much has to come down again.",
      "restore_action": "Run: npx puppeteer browsers install",
      "restore_commands": [
        "npx puppeteer browsers install"
      ],
      "confidence_risk_rating": "Green",
      "verified_by": "vendor documentation",
      "last_validated_macos_version": "macOS 26.6.2, Chrome for Testing 150.0.7871.24"
    },
    {
      "id": "xcode-app-cache",
      "group": "Xcode",
      "label": "Xcode app cache",
      "path_pattern": "~/Library/Caches/com.apple.dt.Xcode",
      "owning_app": "Xcode",
      "why_it_exists": null,
      "rebuildable": null,
      "consequence": null,
      "restore_action": null,
      "restore_commands": null,
      "confidence_risk_rating": null,
      "verified_by": null,
      "last_validated_macos_version": null
    },
    {
      "id": "pnpm-store",
      "group": "Package managers",
      "label": "pnpm store",
      "path_pattern": "~/Library/pnpm/store",
      "owning_app": "pnpm",
      "why_it_exists": "Every package version pnpm has downloaded, kept once so each project can share it instead of storing its own copy.",
      "rebuildable": true,
      "consequence": "Projects that are already installed keep working. pnpm downloads a package again the next time a project needs one it doesn't have.",
      "restore_action": "Nothing to do — pnpm refills the store as projects need packages.",
      "restore_commands": null,
      "confidence_risk_rating": "Green",
      "verified_by": "vendor documentation and local test: pnpm documentation, “pnpm store”, section “prune” (https://pnpm.io/cli/store) — “pnpm will download them again”; and the FAQ on the store and node_modules (https://pnpm.io/faq). Proved in a scratch store on 10 Oct 2026 with pnpm 10.17.0 (files cloned into node_modules on APFS): store deleted, then the project's code, pnpm install, pnpm add and pnpm install --frozen-lockfile each ran with exit 0 and no prompt.",
      "last_validated_macos_version": "macOS 26.6.2, pnpm 10.17.0"
    }
  ]
}