                 Changes in version 0.2.0 (2026-10-06)                  

  - dep_libraries() now warns only when an older copy is running while a
    newer one is hidden in another library. Shadowing by a newer copy,
    which is normal on hosted notebook images such as Kaggle, is
    reported as information. The result gains a hidden_newer column.

Bug fixes

  - dep_diff() now detects upgrades and downgrades of packages that are
    loaded in the running session. Version 0.1.0 compared the loaded
    version, which does not change until R restarts, so the headline
    dep_snapshot() -> install.packages() -> dep_diff() workflow reported
    "no changes" for exactly the packages it was meant to protect.
    Comparison is now on the on-disk version, and a loaded package whose
    running version no longer matches disk is flagged (session_stale).
  - dep_check() is now genuinely offline by default. It previously
    called tools::package_dependencies() without a local database, which
    queried CRAN; with no internet the transitive tree came back empty
    and the check reported success. Dependencies are now resolved from
    installed metadata.
  - Malformed lines in a text manifest containing {} no longer break the
    error message.
  - Fixed a stray merge-conflict fragment in the vignette.

New features

  - dep_check() verifies the version constraints that packages declare
    on each other (Imports: cli (>= 3.4.0)), not just that transitive
    dependencies are installed, so real conflicts are caught. New
    columns loaded and reason; new status "restart"; stop_on_problem for
    scripts and CI; check_cran = TRUE now adds cran_latest and outdated
    and fails gracefully offline.
  - Manifests accept operators: ">= 1.2", "== 1.2.3", "< 2.0", "!= 1.0".
    A bare version still means "at least", so existing manifests keep
    working.
  - Manifests can be human-readable text files (any extension other than
    .rds), convenient for version control.
  - dep_manifest_freeze() pins the packages you are using now.
  - dep_snapshot() records every installed package by default (scope =
    "all"), can be saved with path, and dep_diff() accepts a snapshot, a
    file path, or nothing (the latest snapshot). Saved snapshots survive
    the session restart that hosted notebooks require after installs.
  - dep_env() detects Kaggle, Colab, Binder, RStudio and plain desktop
    sessions and reports writable libraries. Restart advice in messages
    is tailored to the platform.
  - dep_libraries() finds packages shadowed by a different version in
    another library.
  - dep_healthcheck() now reports the environment and shadowed packages.
  - dep_fix() gains lib, dry_run and method = "archive", a base-R
    backend that needs neither pak nor remotes. It verifies the result
    and warns if a restart is needed or if an earlier library hides the
    new copy.

Breaking changes

  - The depguard_snapshot structure changed (packages now has columns
    disk_version, library, loaded_version); snapshots saved by 0.1.0
    cannot be diffed.
  - dep_check() results have two extra columns and the class
    depguard_check (still a data frame); the required column shows the
    operator form (e.g. ">= 1.1.4").
  - sessioninfo is no longer imported.
  - dep_check() prints the summary of problems; printing the result
    shows only problem rows (print(x, all = TRUE) for everything).

                 Changes in version 0.1.0 (2026-09-24)                  

  - Initial CRAN release.
