From 0752c43bd5c9dcdc7457bb7d65689bc1f262ccb7 Mon Sep 17 00:00:00 2001 From: Paul Keen <125715+pftg@users.noreply.github.com> Date: Sun, 23 Aug 2026 14:07:22 +0200 Subject: [PATCH] docs: the legacy API is removed in 2.1, not 3.0 The repo told users the v1 Capybara::Screenshot* / CapybaraScreenshotDiff* API is "REMOVED in 3.0" -- in the runtime migration notice that ships in 2.0, in UPGRADING.md, and in ~50 code comments. Per ADR-008's final amendment there is no 3.0: 2.0.0 final ships WITH the full compatibility layer, and 2.1 deletes the legacy trees, legacy_shims.rb, deprecation.rb, test/legacy/, the chunky_png driver and shift_distance_limit. Shipping the old text would publish a promise we intend to break. - Migration notice now reads "still works in 2.0 and is REMOVED in 2.1"; the pinning assertion in snap_diff_deprecation_test.rb matches the whole clause instead of just the version, and was mutation-checked. - UPGRADING.md states the contract plainly up front: legacy names work in 2.0 with warnings, all of it removed in 2.1. - architecture.md reframes legacy_shims.rb as the removal layer rather than a permanent fixture, and names the gates that keep the removal a git rm. - drivers.md / configuration.md now say chunky_png and shift_distance_limit are deprecated in 2.0 and removed in 2.1 (docs only; the runtime warnings are separate work). - deletion_3_0_test.rb -> legacy_deletion_test.rb, DELETED_IN_3_0 -> DELETED_WITH_LEGACY_TREES. Version-free phrasing elsewhere so the comments stop carrying a release number that adds nothing. - CHANGELOG gains an Unreleased corrective note; the published beta sections are left as history. --- CHANGELOG.md | 16 ++++++++++++++ Rakefile | 11 +++++----- docs/UPGRADING.md | 12 ++++++---- docs/architecture.md | 4 ++-- docs/configuration.md | 5 +++++ docs/drivers.md | 6 +++++ lib/capybara/screenshot/diff/config_legacy.rb | 2 +- lib/snap_diff.rb | 6 ++--- lib/snap_diff/config.rb | 2 +- lib/snap_diff/deprecation.rb | 6 ++--- lib/snap_diff/drivers.rb | 3 ++- lib/snap_diff/dsl.rb | 2 +- lib/snap_diff/legacy_shims.rb | 2 +- test/legacy/errors_alias_test.rb | 4 ++-- test/legacy/legacy_config_accessors_test.rb | 4 ++-- .../legacy_config_default_timing_test.rb | 2 +- test/legacy/legacy_entry_point_probe_test.rb | 4 ++-- test/legacy/legacy_forwarders_test.rb | 4 ++-- .../legacy_namespace_deprecation_test.rb | 2 +- test/legacy/legacy_tree_is_alias_only_test.rb | 14 ++++++------ test/legacy/namespace_forwarding_test.rb | 4 ++-- test/legacy/snap_diff_deprecation_test.rb | 8 +++---- test/support/driver_coverage.rb | 2 +- test/support/dsl_stub.rb | 2 +- ...canonical_suite_has_no_legacy_refs_test.rb | 2 +- test/unit/config_default_timing_test.rb | 2 +- .../unit/core_tree_has_no_legacy_deps_test.rb | 14 ++++++------ test/unit/drivers_test.rb | 4 ++-- test/unit/errors_test.rb | 2 +- test/unit/image_compare_test.rb | 2 +- ...on_3_0_test.rb => legacy_deletion_test.rb} | 22 +++++++++---------- test/unit/snap_diff_config_test.rb | 2 +- test/unit/snap_diff_test.rb | 4 ++-- test/unit/support_load_probe_test.rb | 10 ++++----- 34 files changed, 111 insertions(+), 80 deletions(-) rename test/unit/{deletion_3_0_test.rb => legacy_deletion_test.rb} (92%) diff --git a/CHANGELOG.md b/CHANGELOG.md index ad54e1dc..ab9aa714 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,22 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [Unreleased] + +### Changed +- **The legacy API is removed in 2.1, not 3.0.** There is no 3.0. 2.0.0 final ships + *with* the full v1 compatibility layer — the `Capybara::Screenshot*` / + `CapybaraScreenshotDiff*` shims, the per-constant deprecation warnings and the + one-per-process migration notice — so 2.0 is a real migration window. 2.1 then + deletes all of it. Earlier entries below (and the beta migration notice) said + "3.0"; read every such mention as 2.1. +- **The ChunkyPNG driver and `shift_distance_limit` are also removed in 2.1.** + Both are deprecated in 2.0; VIPS becomes the only driver. Add `ruby-vips` and + install libvips before taking 2.1, and replace `shift_distance_limit` with + `median_filter_window_size`. + +--- + ## [v2.0.0.beta3] - 2026-08-23 Fixes the canonical `SnapDiff` entry points, which were incomplete in beta2. diff --git a/Rakefile b/Rakefile index c0c705ed..7b296fa1 100644 --- a/Rakefile +++ b/Rakefile @@ -5,14 +5,13 @@ require "rake/testtask" task default: :test -# THE 3.0 SPLIT. +# THE LEGACY-REMOVAL SPLIT. # # test/legacy/ holds every test whose SUBJECT is the v1 compatibility surface # -- the old Capybara::Screenshot / CapybaraScreenshotDiff namespaces, their # deprecation warnings, and the gates that keep lib/capybara* alias-only. -# Those tests guard the v1 contract for the whole 2.x line, so they stay and -# stay green; in 3.0 they are deleted by the same commit that deletes what -# they test: +# Those tests guard the v1 contract through 2.0, so they stay and stay green; +# in 2.1 they are deleted by the same commit that deletes what they test: # # git rm -r lib/capybara* lib/capybara_screenshot_diff.rb \ # lib/snap_diff/legacy_shims.rb lib/snap_diff/deprecation.rb \ @@ -23,7 +22,7 @@ task default: :test # # `rake test` -- everything, today's gate. # `rake test:canonical` -- exactly what must still pass once test/legacy and -# the v1 trees are gone. THE 3.0 GATE. +# the v1 trees are gone. THE 2.1 GATE. # `rake test:unit` -- unit-sized tests; test/legacy is unit-sized too # (legacy/ marks lifetime, not kind), so it is in. LEGACY_SURFACE_TESTS = "test/legacy/**/*_test.rb" @@ -34,7 +33,7 @@ Rake::TestTask.new(:test) do |t| t.test_files = FileList["test/**/*_test.rb"] end -desc "Run every test that must survive the 3.0 deletion of the v1 surface" +desc "Run every test that must survive the 2.1 deletion of the v1 surface" Rake::TestTask.new("test:canonical") do |t| t.libs << "test" t.libs << "lib" diff --git a/docs/UPGRADING.md b/docs/UPGRADING.md index 3aab628b..33b5bc52 100644 --- a/docs/UPGRADING.md +++ b/docs/UPGRADING.md @@ -159,6 +159,10 @@ This means you can migrate your codebase incrementally **now**, before opting in ### Deprecation Warnings +**The contract, plainly: every legacy name keeps working in 2.0 and warns. All of it is removed in +2.1** — the `Capybara::Screenshot*` / `CapybaraScreenshotDiff*` namespaces, the shims, and the +deprecation machinery itself. 2.0 is your migration window; do the rename before you take 2.1. + v2.0 emits two different things, and it is worth knowing which is which. #### 1. The migration notice — one line per process @@ -166,7 +170,7 @@ v2.0 emits two different things, and it is worth knowing which is which. The first time a process touches *any* hookable legacy API, you get a single line: ``` -[snap_diff deprecation] This process uses the v1 `Capybara::Screenshot*` / `CapybaraScreenshotDiff*` API. It still works in 2.x and is REMOVED in 3.0 -- see docs/UPGRADING.md for the SnapDiff replacements. Silence with `SnapDiff.silence_deprecations = true` or SNAP_DIFF_SILENCE_DEPRECATIONS=1. (shown once per process) +[snap_diff deprecation] This process uses the v1 `Capybara::Screenshot*` / `CapybaraScreenshotDiff*` API. It still works in 2.0 and is REMOVED in 2.1 -- see docs/UPGRADING.md for the SnapDiff replacements. Silence with `SnapDiff.silence_deprecations = true` or SNAP_DIFF_SILENCE_DEPRECATIONS=1. (shown once per process) ``` It fires once and never again, whichever door you came through: @@ -175,8 +179,8 @@ It fires once and never again, whichever door you came through: - a lazily shimmed legacy constant (see below) - `include Capybara::Screenshot` / `include Capybara::Screenshot::Diff` -It exists because most of the v1 surface **cannot** warn per use, so without it a 2.x app could -be entirely silent right up to the bare `NameError` it would get on 3.0. +It exists because most of the v1 surface **cannot** warn per use, so without it a 2.0 app could +be entirely silent right up to the bare `NameError` it would get on 2.1. #### 2. Per-constant warnings — one line per lazily shimmed constant @@ -261,7 +265,7 @@ Capybara::Screenshot::Diff.stub_const(:AVAILABLE_DRIVERS, []) { ... } SnapDiff::Drivers.stub_const(:AVAILABLE_DRIVERS, []) { ... } ``` -**`SnapDiff::Config::MAPPING` is gone.** It split in two: `SnapDiff::Config::SETTINGS` (the setting names, no legacy knowledge) and `SnapDiff::LegacyShims::CONFIG_MAPPING` (which legacy holder each name hangs off). If you referenced `MAPPING` — iterating settings in a test helper, say — use `SETTINGS`; `CONFIG_MAPPING` is `@api private` and disappears in 3.0 with the rest of the v1 surface. +**`SnapDiff::Config::MAPPING` is gone.** It split in two: `SnapDiff::Config::SETTINGS` (the setting names, no legacy knowledge) and `SnapDiff::LegacyShims::CONFIG_MAPPING` (which legacy holder each name hangs off). If you referenced `MAPPING` — iterating settings in a test helper, say — use `SETTINGS`; `CONFIG_MAPPING` is `@api private` and disappears in 2.1 with the rest of the v1 surface. --- diff --git a/docs/architecture.md b/docs/architecture.md index dc864310..b39d2dbe 100644 --- a/docs/architecture.md +++ b/docs/architecture.md @@ -127,7 +127,7 @@ Drivers abstract image processing operations. Shared default behavior lives in t **Auto-detection:** `SnapDiff::Drivers.detect_available` tries to load `:vips` first (via `ruby-vips` gem), then `:chunky_png`. The `:auto` driver mode picks the first available. `Utils.detect_available_drivers` is the older name and one-lines into it. -**Registry (ADR-008 step 5b):** `SnapDiff::Drivers.loaded` is the canonical driver-class cache — a `name => class` hash filled lazily by `Utils.find_driver_class_for`, and the registration point for custom drivers (the legacy `Capybara::Screenshot::Diff::LOADED_DRIVERS` is an eager same-object alias, so registrations through either land in the same hash). `SnapDiff::Drivers.available` is the canonical read API for the detected list, and since the 3.0-readiness pass the value lives with it, as `SnapDiff::Drivers::AVAILABLE_DRIVERS` — that constant is now the published stubbing point, and the legacy `Capybara::Screenshot::Diff::AVAILABLE_DRIVERS` is an eager same-object alias of it. `SnapDiff::Drivers.for` resolves an options hash to a driver instance. See [Custom drivers](snapdiff.md#custom-drivers). +**Registry (ADR-008 step 5b):** `SnapDiff::Drivers.loaded` is the canonical driver-class cache — a `name => class` hash filled lazily by `Utils.find_driver_class_for`, and the registration point for custom drivers (the legacy `Capybara::Screenshot::Diff::LOADED_DRIVERS` is an eager same-object alias, so registrations through either land in the same hash). `SnapDiff::Drivers.available` is the canonical read API for the detected list, and the value lives with it, as `SnapDiff::Drivers::AVAILABLE_DRIVERS` — that constant is now the published stubbing point, and the legacy `Capybara::Screenshot::Diff::AVAILABLE_DRIVERS` is an eager same-object alias of it. `SnapDiff::Drivers.for` resolves an options hash to a driver instance. See [Custom drivers](snapdiff.md#custom-drivers). ### 6. Difference Region Detection @@ -223,7 +223,7 @@ Since ADR-008 step 1 the storage ownership is inverted from the original v2 cons The legacy `Capybara::Screenshot.*` / `Capybara::Screenshot::Diff.*` accessors are thin delegators generated from `SnapDiff::LegacyShims::CONFIG_MAPPING` (both singleton and instance methods, matching what `mattr_accessor` used to define) that forward to that one object. One storage, two views — a write through either surface is visible through the other structurally, not by synchronization. -Since the 3.0-readiness pass, `lib/snap_diff/legacy_shims.rb` is the single file that holds the v1 surface as code: the `const_missing` forwarders, `CONFIG_MAPPING` and its generator, the derived forwarders (`Screenshot.active?`, `Diff.configure`, `Diff.default_options`, …) and `SnapDiff.start`. `Config` itself names nothing from the v1 namespaces — it declares its settings in `Config::SETTINGS`, and `LegacyShims::CONFIG_MAPPING` says which legacy holder each one is exposed on (an invariant pinned by `snap_diff_config_test.rb`). `lib/capybara/screenshot/diff/config_legacy.rb` remains at the old path as a pair of requires. +`lib/snap_diff/legacy_shims.rb` is the single file that holds the v1 surface as code: the `const_missing` forwarders, `CONFIG_MAPPING` and its generator, the derived forwarders (`Screenshot.active?`, `Diff.configure`, `Diff.default_options`, …) and `SnapDiff.start`. **It is not a permanent fixture — it is the removal layer.** It exists so that deleting v1 support in 2.1 is a `git rm` of `lib/capybara*`, `legacy_shims.rb`, `deprecation.rb` and `test/legacy/`, not a refactor; two mechanical gates (`legacy_tree_is_alias_only_test.rb`, `core_tree_has_no_legacy_deps_test.rb`) keep that true, and `legacy_deletion_test.rb` actually performs the deletion in a tmpdir and loads every canonical entry point from it. `Config` itself names nothing from the v1 namespaces — it declares its settings in `Config::SETTINGS`, and `LegacyShims::CONFIG_MAPPING` says which legacy holder each one is exposed on (an invariant pinned by `snap_diff_config_test.rb`). `lib/capybara/screenshot/diff/config_legacy.rb` remains at the old path as a pair of requires. The two legacy views are organized into two namespaces: diff --git a/docs/configuration.md b/docs/configuration.md index 1b245cd7..559d5b55 100644 --- a/docs/configuration.md +++ b/docs/configuration.md @@ -313,6 +313,11 @@ Capybara::Screenshot::Diff.color_distance_limit = 42 ### Allowed shift distance +> **Deprecated — removed in 2.1.** `shift_distance_limit` only ever worked on the ChunkyPNG +> driver (VIPS ignores it), and the ChunkyPNG driver is removed in 2.1 as well. Use +> `median_filter_window_size` on the VIPS driver instead — it is the same idea and far faster. +> See [Image Processing Drivers](drivers.md). + Sometimes you want to allow small movements in the images. For example, jquery-tablesorter renders the same table slightly differently sometimes. You can set set the shift distance threshold for the comparison using the `shift_distance_limit` option to the `screenshot` diff --git a/docs/drivers.md b/docs/drivers.md index 070dc0d8..86ceaae7 100644 --- a/docs/drivers.md +++ b/docs/drivers.md @@ -52,6 +52,12 @@ There are several options to setup active driver: `:auto`, `:chunky_png` and `:v * `:auto` - will try to load `:vips` if there is gem `ruby-vips`, in other cases will load `:chunky_png` * `:chunky_png` and `:vips` will load correspondent driver +> **`:chunky_png` is deprecated in 2.0 and removed in 2.1.** VIPS becomes the only driver, and +> `shift_distance_limit` — a ChunkyPNG-only option — goes with it. If you are on ChunkyPNG today, +> add `ruby-vips` to your Gemfile and install libvips before taking 2.1, and replace +> `shift_distance_limit` with `median_filter_window_size` and `color_distance_limit` with +> `perceptual_threshold`. + ## Enable VIPS image processing [Vips](https://www.rubydoc.info/gems/ruby-vips/Vips/Image) driver provides a faster comparison, diff --git a/lib/capybara/screenshot/diff/config_legacy.rb b/lib/capybara/screenshot/diff/config_legacy.rb index 0da6e61a..d81a2239 100644 --- a/lib/capybara/screenshot/diff/config_legacy.rb +++ b/lib/capybara/screenshot/diff/config_legacy.rb @@ -8,7 +8,7 @@ # and the old accessor names, Diff.configure/.compare, SnapDiff.start and # the AVAILABLE_DRIVERS alias are generated by snap_diff/legacy_shims -- the # one file that holds the v1 surface as code, so that the canonical core -# needs nothing from this tree and 3.0 can delete both together. The v1 +# needs nothing from this tree and 2.1 can delete both together. The v1 # surface (Capybara::Screenshot.window_size = ..., Diff.configure { ... }, # Diff.compare) keeps working unchanged: one storage, two views. # diff --git a/lib/snap_diff.rb b/lib/snap_diff.rb index 1bc84e7b..0b60448f 100644 --- a/lib/snap_diff.rb +++ b/lib/snap_diff.rb @@ -31,15 +31,15 @@ def self.assert_single_gem!(loaded_specs = Gem.loaded_specs) # -- snap_diff_test.rb's "bare require never loads the umbrella" guard # enforces it -- so nothing required below may reach back here. None of # these requires reaches into lib/capybara* at all, so the canonical entry -# point is exactly what 3.0 keeps. +# point is exactly what survives the removal of the legacy trees. # # "capybara/dsl" is needed directly (not just transitively) so # `Capybara.default_max_wait_time` in Config#default_options resolves even # when "snap_diff" is required standalone (SnapDiffTest's # "standalone-loadable in a fresh process" regression test). # -# snap_diff/legacy_shims is deliberate and is the ONE line here that 3.0 -# drops: it carries the whole v1 surface (const_missing forwarders, the old +# snap_diff/legacy_shims is deliberate and is the ONE line here that goes +# with the legacy trees: it carries the whole v1 surface (const_missing forwarders, the old # mattr_accessors, SnapDiff.start), so a process that only ever requires # "snap_diff" still resolves the old Capybara::Screenshot::Diff names -- # with deprecation warnings -- exactly as it did when this file reached diff --git a/lib/snap_diff/config.rb b/lib/snap_diff/config.rb index 54c46877..ef241a6d 100644 --- a/lib/snap_diff/config.rb +++ b/lib/snap_diff/config.rb @@ -5,7 +5,7 @@ # This file is the LEAF of the config require graph (ADR-008 step 1): # config_legacy.rb requires it, so it must never require config_legacy nor # anything that leads back to either entry point. It also names nothing from -# the v1 trees at all (3.0 readiness): which legacy accessor each setting is +# the v1 trees at all (legacy-removal readiness): which legacy accessor each setting is # exposed as is snap_diff/legacy_shims' business, and that file is deleted # together with lib/capybara* -- see LegacyShims::CONFIG_MAPPING. diff --git a/lib/snap_diff/deprecation.rb b/lib/snap_diff/deprecation.rb index f1b92a2c..9a156306 100644 --- a/lib/snap_diff/deprecation.rb +++ b/lib/snap_diff/deprecation.rb @@ -31,12 +31,12 @@ module Deprecation # The ONE line a v1 user gets, whichever door they came through. Most of # the v1 surface cannot warn per use -- the config accessors are plain # delegators and the eager aliases never reach const_missing -- so - # without this a 2.x app is completely silent right up to the bare - # NameError it gets on 3.0. Deliberately generic and once per process: + # without this a 2.0 app is completely silent right up to the bare + # NameError it gets on 2.1. Deliberately generic and once per process: # an actionable signal, not per-call stderr noise. MIGRATION_NOTICE = "[snap_diff deprecation] This process uses the v1 `Capybara::Screenshot*` / " \ - "`CapybaraScreenshotDiff*` API. It still works in 2.x and is REMOVED in 3.0 -- " \ + "`CapybaraScreenshotDiff*` API. It still works in 2.0 and is REMOVED in 2.1 -- " \ "see docs/UPGRADING.md for the SnapDiff replacements. Silence with " \ "`SnapDiff.silence_deprecations = true` or SNAP_DIFF_SILENCE_DEPRECATIONS=1. " \ "(shown once per process)" diff --git a/lib/snap_diff/drivers.rb b/lib/snap_diff/drivers.rb index 29de394b..5303972e 100644 --- a/lib/snap_diff/drivers.rb +++ b/lib/snap_diff/drivers.rb @@ -49,7 +49,8 @@ def self.detect_available result end - # Canonical home of the detected-drivers list (3.0 readiness: it used + # Canonical home of the detected-drivers list (legacy-removal + # readiness: it used # to live only on Capybara::Screenshot::Diff::AVAILABLE_DRIVERS, so # `require "snap_diff/drivers"` alone left .available raising # NameError). Detection runs HERE, at this file's load, and the legacy diff --git a/lib/snap_diff/dsl.rb b/lib/snap_diff/dsl.rb index 2695c8c7..869a8554 100644 --- a/lib/snap_diff/dsl.rb +++ b/lib/snap_diff/dsl.rb @@ -9,7 +9,7 @@ # Must NOT require "capybara_screenshot_diff": that would cycle back here via # this file's old-path forwarder. Nothing from the v1 trees is required here -# at all (3.0 readiness): the three requires below used to point at their +# at all (legacy-removal readiness): the three requires below used to point at their # capybara/screenshot/diff/* forwarders, which made this unit depend on the # compatibility tree it is meant to replace. # DSL includes Capybara::DSL directly below, so it needs the base gem diff --git a/lib/snap_diff/legacy_shims.rb b/lib/snap_diff/legacy_shims.rb index 1f4a010d..9ca5d30f 100644 --- a/lib/snap_diff/legacy_shims.rb +++ b/lib/snap_diff/legacy_shims.rb @@ -13,7 +13,7 @@ # code. lib/capybara* is alias-only by contract # (legacy_tree_is_alias_only_test.rb) and the canonical core names nothing # from it (core_tree_has_no_legacy_deps_test.rb), so this file plus those -# trees is exactly what 3.0 deletes. +# trees is exactly what 2.1 deletes. # # Three things live here: # 1. the const_missing forwarders for the pre-v2 namespaces (below); diff --git a/test/legacy/errors_alias_test.rb b/test/legacy/errors_alias_test.rb index 40eaed8c..71f61dea 100644 --- a/test/legacy/errors_alias_test.rb +++ b/test/legacy/errors_alias_test.rb @@ -2,7 +2,7 @@ require "test_helper" # The shared harness loads canonical entry points only, so a legacy-surface -# test pulls in the v1 entry itself -- the require goes with the file in 3.0. +# test pulls in the v1 entry itself -- the require goes with the file in 2.1. require "capybara_screenshot_diff" # ADR-008 step 2: the error classes live in SnapDiff (snap_diff/errors); @@ -14,7 +14,7 @@ # warnings, so these tests double as proof the aliases stay warning-free. # # LEGACY SURFACE (test/legacy/, see the Rakefile): deleted with lib/capybara* -# in 3.0. The hierarchy assertions that outlive the aliases moved to +# in 2.1. The hierarchy assertions that outlive the aliases moved to # test/unit/errors_test.rb. class ErrorsAliasTest < ActiveSupport::TestCase # old constant path => new constant path diff --git a/test/legacy/legacy_config_accessors_test.rb b/test/legacy/legacy_config_accessors_test.rb index f52f6f13..f1342c82 100644 --- a/test/legacy/legacy_config_accessors_test.rb +++ b/test/legacy/legacy_config_accessors_test.rb @@ -2,7 +2,7 @@ require "test_helper" # The shared harness loads canonical entry points only, so a legacy-surface -# test pulls in the v1 entry itself -- the require goes with the file in 3.0. +# test pulls in the v1 entry itself -- the require goes with the file in 2.1. require "capybara_screenshot_diff" # LEGACY SURFACE (test/legacy/, see the Rakefile). @@ -12,7 +12,7 @@ # as a second VIEW of the one SnapDiff::Config storage. Everything here is # about that view -- the mapping's completeness, and that a write through # either surface is visible from the other. Verbatim from the canonical -# file, which keeps the Config-only half; both go on passing until 3.0 +# file, which keeps the Config-only half; both go on passing until 2.1 # deletes legacy_shims.rb, this file, and the trees they serve. class LegacyConfigAccessorsTest < ActiveSupport::TestCase def config diff --git a/test/legacy/legacy_config_default_timing_test.rb b/test/legacy/legacy_config_default_timing_test.rb index 7640ae81..72592857 100644 --- a/test/legacy/legacy_config_default_timing_test.rb +++ b/test/legacy/legacy_config_default_timing_test.rb @@ -7,7 +7,7 @@ # LEGACY SURFACE (test/legacy/, see the Rakefile). # # The v1 half of config_default_timing_test.rb. Two claims, both about the -# old entry points and the old accessor view, both deleted in 3.0: +# old entry points and the old accessor view, both deleted in 2.1: # # 1. every legacy entry point produces the SAME require-time defaults and # the same freezing/liveness behaviour as the canonical ones -- proved by diff --git a/test/legacy/legacy_entry_point_probe_test.rb b/test/legacy/legacy_entry_point_probe_test.rb index f9dc189d..0a10a93e 100644 --- a/test/legacy/legacy_entry_point_probe_test.rb +++ b/test/legacy/legacy_entry_point_probe_test.rb @@ -7,7 +7,7 @@ # # The v1 half of support_load_probe_test.rb: what the OLD entry points must # still provide. Names and constants restored verbatim -- every assertion -# here is about a name 3.0 deletes, so repointing them at SnapDiff would +# here is about a name 2.1 deletes, so repointing them at SnapDiff would # have quietly turned this file into a duplicate of the canonical one. class LegacyEntryPointProbeTest < ActiveSupport::TestCase # Alias-completeness probe (the f89cea2 bug class): each documented entry @@ -110,7 +110,7 @@ class LegacyEntryPointProbeTest < ActiveSupport::TestCase # SnapDiff.start moved here out of the canonical CANONICAL_SURFACE gate: it # is defined in legacy_shims.rb and yields the two v1 config holders, so a - # canonical gate demanding it fails the moment 3.0 deletes them. It is + # canonical gate demanding it fails the moment 2.1 deletes them. It is # still a documented v1 method, so the per-entry-point availability claim # the canonical gate used to make lives on here -- for the entries that # actually keep it. (What it yields is pinned in legacy_forwarders_test.) diff --git a/test/legacy/legacy_forwarders_test.rb b/test/legacy/legacy_forwarders_test.rb index b93ac092..8c48e1aa 100644 --- a/test/legacy/legacy_forwarders_test.rb +++ b/test/legacy/legacy_forwarders_test.rb @@ -3,7 +3,7 @@ require "test_helper" require "open3" # The shared harness loads canonical entry points only, so a legacy-surface -# test pulls in the v1 entry itself -- the require goes with the file in 3.0. +# test pulls in the v1 entry itself -- the require goes with the file in 2.1. require "capybara_screenshot_diff" require "capybara_screenshot_diff/static" @@ -86,7 +86,7 @@ class LegacyForwardersTest < ActiveSupport::TestCase # absent from $LOADED_FEATURES. # # Lives here rather than in snap_diff_test: its subject is the v1 - # umbrella, and once 3.0 deletes that file the grep below is empty by + # umbrella, and once 2.1 deletes that file the grep below is empty by # construction and the guard can never fail again. test "bare require \"snap_diff\" never loads the umbrella capybara_screenshot_diff" do script = <<~RUBY diff --git a/test/legacy/legacy_namespace_deprecation_test.rb b/test/legacy/legacy_namespace_deprecation_test.rb index b8753695..b6ed827c 100644 --- a/test/legacy/legacy_namespace_deprecation_test.rb +++ b/test/legacy/legacy_namespace_deprecation_test.rb @@ -13,7 +13,7 @@ # namespace_forwarding_test.rb; this file pins only the warning behavior. # # LEGACY SURFACE (test/legacy/, see the Rakefile): deleted with lib/capybara* -# and snap_diff/deprecation.rb in 3.0. +# and snap_diff/deprecation.rb in 2.1. class LegacyNamespaceDeprecationTest < ActiveSupport::TestCase # Documented exceptions that stay EAGER (real constants, never warn): # - Os / DSL: advertised entry-point constants, probed with diff --git a/test/legacy/legacy_tree_is_alias_only_test.rb b/test/legacy/legacy_tree_is_alias_only_test.rb index 28e87030..add5a8d2 100644 --- a/test/legacy/legacy_tree_is_alias_only_test.rb +++ b/test/legacy/legacy_tree_is_alias_only_test.rb @@ -2,18 +2,18 @@ require "test_helper" -# ADR-008 step 7: the mechanical gate that keeps 3.0 a `git rm`. +# ADR-008 step 7: the mechanical gate that keeps 2.1 a `git rm`. # # lib/capybara/ and lib/capybara_screenshot_diff/ are the v1 compatibility # surface. Every unit of behaviour has moved to lib/snap_diff/, so what is # left must be nothing but requires, namespace reopening, constant aliases -# and one-line forwarders. If that stays true, dropping v1 support in 3.0 is +# and one-line forwarders. If that stays true, dropping v1 support in 2.1 is # a deletion; the moment real logic lands back in these trees it becomes a # refactor. This test fails the second that happens, naming the file. # # LEGACY SURFACE (test/legacy/, see the Rakefile): deleted with the trees it -# scans in 3.0. Its mirror image, core_tree_has_no_legacy_deps_test.rb, -# guards what 3.0 KEEPS and so stays in test/unit/. +# scans in 2.1. Its mirror image, core_tree_has_no_legacy_deps_test.rb, +# guards what 2.1 KEEPS and so stays in test/unit/. class LegacyTreeIsAliasOnlyTest < ActiveSupport::TestCase LIB = Pathname.new(__dir__).join("../../lib").expand_path @@ -27,14 +27,14 @@ class LegacyTreeIsAliasOnlyTest < ActiveSupport::TestCase # the v1 trees holds logic any more. config_legacy.rb was the last entry; # step 7b moved its derived config (.active? precedence, .screenshot_area # path assembly, .default_options incl. the vips tolerance literal) into - # SnapDiff::Config, and the 3.0-readiness pass moved the remaining + # SnapDiff::Config, and the 2.1-readiness pass moved the remaining # forwarders and the legacy accessor generator into # snap_diff/legacy_shims.rb -- the one file that holds the v1 surface as - # code, and that 3.0 deletes together with these trees. There is not a + # code, and that 2.1 deletes together with these trees. There is not a # single `def` left here. # # Keep it empty. Adding an entry back is a decision to keep behaviour on - # the v1 side of the 3.0 deletion, so it needs a written reason here AND + # the v1 side of the 2.1 deletion, so it needs a written reason here AND # an ADR-008 update -- never just to turn a red build green. ALLOWED_WITH_CODE = {}.freeze diff --git a/test/legacy/namespace_forwarding_test.rb b/test/legacy/namespace_forwarding_test.rb index 0fbe813a..ce2a8783 100644 --- a/test/legacy/namespace_forwarding_test.rb +++ b/test/legacy/namespace_forwarding_test.rb @@ -2,7 +2,7 @@ require "test_helper" # The shared harness loads canonical entry points only, so a legacy-surface -# test pulls in the v1 entry itself -- the require goes with the file in 3.0. +# test pulls in the v1 entry itself -- the require goes with the file in 2.1. require "capybara_screenshot_diff" # Every old-namespace constant touched by the ADR-004 v2 file-tree move @@ -13,7 +13,7 @@ # that always returns false. # # LEGACY SURFACE (test/legacy/, see the Rakefile): deleted with lib/capybara* -# in 3.0, when there is no old namespace left to forward. +# in 2.1, when there is no old namespace left to forward. class NamespaceForwardingTest < ActiveSupport::TestCase # This file's whole purpose is resolving the old names, so silence the # shims' deprecation warnings here (the suite-wide guard in test_helper diff --git a/test/legacy/snap_diff_deprecation_test.rb b/test/legacy/snap_diff_deprecation_test.rb index 9d2daccb..904e23f3 100644 --- a/test/legacy/snap_diff_deprecation_test.rb +++ b/test/legacy/snap_diff_deprecation_test.rb @@ -6,7 +6,7 @@ # LEGACY SURFACE (test/legacy/, see the Rakefile): SnapDiff::Deprecation is # the channel that announces the v1 shims, so snap_diff/deprecation.rb and -# this file are deleted together with lib/capybara* in 3.0. +# this file are deleted together with lib/capybara* in 2.1. class SnapDiffDeprecationTest < ActiveSupport::TestCase def setup SnapDiff::Deprecation.reset! @@ -141,9 +141,9 @@ def capture_warnings # Most of the v1 surface cannot warn per use: the legacy config accessors # are plain delegators, and the eagerly-aliased constants (Os, the error # classes, VERSION) never reach const_missing. Exercising all 14 legacy - # APIs a real setup file touches under -w produced ZERO warnings, so a 2.x + # APIs a real setup file touches under -w produced ZERO warnings, so a 2.0 # app was completely silent right up to the bare NameError it would get on - # 3.0. {MIGRATION_NOTICE} is the one line that closes that gap; these + # 2.1. {MIGRATION_NOTICE} is the one line that closes that gap; these # probes run in subprocesses because "once per process" is the contract. NOTICE_MARKER = "shown once per process" @@ -186,7 +186,7 @@ def capture_warnings assert_equal 1, out.scan(NOTICE_MARKER).size, "expected exactly one migration notice, got:\n#{out}" assert_includes out, "docs/UPGRADING.md" - assert_includes out, "REMOVED in 3.0" + assert_includes out, "still works in 2.0 and is REMOVED in 2.1" assert_includes out, "SNAP_DIFF_SILENCE_DEPRECATIONS" end diff --git a/test/support/driver_coverage.rb b/test/support/driver_coverage.rb index b6e430d4..680efa47 100644 --- a/test/support/driver_coverage.rb +++ b/test/support/driver_coverage.rb @@ -11,7 +11,7 @@ # a driver it's supposed to have goes missing. # # Plain top-level module: it is test scaffolding, so it has no business -# reopening a gem namespace -- least of all the v1 one 3.0 deletes. +# reopening a gem namespace -- least of all the v1 one 2.1 deletes. module DriverCoverage ALL_DRIVERS = %i[chunky_png vips].freeze diff --git a/test/support/dsl_stub.rb b/test/support/dsl_stub.rb index 5b7db45a..b3f57f8d 100644 --- a/test/support/dsl_stub.rb +++ b/test/support/dsl_stub.rb @@ -1,7 +1,7 @@ require "active_support/concern" # Plain top-level module: test scaffolding has no business reopening a gem -# namespace -- least of all the v1 one 3.0 deletes. +# namespace -- least of all the v1 one 2.1 deletes. module DSLStub extend ActiveSupport::Concern diff --git a/test/unit/canonical_suite_has_no_legacy_refs_test.rb b/test/unit/canonical_suite_has_no_legacy_refs_test.rb index d87d10b6..a596d590 100644 --- a/test/unit/canonical_suite_has_no_legacy_refs_test.rb +++ b/test/unit/canonical_suite_has_no_legacy_refs_test.rb @@ -80,7 +80,7 @@ class CanonicalSuiteHasNoLegacyRefsTest < ActiveSupport::TestCase # every canonical entry point). It names the deletion set and the edits # by construction, and asserts its own gate line can reject an intact # tree -- it cannot do that without spelling the doomed names. - "unit/deletion_3_0_test.rb" => [ + "unit/legacy_deletion_test.rb" => [ '["snap_diff.rb", %(require "snap_diff/legacy_shims"), nil],', '%(require "capybara_screenshot_diff/minitest"),', 'gate << "SnapDiff.start is still defined" if SnapDiff.respond_to?(:start)', diff --git a/test/unit/config_default_timing_test.rb b/test/unit/config_default_timing_test.rb index ad872e54..388d0a6e 100644 --- a/test/unit/config_default_timing_test.rb +++ b/test/unit/config_default_timing_test.rb @@ -21,7 +21,7 @@ # Canonical entry points only, read through SnapDiff.config only. The v1 # entry points and the "both surfaces agree" half re-run these same scripts # from test/legacy/legacy_config_default_timing_test.rb, which is deleted -# with the v1 trees in 3.0. +# with the v1 trees. class ConfigDefaultTimingTest < ActiveSupport::TestCase ENTRY_POINTS = %w[ snap_diff diff --git a/test/unit/core_tree_has_no_legacy_deps_test.rb b/test/unit/core_tree_has_no_legacy_deps_test.rb index 04e89527..7daadafe 100644 --- a/test/unit/core_tree_has_no_legacy_deps_test.rb +++ b/test/unit/core_tree_has_no_legacy_deps_test.rb @@ -3,7 +3,7 @@ require "test_helper" # The REVERSE of legacy_tree_is_alias_only_test.rb, and the other half of -# what makes 3.0 a `git rm`. +# what makes the legacy removal a `git rm`. # # That test proves the v1 trees hold no logic. This one proves the canonical # core does not reach BACK into them -- which is the half that actually @@ -12,8 +12,8 @@ # `CapybaraScreenshotDiff::*` constant, deleting lib/capybara* leaves a core # that no longer loads. # -# Scope: everything the 3.0 deletion KEEPS. Files that are themselves part of -# the deletion set (DELETED_IN_3_0 below) live under lib/snap_diff/ only +# Scope: everything the legacy deletion KEEPS. Files that are themselves part +# of the deletion set (DELETED_WITH_LEGACY_TREES below) live under lib/snap_diff/ only # because the generator for the v1 surface has to be code, and the v1 trees # have to stay alias-only -- they are legacy by design and go with it. # @@ -27,17 +27,17 @@ class CoreTreeHasNoLegacyDepsTest < ActiveSupport::TestCase LIB = Pathname.new(__dir__).join("../../lib").expand_path - # Deleted alongside lib/capybara* in 3.0: these files exist to BUILD the + # Deleted alongside lib/capybara* in 2.1: these files exist to BUILD the # v1 compatibility surface (const_missing shims, the legacy config # accessor generator, the deprecation channel that announces both). - DELETED_IN_3_0 = %w[ + DELETED_WITH_LEGACY_TREES = %w[ snap_diff/legacy_shims.rb snap_diff/deprecation.rb ].freeze CORE_FILES = ( [LIB.join("snap_diff.rb")] + Dir[LIB.join("snap_diff/**/*.rb")].map { |p| Pathname.new(p) } - ).sort.reject { |file| DELETED_IN_3_0.include?(file.relative_path_from(LIB).to_s) }.freeze + ).sort.reject { |file| DELETED_WITH_LEGACY_TREES.include?(file.relative_path_from(LIB).to_s) }.freeze # A require of anything in the v1 trees: `capybara/screenshot/...`, # `capybara_screenshot_diff...`, `capybara-screenshot-diff`. Plain @@ -62,7 +62,7 @@ class CoreTreeHasNoLegacyDepsTest < ActiveSupport::TestCase # # EMPTY. It was seeded with all 64 core->legacy edges that existed the day # the gate was written, and every one of them is gone. Keep it empty: an - # entry is a decision to keep a core->legacy edge across the 3.0 deletion, + # entry is a decision to keep a core->legacy edge across the legacy deletion, # so it needs a written reason here AND an ADR-008 update -- never just a # red build turned green. ALLOWED = {}.freeze diff --git a/test/unit/drivers_test.rb b/test/unit/drivers_test.rb index 026868ae..2b0adaef 100644 --- a/test/unit/drivers_test.rb +++ b/test/unit/drivers_test.rb @@ -5,7 +5,7 @@ require "minitest/stub_const" # SnapDiff::Drivers is the canonical driver registry (docs/snapdiff.md). -# Until 3.0 readiness work, `.available` read the value out of +# Until the legacy-removal readiness work, `.available` read the value out of # SnapDiff::Drivers::AVAILABLE_DRIVERS, which is defined by # config_legacy.rb -- so a documented canonical API only worked when the v1 # tree happened to be loaded. @@ -42,7 +42,7 @@ class DriversTest < ActiveSupport::TestCase # Ported from namespace_forwarding_test (test/legacy/), which was the only # place pinning this: it asserted the v1 LOADED_DRIVERS constant is the # same object as this hash and that a registration through it shows up - # here. The v1 half dies in 3.0; the canonical half -- .loaded is ONE + # here. The v1 half dies with the legacy trees; the canonical half -- .loaded is ONE # memoized hash, mutated in place, so a driver registered into it stays # registered (Utils.find_driver_class_for caches through it) -- must not. test ".loaded is a single hash mutated in place, so registrations stick" do diff --git a/test/unit/errors_test.rb b/test/unit/errors_test.rb index b38b4ed4..ccf2787e 100644 --- a/test/unit/errors_test.rb +++ b/test/unit/errors_test.rb @@ -5,7 +5,7 @@ # The canonical half of what used to be errors_alias_test.rb: the shape of # the SnapDiff error hierarchy itself, which outlives the v1 aliases. The # `CapybaraScreenshotDiff::*` alias half stayed behind in -# test/legacy/errors_alias_test.rb and goes with the v1 trees in 3.0. +# test/legacy/errors_alias_test.rb and goes with the v1 trees. class ErrorsTest < ActiveSupport::TestCase test "error hierarchy is preserved" do assert_operator SnapDiff::ExpectationNotMet, :<, SnapDiff::Error diff --git a/test/unit/image_compare_test.rb b/test/unit/image_compare_test.rb index f759c9f2..c9f8dde2 100644 --- a/test/unit/image_compare_test.rb +++ b/test/unit/image_compare_test.rb @@ -77,7 +77,7 @@ class ImageCompareTest < ActiveSupport::TestCase test "#initialize with :auto driver raises error when no drivers available" do # Canonical stubbing point since the detected-drivers list moved to - # SnapDiff::Drivers (3.0 readiness). The legacy + # SnapDiff::Drivers (legacy-removal readiness). The legacy # Capybara::Screenshot::Diff::AVAILABLE_DRIVERS is now an eager # same-object ALIAS of this constant, so stubbing the old name only # rebinds the alias and no longer reaches the core. diff --git a/test/unit/deletion_3_0_test.rb b/test/unit/legacy_deletion_test.rb similarity index 92% rename from test/unit/deletion_3_0_test.rb rename to test/unit/legacy_deletion_test.rb index 31cfdb8c..9af9bcee 100644 --- a/test/unit/deletion_3_0_test.rb +++ b/test/unit/legacy_deletion_test.rb @@ -6,7 +6,7 @@ require "fileutils" require "unit/support_load_probe_test" # single source of truth for the canonical entry-point tables -# THE 3.0 DELETION, ACTUALLY RUN. +# THE LEGACY DELETION, ACTUALLY RUN. # # legacy_tree_is_alias_only_test.rb and core_tree_has_no_legacy_deps_test.rb # are STATIC proxies for one claim: `git rm` the v1 surface and the gem still @@ -24,10 +24,10 @@ # tmpdir. The subprocess is isolated from bundler as well (see #probe), but # that isolation is precisely the thing that silently stopped working last # time -- the gate line is what notices when it does. -class Deletion30Test < ActiveSupport::TestCase +class LegacyDeletionTest < ActiveSupport::TestCase PROJECT_ROOT = Pathname.new(File.expand_path("../..", __dir__)) - # The 3.0 `git rm`, verbatim from the Rakefile's header comment (minus + # The 2.1 `git rm`, verbatim from the Rakefile's header comment (minus # test/legacy, which this test does not load). DELETED = %w[ capybara @@ -43,11 +43,11 @@ class Deletion30Test < ActiveSupport::TestCase # reworded, the edit must go red here rather than silently not applying and # leaving the probe to fail somewhere confusing. EDITS = [ - # The one line in the canonical entry point that 3.0 drops. + # The one line in the canonical entry point that goes with the legacy trees. ["snap_diff.rb", %(require "snap_diff/legacy_shims"), nil], # The new gem name's Bundler entry point is KEPT, repointed off the v1 # umbrella. It matches neither gate's file glob, so this is the only - # thing that checks its post-3.0 shape at all. + # thing that checks its post-deletion shape at all. ["snap_diff-capybara.rb", %(require "capybara_screenshot_diff/minitest"), %(require "snap_diff/integrations/minitest")] @@ -81,7 +81,7 @@ class Deletion30Test < ActiveSupport::TestCase end RUBY - test "every canonical entry point loads and keeps its surface after the 3.0 deletion" do + test "every canonical entry point loads and keeps its surface after the legacy deletion" do in_deleted_tree do |tree| failures = ENTRY_POINTS.filter_map do |entry, methods| probe(tree, <<~RUBY) @@ -94,7 +94,7 @@ class Deletion30Test < ActiveSupport::TestCase end assert_empty failures, <<~MSG - `git rm` of the v1 surface breaks canonical entry point(s) -- 3.0 is a + `git rm` of the v1 surface breaks canonical entry point(s) -- 2.1 is a refactor, not a deletion, until these load: #{failures.join("\n")} @@ -102,7 +102,7 @@ class Deletion30Test < ActiveSupport::TestCase end end - test "every canonical entry point defines its advertised constants after the 3.0 deletion" do + test "every canonical entry point defines its advertised constants after the legacy deletion" do in_deleted_tree do |tree| failures = SupportLoadProbeTest::CANONICAL_ADVERTISED_CONSTANTS.filter_map do |entry, constants| probe(tree, <<~RUBY) @@ -149,14 +149,14 @@ def copy_lib_to(dir) File.realpath(File.join(dir, "lib")) end - # Yields the path to a lib/ with the 3.0 deletion applied. + # Yields the path to a lib/ with the legacy deletion applied. def in_deleted_tree Dir.mktmpdir("snapdiff_deleted") do |dir| tree = copy_lib_to(dir) DELETED.each do |path| target = File.join(tree, path) - assert File.exist?(target), "3.0 deletion set names #{path}, which does not exist" + assert File.exist?(target), "deletion set names #{path}, which does not exist" FileUtils.rm_rf(target) end @@ -164,7 +164,7 @@ def in_deleted_tree target = Pathname.new(File.join(tree, file)) source = target.read - assert_includes source, line, "3.0 edit for #{file} no longer matches the file" + assert_includes source, line, "deletion edit for #{file} no longer matches the file" target.write(source.sub(line + "\n", replacement ? replacement + "\n" : "")) end diff --git a/test/unit/snap_diff_config_test.rb b/test/unit/snap_diff_config_test.rb index 0f1c7be6..08b890d4 100644 --- a/test/unit/snap_diff_config_test.rb +++ b/test/unit/snap_diff_config_test.rb @@ -6,7 +6,7 @@ # same storage -- LegacyShims::CONFIG_MAPPING's completeness and the # write-through-either-surface round trips -- lives in # test/legacy/legacy_config_accessors_test.rb and is deleted with the v1 -# trees in 3.0. What is here has to keep standing on its own after that. +# trees. What is here has to keep standing on its own after that. class SnapDiffConfigTest < ActiveSupport::TestCase def config SnapDiff.config diff --git a/test/unit/snap_diff_test.rb b/test/unit/snap_diff_test.rb index ff8a6277..5f3822df 100644 --- a/test/unit/snap_diff_test.rb +++ b/test/unit/snap_diff_test.rb @@ -6,7 +6,7 @@ class SnapDiffTest < ActiveSupport::TestCase # The ImageCompare alias claim and the v1-shaped SnapDiff.start / .configure # pair live in test/legacy/legacy_forwarders_test.rb -- both are v1 surface - # and go with it in 3.0. + # and go with it when the legacy trees are removed. test ".compare returns the same kind of result as Diff.compare, forwarding options" do result = SnapDiff.compare( TEST_IMAGES_DIR / "a.png", @@ -85,7 +85,7 @@ class SnapDiffTest < ActiveSupport::TestCase # The acyclicity contract ("bare require never loads the umbrella") is in # test/legacy/legacy_forwarders_test.rb: its subject is the v1 umbrella - # file, and once 3.0 deletes lib/capybara_screenshot_diff.rb the + # file, and once the deletion removes lib/capybara_screenshot_diff.rb the # $LOADED_FEATURES grep is empty by construction, so the guard could never # fail again. diff --git a/test/unit/support_load_probe_test.rb b/test/unit/support_load_probe_test.rb index 73017e41..430bc16b 100644 --- a/test/unit/support_load_probe_test.rb +++ b/test/unit/support_load_probe_test.rb @@ -27,7 +27,7 @@ # CapybaraScreenshotDiff session surface, and the eager user-facing # constants under the old names -- are probed the same way from # test/legacy/legacy_entry_point_probe_test.rb, which is deleted with the v1 -# trees in 3.0. +# trees. class SupportLoadProbeTest < ActiveSupport::TestCase SKIP = { # "support/example" => "why it cannot load bare" @@ -69,8 +69,8 @@ class SupportLoadProbeTest < ActiveSupport::TestCase # # SnapDiff.start is absent for a different reason: it is defined in # snap_diff/legacy_shims.rb and yields the two v1 config holders, so it - # cannot outlive them (#235). A CANONICAL gate demanding a method 3.0 - # deletes is a gate that fails the day the deletion lands -- which is + # cannot outlive them (#235). A CANONICAL gate demanding a method the + # legacy deletion removes is a gate that fails the day the deletion lands -- which is # exactly what it did. `.start` keeps its coverage on the legacy side: # test/legacy/legacy_forwarders_test.rb asserts what it yields and that it # applies a setting, and LEGACY_SESSION_SURFACE pins it per v1 entry point. @@ -79,7 +79,7 @@ class SupportLoadProbeTest < ActiveSupport::TestCase ].freeze # snap_diff-capybara is the canonical gem's Bundler entry point, so it is - # probed here rather than with the v1 ones: 3.0 keeps it (repointed at + # probed here rather than with the v1 ones: the deletion keeps it (repointed at # snap_diff/integrations/minitest), it just stops carrying the # CapybaraScreenshotDiff surface. CANONICAL_ENTRY_POINTS = { @@ -115,7 +115,7 @@ class SupportLoadProbeTest < ActiveSupport::TestCase # (CapybaraScreenshotDiff::DSL, Capybara::Screenshot::Os, ...). That is the # f89cea2 bug class: the acyclic redesign once narrowed an entry point so # consumers lost the DSL, and only one CI matrix leg noticed. Same claim, - # canonical names, canonical entries -- so 3.0 keeps the guard. + # canonical names, canonical entries -- so the deletion keeps the guard. # # Entry-specific on purpose: bare `snap_diff` deliberately carries neither # the DSL nor the reporters (see CANONICAL_SURFACE above), so a flat list