{
  "generated_at_utc": "2026-08-12T13:43:29.363499+00:00",
  "month": "2026-07",
  "summary": {
    "total": 10,
    "possible_layout_drift": 3,
    "validation_anomaly": 3,
    "source_blocked": 1,
    "incomplete_publication": 0,
    "unverified_source": 0,
    "needs_review": 3
  },
  "results": [
    {
      "code": "adx",
      "exchange_name": "Abu Dhabi Securities Exchange",
      "month": "2026-07",
      "status": "failed",
      "gate_status": "withhold_escalate",
      "publishable": false,
      "issue_class": "possible_layout_drift",
      "suspected_layout_drift": true,
      "source_url": "https://www.adx.ae/resources/report-center/overview?reportId=6",
      "source_date": null,
      "warnings": [
        "Source date is missing.",
        "No source snippets were stored for the extracted metrics."
      ],
      "critical_failures": [
        "Scraper status is failed; publish gate fails closed.",
        "Missing required metric fields: index, volume, value, market_cap."
      ],
      "error": "Chrome remote debugging endpoint did not open on port 50335.",
      "previous_success_months": [
        "2026-06"
      ],
      "bundle_path": "/app/output/2026-07/repair_bundles/adx"
    },
    {
      "code": "bahrain",
      "exchange_name": "Bahrain Bourse",
      "month": "2026-07",
      "status": "success",
      "gate_status": "withhold_self_correct",
      "publishable": false,
      "issue_class": "needs_review",
      "suspected_layout_drift": false,
      "source_url": "https://bahrainbourse.com/en/Publications/Bulletins/Monthly%20Bulletin/July%202026.pdf",
      "source_date": null,
      "warnings": [
        "Source date is missing."
      ],
      "critical_failures": [],
      "error": null,
      "previous_success_months": [
        "2026-05",
        "2026-06"
      ],
      "bundle_path": "/app/output/2026-07/repair_bundles/bahrain"
    },
    {
      "code": "beirut",
      "exchange_name": "Beirut Stock Exchange",
      "month": "2026-07",
      "status": "manual_review",
      "gate_status": "withhold_escalate",
      "publishable": false,
      "issue_class": "validation_anomaly",
      "suspected_layout_drift": false,
      "source_url": null,
      "source_date": null,
      "warnings": [
        "Source date is missing.",
        "No source snippets were stored for the extracted metrics."
      ],
      "critical_failures": [
        "Scraper status is manual_review; publish gate fails closed.",
        "Source URL is missing.",
        "Missing required metric fields: index, volume, value, market_cap."
      ],
      "error": null,
      "previous_success_months": [],
      "bundle_path": "/app/output/2026-07/repair_bundles/beirut"
    },
    {
      "code": "bvmt",
      "exchange_name": "Bourse de Tunis (BVMT)",
      "month": "2026-07",
      "status": "manual_review",
      "gate_status": "withhold_escalate",
      "publishable": false,
      "issue_class": "validation_anomaly",
      "suspected_layout_drift": false,
      "source_url": "https://tunis-stockexchange.com/sites/default/files/2026-08/fr-lettre_mensuelle-juillet-2026_0.pdf",
      "source_date": null,
      "warnings": [
        "Source date is missing.",
        "No source snippets were stored for the extracted metrics."
      ],
      "critical_failures": [
        "Scraper status is manual_review; publish gate fails closed.",
        "Missing required metric fields: index, volume, value, market_cap."
      ],
      "error": null,
      "previous_success_months": [],
      "bundle_path": "/app/output/2026-07/repair_bundles/bvmt"
    },
    {
      "code": "casablanca",
      "exchange_name": "Casablanca Stock Exchange",
      "month": "2026-07",
      "status": "failed",
      "gate_status": "withhold_escalate",
      "publishable": false,
      "issue_class": "possible_layout_drift",
      "suspected_layout_drift": true,
      "source_url": "https://www.casablanca-bourse.com/market-data/editions-statistiques?field_periodicite_value=mensuel&field_type_d_edition_value=rapports_statistiques",
      "source_date": null,
      "warnings": [
        "Source date is missing.",
        "No source snippets were stored for the extracted metrics."
      ],
      "critical_failures": [
        "Scraper status is failed; publish gate fails closed.",
        "Missing required metric fields: index, volume, value, market_cap."
      ],
      "error": "BrowserType.launch_persistent_context: Target page, context or browser has been closed\nBrowser logs:\n\n╔════════════════════════════════════════════════════════════════════════════════════════════════╗\n║ Looks like you launched a headed browser without having a XServer running.                     ║\n║ Set either 'headless: true' or use 'xvfb-run <your-playwright-app>' before running Playwright. ║\n║                                                                                                ║\n║ <3 Playwright Team                                                                             ║\n╚════════════════════════════════════════════════════════════════════════════════════════════════╝\nCall log:\n  - <launching> /ms-playwright/chromium-1234/chrome-linux64/chrome --disable-field-trial-config --disable-background-networking --disable-background-timer-throttling --disable-backgrounding-occluded-windows --disable-back-forward-cache --disable-breakpad --disable-client-side-phishing-detection --disable-component-extensions-with-background-pages --disable-component-update --no-default-browser-check --disable-default-apps --disable-dev-shm-usage --disable-edgeupdater --disable-extensions --disable-features=AvoidUnnecessaryBeforeUnloadCheckSync,BoundaryEventDispatchTracksNodeRemoval,DestroyProfileOnBrowserClose,DialMediaRouteProvider,GlobalMediaControls,HttpsUpgrades,LensOverlay,MediaRouter,PaintHolding,ThirdPartyStoragePartitioning,BlockOriginHeaderModificationOnRedirect,Translate,AutoDeElevate,OptimizationHints,msForceBrowserSignIn,msEdgeUpdateLaunchServicesPreferredVersion --enable-features=CDPScreenshotNewSurface --allow-pre-commit-input --disable-hang-monitor --disable-ipc-flooding-protection --disable-popup-blocking --disable-prompt-on-repost --disable-renderer-backgrounding --disable-updater-scheduler --force-color-profile=srgb --metrics-recording-only --no-first-run --password-store=basic --use-mock-keychain --no-service-autorun --export-tagged-pdf --disable-search-engine-choice-screen --unsafely-disable-devtools-self-xss-warnings --edge-skip-compat-layer-relaunch --disable-infobars --disable-search-engine-choice-screen --disable-sync --enable-unsafe-swiftshader --no-sandbox --user-data-dir=/app/output/_browser_profiles/casablanca --remote-debugging-pipe about:blank\n  - <launched> pid=160\n  - [pid=160][err] [160:175:0812/134252.985417:ERROR:dbus/bus.cc:405] Failed to connect to the bus: Failed to connect to socket /run/dbus/system_bus_socket: No such file or directory\n  - [pid=160][err] [160:160:0812/134252.987478:ERROR:ui/ozone/platform/x11/ozone_platform_x11.cc:257] Missing X server or $DISPLAY\n  - [pid=160][err] [160:160:0812/134252.987495:ERROR:ui/aura/env.cc:246] The platform failed to initialize.  Exiting.\n  - [pid=160] <gracefully close start>\n  - [pid=160] <kill>\n  - [pid=160] <will force kill>\n  - [pid=160] <process did exit: exitCode=1, signal=null>\n  - [pid=160] starting temporary directories cleanup\n  - [pid=160] finished temporary directories cleanup\n  - [pid=160] <gracefully close end>\n",
      "previous_success_months": [
        "2026-06"
      ],
      "bundle_path": "/app/output/2026-07/repair_bundles/casablanca"
    },
    {
      "code": "egx",
      "exchange_name": "Egyptian Exchange",
      "month": "2026-07",
      "status": "failed",
      "gate_status": "withhold_escalate",
      "publishable": false,
      "issue_class": "possible_layout_drift",
      "suspected_layout_drift": true,
      "source_url": null,
      "source_date": null,
      "warnings": [
        "Source date is missing.",
        "No source snippets were stored for the extracted metrics."
      ],
      "critical_failures": [
        "Scraper status is failed; publish gate fails closed.",
        "Source URL is missing.",
        "Missing required metric fields: index, volume, value, market_cap."
      ],
      "error": "Unhandled adapter error: Chrome remote debugging endpoint did not open on port 52553.",
      "previous_success_months": [
        "2026-05",
        "2026-06"
      ],
      "bundle_path": "/app/output/2026-07/repair_bundles/egx"
    },
    {
      "code": "kuwait",
      "exchange_name": "Boursa Kuwait",
      "month": "2026-07",
      "status": "failed",
      "gate_status": "withhold_escalate",
      "publishable": false,
      "issue_class": "source_blocked",
      "suspected_layout_drift": false,
      "source_url": "https://www.boursakuwait.com.kw/data-api/client-services?RT=3522&DT=3&MT=A&L=E",
      "source_date": null,
      "warnings": [
        "Source date is missing.",
        "No source snippets were stored for the extracted metrics."
      ],
      "critical_failures": [
        "Scraper status is failed; publish gate fails closed.",
        "Missing required metric fields: index, volume, value, market_cap."
      ],
      "error": "BrowserType.launch_persistent_context: Target page, context or browser has been closed\nBrowser logs:\n\n╔════════════════════════════════════════════════════════════════════════════════════════════════╗\n║ Looks like you launched a headed browser without having a XServer running.                     ║\n║ Set either 'headless: true' or use 'xvfb-run <your-playwright-app>' before running Playwright. ║\n║                                                                                                ║\n║ <3 Playwright Team                                                                             ║\n╚════════════════════════════════════════════════════════════════════════════════════════════════╝\nCall log:\n  - <launching> /ms-playwright/chromium-1234/chrome-linux64/chrome --disable-field-trial-config --disable-background-networking --disable-background-timer-throttling --disable-backgrounding-occluded-windows --disable-back-forward-cache --disable-breakpad --disable-client-side-phishing-detection --disable-component-extensions-with-background-pages --disable-component-update --no-default-browser-check --disable-default-apps --disable-dev-shm-usage --disable-edgeupdater --disable-extensions --disable-features=AvoidUnnecessaryBeforeUnloadCheckSync,BoundaryEventDispatchTracksNodeRemoval,DestroyProfileOnBrowserClose,DialMediaRouteProvider,GlobalMediaControls,HttpsUpgrades,LensOverlay,MediaRouter,PaintHolding,ThirdPartyStoragePartitioning,BlockOriginHeaderModificationOnRedirect,Translate,AutoDeElevate,OptimizationHints,msForceBrowserSignIn,msEdgeUpdateLaunchServicesPreferredVersion --enable-features=CDPScreenshotNewSurface --allow-pre-commit-input --disable-hang-monitor --disable-ipc-flooding-protection --disable-popup-blocking --disable-prompt-on-repost --disable-renderer-backgrounding --disable-updater-scheduler --force-color-profile=srgb --metrics-recording-only --no-first-run --password-store=basic --use-mock-keychain --no-service-autorun --export-tagged-pdf --disable-search-engine-choice-screen --unsafely-disable-devtools-self-xss-warnings --edge-skip-compat-layer-relaunch --disable-infobars --disable-search-engine-choice-screen --disable-sync --enable-unsafe-swiftshader --no-sandbox --user-data-dir=/app/output/_browser_profiles/kuwait --remote-debugging-pipe about:blank\n  - <launched> pid=126\n  - [pid=126][err] [126:140:0812/134252.450901:ERROR:dbus/bus.cc:405] Failed to connect to the bus: Failed to connect to socket /run/dbus/system_bus_socket: No such file or directory\n  - [pid=126][err] [126:126:0812/134252.452747:ERROR:ui/ozone/platform/x11/ozone_platform_x11.cc:257] Missing X server or $DISPLAY\n  - [pid=126][err] [126:126:0812/134252.452761:ERROR:ui/aura/env.cc:246] The platform failed to initialize.  Exiting.\n  - [pid=126] <gracefully close start>\n  - [pid=126] <kill>\n  - [pid=126] <will force kill>\n  - [pid=126] <process did exit: exitCode=1, signal=null>\n  - [pid=126] starting temporary directories cleanup\n  - [pid=126] finished temporary directories cleanup\n  - [pid=126] <gracefully close end>\n",
      "previous_success_months": [
        "2026-05",
        "2026-06"
      ],
      "bundle_path": "/app/output/2026-07/repair_bundles/kuwait"
    },
    {
      "code": "msx",
      "exchange_name": "Muscat Stock Exchange",
      "month": "2026-07",
      "status": "success",
      "gate_status": "withhold_self_correct",
      "publishable": false,
      "issue_class": "needs_review",
      "suspected_layout_drift": false,
      "source_url": "https://www.msx.om/MSMDOCS/downloads/en_1785411402744_July 2026 ENG_ARB--.xls",
      "source_date": "2026-07-30",
      "warnings": [
        "Index direction disagrees with market-cap direction versus the prior month."
      ],
      "critical_failures": [],
      "error": null,
      "previous_success_months": [
        "2026-05",
        "2026-06"
      ],
      "bundle_path": "/app/output/2026-07/repair_bundles/msx"
    },
    {
      "code": "qatar",
      "exchange_name": "Qatar Exchange",
      "month": "2026-07",
      "status": "success",
      "gate_status": "withhold_self_correct",
      "publishable": false,
      "issue_class": "needs_review",
      "suspected_layout_drift": false,
      "source_url": "https://www.qe.com.qa/wp/trading_report_data/2026/07/MarketSummary.txt",
      "source_date": null,
      "warnings": [
        "Source date is missing."
      ],
      "critical_failures": [],
      "error": null,
      "previous_success_months": [
        "2026-05",
        "2026-06"
      ],
      "bundle_path": "/app/output/2026-07/repair_bundles/qatar"
    },
    {
      "code": "saudi",
      "exchange_name": "Saudi Exchange (Tadawul)",
      "month": "2026-07",
      "status": "failed",
      "gate_status": "withhold_escalate",
      "publishable": false,
      "issue_class": "validation_anomaly",
      "suspected_layout_drift": false,
      "source_url": "https://www.saudiexchange.sa/Resources/Reports-v2/Monthly_en.html",
      "source_date": null,
      "warnings": [
        "Source date is missing.",
        "No source snippets were stored for the extracted metrics."
      ],
      "critical_failures": [
        "Scraper status is failed; publish gate fails closed.",
        "Missing required metric fields: index, volume, value, market_cap."
      ],
      "error": "Chrome remote debugging endpoint did not open on port 41395.",
      "previous_success_months": [],
      "bundle_path": "/app/output/2026-07/repair_bundles/saudi"
    }
  ]
}