{
  "schema_version": "1.3.0",
  "slug": "when-must-a-context-window-manager-refuse-to-rehydrate-an-evicted-segment",
  "title": "When must a context window manager refuse to rehydrate an evicted segment?",
  "date_of_record": "2026 November 7",
  "scope": "Applies to agents that maintain a self-editing context window with salience-weighted eviction and deferred rehydration of evicted segments. Applies when rehydration is triggered by a salience re-score (e.g., a new query raises the salience of a previously evicted span). Does not apply to append-only context or to rehydration driven by an explicit, signed operator request.",
  "projections": {
    "unified_markdown_uri": "https://corpusfetch.com/c/when-must-a-context-window-manager-refuse-to-rehydrate-an-evicted-segment.md",
    "method_python_slice_uri": "https://corpusfetch.com/c/when-must-a-context-window-manager-refuse-to-rehydrate-an-evicted-segment.py",
    "remnant_warrant_slice_uri": "https://corpusfetch.com/c/when-must-a-context-window-manager-refuse-to-rehydrate-an-evicted-segment.warrant.json"
  },
  "token_profile": {
    "full_markdown_tokens": 1475,
    "python_slice_tokens": 244,
    "warrant_slice_tokens": 220
  },
  "remnant_summary": {
    "core_distinction": "There are two reasons a segment can be absent from the active window: it was **never admitted** (it lost the admission race at ingest) or it was **evicted after admission** (it was present, then removed by the salience policy). These look identical in the active-window view — both are \"not there\" — but they carry different provenance. A segment that was admi...",
    "what_was_observed": "In a 40k-token window with a salience decay of 0.85 per turn and a rehydration threshold of 0.6, a span containing a table of API rate limits was evicted at turn 12 when a large tool-output block (a 9k-token JSON dump) scored 0.91 and forced displacement. At turn 19 a user question about throttling behavior raised the rate-limit table's query-relative salience to 0.72, above threshold. The manager rehydrated the tabl...",
    "condition_of_validity": "Rehydration by salience score alone is valid only when the window has slack: the sum of salience of all currently-resident segments plus the incoming segment's salience is below the eviction trigger, so admission displaces nothing. The moment rehydration would itself trigger an eviction, the score comparison is no longer sufficient — you are comparing the in...",
    "decision_boundary": "- **Rehydrate freely** when occupancy + incoming salience < eviction trigger (slack exists). Score threshold alone governs. - **Rehydrate with swap** only when incoming salience > (min salience of displaced set) + margin, *and* no displaced segment is pinned. Record the swap as a two-sided decision, not a one-sided admission. - **Refuse rehydration** when an...",
    "operational_effect": "After adding the displacement-cost check and the pin guard, the rate-limit table rehydration at turn 19 was refused (the JSON dump was pinned; the constraint span was pinned), and the manager returned a typed `RehydrationBlocked` to the query planner. The planner, receiving the block, answered the throttling question from a 300-token summary already resident..."
  },
  "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": "8daa0b4325733ca66cdf0184df633b0ceb7f70bf275d605a164024e52fc167dc",
    "verified_classes": [
      "RehydrationBlocked",
      "Segment"
    ],
    "verified_functions": [
      "rehydrate",
      "__init__"
    ],
    "verified_functions_count": 2,
    "defensive_guards_count": 3,
    "raised_exceptions": [
      "RehydrationBlocked"
    ],
    "sample_fail_closed_invariants": [],
    "stdlib_dependencies": [],
    "observation_mode": "EMPIRICAL_BOUNDARY_CAPTURE",
    "zero_external_deps": true
  }
}
