Repository navigation
Phase 1: messengers, pipeline, providers, retries, test helpers - #1
Merged
Merged
Conversation
…pers Messenger classes on AbstractController with .text.erb templates, layouts, I18n, and URL helpers. A Message value with GSM-7/UCS-2 segment counting. A pipeline that normalizes to E.164, rejects empty bodies, runs interceptors, delivers, and notifies observers and ActiveSupport::Notifications without ever including the body. Providers: Twilio over REST with error-code mapping to permanent reasons and Retry-After handling, plus log, test, and null. deliver_now returns Smswire::Result; deliver_later goes through Smswire::DeliveryJob with polynomial backoff for transient errors. Minitest TestHelper and RSpec matchers, a dummy Rails app, and a CI matrix over Ruby 3.2-3.4 and Rails 7.1-8.1. Spec, README, and changelog updated to match. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01L5SuBiSMN4r9qr5CXbKkHV
Pin json below 3 when testing Rails 8.0, which shares the 7.1 incompatibility. Replace numbered block parameters with named ones so Standard on Ruby 3.4 passes without requiring the 3.4-only `it`. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01L5SuBiSMN4r9qr5CXbKkHV
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01L5SuBiSMN4r9qr5CXbKkHV
timimsms
marked this pull request as ready for review
October 8, 2026 18:04
This was referenced Oct 8, 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.
Implements Phase 1 of
docs/SPEC.md.What's included
Smswire::Baseon AbstractController, withdefault,with(params),.text.erbtemplates, layouts, I18n lazy lookup, URL helpers, callbacks, named senders, and recipient resolution.deliver.smswire/reject.smswirenotifications. Bodies are never instrumented.log,test,null, and a registry for custom adapters. Twilio error codes map to permanent reasons such as:invalid_numberand:opted_out. 429 responses honor Retry-After.deliver_nowreturnsSmswire::Result.deliver_latergoes throughSmswire::DeliveryJob, which retries transient errors with polynomial backoff up toretry_attempts.Smswire::TestHelperfor Minitest anddeliver_sms/have_enqueued_smsmatchers insmswire/rspec.Deviations from the spec, now reflected in it
actionpackrather thanactionview, because rendering uses AbstractController like Action Mailer.activerecordarrives in Phase 2.:striprather than squish, since SMS bodies often need line breaks.:rejected_empty_bodyand:skipped.retry_attemptsreplaces theretryhash.Verification
json < 3in the test Gemfile, because ActiveSupport 7.1'sto_jsonpasses an option json 3.0 removed. Library code only parses JSON.🤖 Generated with Claude Code
https://claude.ai/code/session_01L5SuBiSMN4r9qr5CXbKkHV