Invert feature gating: required_features → missing_features#134
Merged
Conversation
Previously adapters declared what they support (allowlist / default-deny). This caused silent test-skipping: a new spec with required_features that no adapter declared would never run anywhere. This inverts the polarity: - Specs declare `features:` — informational tags describing what they exercise - Adapters declare `config.missing_features = [...]` — explicit denylist of capabilities they can't provide - A spec runs unless its tags intersect the adapter's missing_features Default: run everything. Skipping requires conscious opt-out. Also adds a `coverage_check` rake task (wired into CI) that verifies every feature tag in the spec YAML files is covered by at least one reference adapter (i.e. not in every adapter's missing_features). This makes orphan tags a CI failure rather than a silent gap. Includes the ToSDrop counter restore fix (cherry-picked from restore-tosdrop-counter) and the [] method for property-access tests.
Maaarcocr
approved these changes
Apr 28, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Previously adapters declared what they support (allowlist / default-deny). This caused silent test-skipping: a new spec with
required_featuresthat no adapter declared would silently never run anywhere. The 27 brokenToSDropspecs fromcaf34dawent undetected for 4 months becauseruby_dropswasn't in the reference adapter's allowlist.What changed
Polarity flip:
features:— informational tags describing what the spec exercises (renamed fromrequired_features)config.missing_features = [...]— an explicit denylist of capabilities they can't providemissing_featuresDefault is now run everything. Skipping requires a conscious opt-out.
Coverage check (new):
Added a
coverage_checkrake task, wired into CI, that verifies every feature tag used in the spec YAML is "covered" — i.e. not in every adapter'smissing_features. This makes orphan tags a CI failure rather than a silent gap.Reference adapters updated — each now declares what it genuinely can't handle:
liquid_ruby.rb: missing Shopify-specific features + activesupport + lax_parsingliquid_ruby_shopify.rb: empty (runs everything — full Shopify Ruby Liquid)liquid_c.rb: missing runtime_drops, ruby_types, etc.Also includes the
ToSDropcounter restore fix and the[](key)method needed formapfilter tests.Migration for adapters outside this repo