coulomb-social/docs/resource-evidence/service-objectives-and-observations-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

72 lines
3.3 KiB
Markdown
Raw Permalink 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.

# 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:
1. request/login counts from ingress or app metrics (when exported),
2. logical DB size,
3. member/space counts from app DB,
4. operator hours from T03.
Record actuals as a dated observation append (new file or JSON revision), never
rewrite prior observations.