# 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.