Auto-fix pass over the remaining Phase 8 (Gitea CI) code-review findings, run in an isolated worktree off main (post-#5). WR-01 was already resolved by the publish split (#5); this cleans up the rest.
Fix→re-review loop converged in 2 iterations — all five targeted findings verified RESOLVED, no regressions.
Fixes (5, atomic commits)
ID
File
Fix
WR-02
ci.yml (harness)
Upload playwright-report/ alongside test-results/ on failure — the HTML report was being built and discarded.
WR-03
publish.yml
Fail closed on empty GITHUB_SHA (: "${GITHUB_SHA:?…}" + set -euo pipefail) so it can never emit a malformed :v1.1- tag.
WR-04
publish.yml
Push the immutable :<milestone>-<sha> tag before:latest, with fail-fast — a failed push no longer leaves :latest advanced without a rollback tag.
WR-05
publish.yml
Bind REGISTRY_PAT via step env: and pipe with printf %s instead of template-interpolating the secret into the script body.
IN-01
0000_baseline.sql
Comment only — documents the >3072-byte UNIQUE indexes relying on MariaDB 11 long-unique HASH behavior. No schema change (migration is already applied).
Deferred
IN-02 (pnpm lint no-op) — intentionally left for Phase 13 (real ESLint gate is that phase's deliverable).
Verification
Both workflow YAMLs re-validated with yq; re-review confirmed no set -u regressions, correct step-level env: scoping, and no DDL change in the SQL.
## What
Auto-fix pass over the remaining Phase 8 (Gitea CI) code-review findings, run in an isolated worktree off `main` (post-#5). WR-01 was already resolved by the publish split (#5); this cleans up the rest.
Fix→re-review loop **converged in 2 iterations** — all five targeted findings verified RESOLVED, no regressions.
## Fixes (5, atomic commits)
| ID | File | Fix |
|----|------|-----|
| WR-02 | `ci.yml` (harness) | Upload `playwright-report/` alongside `test-results/` on failure — the HTML report was being built and discarded. |
| WR-03 | `publish.yml` | Fail closed on empty `GITHUB_SHA` (`: "${GITHUB_SHA:?…}"` + `set -euo pipefail`) so it can never emit a malformed `:v1.1-` tag. |
| WR-04 | `publish.yml` | Push the immutable `:<milestone>-<sha>` tag **before** `:latest`, with fail-fast — a failed push no longer leaves `:latest` advanced without a rollback tag. |
| WR-05 | `publish.yml` | Bind `REGISTRY_PAT` via step `env:` and pipe with `printf %s` instead of template-interpolating the secret into the script body. |
| IN-01 | `0000_baseline.sql` | **Comment only** — documents the >3072-byte UNIQUE indexes relying on MariaDB 11 long-unique HASH behavior. No schema change (migration is already applied).|
## Deferred
- **IN-02** (`pnpm lint` no-op) — intentionally left for **Phase 13** (real ESLint gate is that phase's deliverable).
## Verification
Both workflow YAMLs re-validated with `yq`; re-review confirmed no `set -u` regressions, correct step-level `env:` scoping, and no DDL change in the SQL.
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
What
Auto-fix pass over the remaining Phase 8 (Gitea CI) code-review findings, run in an isolated worktree off
main(post-#5). WR-01 was already resolved by the publish split (#5); this cleans up the rest.Fix→re-review loop converged in 2 iterations — all five targeted findings verified RESOLVED, no regressions.
Fixes (5, atomic commits)
ci.yml(harness)playwright-report/alongsidetest-results/on failure — the HTML report was being built and discarded.publish.ymlGITHUB_SHA(: "${GITHUB_SHA:?…}"+set -euo pipefail) so it can never emit a malformed:v1.1-tag.publish.yml:<milestone>-<sha>tag before:latest, with fail-fast — a failed push no longer leaves:latestadvanced without a rollback tag.publish.ymlREGISTRY_PATvia stepenv:and pipe withprintf %sinstead of template-interpolating the secret into the script body.0000_baseline.sqlDeferred
pnpm lintno-op) — intentionally left for Phase 13 (real ESLint gate is that phase's deliverable).Verification
Both workflow YAMLs re-validated with
yq; re-review confirmed noset -uregressions, correct step-levelenv:scoping, and no DDL change in the SQL.