rspec-tracer 1.2.3 → 2.0.0.pre.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (144) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +195 -68
  3. data/README.md +439 -429
  4. data/bin/rspec-tracer +15 -0
  5. data/lib/rspec_tracer/cache/Rakefile +43 -0
  6. data/lib/rspec_tracer/cli/cache_clear.rb +98 -0
  7. data/lib/rspec_tracer/cli/cache_info.rb +103 -0
  8. data/lib/rspec_tracer/cli/doctor.rb +275 -0
  9. data/lib/rspec_tracer/cli/explain.rb +148 -0
  10. data/lib/rspec_tracer/cli/report_open.rb +82 -0
  11. data/lib/rspec_tracer/cli.rb +116 -0
  12. data/lib/rspec_tracer/configuration.rb +1100 -3
  13. data/lib/rspec_tracer/engine.rb +1076 -0
  14. data/lib/rspec_tracer/example.rb +21 -6
  15. data/lib/rspec_tracer/filter.rb +35 -0
  16. data/lib/rspec_tracer/line_stub.rb +61 -0
  17. data/lib/rspec_tracer/load_config.rb +2 -2
  18. data/lib/rspec_tracer/logger.rb +15 -0
  19. data/lib/rspec_tracer/rails/README.md +78 -0
  20. data/lib/rspec_tracer/rails/i18n_tracking.rb +137 -0
  21. data/lib/rspec_tracer/rails/notifications.rb +263 -0
  22. data/lib/rspec_tracer/rails/preset.rb +94 -0
  23. data/lib/rspec_tracer/rails/railtie.rb +22 -0
  24. data/lib/rspec_tracer/rails.rb +15 -0
  25. data/lib/rspec_tracer/remote_cache/README.md +140 -0
  26. data/lib/rspec_tracer/remote_cache/Rakefile +35 -11
  27. data/lib/rspec_tracer/remote_cache/archive.rb +137 -0
  28. data/lib/rspec_tracer/remote_cache/backend.rb +73 -0
  29. data/lib/rspec_tracer/remote_cache/git_ancestry.rb +241 -0
  30. data/lib/rspec_tracer/remote_cache/local_fs_backend.rb +439 -0
  31. data/lib/rspec_tracer/remote_cache/redis_backend.rb +554 -0
  32. data/lib/rspec_tracer/remote_cache/s3_backend.rb +712 -0
  33. data/lib/rspec_tracer/remote_cache/user_tasks.rb +397 -0
  34. data/lib/rspec_tracer/remote_cache/validator.rb +40 -62
  35. data/lib/rspec_tracer/remote_cache.rb +22 -0
  36. data/lib/rspec_tracer/reporters/README.md +103 -0
  37. data/lib/rspec_tracer/reporters/base.rb +87 -0
  38. data/lib/rspec_tracer/reporters/coverage_json_reporter.rb +338 -0
  39. data/lib/rspec_tracer/reporters/html/.gitignore +19 -0
  40. data/lib/rspec_tracer/reporters/html/.prettierignore +4 -0
  41. data/lib/rspec_tracer/reporters/html/.prettierrc.json +9 -0
  42. data/lib/rspec_tracer/reporters/html/README.md +80 -0
  43. data/lib/rspec_tracer/reporters/html/dist/assets/index.css +2 -0
  44. data/lib/rspec_tracer/reporters/html/dist/assets/index.js +1 -0
  45. data/lib/rspec_tracer/reporters/html/dist/index.html +24 -0
  46. data/lib/rspec_tracer/reporters/html/eslint.config.js +62 -0
  47. data/lib/rspec_tracer/reporters/html/package-lock.json +4941 -0
  48. data/lib/rspec_tracer/reporters/html/package.json +29 -0
  49. data/lib/rspec_tracer/reporters/html/src/app.jsx +130 -0
  50. data/lib/rspec_tracer/reporters/html/src/components/AllExamples.jsx +86 -0
  51. data/lib/rspec_tracer/reporters/html/src/components/DuplicateExamples.jsx +68 -0
  52. data/lib/rspec_tracer/reporters/html/src/components/ExamplesDependency.jsx +78 -0
  53. data/lib/rspec_tracer/reporters/html/src/components/FilesDependency.jsx +72 -0
  54. data/lib/rspec_tracer/reporters/html/src/components/FlakyExamples.jsx +42 -0
  55. data/lib/rspec_tracer/reporters/html/src/components/ReportTable.jsx +131 -0
  56. data/lib/rspec_tracer/reporters/html/src/components/SearchBar.jsx +19 -0
  57. data/lib/rspec_tracer/reporters/html/src/index.html +23 -0
  58. data/lib/rspec_tracer/reporters/html/src/main.jsx +37 -0
  59. data/lib/rspec_tracer/reporters/html/src/styles.css +434 -0
  60. data/lib/rspec_tracer/reporters/html/vite.config.js +42 -0
  61. data/lib/rspec_tracer/reporters/html_reporter.rb +266 -0
  62. data/lib/rspec_tracer/reporters/json_reporter.rb +88 -0
  63. data/lib/rspec_tracer/reporters/payload_builder.rb +235 -0
  64. data/lib/rspec_tracer/reporters/registry.rb +120 -0
  65. data/lib/rspec_tracer/reporters/terminal_reporter.rb +264 -0
  66. data/lib/rspec_tracer/rspec/README.md +73 -0
  67. data/lib/rspec_tracer/rspec/installation.rb +97 -0
  68. data/lib/rspec_tracer/rspec/metadata.rb +96 -0
  69. data/lib/rspec_tracer/rspec/parallel_tests.rb +459 -0
  70. data/lib/rspec_tracer/rspec/reporter_hook.rb +84 -0
  71. data/lib/rspec_tracer/rspec/runner_hook.rb +178 -0
  72. data/lib/rspec_tracer/source_file.rb +24 -7
  73. data/lib/rspec_tracer/storage/README.md +35 -0
  74. data/lib/rspec_tracer/storage/backend.rb +68 -0
  75. data/lib/rspec_tracer/storage/json_backend.rb +866 -0
  76. data/lib/rspec_tracer/storage/lazy_snapshot.rb +65 -0
  77. data/lib/rspec_tracer/storage/schema.rb +43 -0
  78. data/lib/rspec_tracer/storage/serializer/json.rb +41 -0
  79. data/lib/rspec_tracer/storage/serializer/msgpack.rb +90 -0
  80. data/lib/rspec_tracer/storage/snapshot.rb +127 -0
  81. data/lib/rspec_tracer/storage/sqlite_backend.rb +686 -0
  82. data/lib/rspec_tracer/time_formatter.rb +37 -18
  83. data/lib/rspec_tracer/tracker/README.md +36 -0
  84. data/lib/rspec_tracer/tracker/coverage_adapter.rb +174 -0
  85. data/lib/rspec_tracer/tracker/declared_globs.rb +100 -0
  86. data/lib/rspec_tracer/tracker/dependency_graph.rb +134 -0
  87. data/lib/rspec_tracer/tracker/env_matcher.rb +127 -0
  88. data/lib/rspec_tracer/tracker/env_snapshot.rb +77 -0
  89. data/lib/rspec_tracer/tracker/example_registry.rb +153 -0
  90. data/lib/rspec_tracer/tracker/file_digest.rb +61 -0
  91. data/lib/rspec_tracer/tracker/filter.rb +127 -0
  92. data/lib/rspec_tracer/tracker/input.rb +99 -0
  93. data/lib/rspec_tracer/tracker/io_hooks/file.rb +55 -0
  94. data/lib/rspec_tracer/tracker/io_hooks/io.rb +24 -0
  95. data/lib/rspec_tracer/tracker/io_hooks/json.rb +23 -0
  96. data/lib/rspec_tracer/tracker/io_hooks/kernel.rb +26 -0
  97. data/lib/rspec_tracer/tracker/io_hooks/yaml.rb +38 -0
  98. data/lib/rspec_tracer/tracker/io_hooks.rb +195 -0
  99. data/lib/rspec_tracer/tracker/loaded_files_tracker.rb +295 -0
  100. data/lib/rspec_tracer/tracker/new_file_detector.rb +62 -0
  101. data/lib/rspec_tracer/tracker/whole_suite_invalidators.rb +96 -0
  102. data/lib/rspec_tracer/version.rb +4 -1
  103. data/lib/rspec_tracer.rb +223 -490
  104. metadata +93 -43
  105. data/lib/rspec_tracer/cache.rb +0 -207
  106. data/lib/rspec_tracer/coverage_merger.rb +0 -42
  107. data/lib/rspec_tracer/coverage_reporter.rb +0 -187
  108. data/lib/rspec_tracer/coverage_writer.rb +0 -58
  109. data/lib/rspec_tracer/html_reporter/Rakefile +0 -18
  110. data/lib/rspec_tracer/html_reporter/assets/javascripts/application.js +0 -56
  111. data/lib/rspec_tracer/html_reporter/assets/javascripts/libraries/jquery.js +0 -10881
  112. data/lib/rspec_tracer/html_reporter/assets/javascripts/plugins/datatables.js +0 -15381
  113. data/lib/rspec_tracer/html_reporter/assets/stylesheets/application.css +0 -196
  114. data/lib/rspec_tracer/html_reporter/assets/stylesheets/plugins/datatables.css +0 -459
  115. data/lib/rspec_tracer/html_reporter/assets/stylesheets/plugins/jquery-ui.css +0 -436
  116. data/lib/rspec_tracer/html_reporter/assets/stylesheets/print.css +0 -92
  117. data/lib/rspec_tracer/html_reporter/assets/stylesheets/reset.css +0 -265
  118. data/lib/rspec_tracer/html_reporter/public/application.css +0 -5
  119. data/lib/rspec_tracer/html_reporter/public/application.js +0 -6
  120. data/lib/rspec_tracer/html_reporter/public/datatables/images/sort_asc.png +0 -0
  121. data/lib/rspec_tracer/html_reporter/public/datatables/images/sort_asc_disabled.png +0 -0
  122. data/lib/rspec_tracer/html_reporter/public/datatables/images/sort_both.png +0 -0
  123. data/lib/rspec_tracer/html_reporter/public/datatables/images/sort_desc.png +0 -0
  124. data/lib/rspec_tracer/html_reporter/public/datatables/images/sort_desc_disabled.png +0 -0
  125. data/lib/rspec_tracer/html_reporter/public/favicon.png +0 -0
  126. data/lib/rspec_tracer/html_reporter/public/loading.gif +0 -0
  127. data/lib/rspec_tracer/html_reporter/reporter.rb +0 -242
  128. data/lib/rspec_tracer/html_reporter/views/duplicate_examples.erb +0 -34
  129. data/lib/rspec_tracer/html_reporter/views/examples.erb +0 -58
  130. data/lib/rspec_tracer/html_reporter/views/examples_dependency.erb +0 -36
  131. data/lib/rspec_tracer/html_reporter/views/files_dependency.erb +0 -36
  132. data/lib/rspec_tracer/html_reporter/views/flaky_examples.erb +0 -38
  133. data/lib/rspec_tracer/html_reporter/views/layout.erb +0 -38
  134. data/lib/rspec_tracer/remote_cache/aws.rb +0 -176
  135. data/lib/rspec_tracer/remote_cache/cache.rb +0 -75
  136. data/lib/rspec_tracer/remote_cache/repo.rb +0 -210
  137. data/lib/rspec_tracer/report_generator.rb +0 -158
  138. data/lib/rspec_tracer/report_merger.rb +0 -68
  139. data/lib/rspec_tracer/report_writer.rb +0 -141
  140. data/lib/rspec_tracer/reporter.rb +0 -204
  141. data/lib/rspec_tracer/rspec_reporter.rb +0 -41
  142. data/lib/rspec_tracer/rspec_runner.rb +0 -56
  143. data/lib/rspec_tracer/ruby_coverage.rb +0 -9
  144. data/lib/rspec_tracer/runner.rb +0 -278
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 1c0ed3fbdb4a082d56a4d83a528dff26bd174abeb28cf1669dc5dd79de521cee
4
- data.tar.gz: ebc2fbdfde4c6ac82072b5464f5dc0441d73efd24b4410ed96d3892ea765f1a9
3
+ metadata.gz: 04d2e3c76b8351f5f71f93cd722af23975f80da067f19970471455b3b2ed16aa
4
+ data.tar.gz: 0ab86f0d744275db42ed0d355d5781d25a6f65ed49a76fcd70d3df1acd7e01b4
5
5
  SHA512:
6
- metadata.gz: 1c28a6a997cf74dbb8d910972d9dd8e0b6e9f36aaacc9670e8a50a6bf7c0d4100f6cf421befcba8349750c3ba179a05b86d2a0cbdf740280d490d4bd42c37512
7
- data.tar.gz: ce834032d235ea1e2775fb127ac040d6f12f560e7cf9babe5fd208a68cb5dd7260a2ac1f2af78b2a782a622902d9b8291adb2ca339837de70b9f12259e05a456
6
+ metadata.gz: e802e4c67a41d1d1ebd16df2fd4ee874f0993678097563f38b5bd3e443024662040547df140dd45196c0e81e7d510ecfe79dbf4a3e01ab1a4685f380f9ec829f
7
+ data.tar.gz: 72435a0282503ff2c90b6b80168fb810bd48412bc162043b4d70780b35f74478fc5236c43710bb9e948657b2c6c17734a59406fc617cb712eaba7e1a3c2e4dfb
data/CHANGELOG.md CHANGED
@@ -1,81 +1,208 @@
1
- ## [1.2.3] - 2026-05-06
1
+ ## [2.0.0.pre.1] - 2026-05-06
2
2
 
3
- ### Fixed
3
+ The first pre-release of the 2.0 line. Architecture rewrite around
4
+ the input-taxonomy mental model documented in
5
+ [`ARCHITECTURE.md`](ARCHITECTURE.md): every test is a pure function
6
+ of its inputs; tracking is input identification; cache invalidation
7
+ is input-digest mismatch.
8
+
9
+ The 1.x cache is not readable by 2.0 — first run on the new version
10
+ is cold, then warm caches resume. Existing CI integration (`rake
11
+ rspec_tracer:remote_cache:download` / `:upload`, the env vars,
12
+ the `rspec_tracer_cache/` / `rspec_tracer_coverage/` /
13
+ `rspec_tracer_report/` directory contracts) is preserved bit-for-bit.
14
+
15
+ ### Added
16
+
17
+ - **Pluggable storage backends.** `storage_backend :json` (default,
18
+ preserves 1.x JSON layout) or `storage_backend :sqlite` (single-
19
+ file SQLite database; MRI only — JRuby falls back to `:json` with
20
+ a one-time warn). The 10-file per-run JSON layout (`last_run.json`
21
+ + `<run_id>/{all_examples,duplicate_examples,interrupted_examples,
22
+ flaky_examples,failed_examples,pending_examples,skipped_examples,
23
+ all_files,dependency,examples_coverage}.json`) is unchanged.
24
+ - **Pluggable remote-cache backends.** `remote_cache_backend :s3`
25
+ (preserves the 1.x S3 layout including `awslocal` / LocalStack
26
+ support), `:local_fs` (filesystem-backed; no S3 needed), or
27
+ `:redis` (with optional per-key TTL + `<prefix>:pr_branches`
28
+ sidecar SADD on PR-tier uploads for ops dashboards).
29
+ - **Per-example `tracks:` DSL.** Annotate any describe / context /
30
+ example with `tracks: { files: 'app/policies/**/*.rb', env:
31
+ 'ROLE_CONFIG' }` to declare extra inputs the tracker can't auto-
32
+ observe — config files baked at boot, env-var branches, and
33
+ similar. `:files` accepts a string glob or array; `:env` accepts a
34
+ literal name, array, or single-wildcard pattern (`'RAILS_*'`,
35
+ `'*_TOKEN'`, `'*'`). Cascade unions parent + child without
36
+ clobbering.
37
+ - **`track_env(*names)` config-level DSL** for env vars every test
38
+ depends on (`AUTH_TOKEN`, `DATABASE_URL`, `RAILS_ENV`). Same
39
+ wildcard syntax as the per-example `tracks: { env: ... }`.
40
+ Persists as `env_snapshot.json` (concrete keys only, no pattern
41
+ leakage).
42
+ - **`track_files(*globs)` config-level DSL** for files every test
43
+ depends on (`Gemfile.lock`, schema, locale catalogs).
44
+ - **Rails preset** via `track_rails_defaults` — auto-attaches the
45
+ common Rails-side declared globs (views, locales, fixtures,
46
+ factories, helpers, config). `track_rails_defaults except:
47
+ [:views, :schema]` opts specific globs out so framework-event
48
+ subscribers (`render_template.action_view` for views; the opt-in
49
+ `sql.active_record` observer enabled by
50
+ `track_ar_schema_notifications` for `db/schema.rb`) attribute
51
+ them per-example instead.
52
+ - **Auto-detection of Rails** at start time; the engine attaches
53
+ `ActionView` template + `ActiveRecord` schema (when opted in)
54
+ notification observers automatically when `::Rails::VERSION` is
55
+ defined.
56
+ - **`bin/rspec-tracer` CLI** with five sub-commands:
57
+ `doctor` (config + environment diagnosis, schema-version + remote-
58
+ cache reachability + AR-schema-narrow checks), `cache:info`
59
+ (size, last run, invalidation stats), `cache:clear` (rm cache
60
+ dirs), `report:open` (open the HTML report in the default
61
+ browser), `explain <example_id>` (show why a given example is
62
+ scheduled to run or skip). The CLI is opt-in for local-dev
63
+ convenience; the `rake rspec_tracer:remote_cache:*` tasks remain
64
+ first-class for CI integration.
65
+ - **Boot-time warns** for two common user-trust traps:
66
+ - SimpleCov loaded but not started before `RSpecTracer.start`
67
+ (load-order is part of the documented contract; the warn
68
+ surfaces it instead of silently bolting onto a Coverage already
69
+ in flight).
70
+ - `track_ar_schema_notifications` enabled with
71
+ `use_transactional_fixtures` defaulting to true (per-example
72
+ BEGIN/COMMIT fires `sql.active_record` and attributes
73
+ `db/schema.rb` to every AR-touching example; the warn points
74
+ at the README "Narrow AR-schema attribution" guidance).
75
+ - **`.rspec-tracer` DSL typo `did you mean?` suggestions** at config
76
+ load — typos like `track_filez` raise `InvalidUsageError` with a
77
+ pointer at `track_files`.
78
+ - **Rails 8.0 CI-gated support** (Ruby 3.2+ required; Rails 8.0
79
+ dropped Ruby 3.1 support upstream). `jruby-9.4 × Rails 8.0` is
80
+ unsupported (no `activerecord-jdbcsqlite3-adapter ~> 80.0`
81
+ upstream).
82
+ - **Schema-version field** in `last_run.json` for explicit
83
+ cross-version cache validation. Cache-shape changes bump the
84
+ field; mismatched caches refuse-to-load with an info-level "cold
85
+ run" log line.
86
+ - **`docs/CI_RECIPES.md`** translating the
87
+ [`.github/workflows/example-tracer-cache.yml`](.github/workflows/example-tracer-cache.yml)
88
+ GitHub Actions cache pattern to CircleCI / GitLab CI / Buildkite
89
+ / Heroku CI. The 4-component cache key (`runner.os` +
90
+ `.ruby-version` + `lib/rspec_tracer/version.rb` + Gemfile-hash)
91
+ translates 1:1 across providers; only the YAML envelope is
92
+ GHA-specific.
93
+ - **Coexistence smokes** for `rspec-retry`, `rspec-rerun`, and
94
+ `knapsack`. All three compose with rspec-tracer's `Module#prepend`
95
+ chain on `RSpec::Core::Runner` / `Reporter` without override.
96
+ - **`bin/rspec-tracer doctor` reachability checks** for the
97
+ configured remote-cache backend (S3 / Local-FS / Redis) — surfaces
98
+ misconfigured credentials / missing buckets / unreachable Redis
99
+ hosts at first invocation instead of mid-CI-run.
100
+ - **HTML reporter** (committed build output, no `assets:precompile`
101
+ step on user installs) and **JSON reporter** (machine-readable,
102
+ for CI dashboards) alongside the existing terminal output. The
103
+ terminal line now includes a `by reason:` breakdown
104
+ (`12 Files changed · 3 Whole-suite invalidator changed · ...`)
105
+ and a cache size + delta suffix (`14.4 MiB; +6.7 KiB vs prev
106
+ run`).
4
107
 
5
- - **Parallel-tests purge race when a sibling worker is still mid-flush**
6
- — the elected worker trusted only `parallel_tests`'s pid-file barrier
7
- (`ParallelTests.wait_for_other_processes_to_finish`), which under
8
- specific scheduling/I/O timing on GHA Linux x86_64 can return while a
9
- sibling's `parallel_tests_N/` dir hasn't fully flushed. The elected
10
- then merged + purged, racing the in-progress sibling. Symptoms:
11
- intermittent leftover `parallel_tests_N/` dir post-purge AND/OR
12
- silently dropped peer caches in the merge.
13
-
14
- Backport of upstream PR
15
- [#168](https://github.com/avmnu-sng/rspec-tracer/pull/168). Adds a
16
- filesystem barrier layered on top of the pid-file wait. Each worker
17
- writes a `.rspec_tracer_boot` marker at `RSpecTracer.start` time and
18
- a `.rspec_tracer_done` marker as the first step of its at_exit tasks;
19
- the elected worker waits for every booted peer's `.done` to
20
- materialize before proceeding to merge + purge. Two independent
21
- signals (pid file + filesystem) must agree before the elected worker
22
- declares the peer set stable. Bounded at 5 s with a graceful warn for
23
- crashed peers their dirs are purged regardless of completion state,
24
- and the merge accepts whatever's on disk.
25
-
26
- ## [1.2.2] - 2026-05-04
108
+ ### Changed
109
+
110
+ - **Ruby ≥ 3.1** is the floor (1.x supported Ruby 2.5+). 3.2, 3.3,
111
+ 3.4, 4.0 + JRuby 9.4 are CI-gated. Rails 7.0 / 7.1 / 7.2 / 8.0 +
112
+ RSpec 3.12 / 3.13 are CI-gated.
113
+ - **SimpleCov branch coverage now works alongside rspec-tracer.**
114
+ The 1.x caveat ("SimpleCov would not report branch coverage
115
+ results even when enabled") is **no longer applicable** — the
116
+ coverage-stack rewrite decoupled rspec-tracer's line-only
117
+ emission from SimpleCov's branch-tracking. Users who turned
118
+ `enable_coverage :branch` off when adopting rspec-tracer 1.x can
119
+ re-enable in 2.0.
120
+ - **Cache schema bump.** First run on 2.0 is cold; subsequent runs
121
+ return to warm.
122
+ - **Coverage adapter** consolidated: a single
123
+ `Reporters::CoverageJsonReporter` owns `coverage.json` emission
124
+ (replacing the 1.x `CoverageReporter` + `CoverageWriter` pair).
125
+ Output shape preserved.
126
+ - **Parallel-tests reporter behavior:** terminal / JSON / HTML
127
+ reports now emit ONCE at the merged top-level location after
128
+ `merge_snapshot!` runs, instead of per-worker (where
129
+ `purge_worker_dirs!` then removed them and left users with no
130
+ usable output). Per-worker emission was a pre-2.0 behavior bug.
27
131
 
28
132
  ### Fixed
29
133
 
134
+ - **ERB template tracking via `render_template.action_view`** (closes
135
+ the issue behind upstream
136
+ [#66](https://github.com/avmnu-sng/rspec-tracer/issues/66)). The
137
+ Rails subscriber attributes rendered ERB partials to the example
138
+ that triggered the render.
139
+ - **Phantom `metadata[:file_path]` graceful skip** (closes the issue
140
+ behind upstream
141
+ [#72](https://github.com/avmnu-sng/rspec-tracer/issues/72)). Specs
142
+ whose `metadata[:file_path]` doesn't resolve to a readable file
143
+ (gem-generated examples, deleted-between-runs files) now log
144
+ debug + skip dependency registration instead of raising.
30
145
  - **Default filter list now excludes rspec-tracer's own output
31
- directories** (`rspec_tracer_cache/`, `rspec_tracer_coverage/`,
32
- `rspec_tracer_report/`, and the `rspec_tracer.lock` file). Prior
33
- versions did not exclude these paths, so any spec that read a tracer
34
- cache file (typical for outer integration specs that assert on cache
35
- state after a fixture subprocess run) had those paths attributed as
36
- dependencies. The user-visible symptom was reverse-dependency reports
37
- showing tracer-self paths as deps of unrelated specs, plus
38
- spurious files-changed re-runs whenever the tracer rewrote its own
39
- cache. Both `add_filter` and `add_coverage_filter` defaults updated.
40
-
41
- - **Carry-forward filter contract** — newly added filters now apply
42
- uniformly to both fresh attribution AND prior-snapshot carry-forward.
43
- Previously, `Cache#load_all_files_cache` and `load_dependency_cache`
44
- read previous-run state without re-applying the current filter list.
45
- A user adding a new filter mid-development saw the filter take
46
- effect only for fresh attributions on cold runs; previously-cached
47
- paths matching the new filter persisted in `all_files` and
48
- `dependency` until the next cold run. Filter additions now take
146
+ directories** `rspec_tracer_cache/`, `rspec_tracer_coverage/`,
147
+ `rspec_tracer_report/`, `rspec_tracer.lock`. Previously, tests
148
+ that read the tracer's own cache files (e.g. integration specs
149
+ asserting on cache state after a fixture subprocess run) got
150
+ those paths attributed as deps. The tracer's output is
151
+ regenerated every run by design and should never invalidate a
152
+ test. Both `add_filter` (dep graph) and `add_coverage_filter`
153
+ (coverage report) lists were updated.
154
+ - **`add_filter` / `add_coverage_filter` now apply uniformly to
155
+ both fresh attributions AND prior-snapshot carry-forward.**
156
+ Previously, `Engine#seed_all_files_from_previous` and
157
+ `Engine#seed_graph_from_previous` seeded paths from the previous
158
+ run's snapshot WITHOUT re-applying the current filter list — so
159
+ a filter added between runs would NOT exclude already-cached
160
+ paths until a cold run wiped them. Filter additions now take
49
161
  effect on the very next warm run.
50
162
 
51
- ## [1.2.1] - 2026-05-01
163
+ ### Deprecated
52
164
 
53
- ### Fixed
165
+ The 1.x configuration surface keeps working; each deprecated entry
166
+ fires one `logger.warn` at first use pointing at the replacement.
167
+ The deprecated values still resolve semantically. All four are slated
168
+ for removal in 3.0.
169
+
170
+ - **`reports_s3_path(uri)`** → use **`remote_cache_uri(uri)`**.
171
+ - **`use_local_aws(bool)`** → use **`remote_cache_backend :s3,
172
+ local: true`**.
173
+ - **`RSPEC_TRACER_REPORTS_S3_PATH`** → use
174
+ **`RSPEC_TRACER_REMOTE_CACHE_URI`**.
175
+ - **`RSPEC_TRACER_USE_LOCAL_AWS`** → fold into
176
+ `remote_cache_backend` params.
177
+
178
+ ### Removed
54
179
 
55
- - **Parallel-tests merge silently dropped peer caches and left worker
56
- directories behind** when the spawned-worker count exceeded
57
- `ENV['PARALLEL_TEST_GROUPS']`. The merge + purge call-sites in
58
- `lib/rspec_tracer.rb` (`merge_parallel_tests_reports`,
59
- `merge_parallel_tests_coverage_reports`,
60
- `purge_parallel_tests_reports`) iterated `1..ENV['PARALLEL_TEST_GROUPS']`
61
- to construct per-worker directory names. But parallel_tests sets
62
- `PARALLEL_TEST_GROUPS = num_processes.to_s` for each child, where
63
- `num_processes` is the user-requested process count
64
- (`Parallel.processor_count` by default) — not the actual worker
65
- count. When `num_processes < spawned_worker_count` (e.g. when the
66
- spec-count partition produces more non-empty groups than
67
- `num_processes`, or shared-runner CPU detection drifts mid-run),
68
- peer caches with `TEST_ENV_NUMBER` above the env bound were silently
69
- dropped from the merge (warm-run skip decisions get made against
70
- an under-sampled merged manifest) and left behind by the purge
71
- (visible as straggler `parallel_tests_<N>/` directories under
72
- `rspec_tracer_cache/`). The same gem behaviour was documented on
73
- v1.1.1's `last_process?` fix
74
- ([PR #101](https://github.com/avmnu-sng/rspec-tracer/pull/101)) but
75
- the iteration call-sites kept the buggy bound. Each method now globs
76
- the actual `parallel_tests_*` subdirectories under its base path,
77
- making the merge + purge robust to whatever count parallel_tests
78
- spawned. No cache format change.
180
+ - **Cucumber feature-file integration suite.** Contributor-facing
181
+ only; users see no change. Replaced by RSpec subprocess
182
+ integration specs under `spec/integration/`. The `bundle exec
183
+ rake` legacy entry point is removed; `task` (Taskfile) is the
184
+ canonical dev loop.
185
+ - **Ruby ≤ 3.0 and Rails ≤ 6.x support** (already dropped in 1.1.0;
186
+ re-stated here for clarity at the major boundary).
187
+ - **Windows support** (no CI gate; never actively maintained).
188
+
189
+ ### Deferred to 2.1
190
+
191
+ - **Per-example dependency attribution under Rails
192
+ `config.eager_load = true`.** When `eager_load = true` (Rails
193
+ default for CI tests to mirror prod), all `app/` files load at
194
+ boot and land in the boot-set; the whole-suite invalidator fires
195
+ on any `app/` edit, re-running every example. This is SAFE (never
196
+ misses a dep) but coarser than per-example attribution. The 2.1
197
+ enhancement will install a class-attribution mechanism (working
198
+ name: `track_class_attribution`) using `TracePoint(:class)` at
199
+ boot + `TracePoint(:call)` per example to trim the invalidator
200
+ scope to only examples that touched the changed file's class /
201
+ method surface. Opt-in by default; designed from scratch on the
202
+ user-shape problem (not a resurrection of any 1.x DSL name).
203
+ Today's escape hatches: set `config.eager_load = false` in test
204
+ env for full per-example precision, or use `tracks: { files:
205
+ '...' }` for per-example narrowing on specific groups.
79
206
 
80
207
  ## [1.2.0] - 2026-04-24
81
208