Summary
Second umbrella round on top of the first one (PR #2, squash-merged as d69a2e9 on 2026-05-08). Same rolling-PR rule: all in-flight pet-store work commits onto umbrella/pet-store; this PR stays open and accumulates commits until the user squash-merges into main.
Tracking issue: #1.
In this round so far
feat(commerce): shipping notification email + admin mark-shipped action— addsorders.{tracking_number, carrier, tracking_url, shipped_at}, anorder-shipped.stxemail template, an admin-gatedPOST /api/orders/{id}/shipaction that updates the row + fires the email, and a tracking-aware tile on/orders/{uuid}.
Test plan
- Run the new migration:
./buddy migrate - Place a test order via the storefront flow
- As an admin (dashboard session),
POST /api/orders/<id>/shipwithtracking_number=1Z999...&carrier=UPS&tracking_url=https://wwwapps.ups.com/... - Confirm the customer's email arrives with carrier + tracking link
- Confirm
/orders/<uuid>shows the updated "Shipped on …" tile with the tracking link
🤖 Generated with Claude Code