resource-control/docs/evidence/RESOURCE-WP-0003-fin-hub-contract-preflight-2026-08-11.md
tegwick 2c2a6073ff 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

64 lines
2 KiB
Markdown

# RESOURCE-WP-0003 fin-hub contract preflight
Date: 2026-08-11
Resource-control task: `RESOURCE-WP-0003-T02`
Fin-hub tasks: `FIN-WP-0004-T01`, `T02`, `T03`, `T07`, `T08`, `T09`
Fin-hub commit: `0034330`
## Result
Resource-control accepts the authority and schema boundary in the joint v0.1
contract. Fin-hub's remediation was reviewed against the timestamped
assessment and its full suite passed:
```text
46 passed, 1 third-party deprecation warning
```
Resource-control's suite passed after adding its producer-owned schema,
forecast exporter, booked-cost consumer validation, and reconciliation seam:
```text
13 passed
resource-control declarations: valid
```
## Cross-repository check
The live immutable backup forecast
`data/forecasts/platform-audit-storage-scaleway-base-2026-08.json` was processed
through both implementations using:
- resource-control `tools/financial_exchange.py::forecast_records`; and
- fin-hub `fin_hub.services.exchange::ingest_resource_forecast`.
Observed result:
```json
{
"producer_consumer_records": 12,
"idempotent_store_rows": 12,
"payloads_equal": true,
"booked_cost_gate": "awaits attributable provider fact"
}
```
Replaying the same forecast did not add rows. All canonical record payloads
matched, including IDs, periods, cost breakdown, attribution, assumptions, and
provenance reference.
## Residual acceptance gate
This preflight proves the planning direction; it is not evidence of purchased
storage or actual spend. `FIN-WP-0004-T05` remains waiting until
`RESOURCE-WP-0002` produces a real provider financial fact attributable to
`platform:audit-storage`. That round trip must then demonstrate:
1. exactly one authoritative booked fact in fin-hub;
2. a non-ledger projection consumed by resource-control;
3. a join to the immutable forecast and technical observation;
4. infrastructure-cost variance with the financial fact ID preserved; and
5. duplicate delivery and any correction leaving effective totals correct.
Synthetic records remain suitable for automated contract tests but cannot
satisfy this operational gate.