# Phase 8: Gitea CI - Discussion Log

> **Audit trail only.** Do not use as input to planning, research, or execution agents.
> Decisions are captured in CONTEXT.md — this log preserves the alternatives considered.

**Date:** 2026-06-11
**Phase:** 8-Gitea CI
**Areas discussed:** Dev-stack bring-up in CI, Workflow topology & jobs, Docker image tag strategy, Failure artifacts & browser matrix

---

## Dev-stack bring-up in CI

| Option                           | Description                                                                                                                                         | Selected |
| -------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------- | -------- |
| Bare processes + service MariaDB | MariaDB as a Gitea service container; API as background `pnpm dev:api` with DEV_AUTH_BYPASS; Playwright webServer starts Vite. No docker-in-docker. | ✓        |
| docker compose dev override      | Run docker-compose.yml + dev override inside the runner; adds image-build time + docker-in-docker.                                                  |          |
| Production image for harness     | Build prod image, run harness against API-served PWA on :3000; diverges from Phase 7 dev-server contract.                                           |          |

**User's choice:** Bare processes + service MariaDB
**Notes:** Reuses the MariaDB service container already needed by the API-integration tests; matches the Phase 7 harness contract exactly.

---

## Workflow topology & jobs

| Option                  | Description                                                                                            | Selected |
| ----------------------- | ------------------------------------------------------------------------------------------------------ | -------- |
| One file, parallel jobs | Single workflow; PR→main runs fast-checks in parallel with integration + harness; push→main publishes. | ✓        |
| Two files               | Separate ci.yml + publish.yml; cleaner split, duplicated setup.                                        |          |
| One file, linear job    | Single sequential job; simplest, slowest feedback.                                                     |          |

**User's choice:** One file, parallel jobs
**Notes:** Fast feedback prioritized; minor setup duplication across jobs accepted.

---

## Docker image tag strategy

| Option                                | Description                                          | Selected |
| ------------------------------------- | ---------------------------------------------------- | -------- |
| latest + short SHA                    | :latest + :<short-sha>                               |          |
| Short SHA only                        | Immutable per-commit only                            |          |
| latest only                           | Single moving tag                                    |          |
| semver from package.json              | Version field + latest                               |          |
| **latest + milestone short (custom)** | :latest + :<milestone>-<shortsha>, e.g. v1.1-4303a1b | ✓        |

**User's choice:** latest + `v1.1-4303a1b` (milestone prefix + short SHA), confirmed in follow-up over a 3-tag variant and a no-milestone variant.
**Notes:** Milestone string read from PROJECT.md/ROADMAP, not hardcoded; SHA tag immutable for rollback.

---

## Failure artifacts & browser matrix

| Option                            | Description                                                                  | Selected |
| --------------------------------- | ---------------------------------------------------------------------------- | -------- |
| Upload on failure + both profiles | iPhone/WebKit + Pixel/Chromium; upload traces/screenshots/videos on failure. | ✓        |
| Upload on failure + Chromium only | Pixel/Chromium only; faster, loses iOS-engine coverage.                      |          |
| Both profiles, no artifacts       | Full matrix, log-only failures.                                              |          |

**User's choice:** Upload on failure + both profiles
**Notes:** Full mobile coverage + debuggable failures. `reporter: 'github'` may not render in Gitea — verify in runner probe, fall back if needed.

---

## Claude's Discretion

- Exact job names/step ordering, pnpm cache key, fast-checks split.
- API launch mechanism (`pnpm dev:api` vs built `node dist`) as long as `:3000` is reliably ready under DEV_AUTH_BYPASS.
- Registry hostname / image repo path.

## Deferred Ideas

- ROADMAP status conflict (line 29 "completed" vs line 204 "Not started", no artifacts) — bookkeeping fix, not Phase 8 scope.
