Map recurring branch-specs gaps so fewer PRs need run-all-specs - #7609
Merged
Merged
Conversation
Harvest of 200 run-all-specs PRs since 2026-08-01: 22 of 118 mapper escalations now select a concrete spec list. Routes, schema, Gemfile, Select.tsx, and spec/support hooks still escalate.
Contributor
|
Shared Tiptap/RichTextEditor now fans out to product, email, download, profile, and workflow request specs (79 files, under the 120 cap). ImageUploader includes profile. Pages JS no longer prefix-matches pages_landing_embed. domain.rb stays boot-global. docker/ ignore is nginx/server.sh only so CI compose/Dockerfile.test still escalate.
A mapping is only safe if the selected specs cover every flow that imports, renders, or reads the source. Harvest counts that matched a PR's other files were not evidence the new rule pointed at the right flow. - data/paypal → checkout (PaymentForm billing agreement), not settings - custom_html_analytics → buyer product/profile custom-HTML specs - Drop generic pages/<X> → spec/requests/<x>*; allowlist verified dirs; UrlRedirects → download_page; Pages → pages_controller + landing embed - RichTextEditor/Tiptap → product + download + emails + workflows + profile - DiscordButton/discord_integration → download + checkout + product integrations - ImageUploader also settings avatar upload; reviews also library/customers; search also product_panel; Settings also oauth applications; EmailsPage also followers; Users/Coffee also purchase coffee_spec - Boot-global config (domain, currencies, CSP, test redis, Warden/Sentry/ OmniAuth Apple) escalates again. Keep CONFIG_SPEC_MAP only for local initializers (rack_attack, alterity, instant_ddl, active_storage_jobs). - Ignore only production docker nginx/startup/local-compose. Test-image inputs (Dockerfile.test, compose-test-and-ci, fixtures, docker/ci) escalate so they cannot hide behind the user_spec floor. Pin each corrected mapping with an importer-derived assertion. Honest harvest: 19 of 118 no longer escalate (was 22); currencies/domain/Apple go back to full suite.
Shared components whose consumers span more than one flow (RichTextEditor, Tiptap, ImageUploader, reviews, DateRangePicker, useRecaptcha, search, email CSS) return to ESCALATE. Users/ catch-all narrowed to importer-verified storefront pages. custom_html_analytics includes profile_analytics_spec.
UrlRedirects maps DownloadPage only (Read/Stream escalate). Followers maps Index only. Users/Subscribe is exact; SubscribePreview escalates. parsers/profile escalates. Storefront includes the custom domain request spec.
DownloadPage fanout includes reading_spec and video_streaming_spec (they visit /d/:token). Coffee includes tipping_spec. The #7070 pin now requires checkout, purchases, and subscription request specs.
Settings includes passkey login. Dashboard includes mobile/nav/social connect specs. Wishlists/Show escalates (Discover purchase consumer).
Users/Show is a UTM checkout surface. Dashboard is visited by auth and Agent specs. Settings includes account-confirmation and affiliate-setting browser specs that hit settings_main.
gumclaw
marked this pull request as ready for review
September 12, 2026 14:18
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.
Round 3: shared components whose consumers span more than one flow escalate.
Checklist
bin/branch-specs. Unknown still escalates. Not raising MAX_SELECTED_FILES.ruby spec/bin/branch_specs_test.rb→ 99 checks passed. Replay: paypal maps to checkout; RichTextEditor exits 3.What
bin/branch-specsmaps a branch diff to the specs CI should run. Exit 3 means the PR must carryrun-all-specs. This change teaches it recurring, importer-traced gaps — and refuses to certify a shared component whose consumers span more than one flow.Why
Sahil, 2026-09-12: "Update run-all-specs based on prior runs to improve it and need it less."
Review rounds
Round 1 claimed 22 of 118 no longer escalate. Astra and Fable BLOCKed: harvest counts were coincidental, not importer-complete.
Round 2 traced importers and reverted boot-global config. Astra still BLOCKed: RichTextEditor's complete union is 157 files (>120), so it must escalate. Same for every shared component whose consumers span more than one flow.
Round 3 principle: stop approximating those fanouts. Do not raise MAX_SELECTED_FILES. Removed: RichTextEditor, TiptapExtensions, ImageUploader, ReviewForm / Review.tsx / ReviewVideoPlayer / data/product_reviews, DateRangePicker, useRecaptcha, data/search.ts,
_email.scss. Users/ catch-all replaced with Coffee + Subscribe only (Show and ReviewReminders escalate). Wishlists/Show and Dashboard pages escalate. parsers/profile escalates.Kept (importer-traced): data/paypal → checkout; Discord button + data; Settings including OAuth, passkeys, and settings_main visitors; EmailsPage + followers; Payouts; Coffee + tipping; articles.yml; Pages and Passwords; DownloadPage including reading/video specs that visit
/d/:token; custom_html_analytics including profile_analytics_spec.rb; CONFIG_SPEC_MAP = rack_attack, alterity, instant_ddl_first, active_storage_jobs; docker production nginx/startup/local-compose ignored, test-image inputs escalate.Honest harvest against origin/main labeled PRs: 12 of 116 no longer escalate (r1 claimed 22 of 118). Three of those 12 are ignored-only docker production files (exit 0, zero specs).
Before → after (origin/main ESCALATE → this head)
Post-merge miss #7070 (checkout presenter → checkout/purchases/subscription) is unchanged and pinned.
This PR only touches
bin/branch-specsandspec/bin/branch_specs_test.rb, which the selector skips.Premerge review: clean @ 1856a09
Walkthrough
Terminal recording of
ruby spec/bin/branch_specs_test.rb(99 checks) plus selector replay:data/paypal.tsmaps to checkout (includes payment_spec, not settings);RichTextEditor.tsxexits 3.pr7609.mp4
QA
No user-facing surface.
AI disclosure: Grok 4.6. Prompt: harvest run-all-specs PRs, map importer-traced FANOUT gaps, escalate shared multi-flow components, keep MAX_SELECTED_FILES at 120. Round 3: Astra+Fable adversarial passes until SHIP-WITH-FIXES with no P0/P1.