Add low/base/high demand forecasts, service objectives with timestamped observations, and workload operations labor for resource:tenant:coulomb:coulomb-social.
3.3 KiB
3.3 KiB
Service objectives and usage observations — coulomb-social (2026-08)
| Field | Value |
|---|---|
| Resource | resource:tenant:coulomb:coulomb-social |
| Workplan | CSOC-WP-0005-T02 |
| Created | 2026-08-12T09:03:47Z |
| Machine record | service-objectives-and-observations-2026-08.json |
Service objectives (application-owned)
These are planning requirements for evaluating infrastructure options and forecast error — not external contractual SLAs.
| Domain | Objective | Notes |
|---|---|---|
| Availability | 99.5% monthly for app HTTPS | Excludes scheduled maintenance and pure dependency outages |
| Latency | /healthz p99 ≤ 500 ms |
Synthetic-friendly |
| Latency | Auth HTML p95 ≤ 1.5 s | App home, session pages |
| Latency | Space markdown p95 ≤ 3 s | Includes Forgejo fetch; cold cache separate |
| Recovery | RPO ≤ 60 min, RTO ≤ 4 h | DB via apps-pg; content via Forgejo policy |
| Retention | DB backups ≥ 30 days | Executed by platform; app requires recoverability |
| Retention | App logs ≥ 14 days | Platform log sink when wired |
| Isolation | tenant_id filter + instance-per-client |
No cross-tenant list/detail |
| Auth | NetKingdom OIDC; no local passwords | ADR-0001 |
| Content safety | Sanitized markdown HTML | ADR-0002 |
Dependency inheritance (not double-owned)
| Dependency | What we inherit |
|---|---|
| apps-pg | Physical DB backup/restore mechanics |
| reef-railiance k3s | Node/pod availability |
| Forgejo | Markdown durability and git history |
| KeyCape / Authelia | Sign-in path availability |
Observations (timestamped, non-secret)
| Measure | Value | When | Authority |
|---|---|---|---|
| public_healthz | ok | 2026-08-12T09:03:47Z | curl app.coulomb.social |
| public_landing_http_status | 200 | 2026-08-12T09:03:47Z | curl |
| demo_fixture_raw_bytes | 586 | 2026-08-12T09:03:47Z | Forgejo public raw |
| declared_replicas | 1 | 2026-08-12 | railiance-apps chart |
| declared_cpu_request_millicores | 100 | 2026-08-12 | chart |
| declared_memory_request_mi | 256 | 2026-08-12 | chart |
| declared_cpu_limit_millicores | 1000 | 2026-08-12 | chart |
| declared_memory_limit_mi | 1024 | 2026-08-12 | chart |
| media_persistence_enabled | false | 2026-08-12 | chart |
| helm_image_tag | 7fcd0cf |
2026-08-12 | helm values |
| portfolio_ready_replicas | 1 | 2026-08-11 | RESOURCE-WP-0003 discovery |
| commissioned_on | 2026-08-09 | inventory | resource-control |
| app_database_gb_logical | unknown | 2026-08-12 | needs apps-pg measure |
| production_member_count | unknown | 2026-08-12 | needs prod DB shell |
| observed_cpu/memory | unknown | 2026-08-12 | cluster metrics authority |
Explicit unknown is preferred over invented utilization. Cluster samples
belong in railiance-cluster evidence; logical DB size may be published here
once an operator can run a non-secret pg_database_size (or app management
command) without credentials in git.
Forecast error measurement
After each month, compare demand proxies (T01) to:
- request/login counts from ingress or app metrics (when exported),
- logical DB size,
- member/space counts from app DB,
- operator hours from T03.
Record actuals as a dated observation append (new file or JSON revision), never rewrite prior observations.