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>
64 lines
2 KiB
Markdown
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.
|