Red Hat Catalog UAT Program
User Acceptance Testing (UAT) for the Red Hat Catalog SPA — human sign-off on staging before production promotion.
Epic: HUM-2179 · Story: HUM-2183 · Depends on: HUM-2060 (staging host + promotion gates)
Purpose
UAT complements automated validation (smoke, E2E, visual regression, security scans). It catches product, content, and UX issues that automation does not cover. UAT does not replace automated gates.
| Layer | Owner | Blocks prod? |
|---|---|---|
| Unit / lint / MR security | CI | MR merge |
| Staging smoke + visual | CI | Manual prod job availability |
| UAT sign-off | Product + design + eng | Manual prod deploy |
| Post-prod smoke | CI / on-call | Rollback decision |
Environments (disambiguation)
| Term | Meaning | URL pattern |
|---|---|---|
| Staging | Pre-prod validation target for UAT | https://images.staging.hummingbird-project.io |
| Experimental host | Infra sandbox for experiment/* branches |
https://images.experimental.hummingbird-project.io/<branch>/ |
/experimental route |
In-app product navigation (API/content pages) | Path on any deployed host — not the experimental deploy host |
See Red Hat Catalog Environment Promotion for full promotion paths.
Promotion gates
Staging → production (full UAT)
All of the following are required before clicking deploy_redhat_catalog:
deploy_redhat_catalog_stagingsucceeded onmainredhat-catalog-e2e-smokepassed against stagingvisual_redhat_catalog_stagingpassed (pre/post deploy diff)- MR-blocking security jobs clean (or approved exceptions) — see security-scanning.md
- UAT sign-off recorded (checklist + Jira comment; git record in
redhat-catalog/docs/uat-records/)
The prod deploy job is manual in GitLab; the release owner must verify UAT before triggering it.
Experimental → staging (light UAT)
Experimental hosts are for iteration, not customer release. When opening an MR
from experiment/<name> to main, use a light UAT pass on the experimental
URL — not the full checklist:
| Check | Required? |
|---|---|
| Feature under test works on experimental host | Yes |
| No console errors on primary journey | Yes |
| Masthead/footer not broken | Yes |
| Full 21-item checklist | No — runs on staging after merge |
| Named approver sign-off | Eng owner only (no prod gate yet) |
After merge, staging receives the full UAT before prod.
Named approvers (staging → prod)
Confirm names with the product owner during checklist review (HUM-2060 open question on approval owners). Until confirmed, use these roles:
| Role | Primary | Backup | Responsibility |
|---|---|---|---|
| Product | Confirm with PO | — | Catalog journeys, copy, feature completeness |
| Design | Confirm with design lead | — | Visual polish, layout, theme, responsive UX |
| Engineering release | Robert Sturla | Matt Nolting | Pipeline green, staging commit matches intent, prod deploy authorization |
Any Block from product or design stops prod promotion until defects are fixed on staging and UAT re-run.
Runbook — request and run UAT
1. Request UAT (release owner)
When main pipeline completes staging deploy + automated gates:
- Create or reuse a Release ticket in Jira (label
redhat-catalog, link HUM-2179 epic). - Comment with pipeline URL, commit SHA, and summary of user-facing changes.
- Label ticket
uat-requested. - Notify approvers (#hummingbird or team channel — use team default).
2. Execute UAT (approvers / delegates)
- Open uat-checklist.md against staging.
- File results in
redhat-catalog/docs/uat-records/YYYY-MM-DD-<topic>.md. - Log defects as Jira bugs linked to the release ticket.
Expected turnaround: 2 business days from uat-requested for routine
releases; same-day for hotfixes when approvers are available.
3. Sign off or block
- Pass: All checklist items pass or have accepted exceptions; all three
approver rows signed; Jira comment posted (template below); label
uat-pass. - Fail: Label
uat-fail; do not triggerdeploy_redhat_cataloguntil staging is fixed and UAT re-run.
4. Promote to production (engineering release)
- Verify Jira release ticket has
uat-passand linked sign-off record. - In GitLab
mainpipeline, run manual jobdeploy_redhat_catalog. - Comment on release ticket with prod pipeline URL.
What blocks release
| Blocker | Who resolves |
|---|---|
| Staging smoke or visual CI failed | Engineering |
| Open Critical/High security finding without exception | Engineering + security |
| UAT checklist failure (product/design) | Engineering fixes → re-UAT |
| Missing approver sign-off | Approver |
| Staging commit ≠ intended release SHA | Release owner |
Jira sign-off template
Post on the release ticket when UAT completes:
h3. UAT sign-off — staging → prod
*Staging URL:* https://images.staging.hummingbird-project.io
*Commit:* {full SHA}
*Pipeline:* {GitLab pipeline URL}
*Checklist record:* redhat-catalog/docs/uat-records/{filename}.md
||Role||Name||Decision||
|Product|{name}|Approve / Block|
|Design|{name}|Approve / Block|
|Engineering release|{name}|Approve / Block|
*Result:* Approved for prod / Blocked
*Defects:* {HUM-xxx links or "none"}
*Tester:* {name}, {date}
Suggested Jira labels
| Label | Meaning |
|---|---|
uat-requested |
Staging ready; waiting for human validation |
uat-pass |
Full sign-off complete |
uat-fail |
Blocked; defects logged |
uat-light |
Experimental → staging spot-check only |
Optional custom field (if added in Jira project settings): UAT status
(Not started / In progress / Passed / Failed).
Release ticket template
Create a Jira Task or Release issue per prod promotion:
## Release summary
- **Target:** staging → production
- **Commit:**
- **User-facing changes:**
## Automated gates
- [ ] Staging deploy green
- [ ] Smoke passed
- [ ] Visual regression passed
- [ ] Security scans clean (or exceptions documented)
## UAT
- [ ] Checklist completed ([uat-checklist.md](link))
- [ ] Sign-off record filed ([uat-records/](link))
- [ ] Product approve
- [ ] Design approve
- [ ] Engineering release approve
## Prod promote
- [ ] deploy_redhat_catalog triggered
- [ ] Post-deploy verification
Related documentation
Out of scope
- Automating UAT (Playwright covers regression; UAT stays human)
- Legal/compliance sign-off (separate security program)