diff --git a/demand/CapabilityConsumptionLineage.md b/demand/CapabilityConsumptionLineage.md new file mode 100644 index 0000000..619e8af --- /dev/null +++ b/demand/CapabilityConsumptionLineage.md @@ -0,0 +1,142 @@ +# Demand: Capability consumption lineage, plan entitlement structure, and intelligence cost quality + +**Status:** inbound demand (un-reviewed) +**Date:** 2026-08-15 +**Source:** fin-hub (consumer), domain `financials` +**Target artifacts:** `ITC-CAP` §4.12 `CapabilityConsumption`; `commerce.entitlement`, `commerce.metering` (OQ-5); `intelligence.generation` quality dimensions +**Consumer evidence:** `FIN-WP-0007` T00–T06; `fin-hub/docs/ai-plan-token-effectiveness.md` +**Consumer copy:** `fin-hub/docs/demand-capability-consumption-lineage.md` +**Does not block:** `FIN-WP-0007` T01–T06 (already implemented against the current proposed model) + +--- + +## Demand signal + +Consumer **fin-hub** owns booked financial facts, plan entitlements, and +reporting overlays for AI-plan spend. It has just built a working dataset +that joins: + +1. booked monthly plan invoices, +2. entitled capacity (or explicit unknown), +3. State Hub session-token aggregates (`measured` / `derived` / `estimated` + / excluded / unknown residual), +4. work outcomes, + +without treating missing tokens as zero and without posting estimates as +booked spend. + +ITC-CAP 0.2.0 / canon 0.3.0 was the vocabulary that made this possible: +class `I` native unit `token`, unknown is never zero, currency is an +overlay, no H↔I exchange rate. This demand is a request to refine a +model that is already in use, not to replace one that is not. + +The three gaps below showed up the moment the dataset had to distinguish +*how a token quantity was obtained* and *what a plan entitles*. + +--- + +## Finding A — `CapabilityConsumption` has a quantity or `unknown`, and no lineage + +ITC-CAP §4.12 records one native-unit row on a provision. Unknown is +allowed. That is necessary and not sufficient. + +Fin-hub now stores the same token total as: + +- measured (State Hub `measured`), +- derived (State Hub `allocated`, method required), +- estimated, +- unknown residual (no includable events), +- or a declared plan label with no quantity (Claude “Max 20×”). + +Those are different claims. A number without a qualifier cannot be +compared across months: an effectiveness trend that mixes them is +estimator drift. ITC-DATA already has the lineage states +`declared / inferred / observed / verified / unknown` (and +`conflicting`). Capability consumption should reuse that scale, not +grow a local dialect. + +resource-control independently converged on an ordered evidence-basis +(`invoiced` … `unknown`) for the same reason. Fin-hub maps State Hub +kinds onto that basis. The canon should name the qualifier on the +consumption row so both consumers point at one vocabulary. + +**Proposed:** every `CapabilityConsumption` carries a lineage or +evidence-basis qualifier drawn from ITC-DATA (or an explicit mapping to +it). Unknown remains a missing quantity, never zero. A declared plan +capacity without a token ceiling is `declared` plus a label, not an +invented integer. + +--- + +## Finding B — `commerce.entitlement` and `commerce.metering` are still unanchored + +OQ-5 remains open for invoices and entitlements. Fin-hub had to invent +a local plan-entitlement record (`token` / `multiplier` / `plan`, +append-only revisions, unknown requires a label) because the catalog +names the abilities and gives them no structure. + +What we needed, and implemented privately: + +- a plan-period entitlement that is not an invoice, +- a meter that can be incomplete (coverage < 1 is a first-class + state, not a failed month), +- a join of booked euros to entitled capacity that does not silently + cross currencies. + +That is `commerce.entitlement` (profiles `plan`, `capacity`) and +`commerce.metering` (quality dimensions `accuracy`, `completeness`). +Without an owning model, every financial consumer will grow a private +entitlement schema. + +**Proposed:** enough structure — not a billing system — for plan +capacity, incomplete meters, and the rule that a meter gap is not a +zero reading. Invoices stay with fin-hub. This is OQ-5 firing for +entitlements and meters, not for payments. + +--- + +## Finding C — `intelligence.generation` lists `cost` as a quality dimension + +ITC-CAP §4.12 says currency is not a resource class and not a native +unit. Collapsing tokens into euros at capture time is the defect the +class set exists to prevent. + +`intelligence.generation` still declares quality dimension `cost`. +That invites a provision to treat euros as a quality of generation, +which fights §4.12 and `intelligence_intensity` (tokens per unit of +output). Fin-hub’s effectiveness report keeps implied €/token as an +*inferred overlay*, labelled as such, and refuses a blended +efficiency number. + +**Proposed:** drop `cost` from `intelligence.generation` (and any +sibling that copied it), or re-home it as a non-normative reporting +overlay owned outside ITC-CAP. Keep `intelligence_intensity` as the +quality of a provision that consumes `I`. + +--- + +## What this demand is not + +- A request that InfoTechCanon own booked-cost semantics or ledgers. +- A canonical token↔euro or token↔hour rate. +- Vendor plan names, context windows, or list prices. +- A patch from this repository. T01–T06 shipped against the current + proposed model and stay done regardless of this demand. + +--- + +## Success criteria + +1. `CapabilityConsumption` can say how a native-unit quantity was + obtained, using ITC-DATA lineage states or a published mapping. +2. A plan entitlement and an incomplete meter can be expressed in + canon terms without a private fin-hub schema. +3. `intelligence.*` quality dimensions no longer name `cost` as if it + were a native quality of generation. +4. Fin-hub can restate one AI-plan month — booked fact, entitlement, + measured/estimated/unknown tokens, work, three effectiveness + series — entirely in canon terms. + +Criterion 4 is offered as a second real-provision proof, this time +for class `I`, alongside resource-control’s backup restatement for +class `S`.