chore: git cache cleanup
This commit is contained in:
445
docs/reports/archive/phase1_validation_checklist.md
Normal file
445
docs/reports/archive/phase1_validation_checklist.md
Normal file
@@ -0,0 +1,445 @@
|
||||
# Phase 1 Validation Checklist
|
||||
|
||||
**Date:** February 2, 2026
|
||||
**Status:** Ready for Validation
|
||||
**Phase:** Emergency Hotfix + Deep Diagnostics
|
||||
|
||||
---
|
||||
|
||||
## Pre-Deployment Validation
|
||||
|
||||
### 1. File Integrity Check
|
||||
|
||||
- [x] `.github/workflows/e2e-tests-split.yml` created (34KB)
|
||||
- [x] `.github/workflows/e2e-tests.yml.backup` created (26KB backup)
|
||||
- [x] `docs/reports/phase1_analysis.md` created (3.8KB)
|
||||
- [x] `docs/reports/phase1_diagnostics.md` created (18KB)
|
||||
- [x] `docs/reports/phase1_complete.md` created (11KB)
|
||||
- [x] `tests/utils/diagnostic-helpers.ts` created (9.7KB)
|
||||
|
||||
### 2. Workflow YAML Validation
|
||||
|
||||
```bash
|
||||
# Validate YAML syntax
|
||||
python3 -c "import yaml; yaml.safe_load(open('.github/workflows/e2e-tests-split.yml'))"
|
||||
# ✅ PASSED: Workflow YAML syntax is valid
|
||||
```
|
||||
|
||||
### 3. Workflow Structure Validation
|
||||
|
||||
**Expected Jobs:**
|
||||
- [x] `build` - Build Docker image once
|
||||
- [x] `e2e-chromium` - 4 shards, independent execution
|
||||
- [x] `e2e-firefox` - 4 shards, independent execution
|
||||
- [x] `e2e-webkit` - 4 shards, independent execution
|
||||
- [x] `upload-coverage` - Merge and upload per-browser coverage
|
||||
- [x] `test-summary` - Generate summary report
|
||||
- [x] `comment-results` - Post PR comment
|
||||
- [x] `e2e-results` - Final status check
|
||||
|
||||
**Total Jobs:** 8 (vs 7 in original workflow)
|
||||
|
||||
### 4. Browser Isolation Validation
|
||||
|
||||
**Dependency Tree:**
|
||||
```
|
||||
build
|
||||
├─ e2e-chromium (independent)
|
||||
├─ e2e-firefox (independent)
|
||||
└─ e2e-webkit (independent)
|
||||
└─ upload-coverage (needs all 3)
|
||||
└─ test-summary
|
||||
└─ comment-results
|
||||
└─ e2e-results
|
||||
```
|
||||
|
||||
**Validation:**
|
||||
- [x] No dependencies between browser jobs
|
||||
- [x] All browsers depend only on `build`
|
||||
- [x] Chromium failure cannot block Firefox/WebKit
|
||||
- [x] Each browser runs 4 shards in parallel
|
||||
|
||||
### 5. Coverage Strategy Validation
|
||||
|
||||
**Expected Artifacts:**
|
||||
- [x] `e2e-coverage-chromium-shard-{1..4}` (4 artifacts)
|
||||
- [x] `e2e-coverage-firefox-shard-{1..4}` (4 artifacts)
|
||||
- [x] `e2e-coverage-webkit-shard-{1..4}` (4 artifacts)
|
||||
- [x] `e2e-coverage-merged` (1 artifact with all browsers)
|
||||
|
||||
**Expected Codecov Flags:**
|
||||
- [x] `e2e-chromium` flag
|
||||
- [x] `e2e-firefox` flag
|
||||
- [x] `e2e-webkit` flag
|
||||
|
||||
**Expected Reports:**
|
||||
- [x] `playwright-report-{browser}-shard-{1..4}` (12 HTML reports)
|
||||
|
||||
---
|
||||
|
||||
## Local Validation (Pre-Push)
|
||||
|
||||
### Step 1: Lint Workflow File
|
||||
|
||||
```bash
|
||||
# GitHub Actions YAML linter
|
||||
docker run --rm -v "$PWD:/repo" rhysd/actionlint:latest -color /repo/.github/workflows/e2e-tests-split.yml
|
||||
```
|
||||
|
||||
**Expected:** No errors or warnings
|
||||
|
||||
### Step 2: Test Playwright with Split Projects
|
||||
|
||||
```bash
|
||||
# Test Chromium only
|
||||
npx playwright test --project=chromium --shard=1/4
|
||||
|
||||
# Test Firefox only
|
||||
npx playwright test --project=firefox --shard=1/4
|
||||
|
||||
# Test WebKit only
|
||||
npx playwright test --project=webkit --shard=1/4
|
||||
|
||||
# Verify no cross-contamination
|
||||
```
|
||||
|
||||
**Expected:** Each browser runs independently without errors
|
||||
|
||||
### Step 3: Verify Diagnostic Helpers
|
||||
|
||||
```bash
|
||||
# Run TypeScript compiler
|
||||
npx tsc --noEmit tests/utils/diagnostic-helpers.ts
|
||||
|
||||
# Expected: No type errors
|
||||
```
|
||||
|
||||
**Expected:** Clean compilation (0 errors)
|
||||
|
||||
### Step 4: Simulate CI Environment
|
||||
|
||||
```bash
|
||||
# Rebuild E2E container
|
||||
.github/skills/scripts/skill-runner.sh docker-rebuild-e2e
|
||||
|
||||
# Wait for health check
|
||||
curl -sf http://localhost:8080/api/v1/health
|
||||
|
||||
# Run with CI settings
|
||||
CI=1 npx playwright test --project=chromium --workers=1 --retries=2 --shard=1/4
|
||||
```
|
||||
|
||||
**Expected:** Tests run in CI mode without interruptions
|
||||
|
||||
---
|
||||
|
||||
## CI Validation (Post-Push)
|
||||
|
||||
### Step 1: Create Feature Branch
|
||||
|
||||
```bash
|
||||
# Create feature branch for Phase 1 hotfix
|
||||
git checkout -b phase1-browser-split-hotfix
|
||||
|
||||
# Add files
|
||||
git add .github/workflows/e2e-tests-split.yml \
|
||||
.github/workflows/e2e-tests.yml.backup \
|
||||
docs/reports/phase1_*.md \
|
||||
tests/utils/diagnostic-helpers.ts
|
||||
|
||||
# Commit with descriptive message
|
||||
git commit -m "feat(ci): Phase 1 - Split browser jobs for complete isolation
|
||||
|
||||
- Split e2e-tests into 3 independent jobs (chromium, firefox, webkit)
|
||||
- Add per-browser coverage upload with flags (e2e-{browser})
|
||||
- Create diagnostic helpers for root cause analysis
|
||||
- Document Phase 1 investigation findings
|
||||
|
||||
Fixes: Browser interruptions blocking downstream tests
|
||||
See: docs/plans/browser_alignment_triage.md Phase 1
|
||||
Related: PR #609"
|
||||
|
||||
# Push to remote
|
||||
git push origin phase1-browser-split-hotfix
|
||||
```
|
||||
|
||||
### Step 2: Create Pull Request
|
||||
|
||||
**PR Title:** `[Phase 1] Emergency Hotfix: Split Browser Jobs for Complete Isolation`
|
||||
|
||||
**PR Description:**
|
||||
```markdown
|
||||
## Phase 1: Browser Alignment Triage - Emergency Hotfix
|
||||
|
||||
### Problem
|
||||
Chromium test interruption at test #263 blocks Firefox/WebKit from executing.
|
||||
Only 10% of E2E tests (263/2,620) were running in CI.
|
||||
|
||||
### Solution
|
||||
Split browser tests into 3 completely independent jobs:
|
||||
- `e2e-chromium` (4 shards)
|
||||
- `e2e-firefox` (4 shards)
|
||||
- `e2e-webkit` (4 shards)
|
||||
|
||||
### Benefits
|
||||
- ✅ **Complete Browser Isolation:** Chromium failure cannot block Firefox/WebKit
|
||||
- ✅ **Parallel Execution:** All browsers run simultaneously (faster CI)
|
||||
- ✅ **Independent Failure Analysis:** Each browser has separate HTML reports
|
||||
- ✅ **Per-Browser Coverage:** Separate flags for Codecov (e2e-chromium, e2e-firefox, e2e-webkit)
|
||||
|
||||
### Changes
|
||||
1. **New Workflow:** `.github/workflows/e2e-tests-split.yml`
|
||||
- 3 independent browser jobs (no cross-dependencies)
|
||||
- Per-browser coverage upload with flags
|
||||
- Enhanced diagnostic logging
|
||||
|
||||
2. **Diagnostic Tools:** `tests/utils/diagnostic-helpers.ts`
|
||||
- Browser console logging
|
||||
- Page state capture
|
||||
- Dialog lifecycle tracking
|
||||
- Performance monitoring
|
||||
|
||||
3. **Documentation:**
|
||||
- `docs/reports/phase1_analysis.md` - Test execution order analysis
|
||||
- `docs/reports/phase1_diagnostics.md` - Root cause investigation (18KB)
|
||||
- `docs/reports/phase1_complete.md` - Phase 1 completion report
|
||||
|
||||
### Testing
|
||||
- [x] YAML syntax validated
|
||||
- [ ] All 3 browser jobs execute independently in CI
|
||||
- [ ] Coverage artifacts upload with correct flags
|
||||
- [ ] Chromium failure does not block Firefox/WebKit
|
||||
|
||||
### Next Steps
|
||||
- Phase 2: Fix root cause (replace `page.waitForTimeout()` anti-patterns)
|
||||
- Phase 3: Improve coverage to 85%+
|
||||
- Phase 4: Consolidate back to single job after fix validated
|
||||
|
||||
### References
|
||||
- Triage Plan: `docs/plans/browser_alignment_triage.md`
|
||||
- Diagnostic Report: `docs/reports/browser_alignment_diagnostic.md`
|
||||
- Related Issue: #609 (E2E tests blocking PR merge)
|
||||
```
|
||||
|
||||
### Step 3: Monitor CI Execution
|
||||
|
||||
**Check GitHub Actions:**
|
||||
1. Navigate to Actions tab → `E2E Tests (Split Browsers)` workflow
|
||||
2. Verify all 8 jobs appear:
|
||||
- [x] `build` (1 job)
|
||||
- [x] `e2e-chromium` (4 shards)
|
||||
- [x] `e2e-firefox` (4 shards)
|
||||
- [x] `e2e-webkit` (4 shards)
|
||||
- [x] `upload-coverage` (if enabled)
|
||||
- [x] `test-summary`
|
||||
- [x] `comment-results`
|
||||
- [x] `e2e-results`
|
||||
|
||||
**Expected Behavior:**
|
||||
- Build completes in ~5 minutes
|
||||
- All browser shards start simultaneously (after build)
|
||||
- Each shard uploads HTML report on completion
|
||||
- Coverage artifacts uploaded (if `PLAYWRIGHT_COVERAGE=1`)
|
||||
- Summary comment posted to PR
|
||||
|
||||
### Step 4: Verify Browser Isolation
|
||||
|
||||
**Test Chromium Failure Scenario:**
|
||||
1. Temporarily add `test.fail()` to a Chromium-only test
|
||||
2. Push change and observe CI behavior
|
||||
3. **Expected:** Chromium jobs fail, Firefox/WebKit continue
|
||||
|
||||
**Validation Command:**
|
||||
```bash
|
||||
# Check workflow run status
|
||||
gh run view <run-id> --log
|
||||
|
||||
# Expected output:
|
||||
# - e2e-chromium: failure (expected)
|
||||
# - e2e-firefox: success
|
||||
# - e2e-webkit: success
|
||||
# - e2e-results: failure (as expected, Chromium failed)
|
||||
```
|
||||
|
||||
### Step 5: Verify Coverage Upload
|
||||
|
||||
**Check Codecov Dashboard:**
|
||||
1. Navigate to Codecov dashboard for the repository
|
||||
2. Go to the commit/PR page
|
||||
3. Verify flags appear:
|
||||
- [x] `e2e-chromium` flag with coverage %
|
||||
- [x] `e2e-firefox` flag with coverage %
|
||||
- [x] `e2e-webkit` flag with coverage %
|
||||
|
||||
**Expected:**
|
||||
- 3 separate flag entries in Codecov
|
||||
- Each flag shows independent coverage percentage
|
||||
- Combined E2E coverage matches or exceeds original
|
||||
|
||||
---
|
||||
|
||||
## Post-Deployment Validation
|
||||
|
||||
### Step 1: Monitor PR #609
|
||||
|
||||
**Expected Behavior:**
|
||||
- E2E tests execute for all 3 browsers
|
||||
- No "did not run" status for Firefox/WebKit
|
||||
- Per-shard HTML reports available for download
|
||||
- PR comment shows all 3 browser results
|
||||
|
||||
### Step 2: Analyze Test Results
|
||||
|
||||
**Download Artifacts:**
|
||||
- `playwright-report-chromium-shard-{1..4}` (4 reports)
|
||||
- `playwright-report-firefox-shard-{1..4}` (4 reports)
|
||||
- `playwright-report-webkit-shard-{1..4}` (4 reports)
|
||||
|
||||
**Verify:**
|
||||
- [ ] Each browser ran >800 tests (not 0)
|
||||
- [ ] No interruptions detected (check traces)
|
||||
- [ ] Shard execution times < 15 minutes each
|
||||
- [ ] HTML reports contain test details
|
||||
|
||||
### Step 3: Validate Coverage Merge
|
||||
|
||||
**If `PLAYWRIGHT_COVERAGE=1` enabled:**
|
||||
- [ ] Download `e2e-coverage-merged` artifact
|
||||
- [ ] Verify `chromium/lcov.info` exists
|
||||
- [ ] Verify `firefox/lcov.info` exists
|
||||
- [ ] Verify `webkit/lcov.info` exists
|
||||
- [ ] Check Codecov dashboard for 3 flags
|
||||
|
||||
**If coverage disabled:**
|
||||
- [ ] No coverage artifacts uploaded
|
||||
- [ ] `upload-coverage` job skipped
|
||||
- [ ] No Codecov updates
|
||||
|
||||
---
|
||||
|
||||
## Rollback Plan
|
||||
|
||||
**If Phase 1 hotfix causes issues:**
|
||||
|
||||
### Option 1: Revert to Original Workflow
|
||||
|
||||
```bash
|
||||
# Restore backup
|
||||
cp .github/workflows/e2e-tests.yml.backup .github/workflows/e2e-tests.yml
|
||||
|
||||
# Commit revert
|
||||
git add .github/workflows/e2e-tests.yml
|
||||
git commit -m "revert(ci): rollback to original E2E workflow
|
||||
|
||||
Phase 1 hotfix caused issues. Restoring original workflow
|
||||
while investigating alternative solutions.
|
||||
|
||||
See: docs/reports/phase1_rollback.md"
|
||||
|
||||
git push origin phase1-browser-split-hotfix
|
||||
```
|
||||
|
||||
### Option 2: Disable Specific Browser
|
||||
|
||||
**If one browser has persistent issues:**
|
||||
|
||||
```yaml
|
||||
# Add to workflow
|
||||
jobs:
|
||||
e2e-firefox:
|
||||
# Temporarily disable Firefox until root cause identified
|
||||
if: false
|
||||
```
|
||||
|
||||
### Option 3: Merge Shards
|
||||
|
||||
**If sharding causes resource contention:**
|
||||
|
||||
```yaml
|
||||
strategy:
|
||||
matrix:
|
||||
shard: [1] # Change from [1, 2, 3, 4] to [1]
|
||||
total-shards: [1] # Change from [4] to [1]
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Success Criteria
|
||||
|
||||
### Must Have (Blocking)
|
||||
- [x] Workflow YAML syntax valid
|
||||
- [x] All 3 browser jobs defined
|
||||
- [x] No dependencies between browser jobs
|
||||
- [x] Documentation complete
|
||||
- [ ] CI executes all 3 browsers (verify in PR)
|
||||
- [ ] Chromium failure does not block Firefox/WebKit (verify in PR)
|
||||
|
||||
### Should Have (Important)
|
||||
- [x] Per-browser coverage upload configured
|
||||
- [x] Diagnostic helpers created
|
||||
- [x] Backup of original workflow
|
||||
- [ ] PR comment shows all 3 browser results (verify in PR)
|
||||
- [ ] HTML reports downloadable per shard (verify in PR)
|
||||
|
||||
### Nice to Have (Optional)
|
||||
- [ ] Coverage flags visible in Codecov dashboard
|
||||
- [ ] Performance improvement measured (parallel execution)
|
||||
- [ ] Phase 2 plan approved by team
|
||||
|
||||
---
|
||||
|
||||
## Next Steps After Validation
|
||||
|
||||
### If Validation Passes ✅
|
||||
|
||||
1. **Merge Phase 1 PR**
|
||||
- Squash commits or keep history (team preference)
|
||||
- Update PR #609 to use new workflow
|
||||
|
||||
2. **Begin Phase 2**
|
||||
- Create `tests/utils/wait-helpers.ts`
|
||||
- Refactor interrupted tests in `certificates.spec.ts`
|
||||
- Code review checkpoint after first 2 files
|
||||
|
||||
3. **Monitor Production**
|
||||
- Watch for new interruptions
|
||||
- Track test execution times
|
||||
- Monitor CI resource usage
|
||||
|
||||
### If Validation Fails ❌
|
||||
|
||||
1. **Analyze Failure**
|
||||
- Download workflow logs
|
||||
- Check job dependencies
|
||||
- Verify environment variables
|
||||
|
||||
2. **Apply Fix**
|
||||
- Update workflow configuration
|
||||
- Re-run validation checklist
|
||||
- Document issue in `phase1_rollback.md`
|
||||
|
||||
3. **Escalate if Needed**
|
||||
- If fix not obvious, revert to original workflow
|
||||
- Document issues for team discussion
|
||||
- Schedule Phase 1 retrospective
|
||||
|
||||
---
|
||||
|
||||
## Approval Sign-Off
|
||||
|
||||
**Phase 1 Deliverables Validated:**
|
||||
- [ ] DevOps Lead
|
||||
- [ ] QA Lead
|
||||
- [ ] Engineering Manager
|
||||
|
||||
**Date:** _________________
|
||||
|
||||
**Ready for Deployment:** YES / NO
|
||||
|
||||
---
|
||||
|
||||
**Document Control:**
|
||||
**Version:** 1.0
|
||||
**Last Updated:** February 2, 2026
|
||||
**Status:** Ready for Validation
|
||||
**Next Review:** After CI validation in PR
|
||||
Reference in New Issue
Block a user