Phase 8 of the omantel handover (#369) needs an automated E2E that proves
DoD: omantel.omani.works runs as a fully self-sufficient Sovereign with
zero contabo dependency post-handover. Today this is a SCAFFOLD — when
Phase 4/6/7 land, dispatching the new workflow against a live omantel is
the entire Phase 8.
Canonical seam (anti-duplication, per memory/feedback_anti_duplication_seam_first.md):
- tests/e2e/playwright/tests/ ← mirror of sovereign-wizard.spec.ts shape
(NOT specs/ as the issue body said — actual repo path is tests/)
- tests/e2e/playwright/playwright.config.ts (BASE_URL handling, retries,
workers=1, reporter=list) — reused as-is
- tests/e2e/playwright/tests/_helpers.ts:reachable() — reused for the
pre-flight skip-when-unreachable pattern
- .github/workflows/playwright-smoke.yaml — workflow shape (checkout v4,
setup-node v4, npm install, playwright install --with-deps chromium,
upload-artifact on failure) — mirrored, NOT duplicated
What ships:
- tests/e2e/playwright/tests/omantel-handover.spec.ts (NEW, 6 tests):
1. sovereign Ready + 23/23 blueprints
2. all bp-* HelmReleases Ready=True
3. catalyst-platform self-hosts (healthz + dashboard "23 / 23 ready")
4. vendor-agnostic Object Storage (post-#425 canonical secret name
flux-system/object-storage — NOT hetzner-object-storage)
5. dig +trace omantel.omani.works ends at omantel NS, not contabo
6. zero contabo dependency (omantel /api/healthz keeps returning 200)
Self-skips when OMANTEL_BASE_URL/OMANTEL_API_BASE/OPERATOR_BEARER unset.
- .github/workflows/omantel-e2e-handover.yaml (NEW):
workflow_dispatch ONLY (no schedule cron — per CLAUDE.md "every workflow
MUST be event-driven, NEVER scheduled"). Inputs let the operator override
base URLs at dispatch time.
- docs/omantel-handover-wbs.md:
new §10 "Phase 8 acceptance criteria (executable DoD)" — 6 bullets 1:1
with the spec test() blocks; §9 status row added for #429
(🟢 scaffold-shipped).
Local verification:
cd tests/e2e/playwright && npm install && \
npx playwright test --list tests/omantel-handover.spec.ts
→ 6 tests listed cleanly
npx playwright test tests/omantel-handover.spec.ts
→ 6 skipped (env vars unset, expected)
Out of scope (per #425 / #428 territory split):
- internal/hetzner/, infra/hetzner/, platform/velero/chart/,
clusters/.../34-velero.yaml — #425's vendor-agnostic sweep
- .github/workflows/check-vendor-coupling.yaml — #428's coupling guard
Co-authored-by: hatiyildiz <hatiyildiz@noreply.github.com>