Review: bug: wrong email address across all westside repos

review-909-2026-04-09 Review

review approved

Verdict: APPROVED

Re-review. Previous verdict was NEEDS_REFINEMENT (3 issues). All 3 refinements applied and verified.

Refinement Resolution

  • [x] [DECOMPOSE] Per-repo sub-ticket table added to issue body with 5 rows (basketball-api, westside-landing, westside-app, westside-playground, pal-e-platform). Each fits the 5-minute rule.
  • [x] [SCOPE] arch label Changed from arch:dataflow-westside-basketball (invalid) to arch:email. Verified on board item #909.
  • [x] [BODY] DB template audit New "DB Template Audit" section added to issue body. AC4 added for database template audit.

Template Completeness

  • [x] Type — Bug
  • [x] Lineage — Standalone, umbrella with decomposition
  • [x] Repo — Cross-repo, all 5 repos listed with severity breakdown
  • [x] What Broke — Detailed with severity tiers (CRITICAL/HIGH/LOW/MED)
  • [x] Repro Steps — Clear steps for both frontend and backend paths
  • [x] Expected Behavior — Correct email specified
  • [x] Environment — prod, all westside services
  • [x] Acceptance Criteria — 4 criteria (added DB audit), all testable
  • [x] Decomposition — Per-repo table with file counts and hit counts
  • [x] DB Template Audit — Explicit call-out for database-stored templates
  • [x] Related — project reference, arch reference, story reference
Template is fully complete for Bug type. Exemplary scoping with decomposition table.

Traceability

  • [x] story:WS-S7 label — "As an admin, I want to send branded email announcements so that parent comms are professional and consistent" — verified in project-westside-basketball user-stories section (Admin stories list)
  • [x] arch:email label — present on board item (corrected from previous invalid label)
  • [ ] arch note MISSING — arch-email note does not exist in pal-e-docs. Pre-existing gap flagged across 5+ reviews. Does not block this ticket.
  • [x] Forgejo issue — forgejo_admin/basketball-api#412, open

File Targets

  • [x] basketball-api (4 files, 7 hits) — verified: exact match via grep
  • [x] westside-app (9 files, 13 hits) — verified: exact match via grep, all under src/routes/(public)/
  • [x] westside-playground (10 files, 25 hits) — verified: exact match via grep
  • [x] pal-e-platform (2 files, 4 hits) — verified: salt/pillar/secrets_registry.sls (3) + terraform/modules/monitoring/main.tf (1)
  • [?] westside-landing (9 files, 13 hits) — NOT verifiable: repo not checked out locally. Plausible given mirror structure with westside-app.
Cross-check: westsidebasktball@gmail.com (correct spelling) returns zero hits in basketball-api — confirming 100% of occurrences use the wrong spelling.

Repo Placement

OK. Umbrella ticket filed on basketball-api (highest-severity repo). Decomposition table identifies all 5 repos with sub-ticket placeholders (TBD). Each sub-ticket will be filed on its own repo for proper Closes #N semantics.

Dependencies

No blocking dependencies. Related board items (#900 warm-up welcome email, #898 outbox processor dead, #732 welcome email spike) are independent. All 5 sub-tickets are independent and can run in parallel.

Acceptance Criteria

4 criteria, all assessable:
  • AC1: grep -r "westsidebasketball@gmail" . returns zero hits — fully automatable per-repo
  • AC2: Interest lead notification email arrives at real inbox — manual verification
  • AC3: Public site mailto links compose to correct address — Playwright verifiable
  • AC4: Database-stored email templates audited — query-based verification

Blast Radius

LOW. Pure string replacement with no behavioral side effects. Rollback is trivial. DB template audit (AC4) covers the one risk the original review identified.

Decomposition Assessment

ADDRESSED. Umbrella ticket with 5 sub-tickets, each under the 5-minute rule. Decomposition table in issue body. Route to skill-decompose-ticket to create the actual sub-tickets and sub-board.

Recommendation

No blocking issues. Ticket is approved for advancement.
  • Standing [SCOPE]: arch-email note still missing in pal-e-docs (pre-existing gap, tracked across multiple reviews). Does not block this ticket.
  • Next step: Route to skill-decompose-ticket to create the 5 per-repo sub-tickets from the decomposition table, then advance umbrella to todo.