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"
|
||||
]
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue