ModelBased means a calibrated model: an unattested reading falls to what its evidence supports #223

Merged
dcharlot merged 2 commits from fix/model-based-means-calibrated into main 2026-10-12 08:42:35 -04:00
Owner

Why

ModelBased means a figure computed from a model that has something real behind it. Two places granted the grade without that.

JouleContract. A Metered tag whose meter attestation does not bind was always demoted to ModelBased. But JouleContract defines ModelBased (SPEC §4.2) as anchored to a metered baseline, with that anchor sealed. A receipt carrying neither a meter nor an anchor was therefore certified ModelBased on evidence it did not have.

WAI. WAI defined ModelBased as "a calibrated per-operation model (e.g. wall time × a power constant)", and the example licensed any constant.

What

  • joulecontract-receipt. An unbound reading is no reading. A Metered tag whose attestation does not bind now falls to the class its remaining evidence supports:

    • ModelBased where the metered-baseline anchor is sealed;
    • Unaccounted otherwise, with the unaccounted demotion.

    This holds on both the issue side and the sealed-evidence side. An anchor that does not resolve still demotes a ModelBased figure to Unaccounted afterwards. SPEC §4.2 and the §15 demotion table say so.

  • Conformance. The metered_unattested negative vector, regenerated by gen_vectors, now composes to ⟨JR-3 · Unaccounted · certified⟩ with the demotions metered_unattested and unaccounted. The other 21 vectors are byte-identical, and the MANIFEST digest is updated. A unit test pins both branches.

  • WAI. EnergyProvenance::ModelBased and the energy extension's class table now say "a model calibrated on the host it describes". A nominal TDP or a typical draw is Estimator, however it is multiplied. No vector carries the definition.

Conformance vectors elsewhere that exercise the ModelBased label with synthetic figures stay as they are: a vector is a test input, and the label set must stay covered.

Evidence

  • joulecontract-rs workspace: 84 passed, against the regenerated vectors.
  • joule-code dependents (joule-code-joulecontract, joule-code-remediate): 22 passed.
  • wai energy_class: 17 passed. The docs build with the new link resolving.

🤖 Generated with Claude Code

## Why `ModelBased` means a figure computed from a model that has something real behind it. Two places granted the grade without that. **JouleContract.** A `Metered` tag whose meter attestation does not bind was always demoted to `ModelBased`. But JouleContract defines `ModelBased` (SPEC §4.2) as anchored to a metered baseline, with that anchor sealed. A receipt carrying neither a meter nor an anchor was therefore certified `ModelBased` on evidence it did not have. **WAI.** WAI defined `ModelBased` as "a calibrated per-operation model (e.g. wall time × a power constant)", and the example licensed any constant. ## What - **joulecontract-receipt.** An unbound reading is no reading. A `Metered` tag whose attestation does not bind now falls to the class its remaining evidence supports: - `ModelBased` where the metered-baseline anchor is sealed; - `Unaccounted` otherwise, with the `unaccounted` demotion. This holds on both the issue side and the sealed-evidence side. An anchor that does not resolve still demotes a `ModelBased` figure to `Unaccounted` afterwards. SPEC §4.2 and the §15 demotion table say so. - **Conformance.** The `metered_unattested` negative vector, regenerated by `gen_vectors`, now composes to `⟨JR-3 · Unaccounted · certified⟩` with the demotions `metered_unattested` and `unaccounted`. The other 21 vectors are byte-identical, and the MANIFEST digest is updated. A unit test pins both branches. - **WAI.** `EnergyProvenance::ModelBased` and the energy extension's class table now say "a model calibrated on the host it describes". A nominal TDP or a typical draw is `Estimator`, however it is multiplied. No vector carries the definition. Conformance vectors elsewhere that exercise the `ModelBased` label with synthetic figures stay as they are: a vector is a test input, and the label set must stay covered. ## Evidence - **joulecontract-rs workspace:** 84 passed, against the regenerated vectors. - **joule-code dependents** (`joule-code-joulecontract`, `joule-code-remediate`): 22 passed. - **wai `energy_class`:** 17 passed. The docs build with the new link resolving. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
A Metered tag whose meter attestation did not bind was always demoted to
ModelBased, but ModelBased is defined (SPEC §4.2) as a figure anchored to
a metered baseline, with that anchor sealed. A receipt with no meter and
no anchor was therefore certified ModelBased on evidence it did not
carry. An unbound reading is no reading: the class now falls to
ModelBased only where the metered-baseline anchor is sealed, else to
Unaccounted (with the `unaccounted` demotion), on the issue side and on
the sealed-evidence side alike; an unresolved anchor still demotes a
ModelBased figure to Unaccounted after that.

SPEC §4.2 and the §15 demotion table say so. The metered_unattested
negative vector, regenerated by gen_vectors, now composes to
⟨JR-3 · Unaccounted · certified⟩ with demotions metered_unattested and
unaccounted; the other 21 vectors are byte-identical. A unit test pins
both branches (no anchor → Unaccounted; anchor → ModelBased).

Co-Authored-By: Claude Opus 5.5 <[email protected]>
wai: ModelBased means a model calibrated on the host it describes
Some checks failed
WAI HTTP delivery / HTTP corpus · verified both ways, and the differential (pull_request) Has been skipped
WAI HTTP delivery / cache rules · controls and labelled caches (pull_request) Has been skipped
wai-pack / wai-pack · does this change touch it (pull_request) Successful in 4s
WAI section references / cited sections exist (pull_request) Successful in 10s
wai-web reach builds / wai-web reach · does this change touch it (pull_request) Successful in 4s
wai-web wasm32 / wai-web wasm32 build · corpus, menu and writers (pull_request) Successful in 2m53s
WAI conformance / independent verifiers · claims, JWP, key discovery and integer payloads (Python) (pull_request) Successful in 16m43s
wai-pack / wai-pack · linux (pull_request) Successful in 1m25s
wai-pack / wai-pack · the floor through a media prober (pull_request) Successful in 22s
wai-pack / wai-pack · dependency licences (pull_request) Successful in 1m25s
wai-pack / wai-pack · independent verifier (Python) (pull_request) Successful in 4m4s
wai-web reach builds / wai-web reach builds · the package of record, every output as recorded (pull_request) Successful in 2m44s
wai-web reach builds / wai-web reach builds · this tree's wai-web, every rung on its engine line (pull_request) Successful in 4m11s
standards workspaces build + test / jouleclaw-rs (pull_request) Successful in 5m48s
standards workspaces build + test / aac-rs (pull_request) Successful in 5m10s
standards workspaces build + test / joule-code-rs (pull_request) Successful in 1m39s
standards workspaces build + test / joulecontract-rs (pull_request) Successful in 57s
standards workspaces build + test / map-rs (pull_request) Successful in 56s
standards workspaces build + test / mesh-rs (pull_request) Successful in 1m1s
standards workspaces build + test / openpay (pull_request) Successful in 4m44s
WAI conformance / cargo-class corpora · linux-arm64 (pull_request) Successful in 19m4s
WAI conformance / cross-arch byte-equality · linux-arm64 (pull_request) Successful in 54s
WAI energy receipts / energy receipts · linux-arm64 (pull_request) Successful in 4m44s
standards workspaces build + test / jouledesk-rs (pull_request) Successful in 4m15s
standards workspaces build + test / macOS energy backends (pull_request) Successful in 7m47s
wai-pack / wai-pack · linux-arm64 (pull_request) Successful in 1m32s
WAI conformance / cargo-class corpora · macos (pull_request) Failing after 1h4m46s
WAI conformance / cross-arch byte-equality · macos (pull_request) Successful in 8m11s
WAI energy receipts / energy receipts · macos (pull_request) Successful in 25m8s
wai-pack / wai-pack · macos (pull_request) Successful in 2m27s
24ba03db55
The ModelBased class was defined as "a calibrated per-operation model
(e.g. wall time × a power constant)", and the example licensed any
constant. The family's metering ladder grades only a host-calibrated
model ModelBased; a nominal TDP or typical draw is an estimate however it
is multiplied. The definition in energy_class.rs and the energy
extension's class table now say so. No conformance vector carries the
definition, and none changes.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
Transaction-Science/open-standards!223
No description provided.