{
  "generatedAt": "2026-07-16T11:34:01.093Z",
  "baseUrl": "http://127.0.0.1:8000",
  "browser": "Chromium headless (Playwright)",
  "hiddenMs": 125000,
  "note": "Automation approximates tab hide via visibilitychange; not identical to OS-level tab hide or chrome://discards.",
  "tests": {
    "test1_valid_session": {
      "processed_payments": {
        "before": {
          "href": "http://127.0.0.1:8000/loan/payments/processed",
          "hasLoanAppShell": true,
          "stylesheetCount": 4,
          "scriptCount": 1,
          "frameCount": 1,
          "topLevelFrame": false,
          "loginForm": false,
          "orphanLike": false,
          "resumeEvents": [
            {
              "at": "2026-07-16T11:35:57.955Z",
              "type": "session_resume_guard_bound"
            },
            {
              "at": "2026-07-16T11:35:58.154Z",
              "type": "document_visible",
              "reason": "pageshow",
              "resumedAt": 1784201758153,
              "hiddenDuration": 0
            }
          ]
        },
        "after": {
          "href": "http://127.0.0.1:8000/loan/payments/processed",
          "hasLoanAppShell": true,
          "stylesheetCount": 4,
          "scriptCount": 1,
          "frameCount": 1,
          "topLevelFrame": false,
          "loginForm": false,
          "orphanLike": false,
          "resumeEvents": [
            {
              "at": "2026-07-16T11:35:57.955Z",
              "type": "session_resume_guard_bound"
            },
            {
              "at": "2026-07-16T11:35:58.154Z",
              "type": "document_visible",
              "reason": "pageshow",
              "resumedAt": 1784201758153,
              "hiddenDuration": 0
            },
            {
              "at": "2026-07-16T11:36:01.126Z",
              "type": "document_hidden",
              "hiddenAt": 1784201761126
            },
            {
              "at": "2026-07-16T11:38:06.139Z",
              "type": "document_visible",
              "reason": "visibilitychange",
              "resumedAt": 1784201886139,
              "hiddenDuration": 125013
            },
            {
              "at": "2026-07-16T11:38:06.142Z",
              "type": "validation_started",
              "reason": "visibilitychange",
              "validationURL": "http://127.0.0.1:8000/session/status",
              "hiddenDuration": null
            },
            {
              "at": "2026-07-16T11:38:06.530Z",
              "type": "validation_status",
              "reason": "visibilitychange",
              "validationStatus": 204
            }
          ]
        },
        "statusRequestCount": 1,
        "statusResponses": [
          {
            "url": "http://127.0.0.1:8000/session/status",
            "status": 204,
            "at": "2026-07-16T11:38:06.531Z"
          },
          {
            "url": "http://127.0.0.1:8000/session/status",
            "status": 204,
            "at": "2026-07-16T11:40:29.429Z"
          },
          {
            "url": "http://127.0.0.1:8000/session/status",
            "status": 204,
            "at": "2026-07-16T11:43:01.945Z"
          },
          {
            "url": "http://127.0.0.1:8000/session/status",
            "status": 204,
            "at": "2026-07-16T11:45:12.211Z"
          }
        ],
        "statusCodes": [
          204
        ],
        "errAbortedWorkspace": [],
        "console": [
          {
            "type": "error",
            "text": "Failed to load resource: the server responded with a status of 500 (Internal Server Error)"
          },
          {
            "type": "error",
            "text": "Failed to load resource: the server responded with a status of 500 (Internal Server Error)"
          }
        ],
        "screenshot": "storage\\cert-lifecycle-cert02-screenshots\\test1_processed_payments_after.png",
        "manualRefreshRequired": false,
        "pass": true
      },
      "clients_register": {
        "before": {
          "href": "http://127.0.0.1:8000/loan/clients",
          "hasLoanAppShell": true,
          "stylesheetCount": 4,
          "scriptCount": 1,
          "frameCount": 1,
          "topLevelFrame": false,
          "loginForm": false,
          "orphanLike": false,
          "resumeEvents": [
            {
              "at": "2026-07-16T11:38:20.892Z",
              "type": "session_resume_guard_bound"
            },
            {
              "at": "2026-07-16T11:38:21.060Z",
              "type": "document_visible",
              "reason": "pageshow",
              "resumedAt": 1784201901060,
              "hiddenDuration": 0
            }
          ]
        },
        "after": {
          "href": "http://127.0.0.1:8000/loan/clients",
          "hasLoanAppShell": true,
          "stylesheetCount": 4,
          "scriptCount": 1,
          "frameCount": 1,
          "topLevelFrame": false,
          "loginForm": false,
          "orphanLike": false,
          "resumeEvents": [
            {
              "at": "2026-07-16T11:38:20.892Z",
              "type": "session_resume_guard_bound"
            },
            {
              "at": "2026-07-16T11:38:21.060Z",
              "type": "document_visible",
              "reason": "pageshow",
              "resumedAt": 1784201901060,
              "hiddenDuration": 0
            },
            {
              "at": "2026-07-16T11:38:24.104Z",
              "type": "document_hidden",
              "hiddenAt": 1784201904104
            },
            {
              "at": "2026-07-16T11:40:29.111Z",
              "type": "document_visible",
              "reason": "visibilitychange",
              "resumedAt": 1784202029111,
              "hiddenDuration": 125007
            },
            {
              "at": "2026-07-16T11:40:29.111Z",
              "type": "validation_started",
              "reason": "visibilitychange",
              "validationURL": "http://127.0.0.1:8000/session/status",
              "hiddenDuration": null
            },
            {
              "at": "2026-07-16T11:40:29.428Z",
              "type": "validation_status",
              "reason": "visibilitychange",
              "validationStatus": 204
            }
          ]
        },
        "statusRequestCount": 1,
        "statusResponses": [
          {
            "url": "http://127.0.0.1:8000/session/status",
            "status": 204,
            "at": "2026-07-16T11:40:29.429Z"
          },
          {
            "url": "http://127.0.0.1:8000/session/status",
            "status": 204,
            "at": "2026-07-16T11:43:01.945Z"
          },
          {
            "url": "http://127.0.0.1:8000/session/status",
            "status": 204,
            "at": "2026-07-16T11:45:12.211Z"
          }
        ],
        "statusCodes": [
          204
        ],
        "errAbortedWorkspace": [],
        "console": [
          {
            "type": "error",
            "text": "Failed to load resource: the server responded with a status of 500 (Internal Server Error)"
          }
        ],
        "screenshot": "storage\\cert-lifecycle-cert02-screenshots\\test1_clients_register_after.png",
        "manualRefreshRequired": false,
        "pass": true
      },
      "loans_register": {
        "before": {
          "href": "http://127.0.0.1:8000/loan/book/loans",
          "hasLoanAppShell": true,
          "stylesheetCount": 4,
          "scriptCount": 1,
          "frameCount": 1,
          "topLevelFrame": false,
          "loginForm": false,
          "orphanLike": false,
          "resumeEvents": [
            {
              "at": "2026-07-16T11:40:35.744Z",
              "type": "session_resume_guard_bound"
            },
            {
              "at": "2026-07-16T11:40:35.858Z",
              "type": "document_visible",
              "reason": "pageshow",
              "resumedAt": 1784202035858,
              "hiddenDuration": 0
            }
          ]
        },
        "after": {
          "href": "http://127.0.0.1:8000/loan/book/loans",
          "hasLoanAppShell": true,
          "stylesheetCount": 4,
          "scriptCount": 1,
          "frameCount": 1,
          "topLevelFrame": false,
          "loginForm": false,
          "orphanLike": false,
          "resumeEvents": [
            {
              "at": "2026-07-16T11:40:35.744Z",
              "type": "session_resume_guard_bound"
            },
            {
              "at": "2026-07-16T11:40:35.858Z",
              "type": "document_visible",
              "reason": "pageshow",
              "resumedAt": 1784202035858,
              "hiddenDuration": 0
            },
            {
              "at": "2026-07-16T11:40:38.923Z",
              "type": "document_hidden",
              "hiddenAt": 1784202038923
            },
            {
              "at": "2026-07-16T11:42:43.943Z",
              "type": "document_visible",
              "reason": "visibilitychange",
              "resumedAt": 1784202163943,
              "hiddenDuration": 125020
            },
            {
              "at": "2026-07-16T11:42:43.943Z",
              "type": "validation_started",
              "reason": "visibilitychange",
              "validationURL": "http://127.0.0.1:8000/session/status",
              "hiddenDuration": null
            }
          ]
        },
        "statusRequestCount": 1,
        "statusResponses": [
          {
            "url": "http://127.0.0.1:8000/session/status",
            "status": 204,
            "at": "2026-07-16T11:43:01.945Z"
          },
          {
            "url": "http://127.0.0.1:8000/session/status",
            "status": 204,
            "at": "2026-07-16T11:45:12.211Z"
          }
        ],
        "statusCodes": [],
        "errAbortedWorkspace": [],
        "console": [
          {
            "type": "error",
            "text": "Failed to load resource: the server responded with a status of 500 (Internal Server Error)"
          }
        ],
        "screenshot": "storage\\cert-lifecycle-cert02-screenshots\\test1_loans_register_after.png",
        "manualRefreshRequired": false,
        "pass": false
      },
      "accounting_journal": {
        "before": {
          "href": "http://127.0.0.1:8000/loan/accounting/journal-entries?embedded=1",
          "hasLoanAppShell": true,
          "stylesheetCount": 4,
          "scriptCount": 1,
          "frameCount": 2,
          "topLevelFrame": false,
          "loginForm": false,
          "orphanLike": false,
          "resumeEvents": [
            {
              "at": "2026-07-16T11:43:03.621Z",
              "type": "session_resume_guard_bound"
            },
            {
              "at": "2026-07-16T11:43:03.859Z",
              "type": "document_visible",
              "reason": "pageshow",
              "resumedAt": 1784202183859,
              "hiddenDuration": 0
            }
          ]
        },
        "after": {
          "href": "http://127.0.0.1:8000/loan/accounting/journal-entries?embedded=1",
          "hasLoanAppShell": true,
          "stylesheetCount": 4,
          "scriptCount": 1,
          "frameCount": 2,
          "topLevelFrame": false,
          "loginForm": false,
          "orphanLike": false,
          "resumeEvents": [
            {
              "at": "2026-07-16T11:43:03.621Z",
              "type": "session_resume_guard_bound"
            },
            {
              "at": "2026-07-16T11:43:03.859Z",
              "type": "document_visible",
              "reason": "pageshow",
              "resumedAt": 1784202183859,
              "hiddenDuration": 0
            },
            {
              "at": "2026-07-16T11:43:06.760Z",
              "type": "document_hidden",
              "hiddenAt": 1784202186760
            },
            {
              "at": "2026-07-16T11:45:11.772Z",
              "type": "document_visible",
              "reason": "visibilitychange",
              "resumedAt": 1784202311772,
              "hiddenDuration": 125012
            },
            {
              "at": "2026-07-16T11:45:11.772Z",
              "type": "validation_started",
              "reason": "visibilitychange",
              "validationURL": "http://127.0.0.1:8000/session/status",
              "hiddenDuration": null
            },
            {
              "at": "2026-07-16T11:45:12.211Z",
              "type": "validation_status",
              "reason": "visibilitychange",
              "validationStatus": 204
            }
          ]
        },
        "statusRequestCount": 1,
        "statusResponses": [
          {
            "url": "http://127.0.0.1:8000/session/status",
            "status": 204,
            "at": "2026-07-16T11:45:12.211Z"
          }
        ],
        "statusCodes": [
          204
        ],
        "errAbortedWorkspace": [],
        "console": [],
        "screenshot": "storage\\cert-lifecycle-cert02-screenshots\\test1_accounting_journal_after.png",
        "manualRefreshRequired": false,
        "pass": true
      }
    },
    "test2_expired_session": {
      "processed_payments": {
        "finalUrl": "http://127.0.0.1:8000/loan/payments/processed",
        "statusResponses": [],
        "statusCodes": [],
        "after": {
          "href": "http://127.0.0.1:8000/loan/payments/processed",
          "hasLoanAppShell": true,
          "stylesheetCount": 4,
          "scriptCount": 1,
          "frameCount": 1,
          "topLevelFrame": false,
          "loginForm": false,
          "orphanLike": false,
          "resumeEvents": [
            {
              "at": "2026-07-16T11:45:45.910Z",
              "type": "session_resume_guard_bound"
            },
            {
              "at": "2026-07-16T11:45:46.015Z",
              "type": "document_visible",
              "reason": "pageshow",
              "resumedAt": 1784202346015,
              "hiddenDuration": 0
            },
            {
              "at": "2026-07-16T11:45:49.125Z",
              "type": "document_hidden",
              "hiddenAt": 1784202349125
            },
            {
              "at": "2026-07-16T11:45:54.130Z",
              "type": "document_visible",
              "reason": "visibilitychange",
              "resumedAt": 1784202354130,
              "hiddenDuration": 5005
            }
          ]
        },
        "screenshot": "storage\\cert-lifecycle-cert02-screenshots\\test2_processed_payments_after.png",
        "manualRefreshRequired": false,
        "pass": false
      },
      "clients_register": {
        "finalUrl": "http://127.0.0.1:8000/loan/clients",
        "statusResponses": [],
        "statusCodes": [],
        "after": {
          "href": "http://127.0.0.1:8000/loan/clients",
          "hasLoanAppShell": true,
          "stylesheetCount": 4,
          "scriptCount": 1,
          "frameCount": 1,
          "topLevelFrame": false,
          "loginForm": false,
          "orphanLike": false,
          "resumeEvents": [
            {
              "at": "2026-07-16T11:46:14.291Z",
              "type": "session_resume_guard_bound"
            },
            {
              "at": "2026-07-16T11:46:14.455Z",
              "type": "document_visible",
              "reason": "pageshow",
              "resumedAt": 1784202374455,
              "hiddenDuration": 0
            },
            {
              "at": "2026-07-16T11:46:17.289Z",
              "type": "document_hidden",
              "hiddenAt": 1784202377289
            },
            {
              "at": "2026-07-16T11:46:22.293Z",
              "type": "document_visible",
              "reason": "visibilitychange",
              "resumedAt": 1784202382293,
              "hiddenDuration": 5004
            }
          ]
        },
        "screenshot": "storage\\cert-lifecycle-cert02-screenshots\\test2_clients_register_after.png",
        "manualRefreshRequired": false,
        "pass": false
      }
    },
    "test3_multi_tab": {
      "tabA": {
        "url": "http://127.0.0.1:8000/loan/payments/processed",
        "onLogin": false,
        "statusResponses": []
      },
      "tabB": {
        "url": "http://127.0.0.1:8000/loan/clients",
        "onLogin": false
      },
      "redirectLoop": false,
      "pass": false
    },
    "test4_offline_online": {
      "whileOffline": {
        "url": "http://127.0.0.1:8000/loan/payments/processed",
        "dom": {
          "href": "http://127.0.0.1:8000/loan/payments/processed",
          "hasLoanAppShell": true,
          "stylesheetCount": 4,
          "scriptCount": 1,
          "frameCount": 1,
          "topLevelFrame": false,
          "loginForm": false,
          "orphanLike": false,
          "resumeEvents": [
            {
              "at": "2026-07-16T11:47:33.956Z",
              "type": "session_resume_guard_bound"
            },
            {
              "at": "2026-07-16T11:47:34.068Z",
              "type": "document_visible",
              "reason": "pageshow",
              "resumedAt": 1784202454068,
              "hiddenDuration": 0
            },
            {
              "at": "2026-07-16T11:47:36.115Z",
              "type": "document_hidden",
              "hiddenAt": 1784202456115
            },
            {
              "at": "2026-07-16T11:47:41.118Z",
              "type": "document_visible",
              "reason": "visibilitychange",
              "resumedAt": 1784202461118,
              "hiddenDuration": 5003
            }
          ]
        },
        "falseLogout": true
      },
      "afterOnline": {
        "url": "http://127.0.0.1:8000/loan/payments/processed",
        "dom": {
          "href": "http://127.0.0.1:8000/loan/payments/processed",
          "hasLoanAppShell": true,
          "stylesheetCount": 4,
          "scriptCount": 1,
          "frameCount": 1,
          "topLevelFrame": false,
          "loginForm": false,
          "orphanLike": false,
          "resumeEvents": [
            {
              "at": "2026-07-16T11:47:33.956Z",
              "type": "session_resume_guard_bound"
            },
            {
              "at": "2026-07-16T11:47:34.068Z",
              "type": "document_visible",
              "reason": "pageshow",
              "resumedAt": 1784202454068,
              "hiddenDuration": 0
            },
            {
              "at": "2026-07-16T11:47:36.115Z",
              "type": "document_hidden",
              "hiddenAt": 1784202456115
            },
            {
              "at": "2026-07-16T11:47:41.118Z",
              "type": "document_visible",
              "reason": "visibilitychange",
              "resumedAt": 1784202461118,
              "hiddenDuration": 5003
            }
          ]
        },
        "statusResponses": []
      },
      "pass": false,
      "expiredAfterReconnect": {
        "finalUrl": "http://127.0.0.1:8000/loan/clients",
        "onLogin": false,
        "statusResponses": [],
        "pass": false
      }
    },
    "test5_android": {
      "status": "NOT_EXECUTED",
      "reason": "No Android device in automation environment"
    },
    "test6_tab_discard": {
      "status": "NOT_EXECUTED",
      "reason": "chrome://discards requires manual headed Chrome"
    }
  },
  "failures": [
    {
      "test": "test1",
      "page": "loans_register"
    },
    {
      "test": "test2",
      "page": "processed_payments"
    },
    {
      "test": "test2",
      "page": "clients_register"
    }
  ],
  "browserVersion": "149.0.7827.55",
  "globalConsole": [
    {
      "type": "error",
      "text": "Failed to load resource: the server responded with a status of 500 (Internal Server Error)"
    },
    {
      "type": "error",
      "text": "Failed to load resource: the server responded with a status of 500 (Internal Server Error)"
    },
    {
      "type": "error",
      "text": "Failed to load resource: the server responded with a status of 500 (Internal Server Error)"
    },
    {
      "type": "error",
      "text": "Failed to load resource: the server responded with a status of 500 (Internal Server Error)"
    },
    {
      "type": "error",
      "text": "Failed to load resource: the server responded with a status of 500 (Internal Server Error)"
    },
    {
      "type": "error",
      "text": "Failed to load resource: the server responded with a status of 500 (Internal Server Error)"
    },
    {
      "type": "error",
      "text": "Failed to load resource: the server responded with a status of 500 (Internal Server Error)"
    },
    {
      "type": "error",
      "text": "Failed to load resource: the server responded with a status of 500 (Internal Server Error)"
    },
    {
      "type": "error",
      "text": "Failed to load resource: the server responded with a status of 500 (Internal Server Error)"
    },
    {
      "type": "error",
      "text": "Failed to load resource: the server responded with a status of 500 (Internal Server Error)"
    }
  ],
  "verdict": "NO_GO"
}