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
|
|
@ -104,7 +104,7 @@ with an explicit correlated-failure decision and an independent second copy.
|
|||
|
||||
```task
|
||||
id: RESOURCE-WP-0002-T01
|
||||
status: todo
|
||||
status: progress
|
||||
priority: high
|
||||
state_hub_task_id: "f578a9ec-dbdb-4b26-93bc-e53f7bc87ad1"
|
||||
```
|
||||
|
|
@ -121,11 +121,38 @@ Do not compare only advertised price per GB.
|
|||
Done when the demand forecast and cost model can calculate effective monthly
|
||||
cost for A, B, and C under the same scenarios.
|
||||
|
||||
Progress 2026-08-10: added a timestamped live database/WAL observation,
|
||||
low/base/high 12-month inputs, and a tested fail-closed calculator in
|
||||
`data/`, `tools/cost_model.py`, and
|
||||
`docs/evidence/RESOURCE-WP-0002-demand-and-cost-model-2026-08-10.md`.
|
||||
Scaleway and in-quota Hetzner costs calculate. Host Europe remains deliberately
|
||||
`null` until a current account quote exists; Hetzner excess pricing is also
|
||||
required before its high scenario and full exit can calculate.
|
||||
|
||||
Expanded 2026-08-10: added 1/2/3-node self-managed Garage estimates for Host
|
||||
Europe and Hetzner plus managed AWS S3, Azure Blob, Google Cloud Storage, and
|
||||
STACKIT Object Storage price points. Fixed-capacity VM options fail closed when
|
||||
forecast demand exceeds usable replicated capacity. Currency conversion,
|
||||
request charges, setup labor, recurring operations, and topology limitations
|
||||
are explicit in
|
||||
`docs/evidence/RESOURCE-WP-0002-expanded-storage-comparison-2026-08-10.md`.
|
||||
|
||||
Refined 2026-08-10: every quote now separates monthly infrastructure from
|
||||
internal operations labor and internal setup from external services. Added a
|
||||
normalized 320 GB running-cost view so bundled, fixed-capacity, and elastic
|
||||
products compare on the same stored volume and request/restore pattern.
|
||||
|
||||
Control refinement 2026-08-10: added an immutable 12-month forecast record,
|
||||
monthly actual-observation schema, and variance calculator covering stored
|
||||
bytes, database size, WAL, requests, restore egress, invoice cost, and internal
|
||||
labor. `docs/forecast-actual-control.md` defines error thresholds, evidence,
|
||||
revision discipline, and the three-month recalibration loop.
|
||||
|
||||
## T02 — Complete provider due diligence
|
||||
|
||||
```task
|
||||
id: RESOURCE-WP-0002-T02
|
||||
status: todo
|
||||
status: progress
|
||||
priority: high
|
||||
state_hub_task_id: "6dedb8db-c08f-4b58-90f2-32b1ea832d98"
|
||||
```
|
||||
|
|
@ -144,6 +171,14 @@ object-lock behavior, and provider status visibility.
|
|||
Done when every acceptance requirement has evidence, `unknown`, or a blocking
|
||||
answer for each provider—no blank cells and no marketing inference.
|
||||
|
||||
Progress 2026-08-10: completed the public-primary-source evidence matrix in
|
||||
`docs/evidence/RESOURCE-WP-0002-provider-due-diligence-2026-08-10.md` and added
|
||||
a provisional Scaleway inventory record. Host Europe current S3 orderability
|
||||
and commercial terms require written account-support evidence. Scaleway is the
|
||||
provisional primary because it documents Multi-AZ service, durability, S3
|
||||
features, and managed at-rest encryption; selection still requires a live
|
||||
Barman preflight, contract review, and human approval.
|
||||
|
||||
## T03 — Select and procure the primary resource
|
||||
|
||||
```task
|
||||
|
|
|
|||
|
|
@ -0,0 +1,298 @@
|
|||
---
|
||||
id: RESOURCE-WP-0003
|
||||
type: workplan
|
||||
title: "Establish managed-infrastructure portfolio control"
|
||||
domain: financials
|
||||
repo: resource-control
|
||||
status: finished
|
||||
owner: codex
|
||||
topic_slug: railiance
|
||||
created: "2026-08-10"
|
||||
updated: "2026-08-14"
|
||||
related:
|
||||
- RESOURCE-WP-0002
|
||||
- FIN-WP-0004
|
||||
state_hub_workstream_id: "b4d541d2-c114-4189-b431-e301c4dcef4e"
|
||||
---
|
||||
|
||||
# RESOURCE-WP-0003 — managed-infrastructure portfolio control
|
||||
|
||||
## Goal
|
||||
|
||||
Turn the revised repository intent into an operational, provider-neutral
|
||||
control loop for infrastructure serving Railiance itself, Helix Forge, Coulomb
|
||||
Social, shared platform services, and tenant workloads. Establish the portfolio
|
||||
model, authority contracts, delegated evidence interfaces, and a repeatable
|
||||
forecast-to-actual optimization cycle without duplicating financial, workload,
|
||||
or platform authority.
|
||||
|
||||
The PostgreSQL backup work in `RESOURCE-WP-0002` is the first proving case and
|
||||
input to this workplan, not the limit of its scope.
|
||||
|
||||
## Boundaries
|
||||
|
||||
- `resource-control` owns portfolio identity, lifecycle, technical economics,
|
||||
allocation evidence, forecasts, variance analysis, and optimization cases.
|
||||
- `fin-hub` owns authoritative booked financial facts, budgets, commitments,
|
||||
burn, runway, and viability signals.
|
||||
- Workload repositories own demand meaning and service requirements.
|
||||
- Cluster and platform repositories own provisioning, operations, and source
|
||||
telemetry.
|
||||
- Human authorities approve contractual commitments and material lifecycle
|
||||
changes.
|
||||
|
||||
This workplan defines and validates interfaces. Cross-repository implementation
|
||||
must be handed off as work records in the repository that owns the source.
|
||||
|
||||
## T01 — Define the portfolio and lifecycle model
|
||||
|
||||
```task
|
||||
id: RESOURCE-WP-0003-T01
|
||||
status: done
|
||||
priority: high
|
||||
state_hub_task_id: "9c396da2-9cae-4681-8d7e-3ebcbf9db29f"
|
||||
```
|
||||
|
||||
Define the minimum resource classes, lifecycle states, ownership fields,
|
||||
capacity forms, provider/account identity, shared-versus-dedicated placement,
|
||||
tenant and workload attribution, contract dates, and evidence provenance.
|
||||
|
||||
Reuse the current backup inventory and forecast schemas where they generalize;
|
||||
identify and migrate assumptions that are storage-specific. Include validation
|
||||
rules for stable identifiers and lifecycle transitions.
|
||||
|
||||
Done when a versioned schema and examples can represent provider-managed
|
||||
object storage, self-managed Garage on VMs, cluster capacity, and a shared
|
||||
platform service without ambiguous ownership or cost attribution.
|
||||
|
||||
Completed 2026-08-11: introduced portfolio schema v0.2 with resource classes,
|
||||
management models, capacity dimensions, lifecycle states, shared and dedicated
|
||||
allocation, relationships, requirements, and provenance-bearing evidence.
|
||||
Migrated the real proposed backup record and added explicitly non-authoritative
|
||||
Garage, Kubernetes-capacity, and shared-ingress examples. Semantic validation
|
||||
covers identifier, lifecycle, allocation, capacity, and example-scope rules.
|
||||
Evidence: `docs/evidence/RESOURCE-WP-0003-portfolio-model-v0.2-2026-08-11.md`.
|
||||
|
||||
## T02 — Record the authority and fin-hub exchange contract
|
||||
|
||||
```task
|
||||
id: RESOURCE-WP-0003-T02
|
||||
status: done
|
||||
priority: high
|
||||
state_hub_task_id: "efa64dce-7b5e-435e-b010-7aee9e0a410e"
|
||||
```
|
||||
|
||||
Create an authority matrix and a versioned exchange contract with `fin-hub`.
|
||||
Define the two directions separately:
|
||||
|
||||
- resource-control to fin-hub: resource references, allocation keys, forecasts,
|
||||
technical usage, commitment candidates, and optimization scenarios;
|
||||
- fin-hub to resource-control: booked costs, credits, tax and currency treatment,
|
||||
financial commitments, budget constraints, and viability signals.
|
||||
|
||||
Specify period, currency, net/gross semantics, provenance, corrections,
|
||||
idempotency, uncertainty, and identifiers including `resource_id`, `service_id`,
|
||||
`workload_id`, `tenant_id`, `environment`, and `cost_attribution_key`.
|
||||
|
||||
Done when both repositories link the same reviewed contract and no field has
|
||||
two authoritative writers. Coordinate with `FIN-WP-0004`.
|
||||
|
||||
Progress 2026-08-11: verified fin-hub commit `0034330` and its 46-test suite;
|
||||
the six review remediations satisfy the authority, exact-money, typed-evidence,
|
||||
idempotency, dimensional-reporting, and model-parity conditions. Added the
|
||||
resource-control ratification, producer-owned planning schema, canonical
|
||||
forecast exporter, booked-cost consumer validation, and reconciliation seam.
|
||||
The 12-row backup forecast preflight and cross-repository compatibility check
|
||||
remain before this task is complete. A real booked backup cost is deliberately
|
||||
reserved for `FIN-WP-0004-T05` after procurement.
|
||||
|
||||
Completed 2026-08-11: all 12 resource-control producer records matched
|
||||
fin-hub's executable schema and adapter output, and duplicate ingestion retained
|
||||
exactly 12 planning rows. Evidence is in
|
||||
`docs/evidence/RESOURCE-WP-0003-fin-hub-contract-preflight-2026-08-11.md`.
|
||||
The authority contract is accepted from resource-control. The separate real
|
||||
booked-cost round trip remains gated on `RESOURCE-WP-0002` procurement and is
|
||||
not simulated as operational evidence.
|
||||
|
||||
## T03 — Inventory the first managed-infrastructure portfolio
|
||||
|
||||
```task
|
||||
id: RESOURCE-WP-0003-T03
|
||||
status: done
|
||||
priority: high
|
||||
state_hub_task_id: "4afbb2ea-8021-4dd7-968b-50c113a8c108"
|
||||
```
|
||||
|
||||
Discover and register the material infrastructure serving Helix Forge,
|
||||
Coulomb Social, shared Railiance services, and a representative tenant
|
||||
workload. Record unknowns explicitly and separate observed resources from
|
||||
inferred relationships.
|
||||
|
||||
For each resource, identify the authoritative workload and platform repository,
|
||||
owner, lifecycle state, capacity, service objective or requirement reference,
|
||||
provider/account, failure domain, contract or renewal evidence, and allocation
|
||||
key. Do not retrieve or record credentials.
|
||||
|
||||
Done when portfolio coverage and evidence gaps are measurable and every
|
||||
material discovered resource has an owner or a human-review record.
|
||||
|
||||
Completed 2026-08-11: registered seven evidence-backed resources covering the
|
||||
Host Europe host, reef-railiance k3s capacity, Forgejo/Helix Forge, shared
|
||||
applications PostgreSQL, Coulomb Social, Binky's `rapp-qonto`, and proposed
|
||||
backup storage. Live read-only observation confirmed capacity, current
|
||||
workloads, PVCs, and the shared single-host/local-storage failure domain.
|
||||
Unknown commercial, utilization-history, labor, and allocation facts remain
|
||||
explicit and are assigned to authoritative repository owners in
|
||||
`data/portfolio-coverage-2026-08-11.json`. Evidence:
|
||||
`docs/evidence/RESOURCE-WP-0003-initial-portfolio-discovery-2026-08-11.md`.
|
||||
|
||||
## T04 — Delegate demand and telemetry evidence
|
||||
|
||||
```task
|
||||
id: RESOURCE-WP-0003-T04
|
||||
status: done
|
||||
priority: high
|
||||
state_hub_task_id: "b4053889-69fd-4e3c-888b-0764eee2e9e4"
|
||||
```
|
||||
|
||||
Create scoped work records in the authoritative workload and platform
|
||||
repositories for missing demand declarations, service objectives, capacity,
|
||||
utilization, reliability, and allocation-driver evidence. Initial targets are
|
||||
`helix-forge`, `coulomb-social`, `railiance-cluster`, `rail-kubernetes`,
|
||||
`rail-knative`, and `railiance-platform`; add only repositories supported by
|
||||
the inventory evidence.
|
||||
|
||||
Each handoff must define a stable non-secret interface and acceptance evidence,
|
||||
not prescribe unrelated internal implementation.
|
||||
|
||||
Done when all required source evidence is either available through a versioned
|
||||
interface or represented by a live delegated work record with an owner.
|
||||
|
||||
Completed 2026-08-11: created and registered repository-local evidence plans
|
||||
`RAIL-HO-WP-0008`, `RAIL-BS-WP-0014`, railiance-forge
|
||||
`RAILIANCE-WP-0002`, railiance-platform `RAILIANCE-WP-0016`,
|
||||
`CSOC-WP-0005`, and `RAPP-QONTO-WP-0002`. The booked-cost boundary remains in
|
||||
fin-hub and is linked to existing `FIN-WP-0004-T04..T06`. The exact State Hub
|
||||
workplan identifiers are recorded in
|
||||
`data/portfolio-coverage-2026-08-11.json`. No duplicate plan was created in
|
||||
`helix-forge`, `rail-kubernetes`, or `rail-knative`: their relevant evidence is
|
||||
owned respectively by railiance-forge, railiance-cluster, and the workload plus
|
||||
cluster layers.
|
||||
|
||||
## T05 — Generalize forecast-to-actual control
|
||||
|
||||
```task
|
||||
id: RESOURCE-WP-0003-T05
|
||||
status: done
|
||||
priority: high
|
||||
state_hub_task_id: "76986764-5e23-4e51-aaed-6bbb92d08915"
|
||||
```
|
||||
|
||||
Generalize the immutable forecast and monthly actual-observation controls from
|
||||
`RESOURCE-WP-0002`. Support resource-specific usage proxies, fixed and elastic
|
||||
capacity, internal and external labor, infrastructure cost, booked cost
|
||||
references, allocation methods, service-level constraints, and low/base/high
|
||||
uncertainty.
|
||||
|
||||
Classify variance as demand, provider price, allocation, labor, model, or
|
||||
data-quality error. Preserve the original forecast and create explicit
|
||||
revisions rather than overwriting it.
|
||||
|
||||
Done when the same mechanism can evaluate at least storage, VM or cluster
|
||||
compute, and one shared platform service.
|
||||
|
||||
Completed 2026-08-11: added the generic immutable control-cycle schema and
|
||||
comparator, controlled six-way variance attribution, revision and booked-fact
|
||||
references, and paired contract examples for elastic storage, fixed cluster
|
||||
compute, and the hybrid shared apps-pg service. The examples are illustrative,
|
||||
not operational facts. Evidence:
|
||||
`docs/evidence/RESOURCE-WP-0003-generalized-control-cycle-2026-08-11.md`.
|
||||
|
||||
## T06 — Produce and govern optimization cases
|
||||
|
||||
```task
|
||||
id: RESOURCE-WP-0003-T06
|
||||
status: done
|
||||
priority: medium
|
||||
state_hub_task_id: "08d5a687-6ce4-4bbf-950a-9682b1f7b003"
|
||||
```
|
||||
|
||||
Define the review cadence and decision template for rightsizing,
|
||||
consolidation, commitment, renewal, migration, retirement, and provider
|
||||
switching. Every recommendation must show baseline, alternative, one-time
|
||||
cost, recurring infrastructure and labor cost, utilization, uncertainty,
|
||||
service-level constraints, failure domains, exit path, and expected payback.
|
||||
|
||||
Validate the process using the backup case and at least one non-storage
|
||||
portfolio candidate. Send financial implications to `fin-hub`; delegate any
|
||||
approved implementation to the owning platform or workload repository.
|
||||
|
||||
Done when recommendations are reproducible from evidence and their eventual
|
||||
outcomes feed the next forecast cycle.
|
||||
|
||||
Completed 2026-08-14: added the optimization-case schema, a fail-closed
|
||||
evaluator, and the cadence and decision template in `docs/optimization-cases.md`.
|
||||
Every option, baseline included, must present all ten decision fields; one
|
||||
unknown blocks the comparison. Validated on the storage case, where Hetzner
|
||||
computes fully and loses to Scaleway by EUR 29.14 per month on operator labour
|
||||
rather than storage price while Host Europe blocks on four named gaps, and on
|
||||
the non-storage reef-railiance k3s rightsizing case, which reports genuinely low
|
||||
utilization and still refuses to recommend because the railiance01 booked price
|
||||
is unknown and the utilization figure is a single sample. Neither case decides:
|
||||
procurement remains `RESOURCE-WP-0002-T03`, and the cluster unknowns are
|
||||
delegated to `RAIL-HO-WP-0008` and `RAIL-BS-WP-0014`. Evidence:
|
||||
`docs/evidence/RESOURCE-WP-0003-optimization-cases-2026-08-14.md`.
|
||||
|
||||
## T07 — Establish portfolio reporting and operating cadence
|
||||
|
||||
```task
|
||||
id: RESOURCE-WP-0003-T07
|
||||
status: done
|
||||
priority: medium
|
||||
state_hub_task_id: "3927e658-6807-4737-ae15-ea1997dc210f"
|
||||
```
|
||||
|
||||
Publish a portfolio view covering coverage, lifecycle, capacity, utilization,
|
||||
forecast and actual variance, unattributed cost, renewals, risks, and open
|
||||
optimization opportunities. Report missing evidence and unapportioned cost
|
||||
rather than forcing false precision.
|
||||
|
||||
Define monthly observation, quarterly model calibration, and pre-renewal review
|
||||
cadences with named inputs and consumers.
|
||||
|
||||
Done when an operator can identify material spend, idle or saturated capacity,
|
||||
forecast error, approaching commitments, and the next evidence-backed action.
|
||||
|
||||
Completed 2026-08-14: added `tools/portfolio_report.py` and
|
||||
`make portfolio-report`, rendering coverage, lifecycle, utilization, cost,
|
||||
renewals, risks, open cases, and next actions from committed evidence only, plus
|
||||
the cadence in `docs/portfolio-operating-cadence.md`. The report refuses false
|
||||
precision: portfolio spend is `null` rather than a partial sum, unattributed
|
||||
cost is a named list rather than a spread, and unmeasurable resources are
|
||||
reported instead of dropped. Against the current portfolio it reports spend as
|
||||
unknown, railiance01 and the k3s cluster as idle at 14 percent CPU and 37 percent
|
||||
memory, no computable forecast error, no dated commitments but six active
|
||||
resources with no contract dates at all, and six of seven resources sharing
|
||||
`host:railiance01`. Evidence:
|
||||
`docs/evidence/RESOURCE-WP-0003-portfolio-reporting-2026-08-14.md`.
|
||||
|
||||
## Acceptance
|
||||
|
||||
- [x] Portfolio schema and lifecycle rules cover the initial resource classes.
|
||||
- [x] The fin-hub authority and exchange contract is jointly reviewed.
|
||||
- [x] Helix Forge, Coulomb Social, shared Railiance, and tenant coverage is
|
||||
measured.
|
||||
- [x] Missing source evidence has live delegated work records.
|
||||
- [x] Forecast-to-actual control works for storage and non-storage resources.
|
||||
- [x] At least two optimization cases complete the evidence-to-decision loop.
|
||||
- [x] Portfolio reporting exposes unknown and unattributed values explicitly.
|
||||
|
||||
## Standing gate
|
||||
|
||||
Both optimization cases are `blocked_on_evidence` by design: the mechanism is
|
||||
complete and proven, and the facts it needs are owed by other repositories.
|
||||
The first *decided* case requires either the Host Europe account evidence that
|
||||
`RESOURCE-WP-0002-T03` and `RAIL-HO-WP-0008` are waiting on, or the cluster
|
||||
utilization history in `RAIL-BS-WP-0014`. The first real forecast-to-actual
|
||||
variance requires a booked cost from `fin-hub` under `FIN-WP-0004`. None of
|
||||
these is a gap in this workplan; each is a live delegated record with an owner.
|
||||
Loading…
Add table
Add a link
Reference in a new issue