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.
This commit is contained in:
parent
b8154b8e7d
commit
c521adc2f9
10 changed files with 667 additions and 14 deletions
95
docs/resource-evidence/demand-forecast-2026-08.md
Normal file
95
docs/resource-evidence/demand-forecast-2026-08.md
Normal file
|
|
@ -0,0 +1,95 @@
|
|||
# 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
|
||||
|
||||
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
|
||||
Loading…
Add table
Add a link
Reference in a new issue