{
  "snapshotVersion": "termstrail-site-proof-v2",
  "syntheticOnly": true,
  "productHead": "fb9c1a582c099cdf3d63defa26d145bcc6a0a442",
  "productSourceClean": true,
  "qualificationBaseCommit": "a9240fad6651f178384e29fc0b76cf3b3bd17f81",
  "sourceFingerprint": {
    "algorithm": "sha256",
    "value": "720352f5e4039c821241732361df36e380f3ee4464feb7393c891a0ca902df05",
    "files": [
      ".nvmrc",
      "evals/live/fixtures/qualification-fixtures.json",
      "evals/live/fixtures/synthetic-complete-worksheet.pdf",
      "evals/live/fixtures/synthetic-conditional-incentive.jpg",
      "evals/live/fixtures/termstrail-live-hero-ad.jpg",
      "evals/live/fixtures/termstrail-live-hero.pdf",
      "evals/live/provenance/openai-voice-request-contract.json",
      "evals/live/provenance/qualification-v2-json-schema.json",
      "evals/live/provenance/qualification-v2-request-contract.json",
      "evals/live/provenance/qualification-v2-source/package.json.snapshot",
      "evals/live/provenance/qualification-v2-source/src/app/api/live-extract/route.ts.snapshot",
      "evals/live/provenance/qualification-v2-source/src/domain/clarification.ts.snapshot",
      "evals/live/provenance/qualification-v2-source/src/domain/evidence.ts.snapshot",
      "evals/live/provenance/qualification-v2-source/src/domain/reconcile.ts.snapshot",
      "evals/live/provenance/qualification-v2-source/src/live/config.ts.snapshot",
      "evals/live/provenance/qualification-v2-source/src/live/model-schema.ts.snapshot",
      "evals/live/provenance/qualification-v2-source/src/live/prompt.ts.snapshot",
      "evals/live/provenance/qualification-v2-source/src/live/source.ts.snapshot",
      "evals/live/provenance/qualification-v2-source/src/providers/openai-provider.ts.snapshot",
      "evals/live/provenance/qualification-v3-correction-json-schema.json",
      "evals/live/provenance/qualification-v3-correction-request-contract.json",
      "evals/live/qualification-summary.json",
      "evals/live/recorded-hero-result.json",
      "evals/live/v3-correction-result.json",
      "next.config.ts",
      "package-lock.json",
      "package.json",
      "public/evaluation-results.json",
      "requirements-live-fixtures.txt",
      "scripts/capture-submission.ts",
      "scripts/generate-live-qualification-fixtures.py",
      "scripts/live-correction-check.ts",
      "scripts/live-qualification.ts",
      "scripts/materialize-live-correction.ts",
      "scripts/materialize-live-qualification.ts",
      "scripts/submission-fingerprint.ts",
      "scripts/write-v3-correction-contract.ts",
      "src/app/api/live-extract/route.test.ts",
      "src/app/api/live-extract/route.ts",
      "src/app/api/live-trail/route.test.ts",
      "src/app/api/live-trail/route.ts",
      "src/app/globals.css",
      "src/app/icon.svg",
      "src/app/layout.tsx",
      "src/app/page.tsx",
      "src/app/synthetic-lab/page.tsx",
      "src/components/synthetic-intake-lab.tsx",
      "src/components/trail-workspace.tsx",
      "src/domain/clarification.test.ts",
      "src/domain/clarification.ts",
      "src/domain/currency.test.ts",
      "src/domain/currency.ts",
      "src/domain/evidence.ts",
      "src/domain/reconcile.test.ts",
      "src/domain/reconcile.ts",
      "src/domain/revision.test.ts",
      "src/domain/revision.ts",
      "src/domain/schema.test.ts",
      "src/domain/schema.ts",
      "src/evaluation/fixtures.ts",
      "src/evaluation/live-correction-contract.ts",
      "src/evaluation/live-correction.test.ts",
      "src/evaluation/live-correction.ts",
      "src/evaluation/live-qualification.test.ts",
      "src/evaluation/live-qualification.ts",
      "src/evaluation/live-record.test.ts",
      "src/evaluation/provenance-utils.ts",
      "src/evaluation/provenance.test.ts",
      "src/evaluation/runner.test.ts",
      "src/evaluation/runner.ts",
      "src/fixtures/canonical-demo.test.ts",
      "src/fixtures/canonical-demo.ts",
      "src/fixtures/canonical-response.ts",
      "src/fixtures/canonical.ts",
      "src/lib/project-trail.test.ts",
      "src/lib/project-trail.ts",
      "src/lib/project.test.ts",
      "src/lib/project.ts",
      "src/lib/submission-fingerprint.test.ts",
      "src/live/cache.ts",
      "src/live/config.test.ts",
      "src/live/config.ts",
      "src/live/errors.ts",
      "src/live/evidence.ts",
      "src/live/model-schema.test.ts",
      "src/live/model-schema.ts",
      "src/live/multipart.test.ts",
      "src/live/multipart.ts",
      "src/live/openai-transport.ts",
      "src/live/prompt.ts",
      "src/live/provider-factory.ts",
      "src/live/run-log.ts",
      "src/live/source.test.ts",
      "src/live/source.ts",
      "src/live/types.ts",
      "src/providers/extraction-provider.ts",
      "src/providers/mock-provider.test.ts",
      "src/providers/mock-provider.ts",
      "src/providers/openai-provider.test.ts",
      "src/providers/openai-provider.ts",
      "tsconfig.json"
    ]
  },
  "offlineEvaluation": {
    "fixtureCount": 20,
    "liveCalls": 0,
    "metrics": {
      "structuredOutputValidity": {
        "numerator": 20,
        "denominator": 20,
        "percent": 100,
        "passed": true
      },
      "deterministicArithmeticCorrectness": {
        "numerator": 20,
        "denominator": 20,
        "percent": 100,
        "passed": true
      },
      "criticalFieldExtractionAccuracy": {
        "numerator": 331,
        "denominator": 332,
        "percent": 99.7,
        "passed": true
      },
      "findingCategoryPrecision": {
        "numerator": 38,
        "denominator": 39,
        "percent": 97.44,
        "passed": true
      },
      "findingCategoryRecall": {
        "numerator": 38,
        "denominator": 38,
        "percent": 100,
        "passed": true
      },
      "sourceReferenceResolvability": {
        "numerator": 20,
        "denominator": 20,
        "percent": 100,
        "passed": true
      },
      "clarificationQuestionsTiedToFindings": {
        "numerator": 20,
        "denominator": 20,
        "percent": 100,
        "passed": true
      },
      "fixtureOutcomeAgreement": {
        "numerator": 19,
        "denominator": 20,
        "percent": 95,
        "passed": true
      }
    },
    "knownFailures": [
      "mock-misses-apr: The offline mock extraction omits a source-stated APR, so the downstream trail correctly exposes a missing-APR finding but does not match source ground truth."
    ],
    "limitations": [
      "The offline scores measure committed synthetic sources and mock outputs; they are not a claim about live-model or OCR accuracy.",
      "One fixture deliberately omits a source-stated APR from its mock extraction so metric failure propagation remains visible.",
      "PDF and image fixtures validate evidence contracts and deterministic behavior, not visual OCR quality.",
      "TermsTrail displays documented tax amounts but does not independently calculate tax rates or provide legal or financial advice."
    ]
  },
  "liveQualification": {
    "status": "stopped_on_additional_fixture_failure",
    "requests": 4,
    "cumulativeEstimatedCostUsd": 0.2019675,
    "returnedModels": ["gpt-5.6-sol"],
    "hero": {
      "accepted": true,
      "claimCount": 17,
      "passedGates": 9,
      "estimatedCostUsd": 0.08149875,
      "unexplainedCents": 222000
    },
    "unsupportedOrHallucinatedClaims": 0,
    "localCorrectionLiveVerified": true,
    "correction": {
      "status": "passed",
      "fixtureId": "vague-payment-message",
      "requestNumber": 4,
      "broaderLiveSuiteResumed": false,
      "resultPath": "v3-correction-result.json",
      "resultSha256": "7772a52e20212663948020f8174be9c1388198346886ecb58c57037e2c99a418",
      "requestedModel": "gpt-5.6",
      "returnedModel": "gpt-5.6-sol",
      "estimatedCostUsd": 0.01952,
      "passedGates": 6
    }
  },
  "video": {
    "captureVersion": "private-narrated-demo-v2-openai-voice",
    "narration": {
      "engine": "openai-speech-api",
      "model": "gpt-4o-mini-tts-2025-12-15",
      "voice": "marin",
      "aiGenerated": true,
      "disclosureRequired": true,
      "apiRequests": 1,
      "localRecoveryApiRequests": 0,
      "localRecoveryReason": "streaming-wav-size-placeholder",
      "requestContractPath": "evals/live/provenance/openai-voice-request-contract.json",
      "requestContractSha256": "f7d9e0e6fe27f5ca2fd2bd40946ebcc8fec0e4ee79ecabf154a5e8a6f75777dc",
      "requestCanonicalSha256": "1dd06cc7bb0d1ef74048c9a04d595c8d90ec5772b0971e2f3e7ef76fbdd6fd2e",
      "requestDocumentSha256": "e8605b3c6599557cf275528f03f6661d8692a8cf1bdd20d2a1dfef964bb406ad",
      "requestScriptSha256": "09aa899136ea8a07d949220b7b8361b313ebba4c291de2c3392b6fa75854c900",
      "inputCharacters": 2334,
      "rawDurationSeconds": 149.056,
      "targetDurationSeconds": 178,
      "rawResponseSha256": "df00ac3edabbd053be57df645754d9150ea37f5b6e383479d234db59e9f4559a",
      "inputSha256": "d8b9bd790fe48ef81f82a4e45f3d098ec5156472e33b5878cd78206722321bd8",
      "instructionsSha256": "0dbaccea18a025534e80341357695df1a2e9d515ac85c56ff9eda1a916d3cc11",
      "responseFormat": "wav",
      "speed": 0.9,
      "maxRetries": 0,
      "timeoutMs": 120000,
      "scriptSha256": "7bad54f9771dfd2009009ac5984af01161566b5c13112ecfacd826eab7698642",
      "billing": {
        "priceDate": "2026-07-15",
        "textInputUsdPerMillionTokens": 0.6,
        "audioOutputUsdPerMillionTokens": 12,
        "providerUsageReturned": false,
        "exactCostAvailable": false,
        "authorizationCapUsd": 0.15
      }
    },
    "asset": {
      "filename": "termstrail-demo-draft.mp4",
      "width": 1440,
      "height": 1000,
      "durationSeconds": 178,
      "bytes": 8572906,
      "sha256": "0e0c2734f08ee4bfabedcf4e0f106f3df4d307cbd284aace14b242f20378b252",
      "hasVideo": true,
      "hasAudio": true
    },
    "liveRouteRequests": 0
  },
  "requestContracts": {
    "qualification": {
      "path": "qualification-v2-request-contract.json",
      "schemaPath": "qualification-v2-json-schema.json",
      "qualificationId": "termstrail-gpt-5-6-live-qualification-v2-authorized-rerun",
      "aggregateFingerprint": "07ef6548bbee05e034524d16cc7f538bc0e826d1edea1540ca07395293becd4e"
    },
    "correction": {
      "path": "qualification-v3-correction-request-contract.json",
      "schemaPath": "qualification-v3-correction-json-schema.json",
      "contractSha256": "0ca3cbbe522f03f0af39d7b013a132d5adb68ea754b102e93df414d004e42570",
      "correctionId": "termstrail-gpt-5-6-v3-vague-payment-correction-check",
      "requestBuilderOrderSha256": "d4b37c67bebc1d4a9bd2d626aae82edacb42466852d393fee05641dda8059eee",
      "requestCanonicalSha256": "49ed02905af5e0cd96b5b30cc95e0f86509d8524d1ac0bea9bced714553bf5c7",
      "codeFingerprintSha256": "f88ee81bf5ee8dee82a72bd07ecc5da31155fe887486e2abf97d867caf6e5ae8"
    },
    "voice": {
      "path": "openai-voice-request-contract.json",
      "contractSha256": "f7d9e0e6fe27f5ca2fd2bd40946ebcc8fec0e4ee79ecabf154a5e8a6f75777dc",
      "model": "gpt-4o-mini-tts-2025-12-15",
      "voice": "marin",
      "inputSha256": "d8b9bd790fe48ef81f82a4e45f3d098ec5156472e33b5878cd78206722321bd8",
      "requestCanonicalSha256": "1dd06cc7bb0d1ef74048c9a04d595c8d90ec5772b0971e2f3e7ef76fbdd6fd2e",
      "instructionsSha256": "0dbaccea18a025534e80341357695df1a2e9d515ac85c56ff9eda1a916d3cc11",
      "responseFormat": "wav",
      "speed": 0.9,
      "maxRetries": 0,
      "timeoutMs": 120000,
      "rawResponseSha256": "df00ac3edabbd053be57df645754d9150ea37f5b6e383479d234db59e9f4559a",
      "localRecoveryApiRequests": 0
    }
  }
}
