docs(loyalty): record 2026-05-18 Test 1 round 2 cleanup + admin polish
All checks were successful
CI / ruff (push) Successful in 19s
CI / pytest (push) Successful in 2h48m6s
CI / validate (push) Successful in 32s
CI / dependency-scanning (push) Successful in 34s
CI / docs (push) Successful in 53s
CI / deploy (push) Successful in 1m16s

End-of-day update. Adds a new section to the go-live readiness doc
covering today's three shipped commits:

- 236fee01 — enrollment-success CTA rename (Continuer mes achats
  -> Retour à l'accueil)
- ab3e133a — flatpickr birthday picker so Firefox honors dd/mm/yyyy on
  FR. Firefox-specific limitation (Mozilla bug #1344625) — Chrome /
  Safari / Edge already respected <html lang="fr"> from earlier fix.
- 5f288502 — admin program form now warns when terms fields are both
  empty and disables save until at least one is filled, so a
  merchant can't accidentally ship a program with a non-clickable
  Conditions Générales link on the storefront.

Marks Test 1 fully done (all 6 originally-reported bugs B1-A..B1-F
plus today's 2 follow-up nits resolved end-to-end on prod). Carries
forward the remaining items from yesterday's queue: Test 2, Hetzner
doc check, unit tests for the B1-F chain, prospecting tasks/__init__
fix, and the other-module email-path audit.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-05-18 23:42:16 +02:00
parent 78e098d4da
commit f68a30a820

View File

@@ -131,6 +131,56 @@ fixed alongside the unit-test pass below.
an integration test that triggers a representative email from every
module and asserts an `email_logs` row appears within N seconds.
## 2026-05-18 update — Test 1 round 2 cleanup + admin polish
Both follow-up #1 items from yesterday shipped + verified by user.
Plus a bonus polish on the admin program form, surfaced when the user
spotted a non-clickable "Conditions Générales" link on the storefront
and asked why.
### Test 1 nits resolved
| Bug | Diagnosis | Fix | Commit |
|---|---|---|---|
| Birthday picker shows mm/dd/yyyy on FR even though `<html lang="fr">` IS in the page source | Firefox-specific: it ignores the `lang` attribute for `<input type="date">` (Mozilla bug #1344625, open since 2017). Chrome/Safari/Edge respect it. | Swap to flatpickr on both `loyalty/storefront/enroll.html` and `loyalty/store/enroll.html`. Configured `dateFormat: 'Y-m-d'` (ISO to API) + `altInput: true` + `altFormat: 'd/m/Y'` (dd/mm/yyyy visible) + `maxDate: 'today'` + `locale: '{{ current_language }}'` for month/day name translations. Loaded via `extra_head` + `extra_scripts` blocks. | `ab3e133a` |
| "Continuer mes achats" CTA on enrollment success page makes no sense for a loyalty-only storefront with no catalog | Same destination is fine (`{{ base_url }}`), only the label needed to change. | Renamed i18n key `continue_shopping``back_to_home` in all four locales: EN "Back to Home" / FR "Retour à l'accueil" / DE "Zurück zur Startseite" / LB "Zréck op d'Haaptsäit". | `236fee01` |
### Admin program-form polish (bonus)
User noticed the storefront's "Conditions Générales" link wasn't
clickable. Root cause: the program had both `terms_text` and
`terms_cms_page_slug` empty. The storefront then renders a plain
`<span>` instead of an `<a>` (`enroll.html:122-124`) — intentional, so
the link doesn't open an empty modal, but easy to accidentally publish
a program in this broken state.
Two changes to `loyalty/shared/program-form.html`:
1. Yellow warning banner inside the Terms section, visible only when
both fields are empty. Tells the admin exactly what the storefront
will look like and what to fix.
2. Save button disabled until at least one of the two terms fields is
filled. The button gets a localised `:title` tooltip explaining
why it's disabled, with `disabled:cursor-not-allowed` so the
disabled state is obvious on hover.
Three new i18n keys (`terms_required_warning`, `terms_text_hint`,
`terms_required_tooltip`) added in en/fr/de/lb. Shipped as
`5f288502`.
### Test 1 status
All 6 originally-reported bugs (B1-A through B1-F) plus the 2
follow-up nits are now resolved end-to-end on prod. Test 1 is
**fully done**.
### Remaining follow-ups (carry over to next session)
From the 2026-05-17 list, items #2 (Test 2), #3 (Hetzner doc check),
#4 (unit tests for the B1-F chain), #5 (prospecting `tasks/__init__.py`
missing import), and #6 (other-module email audit) are still queued.
Items #1 (Test 1 nits) are now closed by this session's commits.
## Status board
| # | Pre-launch step | State | Notes |