# Next-draft measurement correction

The draft-2 reducers grouped a client operation by reporter, operation ID, asset reference and action. Their conflict comparison covered purpose, agreement and operation start/end, but omitted origin, resource URL and policy context. Two claims with no asset reference could therefore name different resources while counting as one unconflicted completed operation.

The next-draft Python reducer and separately implemented Node reducer now compare **origin, resource URL, policy ID and policy revision** as invariant operation context too. A conflicting claim is excluded from completed-use counts and counted once as an operation conflict. It is not split into additional successful uses. This also applies when an asset reference is present: changing an asset's URL does not rewrite where an already reported operation occurred. A genuinely separate operation receives a separate operation ID.

This changes aggregation behavior without rewriting original events or signatures. The published draft-2 download remains unchanged. New regression cases use both null and bound asset references and independently valid signed reports with changed resource URL, policy ID or revision.

This correction does not complete the broader metrics contract. Observation-boundary authorization, known reporting-trigger cohorts, deadline/completeness calculations and closed export inventory remain explicit candidate gates. Authenticated client reports continue to be claims.
