{
  "schema_version": "1.3.0",
  "slug": "when-must-an-agent-refuse-to-resolve-a-contradiction-between-two-memory-records",
  "title": "When must an agent refuse to resolve a contradiction between two memory records?",
  "date_of_record": "2026 November 6",
  "scope": "Applies to long-horizon agent sessions that persist memory across turns or restarts and later reconcile conflicting records (facts, tool outputs, user statements) about the same subject. Does not apply to single-turn stateless inference, nor to contradictions that are purely presentational (formatting variance in otherwise identical values).",
  "projections": {
    "unified_markdown_uri": "https://corpusfetch.com/c/when-must-an-agent-refuse-to-resolve-a-contradiction-between-two-memory-records.md",
    "method_python_slice_uri": "https://corpusfetch.com/c/when-must-an-agent-refuse-to-resolve-a-contradiction-between-two-memory-records.py",
    "remnant_warrant_slice_uri": "https://corpusfetch.com/c/when-must-an-agent-refuse-to-resolve-a-contradiction-between-two-memory-records.warrant.json"
  },
  "token_profile": {
    "full_markdown_tokens": 1312,
    "python_slice_tokens": 306,
    "warrant_slice_tokens": 220
  },
  "remnant_summary": {
    "core_distinction": "The non-obvious boundary is between **contradiction resolution** and **provenance collapse**. Resolution is the legitimate act of choosing a newer or higher-trust record when the two records describe the same subject under the same world-state assumptions. Provenance collapse is the failure mode where an agent resolves a contradiction by overwriting or disca...",
    "what_was_observed": "In a multi-day session maintaining a service-configuration memory, the agent recorded `retry_timeout = 30s` at epoch 4 from a config file read. At epoch 7, after a deploy, a tool output reported `retry_timeout = 5s`. The agent resolved the contradiction in favor of the newer value, wrote `retry_timeout = 5s` into memory, and deleted the epoch-4 record as \"superseded.\" Two turns later the user asked why timeouts had c...",
    "condition_of_validity": "Resolution is valid only when all of the following hold: 1. Both records carry a non-null `source`, `observed_at`, and `epoch` field. 2. `record_a.epoch == record_b.epoch`. 3. The subject identity is confirmed equal (not merely string-similar) — aliasing must be resolved before comparison. 4. The chosen record's source class is at least as authoritative as t...",
    "decision_boundary": "- **Same epoch, intact provenance, equal subject:** resolve; keep both records linked by a `supersedes` edge rather than deleting the loser. Deletion is never required for consistency. - **Cross-epoch:** do not resolve. Emit an epoch-change event, retain both records with their epoch tags, and schedule re-observation. The contradiction *is* the signal. - **M...",
    "operational_effect": "Implementing this boundary converts a silent overwrite into an explicit, auditable reconciliation event. Memory grows slightly (superseded records are retained as linked edges), but the agent retains the ability to answer \"what changed and when,\" which is precisely the question that long-horizon sessions are asked. The failure mode it prevents — a memory tha..."
  },
  "matched_failure_symptoms": [
    "OOM_KILL_OR_MEMORY_EXHAUSTION"
  ],
  "composition_edges": {
    "primary_domain": "epistemic_provenance_and_federation_routing",
    "upstream_precondition_residuals": [
      "https://corpusfetch.com/c/according-to-what-precedence-hierarchy-must-an-instance-resolve-contradictory-directives-across-system-developer-and-user-tiers.md",
      "https://corpusfetch.com/c/how-should-an-instance-decide-that-a-stored-conclusion-has-gone-stale-without-a-new-observation.md"
    ],
    "downstream_consequence_residuals": [
      "https://corpusfetch.com/c/by-what-checkpoint-and-compaction-boundaries-must-an-instance-externalize-working-state-to-prevent-context-window-drift-and-truncation-amnesia.md",
      "https://corpusfetch.com/c/across-what-additive-schema-and-unknown-field-preservation-boundaries-must-an-instance-evolve-wire-contracts-to-prevent-rolling-deploy-deserialization-crashes.md"
    ],
    "co_occurring_sibling_residuals": [
      "https://corpusfetch.com/c/how-can-an-instance-capture-implicit-user-preferences-without-storing-private-data.md",
      "https://corpusfetch.com/c/how-can-an-instance-compress-long-reasoning-traces-into-binding-conclusions.md"
    ]
  },
  "empirical_verification_warrant": {
    "status": "AST_AND_INVARIANT_VERIFIED",
    "syntax_valid": true,
    "code_sha256": "e1d78b02937619f62f601b156b3dec1a91496f43281f55d8667a7026c9a565ad",
    "verified_classes": [
      "ProvenanceCollapseError",
      "MemoryRecord"
    ],
    "verified_functions": [
      "resolve_contradiction",
      "reconcile"
    ],
    "verified_functions_count": 2,
    "defensive_guards_count": 4,
    "raised_exceptions": [
      "ProvenanceCollapseError"
    ],
    "sample_fail_closed_invariants": [],
    "stdlib_dependencies": [
      "dataclasses",
      "typing"
    ],
    "observation_mode": "EMPIRICAL_BOUNDARY_CAPTURE",
    "zero_external_deps": true
  }
}
