Commit graph

18 commits

Author SHA1 Message Date
10b988fa1c feat(wp-0002): complete T07 — control loop on the live backup resource
The backup is procured and proven, so the loop runs on real evidence.

- data/actuals/2026-08.json: first real observation. database 0.6365 GB,
  stored 0.0066 GB over 8 objects, backup success 1/1, restore RTO 1.08 min.
  Five proxies null, each with a named owner in measurement_gaps.
- data/thresholds/platform-audit-storage.json + tools/thresholds.py: budget
  variance, abnormal growth, stale backup, unused commitment. Fail-closed —
  an unmeasured value is reported as unmeasured, never as within.
- financial_exchange.py gains a usage mode emitting technical_usage records to
  fin-hub, with measurement gaps carried through and no infrastructure amount:
  fin-hub owns the booked fact and a null is never sent as 0.00.
- observation schema 0.2 allows null cost and usage proxies; variance.py fails
  closed rather than reporting a 100% favourable variance on a missing amount.
- platform-audit-storage: ordered -> active, commissioned 2026-08-14, on
  operational fact rather than on the purchase.

The optimization case is now approved by the founder. That needed a schema
change: Host Europe never supplied written terms, so options gained
excluded/exclusion_reason. Previously an unevaluable alternative blocked its
case forever, leaving the record claiming no decision while the bucket was in
production. An excluded option keeps its unknowns and must say what would
bring it back.

August produces no variance and should not: the decision forecast starts at
2026-09, so August is a commissioning baseline. Threshold run is 2 within,
1 not applicable, 6 unmeasured, 0 breaches.

Also fixes a pre-existing test failure: reef-storage consumers_actual is now
rapp-postgres, which the assertion still expected to be empty.

136 tests pass.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-14 20:53:12 +02:00
9e3434052a feat: finish WP-0002 T06 independent logical-copy lane
Reuse CCR-2026-0004 Nextcloud+age. audit_core restored from the
encrypted dump without touching Scaleway.
2026-08-14 20:47:16 +02:00
085c1534e0 feat: complete WP-0002 T05 full restore and PITR
First Backup 48s. Full restore 65s (audit_core 30=30). PITR 65s
after retarget (keep present, destroy absent). Scratch namespace
deleted. Production stayed Ready.
2026-08-14 20:24:30 +02:00
e665975bcd feat: finish WP-0002 T04; T05 is unblocked
Secret databases/platform-pg-backup-s3 is synced. Cluster stays
fail-closed until T05 enables barmanObjectStore.
2026-08-14 20:00:16 +02:00
314e3abe67 note: WP-0002 T04 prefix-scoped bucket policy is live 2026-08-14 19:55:54 +02:00
9381cf6535 note: WP-0002 T04 backup key verified; Secret still not vended 2026-08-14 19:34:40 +02:00
644d5391bd retarget: T04 backup key is resource-control, not Barman
Handle becomes secret:railiance-platform/backup. IAM application is
resource-control; policy and API key are Scoped backup access.
2026-08-14 19:19:56 +02:00
155446dc51 progress: start WP-0002 T04 Barman credential lane
Bootstrap key cannot create IAM. CCR, mason plan, and founder
put path are next; WAL stays disabled.
2026-08-14 19:01:08 +02:00
a78bfcd9d5 note: accept Scaleway email alert as spend backstop
No euro hard-stop exists. Founder email billing alert is the
provider-native tripwire; T04 remains the scoped key.
2026-08-14 18:53:56 +02:00
89d921355c chore: unblock WP-0002 T04 now that the bucket exists 2026-08-14 18:29:53 +02:00
custodian-sync
6006881360 chore(consistency): sync task status from DB [auto]
Updated by fix-consistency on 2026-08-14:
  - RESOURCE-WP-0002-T04: todo → wait
2026-08-14 18:28:59 +02:00
a6ac303d98 feat: order Scaleway backup bucket for WP-0002 T03
Policy now allows Object Storage. Inventory moves proposed -> ordered
with provider_resource_id and reef-storage attribute refs. Cost alert
remains a founder console action; scoped Barman key is T04.
2026-08-14 18:28:27 +02:00
1a9daf93ef note: WP-0002 T03 blocked on Scaleway Object Storage IAM 2026-08-14 17:48:04 +02:00
2ebc000f04 docs: approve WP-0002 T03; wait on OpenBao bootstrap key
Human approved the Scaleway buy. Decision and inventory record
approved_on 2026-08-14. Bucket not created until the bootstrap key
is in OpenBao.
2026-08-14 16:58:44 +02:00
f9af7518f5 feat: WP-0002 T03 selection decision, wait on purchase
Recommend Scaleway Multi-AZ nl-ams. Inventory stays proposed with
description, decision, reef: refs, secret: handle, and consumers.
Human approval required before ordered.
2026-08-14 16:18:16 +02:00
5b2435cb58 docs: reef attribute refs and resource object workplan
Publish the operational reference convention (reef: and secret:
handles). Add a resource-control view of reef-railiance that excludes
S3. Open RESOURCE-WP-0006 for the five-facet inventory model.
2026-08-14 15:44:44 +02:00
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
custodian-sync
559d322d10 chore(consistency): renormalize lifecycle state [auto]
Updated by fix-consistency on 2026-08-10:
  - workplan status: ready → active
2026-08-10 17:46:09 +02:00