Add low/base/high demand forecasts, service objectives with timestamped observations, and workload operations labor for resource:tenant:coulomb:coulomb-social.
3.6 KiB
3.6 KiB
Workload demand forecast — coulomb-social (2026-08)
| Field | Value |
|---|---|
| Resource | resource:tenant:coulomb:coulomb-social |
| Workplan | CSOC-WP-0005-T01 |
| Forecast version | csoc-demand-2026-08-v1 |
| Created | 2026-08-12T09:03:47Z |
| Machine record | demand-forecast-2026-08.json |
Scope
Demand for this production instance (Coulomb reference tenant on Railiance). Deployment shape is instance-per-client (DR-1 C): future external customers are separate instances and separate resource ids — they are not folded into the high scenario.
| Case | What it models |
|---|---|
| low | Current parallel-host posture: few operators, Bubble still full product on apex |
| base | Coulomb community day-to-day on the rebuild (still one tenant) |
| high | Full Bubble-parity load on this Coulomb instance (HA-ish replicas/resources) |
Proxies (stable units)
| Proxy | Unit | Notes |
|---|---|---|
| active_tenants | count | Expected 1 for this instance |
| active_members | MAU-ish Member count | App-owned |
| http_requests_per_month | count | App Service ingress |
| oidc_logins_per_month | count | Successful app logins |
| background_jobs_per_month | count | 0 until workers exist |
| app_database_gb | GB logical | coulomb_social_db on apps-pg |
| stored_media_gb | GB | App-owned binaries only |
| forgejo_content_gb_bound | GB | Attribution for space markdown on shared Forgejo |
| ingress_gb / egress_gb | GB/month | App path only |
| cpu/memory request·limit | mCPU / Mi | Declared K8s requirements |
| operator_hours_per_month | hours | Workload labor (T03) |
Scenario table (monthly)
| Proxy | low | base | high |
|---|---|---|---|
| active_tenants | 1 | 1 | 1 |
| active_members | 5 | 50 | 500 |
| http_requests | 5 000 | 150 000 | 2 000 000 |
| oidc_logins | 80 | 1 500 | 20 000 |
| background_jobs | 0 | 0 | 5 000 |
| app_database_gb | 0.1 | 1 | 10 |
| DB growth %/mo | 5 | 10 | 15 |
| stored_media_gb | 0 | 2 | 50 |
| forgejo_content_gb_bound | 0.01 | 0.5 | 20 |
| ingress_gb | 0.5 | 5 | 40 |
| egress_gb | 1 | 15 | 120 |
| cpu request (m) | 100 | 200 | 500 |
| mem request (Mi) | 256 | 512 | 1024 |
| replicas | 1 | 1 | 2 |
| operator h/mo | 2 | 4 | 8 |
| labor €/mo @ €60/h | 120 | 240 | 480 |
Infrastructure EUR is not invented here. Cost joins should treat infrastructure as an allocated share of cluster, apps-pg, ingress, and identity platform once those owners and fin-hub supply figures.
Capacity floor (current deploy declaration)
From railiance-apps chart defaults (production values do not override
resources as of 2026-08):
| Dimension | Value |
|---|---|
| replicas | 1 |
| cpu request / limit | 100m / 1000m |
| memory request / limit | 256Mi / 1Gi |
| media PV | disabled |
| Image tag (values) | 7fcd0cf (railiance-apps helm values; may lag git HEAD) |
How resource-control should use this
- Pick scenario band from observed MAU / requests (or default low until Bubble migration starts).
- Feed proxies into monthly forecast/actual control (null infrastructure until platform prices exist).
- Attribute Forgejo-bound content via
forgejo_content_gb_boundwithout double-counting storage in the app resource. - Recalibrate after three comparable months (MAPE on members, requests, DB GB, labor hours).
Assumptions and falsifiability
See JSON assumptions array. Primary falsifiers after each calendar month:
- measured
active_membersoutside the active scenario band by >2× app_database_gbgrowth vs declared growth %- operator hours vs T03 labor log