coulomb-social/docs/resource-evidence/demand-forecast-2026-08.md
tegwick c521adc2f9 Publish CSOC-WP-0005 resource demand and cost evidence
Add low/base/high demand forecasts, service objectives with timestamped
observations, and workload operations labor for resource:tenant:coulomb:coulomb-social.
2026-08-12 11:07:03 +02:00

95 lines
3.6 KiB
Markdown
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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 | 5000 | 150000 | 2000000 |
| oidc_logins | 80 | 1500 | 20000 |
| background_jobs | 0 | 0 | 5000 |
| 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
1. Pick scenario band from observed MAU / requests (or default **low** until
Bubble migration starts).
2. Feed proxies into monthly forecast/actual control (null infrastructure
until platform prices exist).
3. Attribute Forgejo-bound content via `forgejo_content_gb_bound` without
double-counting storage in the app resource.
4. 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_members` outside the active scenario band by >2×
- `app_database_gb` growth vs declared growth %
- operator hours vs T03 labor log