Commit graph

2 commits

Author SHA1 Message Date
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