Review: Email: Queens EYBL Live Period tournament -- registration + travel details
Verdict: NEEDS_REFINEMENT
Template Completeness
- [x] Type -- Feature
- [x] Lineage -- depends on #47
- [x] Repo -- ldraney/westside-basketball
- [x] User Story -- As an admin (Marcus), send tournament details email
- [x] Context -- EYBL Live Period, Las Vegas, July 9-13
- [ ] File Targets -- MISSING. No file paths listed. Issue should specify which mailer class to create, which view template, and which controller action or rake task triggers the send.
- [ ] Feature Flag -- MISSING. Section required by template-issue-feature. This is a new user-visible email send capability. Recommend: "none" with justification (one-shot admin-triggered action, not a persistent feature toggle), or flag it if email sending should be gated.
- [x] Acceptance Criteria -- 4 items present
- [ ] Test Expectations -- MISSING. No test section. Should specify ActionMailer test helpers, email delivery assertion, email_log record creation.
- [x] Constraints -- present (dependency on #47, 72-hour deadline, audience query)
- [ ] Checklist -- MISSING (PR opened, tests pass, no unrelated changes)
- [x] Related -- present (links to #47, #49, story:WS-S7, sop-email-send)
Traceability
- [ ] story:email label -- MISMATCH. Board item label is
story:email, but issue body referencesstory:WS-S7(As an admin, I want to send branded email announcements so that parent comms are professional and consistent). WS-S7 is verified on project-westside-basketball user-stories section. [LABEL] Change board item label fromstory:emailtostory:WS-S7. - [ ] arch:westside-basketball label -- arch note MISSING.
mcp__pal-e-docs__search_notes(query="arch-westside-basketball")returned no results. [SCOPE] Create architecture notearch-westside-basketballfor the westside-basketball component. - [x] Forgejo issue -- #48, open, valid URL (redirects from old westside-ror name)
File Targets
No file targets listed in the issue. Based on repo inspection, the following files are relevant:
app/mailers/application_mailer.rb-- exists, still has defaultfrom@example.com(will be updated by #47)app/services/gmail_client.rb-- exists, legacy Gmail API clientapp/models/email_log.rb-- exists, for send loggingapp/models/tournament.rb-- exists, tournament modelapp/controllers/emails_controller.rb-- exists, email managementapp/views/emails/-- exists, email preview pages
Issue should specify: new mailer class (e.g.
app/mailers/tournament_mailer.rb), new mailer view (e.g. app/views/tournament_mailer/queens_eybl.html.erb), and how the send is triggered (admin action, rake task, or controller endpoint).Repo Placement
OK. Issue is filed on ldraney/westside-basketball, and the work belongs in that repo. Board item forgejo_issue_url still shows old name (westside-ror) but Forgejo redirects correctly.
Dependencies
- depends:47 (Spike: Rails email sending -- ActionMailer setup and docs) -- board item #1579, currently in backlog. This is a hard dependency: #47 establishes the email sending mechanism (ActionMailer config, SMTP vs Gmail API decision, template strategy). #48 cannot be implemented until #47 is complete and merged.
- Sibling: #49 (Email #2, TBD) -- board item #1581, also depends on #47. No circular dependency.
- Dependency is correctly documented in both the issue body (Lineage, Constraints) and the board item labels (depends:47).
Acceptance Criteria
- [x] "Email is sent to all Queens family email addresses" -- testable, but needs clarification: what defines "Queens family"? The Constraints section says "all parents with a daughter on a Queens team" which helps. Agent needs a query/scope to identify these records.
- [x] "Email body matches the content above" -- testable via ActionMailer preview or test assertion against the template. The full email body is provided inline, which is good.
- [x] "Email is sent from the configured Westside sending address" -- testable, depends on #47 establishing the address.
- [x] "Send is logged (who received, timestamp)" -- testable, email_log model already exists.
AC are reasonable and verifiable. Could benefit from one more: "Audience query returns only Queens team parents (not Kings)".
Blast Radius
Low. This is a new mailer class + view + trigger. It does not modify existing email infrastructure (that is #47's job). No sibling services affected. The email_log model already exists. The main risk is sending to wrong recipients (Kings families instead of Queens), which AC should cover.
Decomposition Assessment
4 AC, 1 repo, ~3 file targets (mailer, view, trigger). Estimated agent work: under 5 minutes once #47 is complete. No decomposition needed.
Recommendations
[BODY]Add File Targets section: specify the new mailer class, mailer view template, and trigger mechanism (controller action or rake task).[BODY]Add Feature Flag section: "none" with justification (admin-triggered one-shot action), or specify a flag if email sending should be gated.[BODY]Add Test Expectations section: ActionMailer test helpers, email delivery count assertion, email_log record creation, audience query correctness.[BODY]Add Checklist section (PR opened, tests pass, no unrelated changes).[BODY]Add AC: "Audience query returns only Queens team parents (not Kings or other teams)".[LABEL]Change board item label fromstory:emailtostory:WS-S7.[SCOPE]Create architecture notearch-westside-basketballfor the westside-basketball component.