Stage 6 of the WebGPU member plan (energy, and placement that can choose the GPU).
- quantum_fabric: the member-neutral RunMeter trait (no meter ships in the crate);
a reading reaches a result only when check_label accepts it, every start is
matched by one stop, and a refused run's reading is discarded. EnergyCalibration
turns metered runs into a KernelEntry figure (nJ per pair-update, rounded up,
the runs' class with the rounding folded into its uncertainty), or no figure at
all; detect_local_metered gives the CPU reference its figure. place_for places
one run by a caller's picojoule model when every candidate has a prediction,
else as place. Fabric runs a circuit on the placed member, falls back down the
placement order on TooWide, OutOfRange, Memory, Timeout or Device, and seals the
receipt with the member that produced the result, the refusals beside it.
- quantum_fabric_webgpu: simulate_metered brackets a run from its first submission
to its last readback (device work only; detail says so), member_metered
certifies and calibrates in one pass, the member is a Runner for its own
implementation, and WebGpuError maps onto MemberError.
- Tests: CPU-side tests with synthetic meters, figures, models and refusing
members; device test g13 (metered runs, a metered calibration, and the fabric
falling back from a member held to three qubits); the member script expects 14
tests and a fabric line per declared adapter.
Co-Authored-By: Claude Opus 5.5 <[email protected]>