Canon 0.4.0: joinable consumer proof and EvidenceBasis
All checks were successful
CI Smoke / host-smoke (push) Successful in 0s
CI Smoke / container-smoke (push) Successful in 1s

§10.3 now accepts a consumer record that validates against the live
catalog; resource-control's backup restatement is that proof. ITC-GOV
gains EvidenceBasis in tiers (invoiced and measured are peers) and
ITC-CAP requires it on every consumption row (CAP-R10).
This commit is contained in:
tegwick 2026-08-15 19:14:11 +02:00
parent ce17dc4d4d
commit f2d216af53
29 changed files with 605 additions and 127 deletions

View file

@ -1066,6 +1066,53 @@ meeting decision
audit sample
```
A quantity offered as evidence MUST declare an **EvidenceBasis** (§11.34a)
so a decision can be graded by the weakest thing it actually rests on.
---
## 11.34a EvidenceBasis
An **EvidenceBasis** is how a quantity was obtained. A counted object and an
assumed hourly rate are both numbers; they are not both knowledge.
The closed vocabulary is held in `models/governance/evidence-basis.yaml` and
is not restated as a second list here. Strength is a **tier**, not a total
order: `invoiced` and `measured` are peers. `invoiced`, `measured`, and
`quoted` are **evidenced**. Everything below that tier is inference.
Normative rules:
- A derived value is only as strong as its weakest input, compared by
tier. Members of the same tier do not rank against each other.
- Basis `unknown` carries no quantity and MUST name the gap and its owner.
Any other basis MUST carry a quantity. Zero means measured-and-none;
unknown means not measured.
- A derived value MUST record its inputs. Only a derived value may.
- `invoiced` names a booked financial fact owned by the financial counterpart
(`fin-hub`). This model does not originate booked costs.
Optional qualifiers: `proxy_for` (the value measures a different quantity
than the one being reasoned about) and `observed_at` (the measurement has an
age).
A set of load-bearing values has a **decision grade**: `evidenced`,
`projected`, `indicative`, or `insufficient`. The grade is no stronger than
the weakest resolved basis.
EvidenceBasis is not the intended/declared/applied/observed/assessed state
qualifier (assimilation OQ-3). Those name *which world* a claim is about.
This names *how a number* in that world was produced.
Imported by ITC-CAP `CapabilityConsumption` (CAP-R10). Reusable on any
measured or modelled quantity — actuals, thresholds, forecasts — without
those records becoming capability artifacts.
**Provenance.** Adapted from consumer demand `demand/EvidenceBasis.md`
(resource-control `docs/evidence-basis.md` / `tools/basis.py`), 2026-08-15.
The first application graded a provider comparison `indicative` that had
been stated to the cent.
---
## 11.35 Assertion

View file

@ -0,0 +1,110 @@
# InfoTechCanon Evidence Basis Catalog
#
# How a quantity was obtained. Owned by ITC-GOV; imported by CapabilityConsumption
# (CAP-R10) and reusable on any measured or modelled value.
#
# Adapted from demand/EvidenceBasis.md (resource-control). Strength is a tier,
# not a total order: invoiced and measured are peers. The consumer's first
# implementation used a strict list rank and corrected it.
canon:
id: itc-gov-evidence-basis
name: InfoTechCanon Evidence Basis
artifact_id: catalog/evidence-basis
version: 0.1.0
status: draft
canon_version: 0.4.0
owner: model/governance
purpose: Closed scale for how a quantity was obtained, with a propagation rule
and decision grades. Tiers, not a spurious total order.
normative_document: models/governance/InfoTechCanonGovernanceModel.md
provenance:
demand: demand/EvidenceBasis.md
consumer: resource-control
consumer_docs:
- docs/evidence-basis.md
- tools/basis.py
bases:
- id: invoiced
tier: evidenced
description: Taken from an authoritative financial record. This canon names
the basis; it does not originate booked costs, tax, or currency semantics.
- id: measured
tier: evidenced
description: Directly observed from the authoritative system.
- id: quoted
tier: evidenced
description: Stated by a provider or counterparty in a citable source.
- id: derived
tier: null
description: Computed from other values by a stated rule. Not a resolved
tier — effective basis is the weakest input.
- id: projected
tier: projected
description: Interpolated between, or extrapolated beyond, observations.
- id: estimated
tier: judgement
description: Human judgement, neither observed nor computed.
- id: assumed
tier: judgement
description: A modelling constant chosen by the author.
- id: unknown
tier: unknown
description: No value exists. MUST NOT carry a quantity. MUST name the gap
and its owner.
# Strongest to weakest. Members of one tier are peers: weakest() among only
# invoiced and measured MUST NOT imply a ranking.
tiers:
- id: evidenced
rank: 0
members: [invoiced, measured, quoted]
note: invoiced and measured are peers. quoted is evidenced for grading but
does not outrank or sit below a measurement of a different quantity.
- id: projected
rank: 1
members: [projected]
- id: judgement
rank: 2
members: [estimated, assumed]
note: both yield decision grade indicative; they are not ranked against
each other.
- id: unknown
rank: 3
members: [unknown]
rules:
- id: weakest-input-wins
statement: A derived value is only as strong as its weakest input, compared
by tier. Members of the same tier do not rank against each other.
- id: unknown-is-not-zero
statement: Basis unknown carries no quantity. Any other basis MUST carry a
quantity. Zero means measured-and-none; unknown means not measured.
- id: derived-names-inputs
statement: A derived value MUST record derived_from. Only a derived value
MAY record derived_from.
- id: invoiced-not-originated
statement: invoiced names a booked fact owned elsewhere. This catalog does
not define ledger semantics.
- id: tiers-not-total-order
statement: Strength is a tier, not a total order. weakest([invoiced,
measured]) MUST NOT imply that one outranks the other.
qualifiers:
- id: proxy_for
description: The value measures a different quantity than the one being
reasoned about. It does not weaken the measurement; it weakens the
inference.
- id: observed_at
description: When a measurement was taken. Age and sample size are not
basis. A value may be measured and still be a single noisy sample.
decision_grades:
- id: evidenced
when: Every load-bearing value resolves to the evidenced tier.
- id: projected
when: The weakest resolved tier is projected.
- id: indicative
when: The weakest resolved tier is judgement (estimated or assumed).
- id: insufficient
when: At least one load-bearing value is unknown.
note: >
EvidenceBasis is how a quantity was obtained. It is not the
intended/declared/applied/observed/assessed state qualifier (OQ-3). Those
name which world a claim is about; this names how a number in that world
was produced.