Commit graph

64 commits

Author SHA1 Message Date
40a39d66a2 docs(agents): repoint remote State Hub URL to the in-cluster address
The remote row pointed at 127.0.0.1:18000, a reverse tunnel back to the
workstation. On railiance01 the State Hub runs in the cluster on that same
machine, so the request left the box and came back to reach a local service.

Refs CUST-WP-0067-T07

Assistant: claude-code
Assistant-Model: opus
Assistant-Process: 2583210@bnt-lap001
Assistant-Session: f2bff2d5-e9b2-4338-92ca-10282a927006
2026-08-25 00:22:00 +02:00
7a196b6265 feat: adopt canon 0.4.0-0.6.0 — EvidenceBasis is canon, uses_provisions is canon
Both demands were accepted. Adopting what landed.

EVIDENCE BASIS IS NOW ITC-GOV CANON (0.4.0)
tools/basis.py reads infospace/models/governance/evidence-basis.yaml instead of
defining its own vocabulary — same discipline we already applied to the
capability catalog. Two semantic changes came back that we did not have:

- estimated and assumed are peers in tier "judgement". We had them separately
  ranked, which asserted a difference the canon does not.
- derived belongs to no tier at all; asking for its tier before resolving it is
  now an error rather than a silent rank.

Tier membership is read from tiers[].members, not bases[].tier: the latter
labels invoiced/measured/quoted all as "evidenced" while the tier list splits
them across "observed" and "quoted". tiers[] is authoritative; reported upstream.

USES_PROVISIONS IS NOW CANON (0.5.0, CAP-R11)
Dropped the proposed_extensions marker. Renamed relation "uses" to "may_use" per
their migration note. tools/capability.py now enforces CAP-R11: relation must be
depends_on or may_use, a provider must be named, and a depends_on entry MUST be
declared between those capabilities in the catalog. data.backup gained catalog
may_use: security.secrets from our restatement, so our entry now checks out.

Also in 0.4.0: §10.3 changed so a joinable consumer record counts as promotion
proof, met by our restatement; ITC-CAP is now 0.4.0 / canon 0.6.0, status draft.
Record and tests updated to those versions.

196 tests pass.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-15 19:57:46 +02:00
b8081f6c2d fix: correct the P-row misuse and the basis tier ordering
Both from info-tech-canon's review of the restatement.

STRAIN 1 — credential custody was recorded as one unit of class P consumption.
P is purchased platform capacity, and using security.secrets buys none. Removed
the row; the relationship now sits in provisions[].uses_provisions alongside the
object-store dependency, marked explicitly as a proposed extension because
ITC-CAP declares no provision-to-provision relation. Filed as
info-tech-canon/demand/ProvisionRelationships.md (their commit ce17dc4).

BASIS TIERS — their point about invoiced being a fin-hub fact we name rather
than originate exposed a real bug: a strict list order made weakest(["invoiced",
"measured"]) return "measured", implying an invoice outranks a measurement. It
does not outside its own domain. Strength is now a tier — invoiced and measured
are peers, quoted below both — with ties broken deterministically by catalog
order without implying a difference that does not exist.

Also filed info-tech-canon/demand/EvidenceBasis.md at their request, proposing
ITC-GOV as owner rather than ITC-CAP.

187 tests pass.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-15 19:02:58 +02:00
13c2b82281 feat: restate the backup case in ITC-CAP terms; add evidence basis; publish consumption-mode signal
Three things.

1. CANON RESTATEMENT (info-tech-canon's ask after accepting our demand)
data/capability/platform-audit-storage.json restates the backup case against
ITC-CAP 0.2.0: requirement with profile, targets and the failure-domain
constraint that decided the procurement; two provisions (data.object and
data.backup); all four data.backup evidence hooks satisfied and measured; and
consumption in native units — GB, hours, tokens — with unknown never zero.

tools/capability.py reads their capabilities.yaml directly rather than copying
it, so drift in either repo fails here. The requirement asks D5, the provision
is D4, and the review reports below_requirement rather than inflating maturity.

2. EVIDENCE BASIS (tools/basis.py, docs/evidence-basis.md)
Every value declares how it was obtained on an ordered scale: invoiced,
measured, quoted, derived, projected, estimated, assumed, unknown. A derived
value resolves to the weakest basis among its inputs, so precise arithmetic
cannot launder weak assumptions.

First application is a finding about our own biggest decision: the Scaleway vs
Hetzner comparison, EUR 29.14/month stated to the cent, grades "indicative" —
1 of 4 load-bearing values evidenced, weakest "assumed". The direction is
robust; the magnitude is a model output. The cheapest fix is recording real
operator hours, not better arithmetic.

3. CONSUMPTION-MODE SIGNAL (railiance-platform RAILIANCE-WP-0017)
settlement.py gains a consumption-mode command projecting statements into the
signal they consume; make consumption-mode PERIOD=YYYY-MM publishes
data/consumption-mode/current.json. Currently an empty list: no live charges for
2026-09, so no entity is restricted. Publishing the empty list makes that an
assertion rather than an absence, which their contract distinguishes. The
validator fails if the published signal is stale.

185 tests pass.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-15 18:42:06 +02:00
custodian-sync
d09924b3fc chore(consistency): sync task status from DB [auto]
Updated by fix-consistency on 2026-08-15:
  - update .custodian-brief.md for resource-control
2026-08-15 02:48:40 +02:00
a1a56a176b chore: refresh WORK-RECORDS and SCOPE after WP-0006 finished 2026-08-15 02:48:19 +02:00
custodian-sync
cc1f8f4a4f chore(consistency): sync task status from DB [auto]
Updated by fix-consistency on 2026-08-15:
  - update .custodian-brief.md for resource-control
2026-08-15 02:47:53 +02:00
dafc812daa feat: migrate live inventory to five-facet 0.3 and close WP-0006
All seven data/resources records now carry description, decision,
reef/secret refs, and potential vs actual consumers. Discovered
resources use decision.status: gap. Validators require live inventory
to be 0.3. WP-0006 T03 done; workplan finished.
2026-08-15 02:47:31 +02:00
6e57a65360 chore: refresh WORK-RECORDS after WP-0006 T01 T02 T04 2026-08-15 02:41:11 +02:00
custodian-sync
8ebe6eebc4 chore(consistency): sync task status from DB [auto]
Updated by fix-consistency on 2026-08-15:
  - update .custodian-brief.md for resource-control
2026-08-15 02:41:10 +02:00
34a014a896 feat: inventory schema 0.3 and close WP-0006 T01 T02 T04
v0.2 records stay valid. v0.3 requires the five facets. Validators
reject inline Scaleway endpoints and secret-looking strings. The
backup record is the first 0.3 object. Reef views already met T02.
2026-08-15 02:40:43 +02:00
custodian-sync
a9830f3109 chore(consistency): sync task status from DB [auto]
Updated by fix-consistency on 2026-08-15:
  - update .custodian-brief.md for resource-control
2026-08-15 02:32:40 +02:00
315b38ff9a feat(wp-0002): resolve the Host Europe evidence gap; WP-0002 finished
Account holder confirmed 2026-08-15 that Host Europe offers no fully managed S3
and no API to provision storage. That is a blocking answer, which T02's
acceptance criterion permits alongside evidence and unknown.

- host-europe-cloud-storage: blocked-account-confirmation -> not-offered, with
  provenance recorded as account-holder knowledge rather than vendor-written
  confirmation. The 2020 published specification describes nothing currently
  orderable.
- T02 done: no acceptance requirement is blank for any provider.
- T01 done: the A/B/C comparison was never missing a leg. With no managed S3 to
  price, Host Europe's real form is self-managed Garage on their VMs, already
  priced from the public catalogue at EUR 335.77/month for 3 nodes — roughly 5x
  the chosen Scaleway option, and it fails closed at month 12 when base demand
  (458 GB) exceeds the 400 GB usable capacity.

The missing evidence would not have changed the decision; it strengthens it.

The 2026-08-10 due-diligence matrix and the approved optimization case are
deliberately not rewritten. A decision record documents what was known when the
decision was made; the new evidence document is the supersession.

"No provisioning API" is filed as a procurement-facility fact: any Host Europe
resource is manually provisioned, which is RESOURCE-WP-0005 and RAIL-HO-WP-0008
territory, not a pricing question.

RESOURCE-WP-0002 is finished: all seven tasks done. 136 tests pass.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-15 02:32:25 +02:00
custodian-sync
1043f17ea7 chore(consistency): sync task status from DB [auto]
Updated by fix-consistency on 2026-08-14:
  - update .custodian-brief.md for resource-control
2026-08-14 20:53:25 +02:00
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
2704292d45 chore: refresh WORK-RECORDS after WP-0002 T06 done 2026-08-14 20:47:47 +02:00
custodian-sync
ba950076b0 chore(consistency): sync task status from DB [auto]
Updated by fix-consistency on 2026-08-14:
  - update .custodian-brief.md for resource-control
2026-08-14 20:47:46 +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
9bf21beddc chore: refresh WORK-RECORDS after WP-0002 T05 done 2026-08-14 20:24:58 +02:00
custodian-sync
1f8e59daf9 chore(consistency): sync task status from DB [auto]
Updated by fix-consistency on 2026-08-14:
  - update .custodian-brief.md for resource-control
2026-08-14 20:24:52 +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
d2b64929a3 chore: refresh WORK-RECORDS after WP-0002 T04 done 2026-08-14 20:00:47 +02:00
custodian-sync
00ca653d59 chore(consistency): sync task status from DB [auto]
Updated by fix-consistency on 2026-08-14:
  - update .custodian-brief.md for resource-control
2026-08-14 20:00:42 +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
3241bace3c chore: refresh WORK-RECORDS after WP-0002 T04 start 2026-08-14 19:01:49 +02:00
custodian-sync
0fddf97580 chore(consistency): sync task status from DB [auto]
Updated by fix-consistency on 2026-08-14:
  - update .custodian-brief.md for resource-control
2026-08-14 19:01:41 +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
8d5453fd6c chore: refresh WORK-RECORDS after WP-0002 T03 done 2026-08-14 18:29:40 +02:00
custodian-sync
586e143abc chore(consistency): sync task status from DB [auto]
Updated by fix-consistency on 2026-08-14:
  - update .custodian-brief.md for resource-control
2026-08-14 18:29:06 +02:00
custodian-sync
94d09c712f chore(consistency): renormalize lifecycle state [auto]
Updated by fix-consistency on 2026-08-14:
  - workplan status: ready → active
2026-08-14 18:28:59 +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
9d11d2a043 feat: resource-control view of reef-storage
Project the planned Scaleway backup bucket onto the new storage reef.
2026-08-14 15:53:30 +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
custodian-sync
4b8fc909e6 chore(consistency): sync task status from DB [auto]
Updated by fix-consistency on 2026-08-14:
  - update .custodian-brief.md for resource-control
2026-08-14 15:44:10 +02:00
f8d1c542d5 feat: operational resource procurement facility
Implement RESOURCE-WP-0005: entity register, V0.1 terms parameters,
entity association on inventory and planning records, transfer-price
and credit-state arithmetic, monthly settlement, and entity views on
the portfolio report. Live close emits nothing until delivered cost
is known. Handoffs are FIN-WP-0006 and RAILIANCE-WP-0017.
2026-08-14 13:15:02 +02:00
custodian-sync
325a505980 chore(consistency): sync task status from DB [auto]
Updated by fix-consistency on 2026-08-14:
  - update .custodian-brief.md for resource-control
2026-08-14 13:14:37 +02:00
24b8b27b40 workplan: RESOURCE-WP-0005 resource procurement facility
Spawn the operational build as a residual of RESOURCE-WP-0004. Finish
the terms workplan (T01 done; T02–T05 cancelled as superseded) and
point the terms document at the facility tasks.
2026-08-14 11:37:29 +02:00
custodian-sync
06f17f4238 chore(consistency): sync task status from DB [auto]
Updated by fix-consistency on 2026-08-14:
  - update .custodian-brief.md for resource-control
2026-08-14 11:37:12 +02:00
1274286323 docs: confirm 5% p.a. interest and document the squeeze
OQ-1 is resolved: overdue interest is 5% per year. Record the credit
limit as a risk bound that strangles a degenerated cost center instead
of killing it on the first missed settlement.
2026-08-14 11:32:45 +02:00
89b9b55c43 docs: Terms of Resource Procurement V0.1
Publish the baseline profit-center framework for Binky, Frontier,
Railiance, Netkingdom, Helixforge, and Coulomb. Railiance procures and
manages IT resources; other centers settle monthly at cost plus 20%.
Wire INTENT, SCOPE, and the portfolio cadence to the terms, and open
RESOURCE-WP-0004 for schema and settlement adoption.
2026-08-14 11:20:10 +02:00
custodian-sync
1448354fb4 chore(consistency): sync task status from DB [auto]
Updated by fix-consistency on 2026-08-14:
  - update .custodian-brief.md for resource-control
2026-08-14 11:19:44 +02:00