Hacktoberfest 2026: những issue maintainer đã đánh dấu cho tháng Mười, đang mở và phù hợp người mới. Xem issue Hacktoberfest

Signup nudge eligibility treats subscribed-then-unsubscribed members as never subscribed

Đang mở
#2,920 1 bình luận 0 reaction 0 người được giao Xem trên GitHub

Maintainer thường phản hồi trong vòng 1 ngày

Chưa có ai nhận issue này.

Đánh giá

Độ khó
5/5
Thời gian dự kiến
Hơn một tuần
Mức phù hợp với người mới
35/100
Loại issue
Tính năng
Độ rõ ràng
Khá rõ ràng
Mức độ hoạt động
Sôi nổi
Công nghệ
rails, ruby
Lĩnh vực
backend, database

Hướng nghiên cứu

Start with app/services/signup_nudge_email_service.rb#never_subscribed and app/controllers/subscriptions_controller.rb#destroy, then inspect the subscription and activity data model. Confirm which persistence direction maintainers choose before implementing it. Done means a member who subscribed and later unsubscribed is not treated as never subscribed, while group-specific eligibility and followup behavior remain correct.

Do mô hình lập chỉ mục viết ra từ nội dung của issue.

Mô tả

bug

Summary

SignupNudgeEmailService#never_subscribed defines eligibility as "has no row in subscriptions". But SubscriptionsController#destroy deletes the subscription row when a member unsubscribes from a chapter group. A member who subscribed and later left is therefore indistinguishable from a member who never subscribed at all — and becomes nudge-eligible again.

Real production case

Member 31302 (dump of 2026-09-24), full timeline from activities + workshop_invitations:

Time (2026-09, UTC) Event
09-02 11:16 Signs up
09-02 11:18 RSVPs as Coach (2 minutes after signup)
09-09 18:30 Attends London workshop
09-17 09:16 RSVPs to the next London workshop
09-17 09:34 Unsubscribes from London Coaches group (subscription.removed activity, id 569)
09-17 13:04 Receives a "Let's get you connected with codebar!" signup nudge

Four hours after choosing to leave the chapter group, this actively engaged coach got an email whose premise is "you never connected with codebar". The unsubscribe made him eligible again; the nudge arrived same-day.

Two compounding facts:

  1. subscription.created activity tracking only started 2026-09-13 (65 events / 41 members) and subscription.removed on 2026-09-14 (61 events / 45 members). His subscription predates tracking, so its removal left no "was subscribed" evidence — only the removal event exists.
  2. In the dump, 37 of the 45 members with a tracked unsubscribe now have zero subscription rows — i.e. the nudge service currently classifies all 37 as "never subscribed". One of them is inside the current nudge window and not banned.

Why this is separate from #2919

The daily duplicate-send bug (#2919, .merge clobbering the delivery anti-join) causes the same member to be emailed repeatedly, but fixing it does not fix this: a subscribe-then-unsubscribe member with no prior nudge is genuinely selected by the corrected query. The eligibility rule itself needs to account for unsubscribes.

Scope of the wrongness

  • Messaging mismatch: the nudge copy assumes a dormant lurker; unsubscribers made an active choice to leave. Re-pitching them risks reading as ignoring their opt-out.
  • Same-day turnarounds are possible for any churn event shortly before the daily 12:00 UTC run, as the timeline shows.
  • The unsubscribe may have been from one group only (e.g. left Coaches, still interested in Students) — naive "any unsubscribe = never eligible" would over-correct. Today's schema can't tell, because the row is gone.

Possible directions (for discussion)

  1. Tombstone subscriptions — soft-delete/discards (discarded_at) or a state column, so history survives; eligibility then reads "never had an active subscription". Most robust; biggest change.
  2. Eligibility excludes members with a subscription.removed activity — cheap, but blind to all pre-2026-09-13 subscriptions, and depends on activity rows never being cleaned (nothing prunes activities today, but nothing guarantees that).
  3. Member-level flag set on unsubscribe (mirroring the received_student/coach_welcome_email pattern) — simple, but loses which group/chapter was left.

Happy to take whichever direction maintainers prefer; option 1 is the only one that also preserves the data for the followup email logic (which keys off member_email_deliveries.created_at and would otherwise send a followup to someone who already left).

Environment

  • app/services/signup_nudge_email_service.rb (never_subscribed) and app/controllers/subscriptions_controller.rb#destroy at a50b5214
  • Rails 8.1 / Ruby 4.0, verified against codebar_production_dump 2026-09-24
Ngôn ngữ chính
Ruby
Star
104
Fork
205
Merge trung bình
1 ngày 6 giờ
Pull request đã merge (30 ngày)
70

Chuẩn bị môi trường

Bắt đầu từ đâu

  1. Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
  2. Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
  3. Fork repository và làm thay đổi trên một nhánh.
  4. Mở pull request có tham chiếu số hiệu của issue.

Issue khác của codebar/planner

Tất cả issue của codebar/planner

Issue tương tự

Thêm issue về Ruby

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.