{
  "report_id": "construction-prototype-20261016",
  "tested_on": "2026-10-16",
  "source_fingerprint": "c0cae7345a6e7581932528044e7990d59a522169d8af7b16a4560b1b0669d31b",
  "method": "Automated checks executed with Codex for Digittrix. Local workflow fixture and isolated CodeIgniter controller checks; separate unauthenticated checks against the live site. Not an independent audit, construction field pilot or human technical review.",
  "environment": {
    "host": "macOS 15.8.2",
    "php": "8.5.4",
    "browser": "154.0.8037.98",
    "viewport_widths": [
      1440,
      768,
      390,
      320
    ],
    "physical_mobile_devices_tested": false
  },
  "source_sha256": {
    "app/Libraries/ConstructionDemo.php": "699767b7790c37529d09f99982d1189a20c0799be3c68f6fc3188246f3e5ccf7",
    "app/Controllers/ConstructionDemoController.php": "4376303428a4cab30beea5b17c3cd3ca4b66790267e1ad4cca5bb37d8bd468e5",
    "app/Views/backend/construction_demo/workspace.php": "6f209a627d1154491378d225a3dc9b7f9066fd47520817190f5745124ebd3e07",
    "public/construction-demo/app.js": "5ff799dde9ae329e8965aca809e8adfb1452bf50f7b09a73e3e3c1d68ba733e6",
    "public/construction-demo/app.css": "5110172c865db3bfb46ee7f1384018c1cd3a6667ead2c23cc6950ab809bca8ef"
  },
  "workflow_api": {
    "checks": [
      "Independent visitor workspaces",
      "CSRF enforcement",
      "Malformed JSON rejected as 400",
      "Client data filtering and forbidden mutation",
      "Handover blocked by open inspections",
      "Unapproved orders blocked",
      "Return initial 120-bag request",
      "Site financial data excluded",
      "Revise to 100 and preserve history",
      "Approved quantity locked into order",
      "Partial receipt: 60 accepted, 2 rejected",
      "Identical retry is idempotent",
      "Duplicate reference rejected",
      "Over-receipt rejected without partial changes",
      "Second receipt completes 100 accepted bags",
      "Stock issue cannot exceed accepted inventory",
      "Closure and actual cost reconciliation",
      "Stale revision rejected",
      "Variation waits for client approval",
      "Client approval updates budget by USD 540",
      "Completion precedes sample invoice",
      "New site report submitted for review",
      "Unpublished site reports withheld from client",
      "Corrected report published",
      "RFI response and drawing version history",
      "Verified snags permit client handover",
      "Reset invalidates drafts from earlier workspace"
    ],
    "count": 27
  },
  "finance_progress": {
    "checks": [
      "Seed cash balances reconcile",
      "Seed unpaid balances reconcile",
      "Progress derived from four tasks",
      "Blocker updates project health",
      "Task completion updates percentage",
      "Overdue unfinished task marks project delayed",
      "New cost updates actuals to cents",
      "Duplicate cost reference rejected",
      "Cost payment changes cash, not actual costs",
      "Overpayment rejected",
      "Duplicate payment reference rejected",
      "Invoice creates receivable",
      "Partial client receipt reduces outstanding balance",
      "Client cannot retrieve finance",
      "Client cannot retrieve expenses",
      "Client cannot retrieve payments",
      "Client cannot retrieve invoices",
      "Client cannot retrieve progressSummary",
      "Site cannot retrieve finance",
      "Site cannot retrieve expenses",
      "Site cannot retrieve payments",
      "Site cannot retrieve invoices",
      "Site can view project progress",
      "Site audit excludes finance activity",
      "Accepted materials create cost record; rejects excluded",
      "Material receipt payment recorded against correct cost",
      "Material payment amount hidden from site role",
      "Variation invoice enters finance register exactly once",
      "Dashboard and finance cost totals reconcile"
    ]
  },
  "controller_access": {
    "checks": [
      "Anonymous API access denied",
      "Anonymous workspace HTML denied",
      "Authenticated staff denied API",
      "Authenticated staff denied HTML",
      "Permission label cannot bypass strict admin role",
      "IP integrity checked",
      "Authenticated admin receives workspace",
      "Admin HTML cannot be publicly cached",
      "Authenticated admin receives sample state",
      "Both CSRF tokens returned",
      "Admin API cannot be publicly cached",
      "Missing demo CSRF token denied",
      "Authenticated administrator can preview site role",
      "Demo role switch cannot change authenticated identity",
      "Site preview still filters financial data",
      "Existing framework CSRF accepts matching token",
      "Existing framework CSRF rejects invalid token",
      "Logging out blocks subsequent actions even with demo token",
      "Explicit private API route configured"
    ]
  },
  "browser": {
    "timestamp": "2026-10-16T08:17:40.795Z",
    "browser": "154.0.8037.98",
    "host": "macOS 15.8.2",
    "viewports": [
      1440,
      768,
      390,
      320
    ],
    "method": "Headless Chrome on macOS; mobile viewport emulation, not physical devices. Local fixture using hash-matched deployed workflow source, HTML, JS and CSS. Authentication tested separately.",
    "checks": [
      {
        "name": "Partial receipt entered through the browser form",
        "observed": "60 accepted, 2 rejected, 40 outstanding against an order of 100.",
        "result": "Pass"
      },
      {
        "name": "Expense and partial payment reconcile",
        "observed": "USD 250.55 cost and USD 100.25 payment leave USD 150.30 unpaid; project actual cost is USD 23,550.55.",
        "result": "Pass"
      },
      {
        "name": "Overpayment is rejected in the UI",
        "observed": "USD 151 exceeds the remaining USD 150.30; the form shows an error.",
        "result": "Pass"
      },
      {
        "name": "Blocked task affects progress",
        "observed": "One blocked task is reflected in the progress summary.",
        "result": "Pass"
      },
      {
        "name": "Responsive layout at 1440 CSS pixels",
        "observed": "Materials, finances, progress and reports fit the page width; data tables scroll within their containers.",
        "result": "Pass"
      },
      {
        "name": "Responsive layout at 768 CSS pixels",
        "observed": "Materials, finances, progress and reports fit the page width; data tables scroll within their containers.",
        "result": "Pass"
      },
      {
        "name": "Responsive layout at 390 CSS pixels",
        "observed": "Materials, finances, progress and reports fit the page width; data tables scroll within their containers.",
        "result": "Pass"
      },
      {
        "name": "Responsive layout at 320 CSS pixels",
        "observed": "Materials, finances, progress and reports fit the page width; data tables scroll within their containers.",
        "result": "Pass"
      },
      {
        "name": "Mobile drawer navigation",
        "observed": "Selecting Finances closes the drawer and opens the module.",
        "result": "Pass"
      },
      {
        "name": "Network-disconnected capture in an open workspace",
        "observed": "Browser network disabled; report stored locally as Pending sync and absent from server-loaded records.",
        "result": "Pass"
      },
      {
        "name": "Reconnect and manual sync",
        "observed": "Exactly one report appears after successful manual synchronization; queue clears.",
        "result": "Pass"
      },
      {
        "name": "Stale queued draft requires review",
        "observed": "A changed workspace causes Needs review rather than automatic overwrite.",
        "result": "Pass"
      },
      {
        "name": "Reviewed retry succeeds",
        "observed": "Explicit review and retry submits one report with the current revision.",
        "result": "Pass"
      },
      {
        "name": "Offline reopening limitation observed",
        "observed": "Reload fails with the browser disconnected: the authenticated workspace is not cached for offline reopening.",
        "result": "Pass"
      },
      {
        "name": "Draft survives failed offline reload",
        "observed": "After network restoration and reopening the same session, the queued draft is available and synchronizes.",
        "result": "Pass"
      },
      {
        "name": "CSV payment export",
        "observed": "Downloaded CSV includes the tested USD 100.25 payment.",
        "result": "Pass"
      },
      {
        "name": "Client preview hides internal finance",
        "observed": "Finance navigation and internal finance payload are absent from the role preview.",
        "result": "Pass"
      },
      {
        "name": "Browser JavaScript errors",
        "observed": "No page JavaScript errors during the run.",
        "result": "Pass"
      }
    ]
  },
  "live_access": {
    "timestamp": "2026-10-16T08:20:36.593Z",
    "authentication": "No session cookies supplied",
    "results": [
      {
        "path": "/admin/construction-demo",
        "method": "GET",
        "status": 401,
        "result": "Denied without workspace state"
      },
      {
        "path": "/admin/construction-demo",
        "method": "POST",
        "status": 404,
        "result": "Denied without workspace state"
      },
      {
        "path": "/admin/construction-demo/api",
        "method": "GET",
        "status": 401,
        "result": "Denied without workspace state"
      },
      {
        "path": "/admin/construction-demo/api",
        "method": "POST",
        "status": 403,
        "result": "Denied without workspace state"
      },
      {
        "path": "/construction-demo/api.php",
        "method": "GET",
        "status": 403,
        "result": "Denied without workspace state"
      },
      {
        "path": "/construction-demo/api.php",
        "method": "POST",
        "status": 403,
        "result": "Denied without workspace state"
      },
      {
        "path": "/construction-website-app-development/construction-web-app-demo",
        "method": "GET",
        "status": 200,
        "result": "Public videos and screenshots; no interactive role selector"
      }
    ]
  },
  "limitations": [
    "The authenticated workspace cannot be reopened while disconnected. Draft capture was tested in an already-open page; draft recovery was tested after reconnecting in the same session.",
    "Role selection is an administrator preview, not separate authenticated customer accounts. Multi-project isolation was not tested.",
    "No physical Android/iOS devices, Safari/Firefox, native apps, prolonged disconnection, storage exhaustion, live third-party integrations, uploaded-file failure handling, production load or construction-site pilot were tested.",
    "Only fictional data and supplied sample illustrations were used. No client records, production payment processing or measured business benefits are established."
  ]
}