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>
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>
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.
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.
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>
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>
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.
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.
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.
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.
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.
First delegated evidence from RESOURCE-WP-0003-T04 to land. railiance-platform
delivered apps-pg capacity, utilization, consumers, and the apps-pg-dbbytes-v1
allocation driver, and correctly delivered no EUR.
- data/resources/apps-pg.json: real capacity; allocation unattributed -> shared
under apps-pg-dbbytes-v1; second consumer vergabe-teilnahme registered
- data/control-cycle/apps-pg-2026-09-base.json: first operational control-cycle
record in the repository
- examples/control-cycle/apps-pg-*.json retired; the invented fixture collided
with the real record's identifier
- data/portfolio-coverage-2026-08-14.json: gap marked delivered with three
residual unknowns still open
The real evidence exposed a design gap in the T05 schema: v0.1 required a number
for every cost field, so recording genuine usage without a booked cost meant
inventing one. Schema 0.2 permits null costs, null unattributed_eur, a technical
unattributed_share, and null measurements. Null is unknown, never zero; an
unknown component makes the total null rather than the sum of the known parts;
and the comparator classifies unknown amounts as data_quality instead of
computing a variance. Existing 0.1 records are not rewritten.
apps-pg is now measured (idle at 5.8% of volume) and attributed, and remains
unpriced: delivered technical evidence does not create a booked cost.
86 tests pass.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
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>