{
  "stage": 9,
  "status": "DEVELOPMENT VALIDATED",
  "startedAt": "2026-08-30T18:36:17.745Z",
  "finishedAt": "2026-08-30T18:39:08.236Z",
  "searchRankingVersionInCode": "2026-08-30-stage9",
  "catalog": {
    "catalogVersion": "2026-03-stage0-v1",
    "expectedRankingVersionInCode": "2026-08-30-stage9",
    "totalCases": 29,
    "liveEligibleCases": 26
  },
  "localTests": {
    "ok": true,
    "results": [
      {
        "script": "scripts/validate-search-query-intent.js",
        "ok": true,
        "status": 0,
        "stdout": "SearchQueryIntent unit tests: OK\n\nCatalog: D:\\working\\merchbackend\\scripts\\jonard-regression-catalog.json\ncatalogVersion: 2026-03-stage0-v1\nexpectedRankingVersionInCode: 2026-08-30-stage9\n\nIntent label validation: 29/29 (100.0%)\n\nvalidate-search-query-intent: OK\n",
        "stderr": ""
      },
      {
        "script": "scripts/test-stage5-semantic-local.js",
        "ok": true,
        "status": 0,
        "stdout": "Stage 5 local smoke: PASS\nSEARCH_RANKING_VERSION: 2026-08-30-stage9\n",
        "stderr": "DB sync error: ConnectionError [SequelizeConnectionError]: connect ETIMEDOUT 35.232.107.42:5432\n    at Client._connectionCallback (D:\\working\\merchbackend\\node_modules\\sequelize\\lib\\dialects\\postgres\\connection-manager.js:145:24)\n    at Client._handleErrorWhileConnecting (D:\\working\\merchbackend\\node_modules\\pg\\lib\\client.js:403:19)\n    at Client._handleErrorEvent (D:\\working\\merchbackend\\node_modules\\pg\\lib\\client.js:413:19)\n    at Connection.emit (node:events:524:28)\n    at Socket.reportStreamError (D:\\working\\merchbackend\\node_modules\\pg\\lib\\connection.js:58:12)\n    at Socket.emit (node:events:524:28)\n    at emitErrorNT (node:internal/streams/destroy:170:8)\n    at emitErrorCloseNT (node:internal/streams/destroy:129:3)\n    at process.processTicksAndRejections (node:internal/process/task_queues:90:21) {\n  parent: Error: connect ETIMEDOUT 35.232.107.42:5432\n      at TCPConnectWrap.afterConnect [as oncomplete] (node:net:1615:16) {\n    errno: -4039,\n    code: 'ETIMEDOUT',\n    syscall: 'connect',\n    address: '35.232.107.42',\n    port: 5432\n  },\n  original: Error: connect ETIMEDOUT 35.232.107.42:5432\n      at TCPConnectWrap.afterConnect [as oncomplete] (node:net:1615:16) {\n    errno: -4039,\n    code: 'ETIMEDOUT',\n    syscall: 'connect',\n    address: '35.232.107.42',\n    port: 5432\n  }\n}\n"
      },
      {
        "script": "scripts/test-stage6-business-ranking-local.js",
        "ok": true,
        "status": 0,
        "stdout": "Stage 6 local smoke: PASS\nSEARCH_RANKING_VERSION: 2026-08-30-stage9\n",
        "stderr": "DB sync error: ConnectionError [SequelizeConnectionError]: connect ETIMEDOUT 35.232.107.42:5432\n    at Client._connectionCallback (D:\\working\\merchbackend\\node_modules\\sequelize\\lib\\dialects\\postgres\\connection-manager.js:145:24)\n    at Client._handleErrorWhileConnecting (D:\\working\\merchbackend\\node_modules\\pg\\lib\\client.js:403:19)\n    at Client._handleErrorEvent (D:\\working\\merchbackend\\node_modules\\pg\\lib\\client.js:413:19)\n    at Connection.emit (node:events:524:28)\n    at Socket.reportStreamError (D:\\working\\merchbackend\\node_modules\\pg\\lib\\connection.js:58:12)\n    at Socket.emit (node:events:524:28)\n    at emitErrorNT (node:internal/streams/destroy:170:8)\n    at emitErrorCloseNT (node:internal/streams/destroy:129:3)\n    at process.processTicksAndRejections (node:internal/process/task_queues:90:21) {\n  parent: Error: connect ETIMEDOUT 35.232.107.42:5432\n      at TCPConnectWrap.afterConnect [as oncomplete] (node:net:1615:16) {\n    errno: -4039,\n    code: 'ETIMEDOUT',\n    syscall: 'connect',\n    address: '35.232.107.42',\n    port: 5432\n  },\n  original: Error: connect ETIMEDOUT 35.232.107.42:5432\n      at TCPConnectWrap.afterConnect [as oncomplete] (node:net:1615:16) {\n    errno: -4039,\n    code: 'ETIMEDOUT',\n    syscall: 'connect',\n    address: '35.232.107.42',\n    port: 5432\n  }\n}\n"
      },
      {
        "script": "scripts/test-stage7-confidence-fallback-local.js",
        "ok": true,
        "status": 0,
        "stdout": "Stage 7 local smoke tests passed.\nSEARCH_RANKING_VERSION: 2026-08-30-stage9\n",
        "stderr": "DB sync error: ConnectionError [SequelizeConnectionError]: connect ETIMEDOUT 35.232.107.42:5432\n    at Client._connectionCallback (D:\\working\\merchbackend\\node_modules\\sequelize\\lib\\dialects\\postgres\\connection-manager.js:145:24)\n    at Client._handleErrorWhileConnecting (D:\\working\\merchbackend\\node_modules\\pg\\lib\\client.js:403:19)\n    at Client._handleErrorEvent (D:\\working\\merchbackend\\node_modules\\pg\\lib\\client.js:413:19)\n    at Connection.emit (node:events:524:28)\n    at Socket.reportStreamError (D:\\working\\merchbackend\\node_modules\\pg\\lib\\connection.js:58:12)\n    at Socket.emit (node:events:524:28)\n    at emitErrorNT (node:internal/streams/destroy:170:8)\n    at emitErrorCloseNT (node:internal/streams/destroy:129:3)\n    at process.processTicksAndRejections (node:internal/process/task_queues:90:21) {\n  parent: Error: connect ETIMEDOUT 35.232.107.42:5432\n      at TCPConnectWrap.afterConnect [as oncomplete] (node:net:1615:16) {\n    errno: -4039,\n    code: 'ETIMEDOUT',\n    syscall: 'connect',\n    address: '35.232.107.42',\n    port: 5432\n  },\n  original: Error: connect ETIMEDOUT 35.232.107.42:5432\n      at TCPConnectWrap.afterConnect [as oncomplete] (node:net:1615:16) {\n    errno: -4039,\n    code: 'ETIMEDOUT',\n    syscall: 'connect',\n    address: '35.232.107.42',\n    port: 5432\n  }\n}\n"
      },
      {
        "script": "scripts/test-stage8-admin-explain-local.js",
        "ok": true,
        "status": 0,
        "stdout": "Stage 8 local smoke tests passed.\nSEARCH_RANKING_VERSION: 2026-08-30-stage9\n",
        "stderr": "DB sync error: ConnectionError [SequelizeConnectionError]: connect ETIMEDOUT 35.232.107.42:5432\n    at Client._connectionCallback (D:\\working\\merchbackend\\node_modules\\sequelize\\lib\\dialects\\postgres\\connection-manager.js:145:24)\n    at Client._handleErrorWhileConnecting (D:\\working\\merchbackend\\node_modules\\pg\\lib\\client.js:403:19)\n    at Client._handleErrorEvent (D:\\working\\merchbackend\\node_modules\\pg\\lib\\client.js:413:19)\n    at Connection.emit (node:events:524:28)\n    at Socket.reportStreamError (D:\\working\\merchbackend\\node_modules\\pg\\lib\\connection.js:58:12)\n    at Socket.emit (node:events:524:28)\n    at emitErrorNT (node:internal/streams/destroy:170:8)\n    at emitErrorCloseNT (node:internal/streams/destroy:129:3)\n    at process.processTicksAndRejections (node:internal/process/task_queues:90:21) {\n  parent: Error: connect ETIMEDOUT 35.232.107.42:5432\n      at TCPConnectWrap.afterConnect [as oncomplete] (node:net:1615:16) {\n    errno: -4039,\n    code: 'ETIMEDOUT',\n    syscall: 'connect',\n    address: '35.232.107.42',\n    port: 5432\n  },\n  original: Error: connect ETIMEDOUT 35.232.107.42:5432\n      at TCPConnectWrap.afterConnect [as oncomplete] (node:net:1615:16) {\n    errno: -4039,\n    code: 'ETIMEDOUT',\n    syscall: 'connect',\n    address: '35.232.107.42',\n    port: 5432\n  }\n}\n"
      }
    ]
  },
  "liveCatalog": {
    "ok": true,
    "protectedGate": {
      "ok": true,
      "mode": "protected_ids",
      "passed": 26,
      "total": 26,
      "failures": [],
      "protectedCount": 18
    },
    "catalogEvaluations": [
      {
        "id": "exact-sku-fdc66",
        "family": "exact-sku",
        "query": "FDC-66",
        "pass": true,
        "issues": [],
        "preferredTop1": "FDC-66",
        "actualTop1": "FDC-66"
      },
      {
        "id": "exact-sku-normalized",
        "family": "exact-sku",
        "query": "fdc66",
        "pass": true,
        "issues": [],
        "preferredTop1": "FDC-66",
        "actualTop1": "FDC-66"
      },
      {
        "id": "exact-upc-fdc66",
        "family": "exact-upc",
        "query": "811490017801",
        "pass": true,
        "issues": [],
        "preferredTop1": "FDC-66",
        "actualTop1": "FDC-66"
      },
      {
        "id": "spacing-screwdriver",
        "family": "spacing-compound",
        "query": "screwdriver",
        "pass": true,
        "issues": [],
        "preferredTop1": null,
        "actualTop1": "SDP-2"
      },
      {
        "id": "spacing-screw-driver",
        "family": "spacing-compound",
        "query": "screw driver",
        "pass": true,
        "issues": [],
        "preferredTop1": null,
        "actualTop1": "SDP-2"
      },
      {
        "id": "spacing-fishtape",
        "family": "spacing-compound",
        "query": "fishtape",
        "pass": true,
        "issues": [],
        "preferredTop1": null,
        "actualTop1": "FTS-240"
      },
      {
        "id": "spacing-fish-tape",
        "family": "spacing-compound",
        "query": "fish tape",
        "pass": true,
        "issues": [],
        "preferredTop1": null,
        "actualTop1": "FTS-240"
      },
      {
        "id": "plural-connector",
        "family": "morphology",
        "query": "connector",
        "pass": true,
        "issues": [],
        "preferredTop1": null,
        "actualTop1": "FCC-125"
      },
      {
        "id": "plural-connectors",
        "family": "morphology",
        "query": "connectors",
        "pass": true,
        "issues": [],
        "preferredTop1": null,
        "actualTop1": "CTF-200"
      },
      {
        "id": "fiber-disposal-fiber-scr",
        "family": "fiber-disposal",
        "query": "fiber scr",
        "pass": true,
        "issues": [],
        "preferredTop1": "FDC-66",
        "actualTop1": "FDC-66"
      },
      {
        "id": "fiber-disposal-fiber-sc",
        "family": "fiber-disposal",
        "query": "fiber sc",
        "pass": true,
        "issues": [],
        "preferredTop1": "FDC-66",
        "actualTop1": "FDC-66"
      },
      {
        "id": "fiber-disposal-trash-can",
        "family": "fiber-disposal",
        "query": "fiber trash can",
        "pass": true,
        "issues": [],
        "preferredTop1": null,
        "actualTop1": "FDC-66"
      },
      {
        "id": "functional-insertion",
        "family": "functional-intent",
        "query": "fiber insertion tool",
        "pass": true,
        "issues": [],
        "preferredTop1": null,
        "actualTop1": "FCT-100"
      },
      {
        "id": "functional-removal",
        "family": "functional-intent",
        "query": "fiber removal tool",
        "pass": true,
        "issues": [],
        "preferredTop1": null,
        "actualTop1": "FCT-100"
      },
      {
        "id": "electrical-connector-tools",
        "family": "product-type",
        "query": "electrical connector tools",
        "pass": true,
        "issues": [],
        "preferredTop1": null,
        "actualTop1": "R-5926"
      },
      {
        "id": "cable-pulling-tools",
        "family": "functional-intent",
        "query": "cable pulling tools",
        "pass": true,
        "issues": [],
        "preferredTop1": null,
        "actualTop1": "CP-475"
      },
      {
        "id": "wire-pulling",
        "family": "functional-intent",
        "query": "wire pulling tools",
        "pass": true,
        "issues": [],
        "preferredTop1": null,
        "actualTop1": "ROD-3316"
      },
      {
        "id": "silent-category-fiber",
        "family": "silent-category",
        "query": "fiber",
        "pass": true,
        "issues": [],
        "preferredTop1": null,
        "actualTop1": "JIC-375"
      },
      {
        "id": "kit-vs-individual-stripper",
        "family": "product-structure",
        "query": "fiber stripper kit",
        "pass": true,
        "issues": [],
        "preferredTop1": null,
        "actualTop1": "TK-375"
      },
      {
        "id": "kit-vs-individual-jic375",
        "family": "product-structure",
        "query": "JIC-375",
        "pass": true,
        "issues": [],
        "preferredTop1": "JIC-375",
        "actualTop1": "JIC-375"
      },
      {
        "id": "nl-strip-900-micron",
        "family": "natural-language",
        "query": "tool to strip 900 micron fiber",
        "pass": true,
        "issues": [],
        "preferredTop1": null,
        "actualTop1": "JIC-375"
      },
      {
        "id": "typo-conector",
        "family": "typo",
        "query": "conector",
        "pass": true,
        "issues": [],
        "preferredTop1": null,
        "actualTop1": "CTF-200"
      },
      {
        "id": "typo-scredriver",
        "family": "typo",
        "query": "scredriver",
        "pass": true,
        "issues": [],
        "preferredTop1": null,
        "actualTop1": "SDP-2"
      },
      {
        "id": "competitor-32-60-375",
        "family": "competitor",
        "query": "32-60-375",
        "pass": true,
        "issues": [],
        "preferredTop1": null,
        "actualTop1": "TK-375"
      },
      {
        "id": "one-char-s",
        "family": "one-char-autocomplete",
        "query": "s",
        "pass": true,
        "issues": [],
        "preferredTop1": null,
        "actualTop1": "SK-51632"
      },
      {
        "id": "exact-title-fiber-stripper",
        "family": "exact-title",
        "query": "Fiber Stripper & Scissors Kit",
        "pass": true,
        "issues": [],
        "preferredTop1": "TK-375",
        "actualTop1": "TK-375"
      }
    ],
    "catalogParity": [
      {
        "id": "spacing-screw-driver",
        "parityWith": "spacing-screwdriver",
        "queries": [
          "screw driver",
          "screwdriver"
        ],
        "ok": true,
        "issues": []
      },
      {
        "id": "spacing-fishtape",
        "parityWith": "spacing-fish-tape",
        "queries": [
          "fishtape",
          "fish tape"
        ],
        "ok": true,
        "issues": []
      },
      {
        "id": "plural-connectors",
        "parityWith": "plural-connector",
        "queries": [
          "connectors",
          "connector"
        ],
        "ok": false,
        "issues": [
          "found mismatch: \"connectors\"=35 vs \"connector\"=81",
          "ordered SKU mismatch: \"connectors\"=[CTF-200,TK-82,FCT-100,FLS-50,RJ45-625,CTF-300,TK-83,RJ45-525] vs \"connector\"=[FCC-125,JIC-891,FCT-100,RBNC-12,TK-183,TK-182RF,FCT-200,RF-12]"
        ]
      }
    ],
    "searchRankingVersionApi": "2026-08-30-stage9",
    "rankingVersionMismatchRecorded": false
  },
  "intentMatchAccuracy": {
    "total": 7,
    "passed": 7,
    "accuracy": 1,
    "failures": []
  },
  "protectedGate": {
    "ok": true,
    "mode": "protected_ids",
    "passed": 26,
    "total": 26,
    "failures": [],
    "protectedCount": 18
  },
  "latency": {
    "autocomplete": {
      "byQuery": {
        "FDC-66": {
          "samples": 8,
          "minMs": 643,
          "p50Ms": 656,
          "p95Ms": 1428,
          "maxMs": 1428
        },
        "screwdriver": {
          "samples": 8,
          "minMs": 834,
          "p50Ms": 846,
          "p95Ms": 953,
          "maxMs": 953
        },
        "fiber trash can": {
          "samples": 8,
          "minMs": 644,
          "p50Ms": 650,
          "p95Ms": 721,
          "maxMs": 721
        },
        "tool to strip 900 micron fiber": {
          "samples": 8,
          "minMs": 951,
          "p50Ms": 976,
          "p95Ms": 999,
          "maxMs": 999
        }
      },
      "aggregate": {
        "samples": 32,
        "p50Ms": 834,
        "p95Ms": 999,
        "maxMs": 1428
      }
    },
    "serp": {
      "byQuery": {
        "FDC-66": {
          "samples": 4,
          "minMs": 552,
          "p50Ms": 553,
          "p95Ms": 567,
          "maxMs": 567
        },
        "screwdriver": {
          "samples": 4,
          "minMs": 519,
          "p50Ms": 525,
          "p95Ms": 545,
          "maxMs": 545
        }
      },
      "aggregate": {
        "samples": 8,
        "p50Ms": 545,
        "p95Ms": 567,
        "maxMs": 567
      }
    },
    "thresholds": {
      "autocompleteP95Ms": 150,
      "serpP95Ms": 2000
    }
  },
  "semanticFailOpen": {
    "ok": true,
    "queries": [
      {
        "q": "tool to strip 900 micron fiber",
        "status": 200,
        "hits": 7,
        "pass": true
      },
      {
        "q": "fiber removal tool",
        "status": 200,
        "hits": 8,
        "pass": true
      }
    ]
  },
  "requestTool": {
    "ok": true,
    "status": 200,
    "offer": true,
    "email": "orders@jonard.com",
    "confidenceLevel": "VERY_LOW"
  },
  "oneChar": {
    "ok": true,
    "status": 200,
    "hits": 8
  },
  "freshness": {
    "status": "MANUAL_VERIFY",
    "note": "Index freshness ≤ 2 min requires controlled reindex probe; not automated in Stage 9 harness."
  },
  "knownAdvisories": [
    "spacing parity screw driver vs screwdriver (found count may differ)",
    "plural parity connector vs connectors (found + order may differ)",
    "Client RTT latency includes network hop to Dev; use STRICT_P95=1 only on-server probes."
  ],
  "blockers": [],
  "warnings": [
    "Autocomplete client p95 999ms > 150ms"
  ],
  "gates": {
    "localTests": true,
    "liveCatalog": true,
    "protectedGate": true,
    "intentMatchAccuracy": true,
    "semanticFailOpen": true,
    "requestTool": true,
    "oneChar": true
  }
}