{
  "run_at": "2026-10-28T15:49:46.906199+00:00",
  "release": "local review / 2026-10-28",
  "environment": {
    "os": "Fedora Linux",
    "node": "24.22.1",
    "python": "3",
    "pdf_renderer": "LibreOffice 26.2.1.2",
    "browser": "Codex in-app Chromium browser",
    "network": "loopback local only"
  },
  "automated": {
    "command": "node --test --test-reporter=tap",
    "counts": {
      "tests": 68,
      "pass": 68,
      "fail": 0,
      "skipped": 0
    },
    "log": "automated-tests.tap",
    "scope": "Domain/API integration checks, actual PDF endpoint bytes, temporary SQLite databases. No frontend automation framework."
  },
  "browser": {
    "checks": 35,
    "passed": 35,
    "failed": 0,
    "log": "browser-workflows.json",
    "scope": "27 baseline workflow checks plus8 focused checks after independent visual reviews; original and review timestamps are retained in the browser log."
  },
  "responsive": {
    "checks": 36,
    "passed": 36,
    "log": "responsive-qa.json",
    "widths": [
      360,
      390,
      768,
      1440
    ]
  },
  "contrast": {
    "checks": 32,
    "passed": 32,
    "log": "contrast-check.json",
    "scope": "Static authored palette pairs only; no automated accessibility certification or full rendered-state audit."
  },
  "legacy": {
    "madar_fresh_baseline_checks": 17,
    "spreadsheet_families": [
      {
        "case": "catalogue-cleanup",
        "source_rows": 112,
        "output_rows": 100,
        "unique_ids": 100,
        "csv_flags": 4,
        "workbook_matching_rows": 100,
        "workbook_error_cells": 0,
        "leading_zero_examples": [],
        "scope": "Fresh CSV counts/IDs/flags and matching row values in workbook XML (typed ISO dates normalized to YYYY-MM-DD). Cached values only; Excel engine recalculation not claimed.",
        "passed": true
      },
      {
        "case": "order-consolidation",
        "source_rows": 80,
        "output_rows": 72,
        "unique_ids": 72,
        "csv_flags": 4,
        "workbook_matching_rows": 72,
        "workbook_error_cells": 0,
        "leading_zero_examples": [
          "000001",
          "000002",
          "000003"
        ],
        "scope": "Fresh CSV counts/IDs/flags and matching row values in workbook XML (typed ISO dates normalized to YYYY-MM-DD). Cached values only; Excel engine recalculation not claimed.",
        "passed": true
      },
      {
        "case": "supplier-import",
        "source_rows": 60,
        "output_rows": 60,
        "unique_ids": 60,
        "csv_flags": 3,
        "workbook_matching_rows": 60,
        "workbook_error_cells": 0,
        "leading_zero_examples": [
          "0000001",
          "0000002",
          "0000003"
        ],
        "scope": "Fresh CSV counts/IDs/flags and matching row values in workbook XML (typed ISO dates normalized to YYYY-MM-DD). Cached values only; Excel engine recalculation not claimed.",
        "passed": true
      }
    ],
    "scope": "Read-only comparison with preserved owner sources. No original records overwritten."
  },
  "commands": [
    {
      "command": "node scripts/check.mjs",
      "purpose": "JS syntax and HTML Arabic/RTL/viewport metadata"
    },
    {
      "command": "node scripts/build.mjs",
      "purpose": "Regenerate pages and create runnable dist/"
    },
    {
      "command": "python3 scripts/verify-legacy.py",
      "purpose": "Read-only CSV/XLSX XML reconciliation"
    },
    {
      "command": "python3 scripts/contrast.py",
      "purpose": "Authored palette contrast ratios"
    },
    {
      "command": "pdfinfo; pdffonts; pdftoppm",
      "purpose": "Arabic PDF page/font/raster inspection"
    }
  ],
  "caveats": [
    "The restricted executor sandbox could not spawn the Node child process used by tests/check/build. Complete checks ran with approved local execution; the full named TAP output is evidence.",
    "Browser checks used the actual IAB and local server. Screens were captured through a fixed-size same-origin iframe because the direct IAB screenshot surface clipped the wider page. This is real UI capture, not fabricated mockups.",
    "No Lighthouse, axe, cross-browser certification, native mobile device test or production security audit was performed.",
    "PWA cache/reload/queue/reconnect was verified; native install UI and app-store release were not.",
    "Mostaql crop/upload behavior and personal-execution attestation are unresolved; no profile edits or publication.",
    "Legacy workbooks were checked by XML/cached values. No Excel formula-engine recalculation claim."
  ],
  "source_sha256": {
    "public/base.css": "7369cf8e05b96d2a1bb251f4ab73cc55213c8a73e160b4499f88ad7f8f2853c4",
    "public/portfolio.css": "2044f734b158f021a9fe03d957c00bd44580ab0926407eb6e47130bd8fec33d6",
    "public/shared.js": "08a08a76d290817443c7ac0cba0bd31e257acf37d244671e64856dec757aa1c2",
    "public/cases.js": "d6ebcaa8314b61cefd24234827a1fb5523acf674985a634b73473beac5dbf80e",
    "public/cases.json": "a4876d4ccaa981b429d0b5bacb68e90bcd4a697293f267d9b21e86f3d37921d4",
    "public/index.html": "87f62b246e9d3b53e498c975d50e5835ccb40058b0d5bf70ab2f401ebdf654a7",
    "public/demos.css": "00ac098bc91766adba5c13a461ad2edd37a7e67af73d40dfeae50831aa4dd364",
    "public/csv.js": "d4ef79f1ed3517d3d7704131124874ec1d03c8f1121bad3fb8ff0c10b8f907f5",
    "public/capture.html": "04da15353d160a8641d8a184a307edbfdf15c290d1c189d104a4732461d64794",
    "public/capture.js": "ccb87dc5ecc867cd31f2aa7d63357b75a72c74387dfe878a3e572930a084f5f8",
    "public/boards.html": "4b2be01251ee8cee382a4f386d6e411d91cc9e308347f990d0b244f159480be0",
    "public/boards.css": "d8a07d3627432f0d4f8c4bb808f113f51d5dd6f6de6c98e731926ef94edd30f0",
    "public/boards.js": "e53d9121a0a5c0b29ff406b35317c2573b16c5224868157cfc26a1bad834f5ab",
    "public/cases/madar/index.html": "3ad9559be4005bec67e2e9e69814b8bd0fb1589baf422f5e9bb9c87f574bbd1a",
    "public/cases/dar/index.html": "23e4c782b01eaeee26757da59ebd61a1baf00b1ae34d0dcc74a5abbd23c12604",
    "public/cases/athar/index.html": "0a22bf45e3d4ae840254496f1f9ba7957d330bed029e6cf3f92d9fd4e327cfc3",
    "public/cases/mawid/index.html": "02b9107ec7178dc9e4a869475571a83121fbde768815d91f3de486d73941b259",
    "public/cases/masar/index.html": "9f8002284acda67c03a9273968dfa1e65edd2d7abdb4c95c6e507470cd8d16e6",
    "public/cases/wasl/index.html": "b20e41f13d9babe6291b049d3d41b2bef8e5f9420a34cd6b95779dd2b2e6b092",
    "public/cases/nasq/index.html": "2a3af23d7114880a8bd15fc56516093687568f16c1ed1135bbfeb95c4b5f09f3",
    "public/cases/bayan/index.html": "b128ae88f8154cfa9aa04d0b568b79f957a7e4ce3724ee55d52afbd294665893",
    "public/demos/madar/index.html": "4a38e15627c7f6f5dd5851d49c3de8b4773a0ed870ee3be83831773128c986ae",
    "public/demos/madar/app.js": "1e1618d89342cf3e30155dac19acef7ab1caed39443b3e410440661fc1e41e37",
    "public/demos/dar/index.html": "cacd777ffec5fcdbdd1f50de97b069072c2bc1a8991159397f89383aea97dc1d",
    "public/demos/dar/app.js": "56f9ad8f79df1369544fe59484f7ef39470d7b55820d6c157d288c8382552d71",
    "public/demos/athar/index.html": "16b46697701fa9d57a12c02dc160ac11dfa473dcfb84c80dccc090af1357df90",
    "public/demos/athar/app.js": "db7402ff6da139a40f90e944de2db61388b8c5aa3de3f817970314bb9e408bc5",
    "public/demos/mawid/index.html": "fa09475068773bd433aa6bc82abb733105a22dd07d02094131c75daddd5a91bd",
    "public/demos/mawid/app.js": "cb0aa9b1eac769ccb1c87ca75ad63ce3d6a78b3ea51745cda309c58aa3c752ea",
    "public/demos/masar/index.html": "3a8a0a2b643536430d15c66120bc863095484d3c9d36e20279f51c4c575e86f6",
    "public/demos/masar/app.js": "c87aaf2959b5a774ac5e9da3559592dcb9cbe9978ba69d79a1a2c69c4765ffac",
    "public/demos/masar/sw.js": "2ff80bf8a587447ee68fe153928be0d8020f5f29691877abe243f88f83048f57",
    "public/demos/masar/manifest.webmanifest": "a330e50797d221cd8c8f90915f24e055afab5bdad5703603d8460c9c75cabdd4",
    "public/demos/wasl/index.html": "a69c5e4584fd47da1b3e87dfae0f6d655b78df2074feae8bb834a0a814be0763",
    "public/demos/wasl/app.js": "bd868f1537a481fedde48ca2a983ef93dc0823c5630439eb1dd8246a3e902015",
    "public/demos/nasq/index.html": "20359c3787b2234ccbea66ba011bd859407c245d2e9e283f8c8859bbf27d1094",
    "public/demos/nasq/app.js": "c91f646f29912ead73cd59b0d5cb31028f63ddd701b3aea22d5bd7c17702b14c",
    "public/demos/bayan/index.html": "55b2a38718722a0b211cc9b4b1897fda7c0299dab52386765013ce6d702619d1",
    "public/demos/bayan/app.js": "c15b07451bad91d89a69a7df84b4964119964650cba6208aa72be26d14391643",
    "public/demos/bayan/report.html": "ff2181e17e035c47a70bab51da06ff36f9a65ebc978783f36fb417141a431a7a",
    "public/demos/bayan/report.css": "7261005b0c8070a5ae7b947c802127f6101efac89c61206e7978d619c9247b14",
    "public/demos/bayan/report.js": "016e925ca2187e713d998e579eb8607ae2cf0cc8461e0150f5f2d19467fad555",
    "lib/documents.json": "96ad8f4202a2f3071e045cec6fdc62dd2904f6b39cb422695c44e98dab664324",
    "lib/domain.mjs": "d5a37db9e697dc478ef1bd135ea6efdf9f35ecf7c7d56501ddc8e1da1dcdec0e",
    "scripts/pages.py": "46ff94755bc50b683d6f9d58245026bc8e90f25e8d98bf3680a99f1ed5a835d5",
    "scripts/demos.py": "b42e9224ddd2d5d46ec3bae5a0dcd43888ab40fb366e661dc02dc9d0db5a74ab",
    "scripts/report.py": "f7a4cae82ecfd43d4a457da0c70ac710ec135b21358876baa585b476c6386919",
    "scripts/check.mjs": "6bcf8ae0f65c2a26cc509bd6629bbffd1a31854cd94b3a846a3039b06141eb67",
    "scripts/build.mjs": "f52b0f5a3a992459b449879d831ca9832eacde9bb737b308c9b291d74718a0a9",
    "scripts/handover.py": "f442b22335ecd69ec1a20f2f5abe0695462be7664b533d2d6eaec6e6af08ff82",
    "scripts/verify-legacy.py": "b7e8759ddf141721237615c7c449359f8ec85b7c1d88397f1c2a8c465fcaef45",
    "scripts/contrast.py": "9cf5ff16c4b1fc6d03c0f1b09c1c2537289dd73866516c6d5830e2398be59fa3",
    "scripts/evidence.py": "b4443c659f9e278529375f77238728ebf55bf6a9096da50cf4f0d2d03e4b245a",
    "scripts/check-links.mjs": "42d02648d39bd0425fafceff7e709816d171b9bc70107d999afc249162951f09",
    "scripts/export-fixtures.mjs": "cf64af110849eb178ee1702f4bb9e1321dc8fde761fa1ef6afa4ba8129f3dbcd",
    "scripts/smoke.mjs": "c549e099f0e672b5d340cb35d288ad39ee7ae563149316a3e1c184559d032a73",
    "tests/domain.test.mjs": "b549fe101c6c3d155d69ba2da1e3e3ecb827098f57cc0e18bba9f016f94cc91b",
    "tests/api.test.mjs": "9d84beeb6fae0114b6b2dadf371fca51e4d5190c749647e270ade4280b158e4c",
    "server.mjs": "b2f574d38d6289c6b9ba7600c2cdb08ffa90fb68cf1460b8e203f0154a754d70"
  },
  "clean_run": {
    "run_at": "2026-10-28T15:45:02.956Z",
    "command": "PORT=8781 node server.mjs (dist); node scripts/smoke.mjs http://127.0.0.1:8781",
    "scope": "Fresh dist runtime, deterministic seed and actual PDF generation; read-only smoke requests.",
    "checks": [
      {
        "route": "/api/health",
        "passed": true,
        "bytes": 45
      },
      {
        "route": "/",
        "passed": true,
        "bytes": 11228
      },
      {
        "route": "/demos/madar/",
        "passed": true,
        "bytes": 4891
      },
      {
        "route": "/demos/dar/",
        "passed": true,
        "bytes": 5704
      },
      {
        "route": "/demos/athar/",
        "passed": true,
        "bytes": 3989
      },
      {
        "route": "/demos/mawid/",
        "passed": true,
        "bytes": 3779
      },
      {
        "route": "/demos/masar/",
        "passed": true,
        "bytes": 2900
      },
      {
        "route": "/demos/wasl/",
        "passed": true,
        "bytes": 3553
      },
      {
        "route": "/demos/nasq/",
        "passed": true,
        "bytes": 4222
      },
      {
        "route": "/demos/bayan/",
        "passed": true,
        "bytes": 3794
      },
      {
        "route": "/api/documents",
        "passed": true,
        "bytes": 1098
      },
      {
        "route": "/api/bookings",
        "passed": true,
        "bytes": 451
      },
      {
        "route": "/api/products",
        "passed": true,
        "bytes": 504
      },
      {
        "route": "/api/analytics",
        "passed": true,
        "bytes": 9941
      },
      {
        "route": "/demos/masar/icon-192.png",
        "passed": true,
        "bytes": 6336
      },
      {
        "route": "/demos/masar/icon-512.png",
        "passed": true,
        "bytes": 103318
      },
      {
        "route": "/api/report.pdf?from=2026-09-01&to=2026-10-31",
        "passed": true,
        "bytes": 329254
      }
    ]
  },
  "boards": {
    "count": 32,
    "canvas": [
      1700,
      970
    ],
    "thumbnail": [
      340,
      194
    ],
    "passed": 32,
    "source": "Actual captured UI composed with editable HTML/CSS."
  },
  "pdf": {
    "file": "handover/bayan-report.pdf",
    "pages": 4,
    "font_evidence": "pdf-fonts.txt",
    "visual_scope": "All4 pages inspected at full size, rendered and included for review. Repeated headers and no orphan fifth page."
  },
  "validation_logs": {
    "static-check.txt": "PASS: JavaScript syntax in 24 files; Arabic/RTL/viewport metadata in 21 HTML files.",
    "link-check.txt": "PASS: 251 authored local links and assets resolve.",
    "build-check.txt": "Generated portfolio and eight case studies.\nGenerated eight distinct demo interfaces.\nPASS: JavaScript syntax in 24 files; Arabic/RTL/viewport metadata in 21 HTML files.\nLocal review package built in dist/. Run node server.mjs there. No deployment performed."
  }
}
