Skip to content

ADR 0009: Static Site Hosting — COS + EdgeOne CDN (Revised 2026-08-06)

Status

Accepted (Revised)

Date

2026-07-27 (original) / 2026-08-06 (revised)

Context

OVES hosts 23 mkdocs documentation sites on Cloudflare Pages with Cloudflare Access + MS Teams OAuth. Migration targets:

  • Hosting: Cloudflare Pages → Tencent-native platform
  • Auth: MS Teams → WeCom OAuth (+ Keycloak for non-WeCom users)

Three platforms evaluated. Two rejected:

EdgeOne Pages — REJECTED

Per official docs (edgeone.cloud.tencent.com/pages/document/162936836982489088): China-tier default domain preview links expire after 3 hours. Tested 2026-08-05: .zh-cn.edgeone.cool not accessible by China colleagues; *.edgeone.cool token-based only.

COS Presigned URLs — REJECTED for serving

COS serves HTML as file downloads. response-content-type=text/html also fails (InternalError). COS is an object store, not a web server.

CloudStudio — SUPERSEDED (was accepted as interim; replaced by EdgeOne CDN 2026-08-10)

Deploys full directories, renders HTML properly, multi-page nav works, China + international access verified.

Decision

COS is the universal document store. EdgeOne CDN (personal plan ¥9.9/mo) serves 5 subdomains from a single COS bucket.

SOURCE           STORAGE              SERVE                  ACCESS
──────           ───────              ─────                  ──────
GitHub mkdocs
WorkBuddy HTML ──→ COS (permanent) ──→ EdgeOne CDN ──→ WeCom group
Presentation                              *.agentos-app.net
decks
                                         │
                                    EdgeOne CDN (after ICP)
                                    [doc-type].omnivoltaic.cn
                                    Edge Functions: WeCom SSO

COS Structure

oves-docs-bucket-1437812500/
├── internal/    → internal.docs.omnivoltaic.cn → CDN origin: /internal/
├── external/    → external.docs.omnivoltaic.cn → CDN origin: /external/
├── adhoc/       → adhoc.docs.omnivoltaic.cn    → CDN origin: /adhoc/
└── decks/       → decks.omnivoltaic.cn         → CDN origin: /decks/

Interim vs Final

Layer Pre-ICP Post-ICP
Storage COS (same) COS (same)
Serve EdgeOne CDN docs.omnivoltaic.cn
Domain Platform-generated [doc-type].omnivoltaic.cn
Auth Link-based sharing Edge Functions (WeCom + Keycloak)

Consequences

Benefits

  • COS as single source of truth — all doc types, one lifecycle policy
  • No rebuild on serving change — artifacts persist; swap CDN origin
  • Per-type auth via subdomain Edge Functions
  • China + international access ✅ (verified 2026-08-05)

Trade-offs

  • ICP required for omnivoltaic.cn (in progress)
  • Branded URLs: docs.omnivoltaic.cn
  • COS prefix discipline required

Verified (2026-08-05)

Claim Status
COS upload from WorkBuddy ✅
EdgeOne CDN multi-site deploy (5 subdomains) ✅
China + international access ✅ (Global nodes)
EdgeOne Pages China tier (3hr expiry) ✅ Confirmed
COS presigned URL HTML rendering ❌

Supersedes

ADR 0006 — hosting and auth portions only.