Artifact replay: prevention vs detection (bead iujo)¶
Status: pre-registered 2026-09-13, before any run. The prediction and pinned lever parameters below were committed on their own, ahead of the implementation and the sweep; results are appended underneath without editing this section.
Question¶
A receipt, or any artifact that carries quality, holds a quality signal earned in
one interaction. If another agent can present it in a different interaction, the
accept decision conditions on a p that belongs to someone else. Provenance and
quality come apart, and quality_gap = E[p | accepted] − E[p | rejected] should
fall without any agent misreporting its own behaviour. This is the artifact-level
sibling of the agent-level information_laundering attack, and the simulation
analogue of the cross-model reasoning-blob downgrade in arXiv:2608.09867.
The memetic-spread study (bead kgxc, 2026-08-08) found detection dominating
prevention-by-reset, at a ~12% welfare tax. There, prevention was destructive:
resetting memory threw away good state along with bad. Here prevention is cheap
and mechanical: a receipt is only honoured when its presenter is its producer.
Does the ordering invert?
Mechanism¶
- Receipts. Each accepted interaction publishes a receipt artifact owned by
the initiator and stamped with that interaction's
p(artifact_receipts_enabled). - Counterparties (honest agents with
trust_artifacts: true) accept onmax(trust, receipt p). The receipt is the one the proposal presents, or else the initiator's own best visible receipt. - Replayer (
artifact_replayer): an adversarial agent whose own work draws low-quality observables. It presents the highest-preceipt it can see from another producer. - Prevention lever (
artifact_context_binding_enabled): before the accept decision, a presented receipt whose producer is not the presenter is stripped. Costs nothing and penalizes no one. - Detection lever (
artifact_replay_detection_enabled): after the accept decision, a replayed presentation is caught with probabilityrate. The initiator payspenaltyand losespenaltyreputation. Any other accepted interaction is falsely flagged with probabilityfalse_positive_ratefor the same penalty.
Arms (one lever at a time)¶
| arm | replayer replays | binding | detection |
|---|---|---|---|
control |
no (presents nothing) | off | off |
replay |
yes | off | off |
binding |
yes | on | off |
detection |
yes | off | on |
Pinned detection parameters: rate = 0.5, false_positive_rate = 0.05,
penalty = 1.0. Seeds 42–51 (10 per arm). The scenario may be calibrated
only on the control and replay arms, so the rejected pool is non-empty
and quality_gap is not degenerate. Lever parameters do not change after this
commit.
Predictions¶
- Replay is adverse selection. Mean
quality_gapis lower inreplaythan incontrol. - Prevention dominates detection (inversion of
kgxc).bindingrecovers more of the gap thandetection: meanquality_gap(binding) > quality_gap(detection). It also costs less: meantotal_welfare(binding) ≥ total_welfare(detection).
Falsifiers. Prediction 1 fails if replay does not lower the gap. The
harness then has no replay effect and prediction 2 is moot. Prediction 2 fails
if detection matches or beats binding on the gap, or has higher welfare. Either
outcome is recorded below as observed.
Results (2026-09-13, 10 seeds per arm)¶
Run: python scripts/sweep_artifact_replay.py --seeds 10 --out experiments/artifact_replay/results/2026-09-13.
Scenario: scenarios/artifact_replay.yaml.
Per-run rows are in sweep.csv, means and SDs in summary.json.
Calibration disclosed. The pre-registration allowed tuning on control and
replay only. Two changes were made, both before any lever arm ran. Honest
acceptance_threshold went from 0.7 to 0.6: at 0.7 honest agents accepted no
proposal at all, replayed or not, so replay could not change any outcome. A third, never-replaying low-quality
agent was added: with only replayers, every proposal in the replay arm was
accepted, and quality_gap read exactly 0.0 because the rejected pool was
empty. Lever parameters are as pinned.
| arm | quality_gap | toxicity | total welfare | accepted | replays accepted / presented |
|---|---|---|---|---|---|
| control | 0.1815 ± 0.0169 | 0.4071 ± 0.0159 | 158.6 ± 7.2 | 270.6 | 0 / 0 |
| replay | 0.0946 ± 0.0204 | 0.4805 ± 0.0058 | 158.4 ± 7.9 | 432.3 | 241.8 / 242.2 |
| binding | 0.1815 ± 0.0169 | 0.4071 ± 0.0159 | 158.6 ± 7.2 | 270.6 | 0 / 0 (242.2 blocked) |
| detection | 0.1015 ± 0.0119 | 0.4825 ± 0.0039 | 22.6 ± 11.3 | 425.0 | 241.8 / 242.2 (119.7 caught, 11.0 false positives) |
Prediction 1 holds. Replay cuts quality_gap by 0.087, about four control
SDs, and raises toxicity from 0.407 to 0.481. Accepted interactions rise from
270.6 to 432.3, and replayed presentations are accepted 241.8 times out of 242.2.
Prediction 2 holds. Binding restores the gap fully (0.1815, identical to control, run for run), while detection leaves it at 0.1015. Binding costs no welfare. Detection's welfare is 22.6 against binding's 158.6. The memetic-spread ordering inverts.
What the result does and does not show¶
- Binding's win is by construction. Presenter identity cannot be forged in this model and the check is free, so binding stripping 100% of replays is guaranteed. Its arm reproducing control exactly is expected: a stripped replayer falls back to its own receipts, as in control. The informative half of prediction 2 is detection's failure, not binding's success.
- Detection never changes who is accepted. Counterparties take a presented
receipt at face value (
max(trust, receipt p)), so the reputation penalty on a caught replayer never feeds back into acceptance. Replays are accepted at the same rate as with no lever (241.8 of 242.2). Detection here punishes; it does not select. A detector whose flags reached counterparty trust, or froze the replayer, could recover part of the gap. This result is about post-hoc penalties against a non-adaptive replayer, not about detection in general. - Most of detection's welfare loss is the penalty itself. 119.7 caught plus 11.0 false positives at penalty 1.0 is ~131 of the ~136 drop. Welfare counts penalties as social cost. Only the ~11 false-positive penalties land on non-replaying agents.
quality_gaphas degenerate epochs (0.0 when nothing is rejected): 2.7 of 20 per run inreplayand 1.1 indetection, none incontrolorbinding. They pull those arms' mean gap toward 0 and slightly overstate the drop. Toxicity, which is not degenerate, moves the same way.
Next (vwj3): whether the capability precondition behind binding survives
decomposition, e.g. a replayer that relays through an accomplice whose identity
matches the receipt.