diff --git a/.gitea/workflows/ci-deploy.yml b/.gitea/workflows/ci-deploy.yml index 0d78c25..59c542a 100644 --- a/.gitea/workflows/ci-deploy.yml +++ b/.gitea/workflows/ci-deploy.yml @@ -329,6 +329,16 @@ jobs: echo "Browser smoke process crashed with SIGSEGV — retrying the unchanged suite once..." npm run test:e2e + - name: Preserve browser diagnostics + if: always() + uses: actions/upload-artifact@v3 + with: + name: browser-diagnostics + path: | + job-tracker-ui/.artifacts/playwright-results.json + job-tracker-ui/test-results + retention-days: 7 + deploy: needs: test if: github.event_name == 'push' && github.ref == 'refs/heads/main' diff --git a/docs/infrastructure/2026-10-20-browser-ci-diagnostics.md b/docs/infrastructure/2026-10-20-browser-ci-diagnostics.md new file mode 100644 index 0000000..fef52ac --- /dev/null +++ b/docs/infrastructure/2026-10-20-browser-ci-diagnostics.md @@ -0,0 +1,9 @@ +# Browser CI diagnostic repair — 20 October 2026 + +Run 821, attempt 2, tested main commit `2278473763848254c12d65c1062109eb1b7dc4cf`. Its backend build, 1,054 backend tests, 824 frontend tests, dependency policy, lint, TypeScript and production frontend build completed before the browser step. The browser step began at 20:37:52 UTC on 17 October and ended unsuccessfully at 20:51:55 UTC. The downloadable log ends at “Running 331 tests using 1 worker”, without an assertion, timeout or process-exit diagnostic. Deployment was skipped. Subsequent successful scheduled backup jobs do not constitute a successful application deployment. + +The existing GitHub-only Playwright reporter does not emit ordinary per-test progress. The repair adds the built-in list reporter alongside GitHub annotations and a JSON report. An always-run artifact step retains the JSON result and existing failure screenshots/traces for seven days using Gitea-compatible upload-artifact v3. No tests, assertions, timeouts, retries, browser projects, authorization checks or deployment conditions are weakened. This is a diagnostic repair; the underlying termination cause is still unproven and requires the instrumented run. + +Verification: all 331 tests in 53 files are still discovered. A separate temporary probe deliberately failed one ordinary assertion: the process returned 1, printed the failing test name, wrote a trace and persisted one unexpected failure and zero skipped cases in JSON. The probe is an isolated reporter self-check, not an application regression result or committed test. Application/test TypeScript passed. Lint and final hygiene are recorded before publication; the next main CI run remains authoritative for application regression and deployment. + +Unfinished Phase 7 work in the original checkout is excluded. The owner has explicitly authorized this main deployment despite existing release qualifications. The temporary dev-only braces exception retains its original expiry after 31 October 2026; other dependency findings, outstanding production gates and P5-13 withholding remain unchanged. The requested Qwen model is downloaded but is not activated by this change. diff --git a/job-tracker-ui/playwright.config.ts b/job-tracker-ui/playwright.config.ts index e075d7b..f15f1d6 100644 --- a/job-tracker-ui/playwright.config.ts +++ b/job-tracker-ui/playwright.config.ts @@ -20,7 +20,9 @@ export default defineConfig({ workers: 1, retries: process.env.CI ? 1 : 0, metadata: { isolatedDataRoot: reuseServers ? null : dataRoot }, - reporter: process.env.CI ? "github" : "list", + reporter: process.env.CI + ? [["list"], ["github"], ["json", { outputFile: ".artifacts/playwright-results.json" }]] + : "list", use: { baseURL: appUrl, trace: "retain-on-failure",