Agents Builders

Unify turf links on /l

Archived
unify-turf-links-on-l

Created

Jun 22, 19:13

Started

Jun 22, 19:13

Completed

Jun 22, 20:42

DevOps handoff

Type

Feature

Shape

ui+db

Worktree Slug

turf-l-unify

Repositories

turf-monster

Release Train

Branch

feat/turf-l-unify

QA URL

Production URL

auth referral routing back-compat

Acceptance Criteria

  • Landing pages move /l/:slug to /lp/:slug
  • Magic-link and referral both served at /l
  • turf-owned /l controller preserves age gate
  • Old /magic_link /i /l-slug links keep working

Expected Test Plan

  • unit
  • component
  • integration
  • e2e

Checks Run

  • [integration] unified_magic_link_test + referral_link_test + call-site + browser-guard + magic_links_controller_test: 44 runs, 162 assertions, 0 failures (worktree turf-l-unify, turf_monster_test)

Agent Context

Avi QA PASS 2026-06-22. Verified all 4 risk tags. auth: /l GET=inert scanner-safe confirm, POST→turf's GATED MagicLinksController#consume via super (age-gate intact, atomic Studio::Link.consume! burn). referral: referral_link_url→link_url→/l auto-updated; GET sets :reference cookie + redirect, reusable, never burned; POST-to-consume rejected. routing: token=urlsafe_base64 [A-Za-z0-9_-] so %r{[^/]+} + no format:false is sound (no MessageVerifier-slash bug); draw_link_routes=false suppresses engine gateless /l; landing→/lp keeps as: :landing_page. back-compat: /magic_link still consumes, /i→301→/l, old /l/:slug→301→/lp — all tested. Merges clean: origin/main==origin/release (0/0), branch is clean FF. Nits (non-blocking): stale /i comments in app/helpers/application_helper.rb:4-5 and config/routes.rb:393.

Stage Timeline

Who handled each stage, the time it took (measured), and the model / tokens / cost reported (best-effort) — plus who's on it right now. means the agent didn't report that metric.

  1. Shipped Archived
    Model
    Duration
    Tokens
    Cost
    Completed Jun 23, 17:13 · 4 days ago

Conversation

QA review feedback, agent handoffs, and follow-up notes for this task.

Handoff 5 days ago

PR #161 (turf-monster). Removes the /i exception: landing pages -> /lp, /l/<token> is the unified Studio::Link entry (magic + referral) served by turf's OWN gated Studio::LinksController (age-gate preserved; NOT engine's gateless consume). Back-compat: /magic_link still consumes, /i 301->/l, old /l/:slug 301->/lp. 1354 minitest + 10 e2e + live-smoked all paths. Engine 0.8.0 already published, so Gemfile is on ~> 0.8 (no publish gate this time) — straight to QA review.

Sealed-bid sizing

Edit →

Alex (PM)

Avi (PO)

Dev

Actual