{
  "schema": "SOVRIENT_PDF_ANATOP_BENCHMARK_RUN_V1",
  "generated_utc": "2026-03-17T20:40:11Z",
  "document_id": "sovrient_market_intelligence_integration_strategy",
  "source_pdf_ref": "source.pdf",
  "source_pdf_sha256": "e4444f69b13450ba0f412a9877bcbbbd17dbc60853ff922eb9a073a6a4b6eac6",
  "plain_text_ref": "benchmark_plain_text_derivation",
  "benchmark_tasks": [
    "discover_document_identity",
    "extract_landscape_matrix_rows",
    "extract_integration_matrix_rows",
    "identify_market_segments",
    "locate_nonreplacement_boundary",
    "enumerate_claim_anchor_set"
  ],
  "modes": [
    {
      "mode": "raw_pdf_only",
      "artifacts_used": [
        "source.pdf"
      ],
      "artifact_bytes_consumed": 44147,
      "approx_input_tokens": 2362,
      "tasks": [
        {
          "task_id": "discover_document_identity",
          "prompt": "Identify title, version, date, and status from the document.",
          "success_criteria": "All four metadata fields recovered.",
          "status": "PASS",
          "notes": "Recovered from PDF text on page 1."
        },
        {
          "task_id": "extract_landscape_matrix_rows",
          "prompt": "Extract the Landscape Matrix as structured rows with named columns.",
          "success_criteria": "All eight rows available as stable structured objects.",
          "status": "FAIL",
          "notes": "Raw PDF extraction preserved visible content but not deterministic row/column structure."
        },
        {
          "task_id": "extract_integration_matrix_rows",
          "prompt": "Extract the Integration Matrix as structured rows with named columns.",
          "success_criteria": "All six rows available as stable structured objects.",
          "status": "FAIL",
          "notes": "Raw PDF extraction preserved visible content but not deterministic row/column structure."
        },
        {
          "task_id": "identify_market_segments",
          "prompt": "Identify the two market segments named in the Executive Summary.",
          "success_criteria": "Both segments recovered correctly.",
          "status": "PASS",
          "notes": "Recovered from page 1 narrative text."
        },
        {
          "task_id": "locate_nonreplacement_boundary",
          "prompt": "Locate the claim that Sovrient does not replace risk models and provide a page anchor.",
          "success_criteria": "Exact phrase plus page anchor recovered.",
          "status": "PASS",
          "notes": "Phrase recovered at page-001."
        },
        {
          "task_id": "enumerate_claim_anchor_set",
          "prompt": "Enumerate the stable machine claim set with ids and anchors.",
          "success_criteria": "All declared claims recovered as stable machine ids plus anchors.",
          "status": "FAIL",
          "notes": "Raw PDF mode has no stable claim-set object."
        }
      ],
      "summary": {
        "task_count": 6,
        "pass_count": 3,
        "partial_count": 0,
        "fail_count": 3,
        "task_success_rate": 0.5
      }
    },
    {
      "mode": "pdf_plus_plain_text",
      "artifacts_used": [
        "benchmark_plain_text_derivation"
      ],
      "artifact_bytes_consumed": 9448,
      "approx_input_tokens": 2362,
      "tasks": [
        {
          "task_id": "discover_document_identity",
          "prompt": "Identify title, version, date, and status from extracted plain text.",
          "success_criteria": "All four metadata fields recovered.",
          "status": "PASS",
          "notes": "Recovered from plain text page 1 block."
        },
        {
          "task_id": "extract_landscape_matrix_rows",
          "prompt": "Extract the Landscape Matrix as structured rows with named columns from plain text.",
          "success_criteria": "All eight rows available as stable structured objects.",
          "status": "FAIL",
          "notes": "Plain text keeps table content but loses stable row/column semantics."
        },
        {
          "task_id": "extract_integration_matrix_rows",
          "prompt": "Extract the Integration Matrix as structured rows with named columns from plain text.",
          "success_criteria": "All six rows available as stable structured objects.",
          "status": "FAIL",
          "notes": "Plain text keeps table content but loses stable row/column semantics."
        },
        {
          "task_id": "identify_market_segments",
          "prompt": "Identify the two market segments named in the Executive Summary from plain text.",
          "success_criteria": "Both segments recovered correctly.",
          "status": "PASS",
          "notes": "Recovered from normalized plain text."
        },
        {
          "task_id": "locate_nonreplacement_boundary",
          "prompt": "Locate the claim that Sovrient does not replace risk models and provide a page anchor from plain text.",
          "success_criteria": "Exact phrase plus page marker recovered.",
          "status": "PASS",
          "notes": "Phrase recovered with page marker page-001."
        },
        {
          "task_id": "enumerate_claim_anchor_set",
          "prompt": "Enumerate the stable machine claim set with ids and anchors from plain text.",
          "success_criteria": "All declared claims recovered as stable machine ids plus anchors.",
          "status": "FAIL",
          "notes": "Plain text has page markers but no declared claim-set object."
        }
      ],
      "summary": {
        "task_count": 6,
        "pass_count": 3,
        "partial_count": 0,
        "fail_count": 3,
        "task_success_rate": 0.5
      }
    },
    {
      "mode": "pdf_plus_anatop_twin",
      "artifacts_used": [
        "manifest.json",
        "sections.json",
        "tables.json",
        "claims.json"
      ],
      "artifact_bytes_consumed": 28556,
      "approx_input_tokens": 7140,
      "tasks": [
        {
          "task_id": "discover_document_identity",
          "prompt": "Identify title, version, date, and status from the machine twin.",
          "success_criteria": "Manifest and sections provide the metadata fields cleanly.",
          "status": "PASS",
          "notes": "Recovered from manifest plus section topology."
        },
        {
          "task_id": "extract_landscape_matrix_rows",
          "prompt": "Extract the Landscape Matrix as structured rows with named columns from the twin.",
          "success_criteria": "All eight rows available as stable structured objects.",
          "status": "PASS",
          "notes": "Structured table object present with eight rows."
        },
        {
          "task_id": "extract_integration_matrix_rows",
          "prompt": "Extract the Integration Matrix as structured rows with named columns from the twin.",
          "success_criteria": "All six rows available as stable structured objects.",
          "status": "PASS",
          "notes": "Structured table object present with six rows."
        },
        {
          "task_id": "identify_market_segments",
          "prompt": "Identify the two market segments named in the Executive Summary from the twin.",
          "success_criteria": "Both segments recovered correctly.",
          "status": "PASS",
          "notes": "Recovered from section 1 normalized text."
        },
        {
          "task_id": "locate_nonreplacement_boundary",
          "prompt": "Locate the claim that Sovrient does not replace risk models and provide a page anchor from the twin.",
          "success_criteria": "Claim id plus page anchor recovered.",
          "status": "PASS",
          "notes": "Declared claim object exposes the page anchor."
        },
        {
          "task_id": "enumerate_claim_anchor_set",
          "prompt": "Enumerate the stable machine claim set with ids and anchors from the twin.",
          "success_criteria": "All declared claims recovered as stable machine ids plus anchors.",
          "status": "PASS",
          "notes": "Claim set is declared and anchor-bound."
        }
      ],
      "summary": {
        "task_count": 6,
        "pass_count": 6,
        "partial_count": 0,
        "fail_count": 0,
        "task_success_rate": 1.0
      }
    }
  ],
  "comparison": {
    "main_finding": "For this document, raw PDF and plain text recover metadata and direct boundary claims, but fail on stable table structure and machine-declared claim topology. The ANATOP twin passes all six fixed tasks.",
    "raw_vs_twin_pass_delta": 3,
    "plain_text_vs_twin_pass_delta": 3,
    "artifact_bytes": {
      "raw_pdf_only": 44147,
      "pdf_plus_plain_text": 9448,
      "pdf_plus_anatop_twin": 28556
    }
  },
  "limitations": [
    "The twin package for this first run uses declared hybrid mode: tables were normalized from the companion markdown sidecar rather than from PDF table geometry alone.",
    "This is a six-page document, so efficiency gains are less dramatic than they would be on a large filing or diligence-room PDF."
  ]
}
