feat(portfolio): complete RESOURCE-WP-0003 T06 optimization cases and T07 reporting
T06: optimization-case schema, fail-closed evaluator, cadence and decision template. Every option including the baseline must present all ten decision fields; one unknown blocks the comparison. Validated on the storage case (Hetzner computes and loses to Scaleway by EUR 29.14/month on operator labour; Host Europe blocks on four named gaps) and on the non-storage reef-railiance k3s rightsizing case (low utilization is real, but nothing is costable while the railiance01 price is unknown). T07: portfolio report over coverage, lifecycle, utilization, cost, renewals, risks, open cases, and next actions, derived only from committed evidence. Portfolio spend is reported null rather than as a partial sum, unattributed cost is a named list rather than a spread, and unmeasurable resources are reported rather than dropped. RESOURCE-WP-0003 is finished; both cases remain blocked_on_evidence against live delegated records in other repositories. RESOURCE-WP-0002 is untouched. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
parent
54dd45c926
commit
2c2a6073ff
63 changed files with 4662 additions and 69 deletions
15
data/resources/apps-pg.json
Normal file
15
data/resources/apps-pg.json
Normal file
|
|
@ -0,0 +1,15 @@
|
|||
{
|
||||
"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"}]
|
||||
}
|
||||
26
data/resources/binky-rapp-qonto.json
Normal file
26
data/resources/binky-rapp-qonto.json
Normal file
|
|
@ -0,0 +1,26 @@
|
|||
{
|
||||
"schema_version": "0.2", "record_scope": "inventory",
|
||||
"id": "resource:tenant:friendly:binky:rapp-qonto", "resource_class": "self_managed_service",
|
||||
"status": "active", "management_model": "shared_capacity",
|
||||
"provider": {"name": "Railiance", "account_ref": null, "product_ref": "rail-knative", "provider_resource_id": "knative:rapp-qonto/rapp-qonto"},
|
||||
"service": {"name": "Binky Qonto assistant", "service_id": "rapp-qonto", "class": "tenant Knative application with dedicated egress proxy", "capacity_model": "elastic"},
|
||||
"location": {"region": null, "country": null, "failure_domains": ["cluster:reef-railiance", "host:railiance01"], "residency": null},
|
||||
"capacity": [
|
||||
{"metric": "minimum_replicas", "value": 0, "unit": "count", "kind": "limit", "observed_at": "2026-08-11"},
|
||||
{"metric": "maximum_replicas", "value": 1, "unit": "count", "kind": "limit", "observed_at": "2026-08-11"},
|
||||
{"metric": "workload_cpu_request", "value": 0.05, "unit": "vCPU", "kind": "allocated", "observed_at": "2026-08-11"},
|
||||
{"metric": "workload_memory_request", "value": 128, "unit": "MiB", "kind": "allocated", "observed_at": "2026-08-11"},
|
||||
{"metric": "egress_cpu_request", "value": 0.02, "unit": "vCPU", "kind": "allocated", "observed_at": "2026-08-11"},
|
||||
{"metric": "egress_memory_request", "value": 64, "unit": "MiB", "kind": "allocated", "observed_at": "2026-08-11"}
|
||||
],
|
||||
"ownership": {"owner": "rapp-qonto", "environment": "production", "workload_ids": ["rapp-qonto"], "tenant_id": "tenant:friendly:binky", "allocation": {"mode": "dedicated", "cost_attribution_key": "resource:tenant:friendly:binky:rapp-qonto", "driver": "direct-workload", "method_version": "direct-v1"}},
|
||||
"cost": {"currency": "EUR", "tax_status": "not_applicable", "billing_model": "allocated cluster and operator cost plus external Qonto/API costs; values unknown", "commitment_ref": null, "price_evidence": null},
|
||||
"lifecycle": {"proposed_on": null, "ordered_on": null, "commissioned_on": "2026-07-27", "renews_on": null, "cancel_by": null, "retired_on": null, "exit_path": "Deploy the verified Knative revision and egress policy on replacement capacity, verify tenant authorization and Qonto access, then retire old revisions and credentials."},
|
||||
"relationships": [{"type": "hosted_on", "resource_id": "resource:railiance:reef-railiance:k3s"}],
|
||||
"requirements": [{"kind": "security", "ref": "/home/worsch/rapp-qonto/docs/security-and-reliability-gates.md"}],
|
||||
"evidence": [
|
||||
{"kind": "telemetry", "ref": "kubernetes:reef-railiance/rapp-qonto/ksvc/rapp-qonto@2026-08-11", "observed_at": "2026-08-11", "authority": "reef-railiance Kubernetes API"},
|
||||
{"kind": "workload", "ref": "/home/worsch/rapp-qonto/bindings/rail-knative.yaml", "observed_at": "2026-08-11", "authority": "rapp-qonto"},
|
||||
{"kind": "test", "ref": "/home/worsch/rapp-qonto/evidence/live/2026-07-29-railiance01.json", "observed_at": "2026-07-29", "authority": "rapp-qonto"}
|
||||
]
|
||||
}
|
||||
19
data/resources/coulomb-social-production.json
Normal file
19
data/resources/coulomb-social-production.json
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
{
|
||||
"schema_version": "0.2", "record_scope": "inventory",
|
||||
"id": "resource:tenant:coulomb:coulomb-social", "resource_class": "self_managed_service",
|
||||
"status": "active", "management_model": "shared_capacity",
|
||||
"provider": {"name": "Railiance", "account_ref": null, "product_ref": "coulomb-social", "provider_resource_id": "kubernetes:coulomb-social/deployment/coulomb-social"},
|
||||
"service": {"name": "Coulomb Social production", "service_id": "coulomb-social", "class": "tenant application", "capacity_model": "shared"},
|
||||
"location": {"region": null, "country": null, "failure_domains": ["cluster:reef-railiance", "host:railiance01"], "residency": null},
|
||||
"capacity": [{"metric": "replicas", "value": 1, "unit": "count", "kind": "observed", "observed_at": "2026-08-11"}],
|
||||
"ownership": {"owner": "coulomb-social", "environment": "production", "workload_ids": ["coulomb-social"], "tenant_id": "tenant:coulomb", "allocation": {"mode": "dedicated", "cost_attribution_key": "resource:tenant:coulomb:coulomb-social", "driver": "direct-workload", "method_version": "direct-v1"}},
|
||||
"cost": {"currency": "EUR", "tax_status": "not_applicable", "billing_model": "allocated share of cluster, database, ingress, identity dependencies, and operations labor; values 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": "Deploy the application and restore tenant data on replacement capacity, verify identity and health paths, switch app.coulomb.social, then retire the old release."},
|
||||
"relationships": [{"type": "hosted_on", "resource_id": "resource:railiance:reef-railiance:k3s"}, {"type": "depends_on", "resource_id": "resource:railiance:apps-pg"}],
|
||||
"requirements": [{"kind": "security", "ref": "/home/worsch/coulomb-social/INTENT.md"}],
|
||||
"evidence": [
|
||||
{"kind": "telemetry", "ref": "kubernetes:reef-railiance/coulomb-social/deployment/coulomb-social@2026-08-11", "observed_at": "2026-08-11", "authority": "reef-railiance Kubernetes API"},
|
||||
{"kind": "workload", "ref": "/home/worsch/railiance-apps/helm/coulomb-social-values.yaml", "observed_at": "2026-08-11", "authority": "railiance-apps"},
|
||||
{"kind": "workload", "ref": "/home/worsch/coulomb-social/INTENT.md", "observed_at": "2026-08-11", "authority": "coulomb-social"}
|
||||
]
|
||||
}
|
||||
23
data/resources/hosteurope-railiance01.json
Normal file
23
data/resources/hosteurope-railiance01.json
Normal file
|
|
@ -0,0 +1,23 @@
|
|||
{
|
||||
"schema_version": "0.2", "record_scope": "inventory",
|
||||
"id": "resource:hosteurope:railiance01", "resource_class": "compute_instance",
|
||||
"status": "active", "management_model": "provider_managed",
|
||||
"provider": {"name": "Host Europe", "account_ref": null, "product_ref": null, "provider_resource_id": null},
|
||||
"service": {"name": "railiance01", "service_id": "railiance01", "class": "virtual server", "capacity_model": "fixed"},
|
||||
"location": {"region": null, "country": null, "failure_domains": ["provider:host-europe", "host:railiance01"], "residency": null},
|
||||
"capacity": [
|
||||
{"metric": "cpu", "value": 4, "unit": "vCPU", "kind": "usable", "observed_at": "2026-08-11"},
|
||||
{"metric": "memory", "value": 15.62, "unit": "GiB", "kind": "usable", "observed_at": "2026-08-11"},
|
||||
{"metric": "root_filesystem", "value": 192.69, "unit": "GiB", "kind": "provisioned", "observed_at": "2026-08-11"},
|
||||
{"metric": "root_filesystem_used", "value": 66.77, "unit": "GiB", "kind": "observed", "observed_at": "2026-08-11"}
|
||||
],
|
||||
"ownership": {"owner": "railiance-infra", "environment": "production", "workload_ids": ["reef-railiance"], "tenant_id": null, "allocation": {"mode": "unattributed", "cost_attribution_key": null, "driver": null, "method_version": null}},
|
||||
"cost": {"currency": "EUR", "tax_status": "unknown", "billing_model": "fixed recurring provider server; exact product and booked price unknown", "commitment_ref": null, "price_evidence": null},
|
||||
"lifecycle": {"proposed_on": null, "ordered_on": null, "commissioned_on": null, "renews_on": null, "cancel_by": null, "retired_on": null, "exit_path": "Provision replacement capacity, restore or redeploy cluster and stateful services, switch DNS and ingress, verify workloads, then cancel and erase the server."},
|
||||
"relationships": [{"type": "provides_capacity_to", "resource_id": "resource:railiance:reef-railiance:k3s"}],
|
||||
"requirements": [{"kind": "other", "ref": "/home/worsch/railiance-cluster/workplans/RAIL-BS-WP-0007-threephoenix-ha-cluster.md"}],
|
||||
"evidence": [
|
||||
{"kind": "telemetry", "ref": "ssh:railiance01 host capacity observation 2026-08-11T09:05:25Z", "observed_at": "2026-08-11", "authority": "railiance01 operating system"},
|
||||
{"kind": "workload", "ref": "/home/worsch/railiance-apps/docs/operator-setup.md", "observed_at": "2026-08-11", "authority": "railiance-apps"}
|
||||
]
|
||||
}
|
||||
67
data/resources/platform-audit-storage.proposed.json
Normal file
67
data/resources/platform-audit-storage.proposed.json
Normal file
|
|
@ -0,0 +1,67 @@
|
|||
{
|
||||
"schema_version": "0.2",
|
||||
"record_scope": "inventory",
|
||||
"id": "resource:platform:audit-storage",
|
||||
"resource_class": "storage",
|
||||
"status": "proposed",
|
||||
"management_model": "provider_managed",
|
||||
"provider": {
|
||||
"name": "Scaleway",
|
||||
"account_ref": null,
|
||||
"product_ref": "scaleway-standard-multi-az",
|
||||
"provider_resource_id": null
|
||||
},
|
||||
"service": {
|
||||
"name": "platform audit storage",
|
||||
"service_id": "object-storage",
|
||||
"class": "Standard Multi-AZ object storage",
|
||||
"capacity_model": "elastic"
|
||||
},
|
||||
"location": {
|
||||
"region": "nl-ams",
|
||||
"country": "NL",
|
||||
"failure_domains": ["provider:scaleway", "region:nl-ams"],
|
||||
"residency": "European Union"
|
||||
},
|
||||
"capacity": [
|
||||
{"metric": "stored_data", "value": null, "unit": "GB", "kind": "unknown", "observed_at": null}
|
||||
],
|
||||
"ownership": {
|
||||
"owner": "resource-control",
|
||||
"environment": "production",
|
||||
"workload_ids": ["rapp-postgres/platform-pg"],
|
||||
"tenant_id": null,
|
||||
"allocation": {
|
||||
"mode": "dedicated",
|
||||
"cost_attribution_key": "platform:audit-storage",
|
||||
"driver": "direct-resource",
|
||||
"method_version": "direct-v1"
|
||||
}
|
||||
},
|
||||
"cost": {
|
||||
"currency": "EUR",
|
||||
"tax_status": "excluded",
|
||||
"billing_model": "usage-based storage and egress; no commitment",
|
||||
"commitment_ref": null,
|
||||
"price_evidence": "data/providers/object-storage.json#scaleway-standard-multi-az"
|
||||
},
|
||||
"lifecycle": {
|
||||
"proposed_on": "2026-08-10",
|
||||
"ordered_on": null,
|
||||
"commissioned_on": null,
|
||||
"renews_on": null,
|
||||
"cancel_by": null,
|
||||
"retired_on": null,
|
||||
"exit_path": "Copy and verify all Barman objects in an independent S3-compatible target, run full and PITR restore, revoke the scoped key, then delete source objects and bucket after evidence is durable."
|
||||
},
|
||||
"relationships": [],
|
||||
"requirements": [
|
||||
{"kind": "recovery", "ref": "workplans/RESOURCE-WP-0002-procure-postgres-backup-storage.md#acceptance-requirements"},
|
||||
{"kind": "retention", "ref": "data/demand/platform-audit-storage.json"}
|
||||
],
|
||||
"evidence": [
|
||||
{"kind": "provider", "ref": "https://www.scaleway.com/en/pricing/storage/", "observed_at": "2026-08-10", "authority": "Scaleway"},
|
||||
{"kind": "provider", "ref": "https://www.scaleway.com/en/object-storage/", "observed_at": "2026-08-10", "authority": "Scaleway"},
|
||||
{"kind": "decision", "ref": "docs/evidence/RESOURCE-WP-0002-provider-due-diligence-2026-08-10.md", "observed_at": "2026-08-10", "authority": "resource-control"}
|
||||
]
|
||||
}
|
||||
23
data/resources/railiance-forgejo.json
Normal file
23
data/resources/railiance-forgejo.json
Normal file
|
|
@ -0,0 +1,23 @@
|
|||
{
|
||||
"schema_version": "0.2", "record_scope": "inventory",
|
||||
"id": "resource:railiance:forgejo", "resource_class": "shared_platform_service",
|
||||
"status": "active", "management_model": "self_managed",
|
||||
"provider": {"name": "Railiance", "account_ref": null, "product_ref": "forgejo-11.0.3", "provider_resource_id": "kubernetes:forgejo/deployment/forgejo-gitea"},
|
||||
"service": {"name": "Forgejo source and package forge", "service_id": "forgejo", "class": "shared source forge and package registry", "capacity_model": "shared"},
|
||||
"location": {"region": null, "country": null, "failure_domains": ["cluster:reef-railiance", "host:railiance01", "storage:local-path"], "residency": null},
|
||||
"capacity": [
|
||||
{"metric": "replicas", "value": 1, "unit": "count", "kind": "observed", "observed_at": "2026-08-11"},
|
||||
{"metric": "forge_storage", "value": 10, "unit": "GiB", "kind": "provisioned", "observed_at": "2026-08-11"},
|
||||
{"metric": "database_storage", "value": 10, "unit": "GiB", "kind": "provisioned", "observed_at": "2026-08-11"}
|
||||
],
|
||||
"ownership": {"owner": "railiance-forge", "environment": "production", "workload_ids": ["helix-forge", "coulomb-social", "railiance"], "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 share of cluster, persistent storage, database, backup, and operations labor; allocation unknown", "commitment_ref": null, "price_evidence": null},
|
||||
"lifecycle": {"proposed_on": null, "ordered_on": null, "commissioned_on": "2026-07-03", "renews_on": null, "cancel_by": null, "retired_on": null, "exit_path": "Restore repositories, packages, configuration, and database to a replacement forge, verify clone/push/package workflows, switch DNS, then retire the deployment."},
|
||||
"relationships": [{"type": "hosted_on", "resource_id": "resource:railiance:reef-railiance:k3s"}],
|
||||
"requirements": [{"kind": "recovery", "ref": "/home/worsch/railiance-apps/docs/forgejo-package-registry.md"}],
|
||||
"evidence": [
|
||||
{"kind": "telemetry", "ref": "kubernetes:reef-railiance/forgejo/deployment/forgejo-gitea@2026-08-11", "observed_at": "2026-08-11", "authority": "reef-railiance Kubernetes API"},
|
||||
{"kind": "workload", "ref": "/home/worsch/railiance-apps/helm/forgejo-values.yaml", "observed_at": "2026-08-11", "authority": "railiance-apps"},
|
||||
{"kind": "decision", "ref": "/home/worsch/railiance-apps/docs/forge-source-of-truth-decision.md", "observed_at": "2026-08-11", "authority": "railiance-apps"}
|
||||
]
|
||||
}
|
||||
26
data/resources/reef-railiance-k3s.json
Normal file
26
data/resources/reef-railiance-k3s.json
Normal file
|
|
@ -0,0 +1,26 @@
|
|||
{
|
||||
"schema_version": "0.2", "record_scope": "inventory",
|
||||
"id": "resource:railiance:reef-railiance:k3s", "resource_class": "kubernetes_capacity",
|
||||
"status": "active", "management_model": "self_managed",
|
||||
"provider": {"name": "Railiance", "account_ref": null, "product_ref": "k3s", "provider_resource_id": "k3s://239.62.205.92.host.secureserver.net"},
|
||||
"service": {"name": "reef-railiance k3s", "service_id": "reef-railiance", "class": "single-node Kubernetes runtime", "capacity_model": "shared"},
|
||||
"location": {"region": null, "country": null, "failure_domains": ["provider:host-europe", "host:railiance01", "cluster:reef-railiance"], "residency": null},
|
||||
"capacity": [
|
||||
{"metric": "cpu", "value": 4, "unit": "vCPU", "kind": "usable", "observed_at": "2026-08-11"},
|
||||
{"metric": "memory", "value": 15.62, "unit": "GiB", "kind": "usable", "observed_at": "2026-08-11"},
|
||||
{"metric": "ephemeral_storage", "value": 183.06, "unit": "GiB", "kind": "usable", "observed_at": "2026-08-11"},
|
||||
{"metric": "pods", "value": 110, "unit": "count", "kind": "limit", "observed_at": "2026-08-11"},
|
||||
{"metric": "nodes", "value": 1, "unit": "count", "kind": "observed", "observed_at": "2026-08-11"},
|
||||
{"metric": "cpu_usage", "value": 0.564, "unit": "vCPU", "kind": "observed", "observed_at": "2026-08-11"},
|
||||
{"metric": "memory_usage", "value": 5.83, "unit": "GiB", "kind": "observed", "observed_at": "2026-08-11"}
|
||||
],
|
||||
"ownership": {"owner": "railiance-cluster", "environment": "production", "workload_ids": ["helix-forge", "coulomb-social", "rapp-qonto", "railiance-platform"], "tenant_id": null, "allocation": {"mode": "unattributed", "cost_attribution_key": null, "driver": null, "method_version": null}},
|
||||
"cost": {"currency": "EUR", "tax_status": "unknown", "billing_model": "allocated share of railiance01 plus cluster operations labor; method not established", "commitment_ref": null, "price_evidence": null},
|
||||
"lifecycle": {"proposed_on": null, "ordered_on": null, "commissioned_on": "2026-03-10", "renews_on": null, "cancel_by": null, "retired_on": null, "exit_path": "Deploy a replacement cluster, restore stateful services, promote workloads and ingress, verify health, then remove the old node and credentials."},
|
||||
"relationships": [{"type": "hosted_on", "resource_id": "resource:hosteurope:railiance01"}],
|
||||
"requirements": [{"kind": "service_objective", "ref": "/home/worsch/railiance-cluster/INTENT.md"}, {"kind": "recovery", "ref": "/home/worsch/railiance-cluster/workplans/RAIL-BS-WP-0007-threephoenix-ha-cluster.md"}],
|
||||
"evidence": [
|
||||
{"kind": "telemetry", "ref": "kubernetes:reef-railiance/node/239.62.205.92.host.secureserver.net@2026-08-11T09:05:25Z", "observed_at": "2026-08-11", "authority": "reef-railiance Kubernetes API"},
|
||||
{"kind": "workload", "ref": "/home/worsch/railiance-cluster/docs/rail-kubernetes-substrate-profile.md", "observed_at": "2026-08-11", "authority": "railiance-cluster"}
|
||||
]
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue