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
25
Makefile
Normal file
25
Makefile
Normal file
|
|
@ -0,0 +1,25 @@
|
|||
.PHONY: test forecast variance control-cycle exchange-forecast optimization portfolio-report
|
||||
|
||||
test:
|
||||
python3 -m unittest discover -s tests -p 'test_*.py'
|
||||
python3 tools/validate.py
|
||||
|
||||
forecast:
|
||||
python3 tools/cost_model.py data/demand/platform-audit-storage.json data/providers/object-storage.json
|
||||
|
||||
variance:
|
||||
@test -n "$(ACTUAL)" || { echo 'ACTUAL=data/actuals/YYYY-MM.json is required' >&2; exit 2; }
|
||||
python3 tools/variance.py data/forecasts/platform-audit-storage-scaleway-base-2026-08.json $(ACTUAL)
|
||||
|
||||
control-cycle:
|
||||
@test -n "$(FORECAST)" -a -n "$(ACTUAL)" || { echo 'FORECAST=... ACTUAL=... are required' >&2; exit 2; }
|
||||
python3 tools/control_cycle.py $(FORECAST) $(ACTUAL)
|
||||
|
||||
exchange-forecast:
|
||||
python3 tools/financial_exchange.py forecast data/forecasts/platform-audit-storage-scaleway-base-2026-08.json
|
||||
|
||||
optimization:
|
||||
python3 tools/optimization.py $(CASE)
|
||||
|
||||
portfolio-report:
|
||||
python3 tools/portfolio_report.py .
|
||||
Loading…
Add table
Add a link
Reference in a new issue