feat(portfolio): fold in RAILIANCE-WP-0016 apps-pg evidence
First delegated evidence from RESOURCE-WP-0003-T04 to land. railiance-platform delivered apps-pg capacity, utilization, consumers, and the apps-pg-dbbytes-v1 allocation driver, and correctly delivered no EUR. - data/resources/apps-pg.json: real capacity; allocation unattributed -> shared under apps-pg-dbbytes-v1; second consumer vergabe-teilnahme registered - data/control-cycle/apps-pg-2026-09-base.json: first operational control-cycle record in the repository - examples/control-cycle/apps-pg-*.json retired; the invented fixture collided with the real record's identifier - data/portfolio-coverage-2026-08-14.json: gap marked delivered with three residual unknowns still open The real evidence exposed a design gap in the T05 schema: v0.1 required a number for every cost field, so recording genuine usage without a booked cost meant inventing one. Schema 0.2 permits null costs, null unattributed_eur, a technical unattributed_share, and null measurements. Null is unknown, never zero; an unknown component makes the total null rather than the sum of the known parts; and the comparator classifies unknown amounts as data_quality instead of computing a variance. Existing 0.1 records are not rewritten. apps-pg is now measured (idle at 5.8% of volume) and attributed, and remains unpriced: delivered technical evidence does not create a booked cost. 86 tests pass. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
parent
b64b5683df
commit
17de8b831e
16 changed files with 908 additions and 71 deletions
69
data/control-cycle/apps-pg-2026-09-base.json
Normal file
69
data/control-cycle/apps-pg-2026-09-base.json
Normal file
|
|
@ -0,0 +1,69 @@
|
|||
{
|
||||
"schema_version": "0.2",
|
||||
"record_id": "forecast:apps-pg:2026-09:base:v1",
|
||||
"record_type": "forecast",
|
||||
"resource_id": "resource:railiance:apps-pg",
|
||||
"resource_class": "shared_platform_service",
|
||||
"period": "2026-09",
|
||||
"created_at": "2026-08-14T00:00:00Z",
|
||||
"scenario": "base",
|
||||
"forecast_ref": null,
|
||||
"revision_of": null,
|
||||
"usage_proxies": {
|
||||
"consumer_database_gb": { "value": 0.0155, "unit": "GiB" },
|
||||
"pgdata_gb": { "value": 0.5766, "unit": "GiB" },
|
||||
"wal_gb": { "value": 0.5469, "unit": "GiB" },
|
||||
"sessions": { "value": 7, "unit": "count" }
|
||||
},
|
||||
"capacity": {
|
||||
"model": "hybrid",
|
||||
"provisioned": {
|
||||
"storage": { "value": 10, "unit": "GiB" },
|
||||
"instances": { "value": 1, "unit": "count" },
|
||||
"max_connections": { "value": 100, "unit": "count" }
|
||||
},
|
||||
"used": {
|
||||
"storage": { "value": 0.5766, "unit": "GiB" },
|
||||
"instances": { "value": 1, "unit": "count" },
|
||||
"sessions": { "value": 7, "unit": "count" }
|
||||
}
|
||||
},
|
||||
"costs": {
|
||||
"currency": "EUR",
|
||||
"infrastructure": null,
|
||||
"internal_labor": 30.0,
|
||||
"external_labor": 0,
|
||||
"total": null,
|
||||
"booked_cost_refs": []
|
||||
},
|
||||
"allocation": {
|
||||
"method": "proportional",
|
||||
"driver": "database_gb",
|
||||
"method_version": "apps-pg-dbbytes-v1",
|
||||
"unattributed_eur": null,
|
||||
"unattributed_share": 0.948
|
||||
},
|
||||
"service_constraints": {
|
||||
"rpo_minutes": { "value": null, "unit": "minutes" },
|
||||
"rto_minutes": { "value": null, "unit": "minutes" }
|
||||
},
|
||||
"uncertainty": {
|
||||
"level": "high",
|
||||
"notes": [
|
||||
"First operational control-cycle record for this resource, from railiance-platform RAILIANCE-WP-0016 captured 2026-08-14T00:04:19Z",
|
||||
"Infrastructure cost is null: apps-pg is a share of resource:hosteurope:railiance01, whose booked price is unknown (RAIL-HO-WP-0008)",
|
||||
"Internal labour is 0.5 declared operator-hours per month converted at the EUR 60 per hour rate used in data/demand/platform-audit-storage.json; the hours are an estimate, not a timesheet",
|
||||
"Total is null because one component is unknown; it is not the sum of the known parts",
|
||||
"94.8 percent of used volume is WAL and engine catalogs attributed to platform:apps-pg-overhead, not to a consumer",
|
||||
"vergabe_db has never recorded a transaction, so its 0.4614 byte share reflects a reserved empty database rather than realised demand",
|
||||
"Five days of cluster life and no metrics retention: this is a snapshot carried forward, not a trend",
|
||||
"RPO is unbounded and RTO undefined — no ScheduledBackup exists and the cluster is not an Option A logical-dump target"
|
||||
]
|
||||
},
|
||||
"evidence": [
|
||||
"/home/worsch/railiance-platform/docs/evidence/RAILIANCE-WP-0016-apps-pg-observation.json",
|
||||
"/home/worsch/railiance-platform/docs/evidence/RAILIANCE-WP-0016-apps-pg-resource-evidence.md",
|
||||
"RAILIANCE-WP-0016",
|
||||
"data/resources/apps-pg.json"
|
||||
]
|
||||
}
|
||||
115
data/portfolio-coverage-2026-08-14.json
Normal file
115
data/portfolio-coverage-2026-08-14.json
Normal file
|
|
@ -0,0 +1,115 @@
|
|||
{
|
||||
"schema_version": "0.1",
|
||||
"observed_at": "2026-08-14T00:04:19Z",
|
||||
"inventory_records": 7,
|
||||
"coverage": [
|
||||
{
|
||||
"group": "helix-forge",
|
||||
"status": "covered-by-shared-forge",
|
||||
"resource_ids": [
|
||||
"resource:railiance:forgejo",
|
||||
"resource:railiance:reef-railiance:k3s",
|
||||
"resource:hosteurope:railiance01"
|
||||
]
|
||||
},
|
||||
{
|
||||
"group": "coulomb-social",
|
||||
"status": "covered",
|
||||
"resource_ids": [
|
||||
"resource:tenant:coulomb:coulomb-social",
|
||||
"resource:railiance:apps-pg",
|
||||
"resource:railiance:reef-railiance:k3s",
|
||||
"resource:hosteurope:railiance01"
|
||||
]
|
||||
},
|
||||
{
|
||||
"group": "shared-railiance",
|
||||
"status": "covered-substrate-and-selected-services",
|
||||
"resource_ids": [
|
||||
"resource:railiance:reef-railiance:k3s",
|
||||
"resource:railiance:forgejo",
|
||||
"resource:railiance:apps-pg",
|
||||
"resource:hosteurope:railiance01",
|
||||
"resource:platform:audit-storage"
|
||||
]
|
||||
},
|
||||
{
|
||||
"group": "representative-tenant",
|
||||
"status": "covered",
|
||||
"tenant_id": "tenant:friendly:binky",
|
||||
"resource_ids": [
|
||||
"resource:tenant:friendly:binky:rapp-qonto",
|
||||
"resource:railiance:reef-railiance:k3s",
|
||||
"resource:hosteurope:railiance01"
|
||||
]
|
||||
}
|
||||
],
|
||||
"owned_gaps": [
|
||||
{
|
||||
"owner": "railiance-infra",
|
||||
"gap": "Host Europe product, provider resource ID, account reference, country/region evidence, contract price, tax treatment, order date, renewal and cancellation dates",
|
||||
"delegated_workplan": "RAIL-HO-WP-0008",
|
||||
"state_hub_workplan_id": "7122657f-87c8-46b5-a725-a1af1ba0af12",
|
||||
"status": "open"
|
||||
},
|
||||
{
|
||||
"owner": "railiance-cluster",
|
||||
"gap": "cluster-wide requested/used capacity history, allocation driver, generic persistent-storage contract, and independent failure domains",
|
||||
"delegated_workplan": "RAIL-BS-WP-0014",
|
||||
"state_hub_workplan_id": "ea6ec98a-0d65-4afa-b6c5-6e7ed34011ac",
|
||||
"status": "open"
|
||||
},
|
||||
{
|
||||
"owner": "railiance-forge",
|
||||
"gap": "Forgejo resource requests/utilization, storage growth, operations labor, and cost-allocation driver",
|
||||
"delegated_workplan": "RAILIANCE-WP-0002",
|
||||
"state_hub_workplan_id": "72f935a5-d921-48a4-96e4-2365556c7374",
|
||||
"status": "open"
|
||||
},
|
||||
{
|
||||
"owner": "railiance-platform",
|
||||
"gap": "apps-pg utilization, backup/restore evidence, operations labor, and consumer allocation driver",
|
||||
"delegated_workplan": "RAILIANCE-WP-0016",
|
||||
"state_hub_workplan_id": "49084fb8-de63-4f32-a4a9-3a42d4e708ac",
|
||||
"status": "delivered",
|
||||
"delivered_on": "2026-08-14",
|
||||
"interface": [
|
||||
"/home/worsch/railiance-platform/docs/evidence/RAILIANCE-WP-0016-apps-pg-observation.json",
|
||||
"/home/worsch/railiance-platform/docs/evidence/RAILIANCE-WP-0016-apps-pg-resource-evidence.md"
|
||||
],
|
||||
"refresh": "make apps-pg-evidence",
|
||||
"residual_unknowns": [
|
||||
"booked EUR for the apps-pg share of railiance01 (owner: fin-hub, FIN-WP-0004; upstream RAIL-HO-WP-0008)",
|
||||
"operator hours are an estimate, not a timesheet (owner: railiance-platform)",
|
||||
"no restore drill, no ScheduledBackup: RPO unbounded and RTO undefined (owner: railiance-platform)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"owner": "coulomb-social",
|
||||
"gap": "declared CPU/memory demand, usage proxies, service objectives, and application operations labor",
|
||||
"delegated_workplan": "CSOC-WP-0005",
|
||||
"state_hub_workplan_id": "00de1578-6150-40d3-b193-e852666ed945",
|
||||
"status": "open"
|
||||
},
|
||||
{
|
||||
"owner": "rapp-qonto",
|
||||
"gap": "request/cold-start frequency, external API costs, runtime utilization, and recurring operator labor",
|
||||
"delegated_workplan": "RAPP-QONTO-WP-0002",
|
||||
"state_hub_workplan_id": "25b3b715-9a56-499e-a85c-a09ebd9bbb79",
|
||||
"status": "open"
|
||||
},
|
||||
{
|
||||
"owner": "fin-hub",
|
||||
"gap": "booked Host Europe financial facts joined to resource:hosteurope:railiance01",
|
||||
"delegated_workplan": "FIN-WP-0004",
|
||||
"state_hub_workplan_id": "67b6de6c-4820-4478-9789-f50260204c27",
|
||||
"delegated_tasks": [
|
||||
"FIN-WP-0004-T04",
|
||||
"FIN-WP-0004-T05",
|
||||
"FIN-WP-0004-T06"
|
||||
],
|
||||
"status": "open"
|
||||
}
|
||||
],
|
||||
"supersedes": "data/portfolio-coverage-2026-08-11.json"
|
||||
}
|
||||
|
|
@ -1,15 +1,162 @@
|
|||
{
|
||||
"schema_version": "0.2", "record_scope": "inventory",
|
||||
"id": "resource:railiance:apps-pg", "resource_class": "database",
|
||||
"status": "active", "management_model": "self_managed",
|
||||
"provider": {"name": "Railiance", "account_ref": null, "product_ref": "cloudnative-pg", "provider_resource_id": "kubernetes:databases/cluster/apps-pg"},
|
||||
"service": {"name": "Shared applications PostgreSQL", "service_id": "apps-pg", "class": "CloudNativePG database service", "capacity_model": "shared"},
|
||||
"location": {"region": null, "country": null, "failure_domains": ["cluster:reef-railiance", "host:railiance01", "storage:local-path"], "residency": null},
|
||||
"capacity": [{"metric": "instances", "value": 1, "unit": "count", "kind": "observed", "observed_at": "2026-08-11"}, {"metric": "storage", "value": 10, "unit": "GiB", "kind": "provisioned", "observed_at": "2026-08-11"}],
|
||||
"ownership": {"owner": "railiance-platform", "environment": "production", "workload_ids": ["coulomb-social"], "tenant_id": null, "allocation": {"mode": "unattributed", "cost_attribution_key": null, "driver": null, "method_version": null}},
|
||||
"cost": {"currency": "EUR", "tax_status": "not_applicable", "billing_model": "shared cluster and operations cost; allocation method unknown", "commitment_ref": null, "price_evidence": null},
|
||||
"lifecycle": {"proposed_on": null, "ordered_on": null, "commissioned_on": "2026-08-09", "renews_on": null, "cancel_by": null, "retired_on": null, "exit_path": "Restore databases to a replacement PostgreSQL service, rotate application connections, verify consumers, then retire the cluster and volume."},
|
||||
"relationships": [{"type": "hosted_on", "resource_id": "resource:railiance:reef-railiance:k3s"}],
|
||||
"requirements": [{"kind": "recovery", "ref": "/home/worsch/railiance-platform/docs/apps-pg.md"}],
|
||||
"evidence": [{"kind": "telemetry", "ref": "kubernetes:reef-railiance/databases/cluster/apps-pg@2026-08-11", "observed_at": "2026-08-11", "authority": "reef-railiance Kubernetes API"}, {"kind": "workload", "ref": "/home/worsch/railiance-platform/helm/apps-pg-cluster.yaml", "observed_at": "2026-08-11", "authority": "railiance-platform"}]
|
||||
"schema_version": "0.2",
|
||||
"record_scope": "inventory",
|
||||
"id": "resource:railiance:apps-pg",
|
||||
"resource_class": "database",
|
||||
"status": "active",
|
||||
"management_model": "self_managed",
|
||||
"provider": {
|
||||
"name": "Railiance",
|
||||
"account_ref": null,
|
||||
"product_ref": "cloudnative-pg",
|
||||
"provider_resource_id": "kubernetes:databases/cluster/apps-pg"
|
||||
},
|
||||
"service": {
|
||||
"name": "Shared applications PostgreSQL",
|
||||
"service_id": "apps-pg",
|
||||
"class": "CloudNativePG database service",
|
||||
"capacity_model": "shared"
|
||||
},
|
||||
"location": {
|
||||
"region": null,
|
||||
"country": null,
|
||||
"failure_domains": [
|
||||
"cluster:reef-railiance",
|
||||
"host:railiance01",
|
||||
"storage:local-path"
|
||||
],
|
||||
"residency": null
|
||||
},
|
||||
"capacity": [
|
||||
{
|
||||
"metric": "instances",
|
||||
"value": 1,
|
||||
"unit": "count",
|
||||
"kind": "provisioned",
|
||||
"observed_at": "2026-08-14"
|
||||
},
|
||||
{
|
||||
"metric": "instances",
|
||||
"value": 1,
|
||||
"unit": "count",
|
||||
"kind": "observed",
|
||||
"observed_at": "2026-08-14"
|
||||
},
|
||||
{
|
||||
"metric": "storage",
|
||||
"value": 10,
|
||||
"unit": "GiB",
|
||||
"kind": "provisioned",
|
||||
"observed_at": "2026-08-14"
|
||||
},
|
||||
{
|
||||
"metric": "storage_used",
|
||||
"value": 0.5766,
|
||||
"unit": "GiB",
|
||||
"kind": "observed",
|
||||
"observed_at": "2026-08-14"
|
||||
},
|
||||
{
|
||||
"metric": "wal_since_init",
|
||||
"value": 0.5469,
|
||||
"unit": "GiB",
|
||||
"kind": "observed",
|
||||
"observed_at": "2026-08-14"
|
||||
},
|
||||
{
|
||||
"metric": "cpu_usage",
|
||||
"value": 0.009,
|
||||
"unit": "vCPU",
|
||||
"kind": "observed",
|
||||
"observed_at": "2026-08-14"
|
||||
},
|
||||
{
|
||||
"metric": "memory_usage",
|
||||
"value": 0.0996,
|
||||
"unit": "GiB",
|
||||
"kind": "observed",
|
||||
"observed_at": "2026-08-14"
|
||||
},
|
||||
{
|
||||
"metric": "max_connections",
|
||||
"value": 100,
|
||||
"unit": "count",
|
||||
"kind": "limit",
|
||||
"observed_at": "2026-08-14"
|
||||
},
|
||||
{
|
||||
"metric": "sessions",
|
||||
"value": 7,
|
||||
"unit": "count",
|
||||
"kind": "observed",
|
||||
"observed_at": "2026-08-14"
|
||||
}
|
||||
],
|
||||
"ownership": {
|
||||
"owner": "railiance-platform",
|
||||
"environment": "production",
|
||||
"workload_ids": [
|
||||
"coulomb-social",
|
||||
"vergabe-teilnahme"
|
||||
],
|
||||
"tenant_id": null,
|
||||
"allocation": {
|
||||
"mode": "shared",
|
||||
"cost_attribution_key": "platform:apps-pg",
|
||||
"driver": "database_gb",
|
||||
"method_version": "apps-pg-dbbytes-v1"
|
||||
}
|
||||
},
|
||||
"cost": {
|
||||
"currency": "EUR",
|
||||
"tax_status": "not_applicable",
|
||||
"billing_model": "shared cluster and operations cost allocated by declared-consumer database bytes (apps-pg-dbbytes-v1: coulomb-social 0.5386, vergabe-teilnahme 0.4614); the 94.8 percent WAL and catalog residual is attributed to platform:apps-pg-overhead and no booked cost exists yet",
|
||||
"commitment_ref": null,
|
||||
"price_evidence": null
|
||||
},
|
||||
"lifecycle": {
|
||||
"proposed_on": null,
|
||||
"ordered_on": null,
|
||||
"commissioned_on": "2026-08-09",
|
||||
"renews_on": null,
|
||||
"cancel_by": null,
|
||||
"retired_on": null,
|
||||
"exit_path": "Restore databases to a replacement PostgreSQL service, rotate application connections, verify consumers, then retire the cluster and volume."
|
||||
},
|
||||
"relationships": [
|
||||
{
|
||||
"type": "hosted_on",
|
||||
"resource_id": "resource:railiance:reef-railiance:k3s"
|
||||
}
|
||||
],
|
||||
"requirements": [
|
||||
{
|
||||
"kind": "recovery",
|
||||
"ref": "/home/worsch/railiance-platform/docs/evidence/RAILIANCE-WP-0016-apps-pg-resource-evidence.md#t02--recovery-and-operations"
|
||||
},
|
||||
{
|
||||
"kind": "other",
|
||||
"ref": "/home/worsch/railiance-platform/docs/apps-pg.md"
|
||||
}
|
||||
],
|
||||
"evidence": [
|
||||
{
|
||||
"kind": "telemetry",
|
||||
"ref": "/home/worsch/railiance-platform/docs/evidence/RAILIANCE-WP-0016-apps-pg-observation.json",
|
||||
"observed_at": "2026-08-14",
|
||||
"authority": "railiance-platform (reef-railiance Kubernetes API + postgres catalog)"
|
||||
},
|
||||
{
|
||||
"kind": "workload",
|
||||
"ref": "/home/worsch/railiance-platform/docs/evidence/RAILIANCE-WP-0016-apps-pg-resource-evidence.md",
|
||||
"observed_at": "2026-08-14",
|
||||
"authority": "railiance-platform, RAILIANCE-WP-0016"
|
||||
},
|
||||
{
|
||||
"kind": "workload",
|
||||
"ref": "/home/worsch/railiance-platform/helm/apps-pg-cluster.yaml",
|
||||
"observed_at": "2026-08-11",
|
||||
"authority": "railiance-platform"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue