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 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 ≤ 500ms | Synthetic-friendly |
| Latency | Auth HTML p95 ≤ 1.5s | App home, session pages |
| Latency | Space markdown p95 ≤ 3s | Includes Forgejo fetch; cold cache separate |
| Recovery | RPO ≤ 60min, RTO ≤ 4h | DB via apps-pg; content via Forgejo policy |
| Retention | DB backups ≥ 30days | Executed by platform; app requires recoverability |
| Retention | App logs ≥ 14days | 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.