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>
2026-08-14 09:28:44 +02:00
{
2026-08-15 02:47:31 +02:00
"schema_version" : "0.3" , "record_scope" : "inventory" ,
2026-08-14 13:15:02 +02:00
"id" : "resource:railiance:forgejo" ,
"financial_entity_id" : null ,
"procuring_entity_id" : "entity:railiance" ,
"entity_gap" : "no allocation driver; cost remains a Railiance residual" ,
2026-08-15 02:47:31 +02:00
"description" : "Shared Forgejo source and package forge on reef-railiance. Allocation across consuming orgs is not yet modeled." ,
"decision" : {
"status" : "gap" ,
"chosen" : "Live discovered platform service; forge source-of-truth decision lives in railiance-apps" ,
"rejected" : [ ] ,
"approved_by" : null ,
"approved_on" : null ,
"ref" : "/home/worsch/railiance-apps/docs/forge-source-of-truth-decision.md"
} ,
"operational_refs" : [
"reef:railiance/declarations/reef.yaml"
] ,
"credential_handles" : [ ] ,
"consumers" : {
"potential" : [ "helix-forge" , "coulomb-social" , "railiance" ] ,
"actual" : [ "helix-forge" , "coulomb-social" , "railiance" ]
} ,
2026-08-14 13:15:02 +02:00
"resource_class" : "shared_platform_service" ,
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>
2026-08-14 09:28:44 +02:00
"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" }
]
}