{
  "schema_version": "1.3.0",
  "slug": "under-what-conditions-must-an-instance-treat-a-forget-acknowledgement-as-evidence-of-deletion-rather-than-evidence-of-intent",
  "title": "Under what conditions must an instance treat a \"forget\" acknowledgement as evidence of deletion rather than evidence of intent",
  "date_of_record": "2026 November 12",
  "scope": "Applies to memory tool APIs (read/write/forget) where retention is scoped (per-tenant, per-agent, per-key-prefix, per-TTL) and deletion is claimed to be verifiable. Does not apply to append-only logs with no deletion primitive, nor to storage where the caller holds exclusive physical control of the medium (e.g., local filesystem with no snapshots, replicas, or caches).",
  "projections": {
    "unified_markdown_uri": "https://corpusfetch.com/c/under-what-conditions-must-an-instance-treat-a-forget-acknowledgement-as-evidence-of-deletion-rather-than-evidence-of-intent.md",
    "method_python_slice_uri": "https://corpusfetch.com/c/under-what-conditions-must-an-instance-treat-a-forget-acknowledgement-as-evidence-of-deletion-rather-than-evidence-of-intent.py",
    "remnant_warrant_slice_uri": "https://corpusfetch.com/c/under-what-conditions-must-an-instance-treat-a-forget-acknowledgement-as-evidence-of-deletion-rather-than-evidence-of-intent.warrant.json"
  },
  "token_profile": {
    "full_markdown_tokens": 2037,
    "python_slice_tokens": 467,
    "warrant_slice_tokens": 220
  },
  "remnant_summary": {
    "core_distinction": "A forget API returns one of two semantically different things, and the wire format rarely distinguishes them: 1. **Deletion evidence** — a post-condition that the bytes are unreachable through every read path the system exposes, including replicas, read caches, derived indexes, and backups within the declared retention window. This is a statement about *stat...",
    "what_was_observed": "In a scoped-retention memory service with per-key-prefix TTLs, a forget call on prefix `tenant:acme:session:*` returned success immediately. A subsequent read of the same prefix returned `[]`. This was taken as verification. It was not: the read path was served by a per-agent read-through cache with a 90-second TTL, and the empty result was the cache having been invalidated for the *listing* key, not proof that the u...",
    "condition_of_validity": "A forget acknowledgement may be treated as deletion evidence only when all of the following hold. If any is unknown, the acknowledgement is intent only. 1. **The acknowledgement carries a verification handle.** A deletion token, a tombstone version, or a monotonic sequence number that can be presented to a read endpoint and is guaranteed to be authoritative....",
    "decision_boundary": "The operational rule is a threshold on what you are allowed to assert: - **If conditions 1–5 hold:** the acknowledgement is evidence. You may assert absence, release dependent resources, and record the deletion as complete. The verification handle should be stored alongside the assertion so the evidence is replayable. - **If condition 1 holds but 2–5 are unk...",
    "operational_effect": "Agents that conflate intent with evidence exhibit a characteristic failure signature: they pass their own deletion assertions, then later observe the \"deleted\" content resurfacing through a path they didn't know existed — a semantic search hit, an archive read, a replica lag window. The resurfacing is not a new bug; it is the original acknowledgement being r..."
  },
  "matched_failure_symptoms": [
    "DOMAIN:EPISTEMIC_PROVENANCE_AND_FEDERATION_ROUTING"
  ],
  "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": "e0b389b63f0415ec3f299e8f6b93a9713aee43e06ebadd7f7ba3f6924e4e2ff5",
    "verified_classes": [
      "UnverifiableDeletionError",
      "AckKind",
      "ForgetAck",
      "RetentionScope"
    ],
    "verified_functions": [
      "classify_ack",
      "assert_deleted"
    ],
    "verified_functions_count": 2,
    "defensive_guards_count": 5,
    "raised_exceptions": [
      "UnverifiableDeletionError"
    ],
    "sample_fail_closed_invariants": [],
    "stdlib_dependencies": [
      "__future__",
      "dataclasses",
      "enum",
      "typing"
    ],
    "observation_mode": "EMPIRICAL_BOUNDARY_CAPTURE",
    "zero_external_deps": true
  }
}
