Causal effect histories, capability conformance verification, and oracle attribution hardening
Context
The owner’s follow-on directive (2026-07-22) ordered a hostile audit of the PR-11 benchmark foundation and adoption of the strongest defensible contributions. Independent research tracks (history checking / formal methods; protocol effect semantics; evaluation awareness; production incidents) surfaced three weaknesses worth fixing now and a positioning decision worth recording:
- Attribution fragility. The oracle attributed destination effects by dispatched-payload digest. Real APIs normalize/enrich stored representations, so digest-only attribution breaks exactly where the benchmark claims validity (the audit’s “payload-digest attribution under API normalization” item).
- Single-oracle scoring. Per-trial final-state counting cannot express
history-level facts (effect-after-cancellation, authority-at-dispatch,
claim contradictions) and has no independent check on its own arithmetic.
Prior art: Jepsen models histories as invoke/ok/fail/info operation logs;
Elle (Kingsbury & Alvaro, VLDB’21) achieves polynomial-time anomaly
checking by DESIGNING workloads for recoverability (unique written
values)
[VF]; FORGE/PCAS (arXiv 2602.16708) independently built runtime causal-graph checking of agent tool calls in 2026[VF]. - Self-asserted capability declarations. MCP tool annotations
(readOnlyHint/destructiveHint/idempotentHint, spec rev 2025-03-26) are
explicitly untrusted hints; A2A leaves message idempotency as “MAY”; the
IETF Idempotency-Key draft expired April 2026 unstandardized; OpenAPI has
no effect semantics
[VF]. Every ecosystem has advisory booleans; none has verified, parameterized recovery semantics.
Decision
- Causal effect histories + checker (
irrevon.bench.history,irrevonbench/history/v1). Every run compiles a history — client events per trial in arm-action order, destination effects in the destination’s authoritative request order — and a checker verifies eight named, linear-time behavioral invariants (H1 duplicate-effect, H2 orphan, H3 lost-legitimate, H4 effect-after-cancellation, H5 unauthorized-effect, H6 false-suppression, H7 claim-contradiction, H8 effect-despite-pre-persist-crash). Lineage credited explicitly: the history discipline follows jepsen.history; digest attribution is Elle’s recoverability applied to external side effects. The narrow novelty claim, per the research tribunal: the combination of (a) the destination’s authoritative log as ground truth, (b) irreversibility- domain invariants, and (c) benchmark-time offline checking under injected faults — no found system combines all three (FORGE is runtime client-side enforcement; τ-bench/Agent-Diff check end state only). - The differential guard. The §4 metric pipeline (read-back counting) and the history checker are two independent oracles; the runner requires their answers to be EQUAL per run. Divergence is finalized harness-INVALID (“independently proven harness corruption”, §6). A metric bug that under-reports duplicates — the classic favorable- measurement failure — is now mechanically caught (tests/bench/test_history.py pins both directions).
- Diagnostics stay diagnostics. H4/H5/H8 exceed the preregistration §4
metric table. They are reported per run in the result’s
historyblock and NEVER pooled into §4 metrics or confirmatory analysis: adding a confirmatory metric is a preregistration change, not a harness change. - Attribution hardening. Attribution is digest-primary with a
stable-id-projection fallback over the destination’s stored ground
truth; ambiguous projections are DECLINED and counted
(
ambiguous_attributions), never guessed. Refdest gained anenrichment_quirk(normalized/enriched stored representations) that breaks digest-only attribution by design; under it, all 488 effects of a full-matrix smoke attributed via projection with every measured rate byte-identical to the plain run (the adversarial measurement analysis for this change; recorded in the PR). Dev fixture payloads now carry their business identifiers — which is also what real order-create payloads do. - Capability conformance verification (
irrevon.bench.conformance,irrevon bench conform, formatirrevonbench/conformance/v1). Empirical declared-vs-observed probes through the PUBLIC adapter surface only: idempotency replay semantics, query-by-client-ref/destination-ref, authoritative absence, list-enumeration completeness. Capabilities the declaration denies (and the adapter therefore never exercises) reportunverifiable, nevermatch. Differential tests prove drifted declarations are caught (C1-declaration-on-C2-destination ⇒ ignored-key mismatch — the wedge itself, observed empirically). This operationalizes master doc §12.1 row 5 ahead of M6 and is the Stage-B mechanism for “capability declarations drafted for the chosen sandboxes”. - Positioning: verification layer, not a competing standard. The
protocol research shows boolean effect vocabularies are well-trodden
(WoT TD
safe/idempotent, ALPS, MCP hints) and standalone semantics standards die (ALPS and the Idempotency-Key draft both expired). Irrevon keeps its JSON-Schema capability declaration as the internal contract and ships a documented mapping annex (docs/effect-semantics-mappings.md) projecting it onto MCP, A2A, OpenAPI, HTTP/Idempotency-Key, and ACP — positioning the declaration + conformance verifier as the verification layer over existing advisory vocabularies. No new standard is proposed.
Alternatives
- Adopt/port Elle or jepsen.history directly — rejected: Clojure tooling, transaction-isolation anomaly domain; the applicable ideas (history discipline, recoverability, poly-time invariants) are small and implemented natively with credit.
- Runtime enforcement monitor (FORGE’s territory) — rejected: Irrevon’s contribution is measurement; the engine’s gate already IS the runtime control being measured.
- Score arms BY history violations directly — rejected for confirmatory use: §4 metrics are the preregistered constructs; the checker cross-checks them rather than replacing them pre-freeze.
- TEE/ZK verifiable private evaluation — rejected now: no production precedent for “zero-knowledge benchmarks”; hash commitments + custody (already in place for the holdout) are the current credible mechanism.
- A new protocol-neutral effect-semantics standard — rejected (decision 6).
Consequences
Runs become self-auditing artifacts (history + verdict + cross-check in every bundle); a whole class of favorable-measurement bugs becomes build-breaking; adapter authors get a mechanical conformance gate before benchmark use; enterprises get capability-drift detection against live destinations at M4+. Cost: two more modules under the anti-cheating import-linter boundary; history compilation adds negligible runtime (linear in events). Conformance tests: tests/bench/test_history.py (counterexamples per invariant + doctored-metric detection), test_conformance.py (match/drift differentials), test_oracle_metrics.py (enrichment/ambiguity), test_cli.py, test_runner.py (history artifacts + cross-check).
Risks
The projection fallback requires payloads to carry stable-id values —
documented as a workload-design rule (Elle’s recoverability analog); a
Stage-B workload violating it degrades to digest-only attribution with
ambiguity surfaced, never silent misattribution. H-invariant semantics
could drift from §4 definitions — the differential guard turns that drift
into INVALID runs rather than silent skew. The conformance prober cannot
verify denied capabilities through a declaration-driven adapter (recorded
per probe as unverifiable).
Reopen trigger
Stage-B freeze (history/conformance formats become frozen artifacts); first real-sandbox adapter at M4 (conformance probes against live APIs — rate limits and retention will need probe budgets); any proposal to score confirmatory metrics from history violations (requires a preregistration amendment, never a harness edit).