```plaintext %% Internal Registry for CI/CD (ADR-0020) %% Flowchart showing dual-path for external vs internal access flowchart TB subgraph external["🌐 External Access"] internet["Internet"] cloudflare["☁️ Cloudflare
⚠️ 100MB upload limit"] external_url["git.daviestechlabs.io"] end subgraph internal["🏠 Internal Access"] internal_url["registry.lab.daviestechlabs.io
✅ No upload limits"] end subgraph gitea["📦 Gitea Instance"] direction TB git_server["Git Server"] docker_registry["Docker Registry"] pypi_registry["PyPI Registry"] end subgraph runners["🏃 CI/CD Runners"] gitea_runner["Gitea Actions Runner
(in-cluster)"] end subgraph operations["📋 Operations"] small_ops["Small Operations
• git clone/push
• pip install
• docker pull"] large_ops["Large Uploads
• docker push (20GB+)
• pypi upload"] end %% External path (limited) internet --> cloudflare cloudflare -->|"100MB limit"| external_url external_url --> gitea small_ops --> cloudflare %% Internal path (unlimited) gitea_runner -->|"Direct"| internal_url internal_url --> gitea large_ops --> internal_url classDef external fill:#e74c3c,color:white classDef internal fill:#27ae60,color:white classDef gitea fill:#f39c12,color:black classDef runner fill:#3498db,color:white class internet,cloudflare,external_url external class internal_url internal class git_server,docker_registry,pypi_registry gitea class gitea_runner runner ```