Hacktoberfest 2026: los issues que los mantenedores marcaron para octubre, abiertos y aptos para principiantes. Explorar issues de Hacktoberfest

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

Cerrado
#2,920 1 comentario 0 reacciones 0 asignados Ver en GitHub

Los mantenedores suelen responder en 1 día

Nadie ha tomado este issue todavía.

Evaluación

Dificultad
5/5
Tiempo estimado
Más de una semana
Aptitud para principiantes
35/100
Tipo de issue
Nueva funcionalidad
Claridad
Bastante claro
Estado de actividad
Activo
Stack tecnológico
rails, ruby
Área
backend, database

Línea de trabajo

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.

Escrito por el modelo de indexación a partir del texto del issue.

Descripción

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
Lenguaje dominante
Ruby
Estrellas
104
Forks
205
Merge medio
1 d 2 h
PR fusionados (30 d)
77

Preparar el entorno

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Más de codebar/planner

Todos los issues de codebar/planner

Issues similares

Más issues de Ruby

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.