{
  "schema_version": "entroly.model-recovery-protocol.v7",
  "frozen_at": "2026-07-15T01:22:30Z",
  "supersedes": {
    "accepted_protocol": "benchmarks/model_recovery_protocol_v5.json",
    "accepted_holdout_artifact": "benchmarks/results/model_recovery_v5_holdout.json",
    "rejected_development_protocol": "benchmarks/model_recovery_protocol_v6.json",
    "rejected_development_artifact": "benchmarks/results/model_recovery_v6_development.json",
    "reason": "V5 passed all execution and integrity gates, but its report generator carried a stale 7B/32K limitation label even though the embedded model identity and protocol correctly recorded qwen2.5:1.5b. V6 tested scalar field projection and was rejected after development accuracy fell to 25%. V7 restores V5's complete source-exact JSON object recovery, fixes model-scope metadata generation, and uses fresh development and holdout seeds."
  },
  "participants": {
    "entroly": {
      "package": "entroly",
      "version": "1.0.59",
      "compression_entry_point": "entroly.compression_proxy.compress_proxy_payload",
      "retrieval_entry_point": "entroly.compression_retrieval_store.CompressionRetrievalStore.search_exact_excerpts"
    },
    "external_adapter": {
      "package": "external-adapter",
      "version": "0.31.0",
      "compression_entry_point": "external_adapter.compress",
      "retrieval_entry_point": "external_adapter.cache.compression_store.CompressionStore.retrieve"
    }
  },
  "fixture_generator": "query-shift-json-v1",
  "fixture_rows": 48,
  "ordinary_payload_chars": 32,
  "future_payload_chars": 512,
  "shared_tokenizer": "o200k_base",
  "entroly_budget_tokens": 600,
  "entroly_retrieval_limit": 3,
  "entroly_recovery_excerpt_tokens": 600,
  "entroly_recovery_strategy": "complete exact query-matching JSON object when it fits; capped exact lead-plus-query-window fallback otherwise",
  "external_adapter_model": "gpt-4o",
  "external_adapter_savings_profile": "agent-90",
  "external_adapter_target_ratio": 0.25,
  "ollama": {
    "model": "qwen2.5:1.5b",
    "base_url": "http://127.0.0.1:11434",
    "temperature": 0,
    "seed": 0,
    "num_predict": 24,
    "num_ctx": 8192,
    "timeout_seconds": 180
  },
  "phases": {
    "development": {
      "trials": 4,
      "seed": 20260726
    },
    "holdout": {
      "trials": 24,
      "seed": 20260727
    }
  },
  "quality_gates": {
    "complete_matrix": true,
    "raw_exact_accuracy": 1.0,
    "persistent_recovery_exact_bytes": true,
    "failures_remain_in_sample": true,
    "no_oracle_retrieval": true
  },
  "claim_policy": {
    "aggregate_product_score_allowed": false,
    "development_claims_allowed": false,
    "negative_results_are_published": true,
    "universal_superiority_claim_allowed": false,
    "frontier_model_claim_allowed": false,
    "scoped_holdout_claim_requires_complete_gate": true,
    "paired_superiority_requires_mcnemar_p_lte": 0.05
  },
  "definitions": {
    "query_shift": "Compression sees only the initial incident question. The future audit question is revealed after compression.",
    "model_triggered_recovery": "Recovery is called only when the first model response canonicalizes exactly to RETRIEVE.",
    "bounded_exact_excerpt": "A complete exact JSON object is preferred when it fits. Otherwise an oversized stored span returns an exact source lead plus exact query-local window separated by an explicit gap marker; full-span retrieval remains available.",
    "final_exact_accuracy": "The first response is final unless it is RETRIEVE; then the single recovery retry is final.",
    "effective_tokens": "Active context tokens plus recovery tokens only for trials where retrieval was triggered.",
    "external_adapter_recovery_scope": "The runner composes External Baseline's public compress() with the same persistent CompressionStore store/retrieve contract used by its MCP server; it does not claim an MCP transport measurement.",
    "model_scope": "Qwen2.5 1.5B Q4_K_M is a local deterministic workflow guard only, not a frontier-model quality proxy."
  }
}
