{
  "summary": {
    "run_id": "scheduled-20260430T170224",
    "started_at": "2026-04-30T17:02:26.555Z",
    "finished_at": "2026-04-30T17:13:27.272Z",
    "total": 241,
    "passed": 163,
    "failed": 51,
    "skipped": 20,
    "not_exec": 7,
    "flaky": 0,
    "results": [
      {
        "id": "FE-AUTH-001",
        "status": "PASS",
        "duration_ms": 2087.967415
      },
      {
        "id": "FE-AUTH-002",
        "status": "FAIL",
        "duration_ms": 60516.336562000004,
        "error": "BFF /v1/auth/login returned 429: {\"data\":{\"error\":\"too many login attempts; try again in 10m2s\",\"retry_after_seconds\":602,\"scope\":\"email\"},\"message\":\"Too many login attempts. Please wait and try again.\"}"
      },
      {
        "id": "FE-AUTH-003",
        "status": "PASS",
        "duration_ms": 228.56874000000244
      },
      {
        "id": "FE-AUTH-004",
        "status": "PASS",
        "duration_ms": 60.06046700000297
      },
      {
        "id": "FE-AUTH-005",
        "status": "PASS",
        "duration_ms": 1489.485950999995
      },
      {
        "id": "FE-AUTH-006",
        "status": "PASS",
        "duration_ms": 817.7645349999948
      },
      {
        "id": "FE-AUTH-007",
        "status": "PASS",
        "duration_ms": 1107.484156999999
      },
      {
        "id": "FE-AUTH-008",
        "status": "PASS",
        "duration_ms": 276.6376440000022
      },
      {
        "id": "FE-AUTH-009",
        "status": "FAIL",
        "duration_ms": 104.41744900000049,
        "error": "expected 500 to be 404 // Object.is equality"
      },
      {
        "id": "FE-AUTH-010",
        "status": "PASS",
        "duration_ms": 51.013552999997046
      },
      {
        "id": "FE-AUTH-011",
        "status": "PASS",
        "duration_ms": 13.609032999986084
      },
      {
        "id": "FE-AUTH-012",
        "status": "FAIL",
        "duration_ms": 60222.418596,
        "error": "BFF /v1/auth/login returned 429: {\"data\":{\"error\":\"too many login attempts; try again in 8m58s\",\"retry_after_seconds\":538,\"scope\":\"email\"},\"message\":\"Too many login attempts. Please wait and try again.\"}"
      },
      {
        "id": "FE-AUTH-013",
        "status": "FAIL",
        "duration_ms": 60337.876546,
        "error": "BFF /v1/auth/login returned 429: {\"data\":{\"error\":\"too many login attempts; try again in 7m58s\",\"retry_after_seconds\":478,\"scope\":\"email\"},\"message\":\"Too many login attempts. Please wait and try again.\"}"
      },
      {
        "id": "FE-AUTH-014",
        "status": "PASS",
        "duration_ms": 781.347363000008
      },
      {
        "id": "FE-AUTH-015",
        "status": "PASS",
        "duration_ms": 78.82301399999415
      },
      {
        "id": "FE-AUTH-016",
        "status": "PASS",
        "duration_ms": 5799.605815999996
      },
      {
        "id": "FE-AUTH-017",
        "status": "FAIL",
        "duration_ms": 60192.68126099999,
        "error": "BFF /v1/auth/login returned 429: {\"data\":{\"error\":\"too many login attempts; try again in 6m51s\",\"retry_after_seconds\":411,\"scope\":\"email\"},\"message\":\"Too many login attempts. Please wait and try again.\"}"
      },
      {
        "id": "FE-AUTH-018",
        "status": "FAIL",
        "duration_ms": 60310.02076800002,
        "error": "BFF /v1/auth/login returned 429: {\"data\":{\"error\":\"too many login attempts; try again in 5m51s\",\"retry_after_seconds\":351,\"scope\":\"email\"},\"message\":\"Too many login attempts. Please wait and try again.\"}"
      },
      {
        "id": "FE-AUTH-019",
        "status": "PASS",
        "duration_ms": 2156.254446999985
      },
      {
        "id": "FE-AUTH-020",
        "status": "PASS",
        "duration_ms": 477.429123000009
      },
      {
        "id": "FE-REG-001",
        "status": "PASS",
        "duration_ms": 2425.2681060000004
      },
      {
        "id": "FE-REG-002",
        "status": "PASS",
        "duration_ms": 2309.0702020000003
      },
      {
        "id": "FE-REG-003",
        "status": "PASS",
        "duration_ms": 3171.4728969999996
      },
      {
        "id": "FE-REG-004",
        "status": "PASS",
        "duration_ms": 2499.9063069999993
      },
      {
        "id": "FE-REG-005",
        "status": "PASS",
        "duration_ms": 149.86601999999948
      },
      {
        "id": "FE-REG-006",
        "status": "PASS",
        "duration_ms": 23061.617943999998
      },
      {
        "id": "FE-REG-007",
        "status": "PASS",
        "duration_ms": 1973.7406069999997
      },
      {
        "id": "FE-REG-008",
        "status": "PASS",
        "duration_ms": 1024.2647690000013
      },
      {
        "id": "FE-REG-009",
        "status": "PASS",
        "duration_ms": 1810.6306230000046
      },
      {
        "id": "FE-REG-010",
        "status": "PASS",
        "duration_ms": 932.7144509999998
      },
      {
        "id": "FE-REG-011",
        "status": "PASS",
        "duration_ms": 449.24925200000143
      },
      {
        "id": "FE-REG-012",
        "status": "PASS",
        "duration_ms": 794.1524749999953
      },
      {
        "id": "FE-REG-013",
        "status": "PASS",
        "duration_ms": 1161.1368500000026
      },
      {
        "id": "FE-REG-014",
        "status": "NOT_EXEC",
        "duration_ms": 0
      },
      {
        "id": "FE-REG-015",
        "status": "NOT_EXEC",
        "duration_ms": 0
      },
      {
        "id": "FE-REG-016",
        "status": "NOT_EXEC",
        "duration_ms": 0
      },
      {
        "id": "FE-REG-017",
        "status": "NOT_EXEC",
        "duration_ms": 0
      },
      {
        "id": "FE-REG-018",
        "status": "NOT_EXEC",
        "duration_ms": 0
      },
      {
        "id": "FE-REG-019",
        "status": "NOT_EXEC",
        "duration_ms": 0
      },
      {
        "id": "FE-REG-020",
        "status": "NOT_EXEC",
        "duration_ms": 0
      },
      {
        "id": "FE-REG-021",
        "status": "PASS",
        "duration_ms": 1430.5816589999959
      },
      {
        "id": "FE-REG-022",
        "status": "PASS",
        "duration_ms": 2271.907868000002
      },
      {
        "id": "FE-REG-023",
        "status": "FAIL",
        "duration_ms": 60561.324339000006,
        "error": "BFF /v1/auth/login returned 429: {\"data\":{\"error\":\"too many login attempts; try again in 9m19s\",\"retry_after_seconds\":559,\"scope\":\"email\"},\"message\":\"Too many login attempts. Please wait and try again.\"}"
      },
      {
        "id": "FE-REG-024",
        "status": "PASS",
        "duration_ms": 1822.0861730000033
      },
      {
        "id": "FE-SETUP-001",
        "status": "FAIL",
        "duration_ms": 61203.160087000004,
        "error": "BFF /v1/auth/login returned 429: {\"data\":{\"error\":\"too many login attempts; try again in 8m15s\",\"retry_after_seconds\":495,\"scope\":\"email\"},\"message\":\"Too many login attempts. Please wait and try again.\"}"
      },
      {
        "id": "FE-SETUP-002",
        "status": "PASS",
        "duration_ms": 1635.285477999998
      },
      {
        "id": "FE-SETUP-003",
        "status": "FAIL",
        "duration_ms": 60165.32076999999,
        "error": "BFF /v1/auth/login returned 429: {\"data\":{\"error\":\"too many login attempts; try again in 7m13s\",\"retry_after_seconds\":433,\"scope\":\"email\"},\"message\":\"Too many login attempts. Please wait and try again.\"}"
      },
      {
        "id": "FE-SETUP-004",
        "status": "FAIL",
        "duration_ms": 60291.41411499999,
        "error": "BFF /v1/auth/login returned 429: {\"data\":{\"error\":\"too many login attempts; try again in 6m13s\",\"retry_after_seconds\":373,\"scope\":\"email\"},\"message\":\"Too many login attempts. Please wait and try again.\"}"
      },
      {
        "id": "FE-SETUP-005",
        "status": "FAIL",
        "duration_ms": 60299.651681999996,
        "error": "BFF /v1/auth/login returned 429: {\"data\":{\"error\":\"too many login attempts; try again in 5m12s\",\"retry_after_seconds\":312,\"scope\":\"email\"},\"message\":\"Too many login attempts. Please wait and try again.\"}"
      },
      {
        "id": "FE-SETUP-006",
        "status": "PASS",
        "duration_ms": 291.7421880000038
      },
      {
        "id": "FE-SETUP-007",
        "status": "FAIL",
        "duration_ms": 60282.686581000016,
        "error": "BFF /v1/auth/login returned 429: {\"data\":{\"error\":\"too many login attempts; try again in 4m12s\",\"retry_after_seconds\":252,\"scope\":\"email\"},\"message\":\"Too many login attempts. Please wait and try again.\"}"
      },
      {
        "id": "FE-DEAL-001",
        "status": "PASS",
        "duration_ms": 555.3482180000001
      },
      {
        "id": "FE-DEAL-002",
        "status": "PASS",
        "duration_ms": 0.7793050000000221
      },
      {
        "id": "FE-DEAL-003",
        "status": "PASS",
        "duration_ms": 0.46289500000011685
      },
      {
        "id": "FE-DEAL-004",
        "status": "PASS",
        "duration_ms": 0.7506620000001476
      },
      {
        "id": "FE-DEAL-005",
        "status": "PASS",
        "duration_ms": 0.1948539999998502
      },
      {
        "id": "FE-DEAL-006",
        "status": "PASS",
        "duration_ms": 0.3717540000000099
      },
      {
        "id": "FE-DEAL-007",
        "status": "PASS",
        "duration_ms": 0.25563800000008996
      },
      {
        "id": "FE-DEAL-008",
        "status": "PASS",
        "duration_ms": 0.2082580000001144
      },
      {
        "id": "FE-DEAL-009",
        "status": "PASS",
        "duration_ms": 1.4725899999998546
      },
      {
        "id": "FE-DEAL-010",
        "status": "PASS",
        "duration_ms": 0.8465499999999793
      },
      {
        "id": "FE-DEAL-011",
        "status": "PASS",
        "duration_ms": 0.805515000000014
      },
      {
        "id": "FE-DEAL-012",
        "status": "PASS",
        "duration_ms": 0.20453300000008312
      },
      {
        "id": "FE-DEAL-013",
        "status": "PASS",
        "duration_ms": 40.74212299999999
      },
      {
        "id": "FE-DEAL-014",
        "status": "PASS",
        "duration_ms": 175.25268800000003
      },
      {
        "id": "FE-DEAL-015",
        "status": "PASS",
        "duration_ms": 0.2849020000001019
      },
      {
        "id": "FE-DEAL-016",
        "status": "PASS",
        "duration_ms": 0.16081099999996695
      },
      {
        "id": "FE-DEAL-017",
        "status": "PASS",
        "duration_ms": 0.19674699999995937
      },
      {
        "id": "FE-EMAIL-IN-001",
        "status": "PASS",
        "duration_ms": 5.963265000000092
      },
      {
        "id": "FE-EMAIL-IN-002",
        "status": "PASS",
        "duration_ms": 0.7486280000000534
      },
      {
        "id": "FE-EMAIL-IN-003",
        "status": "PASS",
        "duration_ms": 0.3577980000000025
      },
      {
        "id": "FE-EMAIL-IN-004",
        "status": "PASS",
        "duration_ms": 0.35813899999993737
      },
      {
        "id": "FE-EMAIL-IN-005",
        "status": "PASS",
        "duration_ms": 0.35024399999997513
      },
      {
        "id": "FE-EMAIL-IN-006",
        "status": "PASS",
        "duration_ms": 0.4388810000000376
      },
      {
        "id": "FE-EMAIL-IN-007",
        "status": "PASS",
        "duration_ms": 0.4449210000000221
      },
      {
        "id": "FE-EMAIL-IN-008",
        "status": "PASS",
        "duration_ms": 330.0300340000001
      },
      {
        "id": "FE-EMAIL-IN-009",
        "status": "PASS",
        "duration_ms": 3.694578999999976
      },
      {
        "id": "FE-EMAIL-IN-010",
        "status": "PASS",
        "duration_ms": 1.3029220000000805
      },
      {
        "id": "FE-EMAIL-IN-011",
        "status": "PASS",
        "duration_ms": 0.29332700000009027
      },
      {
        "id": "FE-EMAIL-OUT-001",
        "status": "FAIL",
        "duration_ms": 60710.178931,
        "error": "BFF /v1/auth/login returned 429: {\"data\":{\"error\":\"too many login attempts; try again in 4m58s\",\"retry_after_seconds\":298,\"scope\":\"email\"},\"message\":\"Too many login attempts. Please wait and try again.\"}"
      },
      {
        "id": "FE-EMAIL-OUT-002",
        "status": "FAIL",
        "duration_ms": 60282.746203,
        "error": "BFF /v1/auth/login returned 429: {\"data\":{\"error\":\"too many login attempts; try again in 3m58s\",\"retry_after_seconds\":238,\"scope\":\"email\"},\"message\":\"Too many login attempts. Please wait and try again.\"}"
      },
      {
        "id": "FE-EMAIL-OUT-003",
        "status": "PASS",
        "duration_ms": 4.266596999994363
      },
      {
        "id": "FE-EMAIL-OUT-004",
        "status": "FAIL",
        "duration_ms": 60567.33516100001,
        "error": "BFF /v1/auth/login returned 429: {\"data\":{\"error\":\"too many login attempts; try again in 2m58s\",\"retry_after_seconds\":178,\"scope\":\"email\"},\"message\":\"Too many login attempts. Please wait and try again.\"}"
      },
      {
        "id": "FE-EMAIL-OUT-005",
        "status": "PASS",
        "duration_ms": 0.6085360000142828
      },
      {
        "id": "FE-EMAIL-OUT-006",
        "status": "PASS",
        "duration_ms": 0.5615779999934603
      },
      {
        "id": "FE-EMAIL-OUT-007",
        "status": "FAIL",
        "duration_ms": 60208.71666800001,
        "error": "BFF /v1/auth/login returned 429: {\"data\":{\"error\":\"too many login attempts; try again in 1m57s\",\"retry_after_seconds\":117,\"scope\":\"email\"},\"message\":\"Too many login attempts. Please wait and try again.\"}"
      },
      {
        "id": "FE-EMAIL-OUT-008",
        "status": "PASS",
        "duration_ms": 0.6186450000095647
      },
      {
        "id": "FE-EMAIL-OUT-009",
        "status": "PASS",
        "duration_ms": 0.38878599999588914
      },
      {
        "id": "FE-EMAIL-OUT-010",
        "status": "FAIL",
        "duration_ms": 60176.37206999998,
        "error": "BFF /v1/auth/login returned 429: {\"data\":{\"error\":\"too many login attempts; try again in 57s\",\"retry_after_seconds\":57,\"scope\":\"email\"},\"message\":\"Too many login attempts. Please wait and try again.\"}"
      },
      {
        "id": "FE-EMAIL-OUT-011",
        "status": "PASS",
        "duration_ms": 0.6954590000095777
      },
      {
        "id": "FE-EMAIL-OUT-012",
        "status": "PASS",
        "duration_ms": 0.4470649999566376
      },
      {
        "id": "FE-EMAIL-001",
        "status": "FAIL",
        "duration_ms": 60733.702407000004,
        "error": "BFF /v1/auth/login returned 429: {\"data\":{\"error\":\"too many login attempts; try again in 9m33s\",\"retry_after_seconds\":573,\"scope\":\"email\"},\"message\":\"Too many login attempts. Please wait and try again.\"}"
      },
      {
        "id": "FE-EMAIL-002",
        "status": "FAIL",
        "duration_ms": 60634.410730999996,
        "error": "BFF /v1/auth/login returned 429: {\"data\":{\"error\":\"too many login attempts; try again in 8m32s\",\"retry_after_seconds\":512,\"scope\":\"email\"},\"message\":\"Too many login attempts. Please wait and try again.\"}"
      },
      {
        "id": "FE-EMAIL-003",
        "status": "FAIL",
        "duration_ms": 60244.962220999994,
        "error": "BFF /v1/auth/login returned 429: {\"data\":{\"error\":\"too many login attempts; try again in 7m32s\",\"retry_after_seconds\":452,\"scope\":\"email\"},\"message\":\"Too many login attempts. Please wait and try again.\"}"
      },
      {
        "id": "FE-EMAIL-004",
        "status": "FAIL",
        "duration_ms": 60189.19443999999,
        "error": "BFF /v1/auth/login returned 429: {\"data\":{\"error\":\"too many login attempts; try again in 6m32s\",\"retry_after_seconds\":392,\"scope\":\"email\"},\"message\":\"Too many login attempts. Please wait and try again.\"}"
      },
      {
        "id": "FE-EMAIL-005",
        "status": "FAIL",
        "duration_ms": 60446.91737599997,
        "error": "BFF /v1/auth/login returned 429: {\"data\":{\"error\":\"too many login attempts; try again in 5m32s\",\"retry_after_seconds\":332,\"scope\":\"email\"},\"message\":\"Too many login attempts. Please wait and try again.\"}"
      },
      {
        "id": "FE-EMAIL-006",
        "status": "FAIL",
        "duration_ms": 60176.74557900004,
        "error": "BFF /v1/auth/login returned 429: {\"data\":{\"error\":\"too many login attempts; try again in 4m31s\",\"retry_after_seconds\":271,\"scope\":\"email\"},\"message\":\"Too many login attempts. Please wait and try again.\"}"
      },
      {
        "id": "FE-EMAIL-007",
        "status": "FAIL",
        "duration_ms": 60245.94355199998,
        "error": "BFF /v1/auth/login returned 429: {\"data\":{\"error\":\"too many login attempts; try again in 3m31s\",\"retry_after_seconds\":211,\"scope\":\"email\"},\"message\":\"Too many login attempts. Please wait and try again.\"}"
      },
      {
        "id": "FE-EMAIL-008",
        "status": "FAIL",
        "duration_ms": 61071.302070999984,
        "error": "BFF /v1/auth/login returned 429: {\"data\":{\"error\":\"too many login attempts; try again in 2m30s\",\"retry_after_seconds\":150,\"scope\":\"email\"},\"message\":\"Too many login attempts. Please wait and try again.\"}"
      },
      {
        "id": "FE-EMAIL-009",
        "status": "PASS",
        "duration_ms": 1.9923499999567866
      },
      {
        "id": "FE-EMAIL-010",
        "status": "FAIL",
        "duration_ms": 60237.98257999995,
        "error": "BFF /v1/auth/login returned 429: {\"data\":{\"error\":\"too many login attempts; try again in 1m30s\",\"retry_after_seconds\":90,\"scope\":\"email\"},\"message\":\"Too many login attempts. Please wait and try again.\"}"
      },
      {
        "id": "FE-EMAIL-011",
        "status": "FAIL",
        "duration_ms": 60764.63252600003,
        "error": "BFF /v1/auth/login returned 429: {\"data\":{\"error\":\"too many login attempts; try again in 29s\",\"retry_after_seconds\":29,\"scope\":\"email\"},\"message\":\"Too many login attempts. Please wait and try again.\"}"
      },
      {
        "id": "FE-EMAIL-012",
        "status": "PASS",
        "duration_ms": 1.324443000019528
      },
      {
        "id": "FE-CAMP-001",
        "status": "SKIP",
        "duration_ms": 0
      },
      {
        "id": "FE-CAMP-002",
        "status": "SKIP",
        "duration_ms": 0
      },
      {
        "id": "FE-CAMP-003",
        "status": "SKIP",
        "duration_ms": 0
      },
      {
        "id": "FE-CAMP-004",
        "status": "SKIP",
        "duration_ms": 0
      },
      {
        "id": "FE-CAMP-005",
        "status": "SKIP",
        "duration_ms": 0
      },
      {
        "id": "FE-CAMP-006",
        "status": "SKIP",
        "duration_ms": 0
      },
      {
        "id": "FE-CAMP-007",
        "status": "SKIP",
        "duration_ms": 0
      },
      {
        "id": "FE-CAMP-008",
        "status": "SKIP",
        "duration_ms": 0
      },
      {
        "id": "FE-CAMP-009",
        "status": "SKIP",
        "duration_ms": 0
      },
      {
        "id": "FE-CAMP-010",
        "status": "SKIP",
        "duration_ms": 0
      },
      {
        "id": "FE-CAMP-011",
        "status": "SKIP",
        "duration_ms": 0
      },
      {
        "id": "FE-CAMP-012",
        "status": "SKIP",
        "duration_ms": 0
      },
      {
        "id": "FE-CAMP-013",
        "status": "SKIP",
        "duration_ms": 0
      },
      {
        "id": "FE-CAMP-014",
        "status": "SKIP",
        "duration_ms": 0
      },
      {
        "id": "FE-CAMP-015",
        "status": "SKIP",
        "duration_ms": 0
      },
      {
        "id": "FE-CAMP-016",
        "status": "SKIP",
        "duration_ms": 0
      },
      {
        "id": "FE-CAMP-017",
        "status": "SKIP",
        "duration_ms": 0
      },
      {
        "id": "FE-CAMP-018",
        "status": "SKIP",
        "duration_ms": 0
      },
      {
        "id": "FE-CAMP-019",
        "status": "SKIP",
        "duration_ms": 0
      },
      {
        "id": "FE-CAMP-020",
        "status": "SKIP",
        "duration_ms": 0
      },
      {
        "id": "FE-DEAL-SEARCH-001",
        "status": "FAIL",
        "duration_ms": 60478.772274999996,
        "error": "BFF /v1/auth/login returned 429: {\"data\":{\"error\":\"too many login attempts; try again in 4m44s\",\"retry_after_seconds\":284,\"scope\":\"email\"},\"message\":\"Too many login attempts. Please wait and try again.\"}"
      },
      {
        "id": "FE-DEAL-SEARCH-002",
        "status": "FAIL",
        "duration_ms": 60339.01618,
        "error": "BFF /v1/auth/login returned 429: {\"data\":{\"error\":\"too many login attempts; try again in 3m44s\",\"retry_after_seconds\":224,\"scope\":\"email\"},\"message\":\"Too many login attempts. Please wait and try again.\"}"
      },
      {
        "id": "FE-DEAL-SEARCH-003",
        "status": "FAIL",
        "duration_ms": 60476.584512000016,
        "error": "BFF /v1/auth/login returned 429: {\"data\":{\"error\":\"too many login attempts; try again in 2m44s\",\"retry_after_seconds\":164,\"scope\":\"email\"},\"message\":\"Too many login attempts. Please wait and try again.\"}"
      },
      {
        "id": "FE-DEAL-SEARCH-004",
        "status": "FAIL",
        "duration_ms": 60370.00157699999,
        "error": "BFF /v1/auth/login returned 429: {\"data\":{\"error\":\"too many login attempts; try again in 1m43s\",\"retry_after_seconds\":103,\"scope\":\"email\"},\"message\":\"Too many login attempts. Please wait and try again.\"}"
      },
      {
        "id": "FE-DEAL-SEARCH-005",
        "status": "PASS",
        "duration_ms": 2.530213999998523
      },
      {
        "id": "FE-DEAL-SEARCH-006",
        "status": "FAIL",
        "duration_ms": 60390.964791000006,
        "error": "BFF /v1/auth/login returned 429: {\"data\":{\"error\":\"too many login attempts; try again in 43s\",\"retry_after_seconds\":43,\"scope\":\"email\"},\"message\":\"Too many login attempts. Please wait and try again.\"}"
      },
      {
        "id": "FE-LAY-001",
        "status": "FAIL",
        "duration_ms": 61218.901192000005,
        "error": "BFF /v1/auth/login returned 429: {\"data\":{\"error\":\"too many login attempts; try again in 10m4s\",\"retry_after_seconds\":604,\"scope\":\"email\"},\"message\":\"Too many login attempts. Please wait and try again.\"}"
      },
      {
        "id": "FE-LAY-002",
        "status": "FAIL",
        "duration_ms": 60360.881545,
        "error": "BFF /v1/auth/login returned 429: {\"data\":{\"error\":\"too many login attempts; try again in 9m4s\",\"retry_after_seconds\":544,\"scope\":\"email\"},\"message\":\"Too many login attempts. Please wait and try again.\"}"
      },
      {
        "id": "FE-LAY-003",
        "status": "FAIL",
        "duration_ms": 61020.819006000005,
        "error": "BFF /v1/auth/login returned 429: {\"data\":{\"error\":\"too many login attempts; try again in 8m3s\",\"retry_after_seconds\":483,\"scope\":\"email\"},\"message\":\"Too many login attempts. Please wait and try again.\"}"
      },
      {
        "id": "FE-LAY-004",
        "status": "PASS",
        "duration_ms": 4.683094000007259
      },
      {
        "id": "FE-LAY-005",
        "status": "PASS",
        "duration_ms": 0.47002700000302866
      },
      {
        "id": "FE-LAY-006",
        "status": "PASS",
        "duration_ms": 0.5582620000059251
      },
      {
        "id": "FE-LAY-007",
        "status": "PASS",
        "duration_ms": 1.1823370000056457
      },
      {
        "id": "FE-LAY-008",
        "status": "PASS",
        "duration_ms": 0.3071730000083335
      },
      {
        "id": "FE-CROSS-001",
        "status": "FAIL",
        "duration_ms": 60479.93298000001,
        "error": "BFF /v1/auth/login returned 429: {\"data\":{\"error\":\"too many login attempts; try again in 7m2s\",\"retry_after_seconds\":422,\"scope\":\"email\"},\"message\":\"Too many login attempts. Please wait and try again.\"}"
      },
      {
        "id": "FE-CROSS-002",
        "status": "PASS",
        "duration_ms": 1.8442639999848325
      },
      {
        "id": "FE-CROSS-003",
        "status": "FAIL",
        "duration_ms": 60361.34250800003,
        "error": "BFF /v1/auth/login returned 429: {\"data\":{\"error\":\"too many login attempts; try again in 6m2s\",\"retry_after_seconds\":362,\"scope\":\"email\"},\"message\":\"Too many login attempts. Please wait and try again.\"}"
      },
      {
        "id": "FE-CROSS-004",
        "status": "PASS",
        "duration_ms": 2.407695000001695
      },
      {
        "id": "FE-CROSS-005",
        "status": "PASS",
        "duration_ms": 0.34419199998956174
      },
      {
        "id": "FE-CROSS-006",
        "status": "PASS",
        "duration_ms": 0.21067299996502697
      },
      {
        "id": "FE-CROSS-007",
        "status": "PASS",
        "duration_ms": 0.2173550000297837
      },
      {
        "id": "FE-CROSS-008",
        "status": "PASS",
        "duration_ms": 0.2599449999979697
      },
      {
        "id": "FE-CROSS-009",
        "status": "PASS",
        "duration_ms": 0.23865500005194917
      },
      {
        "id": "FE-CROSS-010",
        "status": "PASS",
        "duration_ms": 0.3001800000201911
      },
      {
        "id": "FE-NOTIF-001",
        "status": "FAIL",
        "duration_ms": 60851.488429,
        "error": "BFF /v1/auth/login returned 429: {\"data\":{\"error\":\"too many login attempts; try again in 2m57s\",\"retry_after_seconds\":177,\"scope\":\"email\"},\"message\":\"Too many login attempts. Please wait and try again.\"}"
      },
      {
        "id": "FE-NOTIF-002",
        "status": "PASS",
        "duration_ms": 2.254861000001256
      },
      {
        "id": "FE-NOTIF-003",
        "status": "PASS",
        "duration_ms": 0.41238999999768566
      },
      {
        "id": "FE-NOTIF-004",
        "status": "PASS",
        "duration_ms": 0.49548499999946216
      },
      {
        "id": "FE-NOTIF-005",
        "status": "PASS",
        "duration_ms": 0.3501940000060131
      },
      {
        "id": "FE-NOTIF-006",
        "status": "PASS",
        "duration_ms": 0.5152219999945373
      },
      {
        "id": "FE-NOTIF-007",
        "status": "PASS",
        "duration_ms": 0.3306369999991148
      },
      {
        "id": "FE-NOTIF-008",
        "status": "PASS",
        "duration_ms": 0.2934380000006058
      },
      {
        "id": "FE-HELP-001",
        "status": "FAIL",
        "duration_ms": 60160.908458000005,
        "error": "BFF /v1/auth/login returned 429: {\"data\":{\"error\":\"too many login attempts; try again in 1m57s\",\"retry_after_seconds\":117,\"scope\":\"email\"},\"message\":\"Too many login attempts. Please wait and try again.\"}"
      },
      {
        "id": "FE-HELP-002",
        "status": "PASS",
        "duration_ms": 0.7104160000017146
      },
      {
        "id": "FE-HELP-003",
        "status": "PASS",
        "duration_ms": 0.34048499999335036
      },
      {
        "id": "FE-HELP-004",
        "status": "PASS",
        "duration_ms": 0.25792200000432786
      },
      {
        "id": "FE-HELP-005",
        "status": "FAIL",
        "duration_ms": 60379.62480799999,
        "error": "BFF /v1/auth/login returned 429: {\"data\":{\"error\":\"too many login attempts; try again in 57s\",\"retry_after_seconds\":57,\"scope\":\"email\"},\"message\":\"Too many login attempts. Please wait and try again.\"}"
      },
      {
        "id": "FE-HELP-006",
        "status": "PASS",
        "duration_ms": 1.2709630000172183
      },
      {
        "id": "FE-HELP-007",
        "status": "PASS",
        "duration_ms": 0.2261630000139121
      },
      {
        "id": "FE-HELP-008",
        "status": "PASS",
        "duration_ms": 0.2002830000128597
      },
      {
        "id": "UNKNOWN-8j1wpx",
        "status": "PASS",
        "duration_ms": 119.25229200000001
      },
      {
        "id": "UNKNOWN-dowjgh",
        "status": "PASS",
        "duration_ms": 57.29734700000006
      },
      {
        "id": "UNKNOWN-z228x5",
        "status": "PASS",
        "duration_ms": 100.88907399999994
      },
      {
        "id": "FE-SET-G-001",
        "status": "FAIL",
        "duration_ms": 61449.192729,
        "error": "BFF /v1/auth/login returned 429: {\"data\":{\"error\":\"too many login attempts; try again in 10m4s\",\"retry_after_seconds\":604,\"scope\":\"email\"},\"message\":\"Too many login attempts. Please wait and try again.\"}"
      },
      {
        "id": "FE-SET-G-002",
        "status": "FAIL",
        "duration_ms": 61039.297593999996,
        "error": "BFF /v1/auth/login returned 429: {\"data\":{\"error\":\"too many login attempts; try again in 9m3s\",\"retry_after_seconds\":543,\"scope\":\"email\"},\"message\":\"Too many login attempts. Please wait and try again.\"}"
      },
      {
        "id": "FE-SET-G-003",
        "status": "PASS",
        "duration_ms": 2.793846000000485
      },
      {
        "id": "FE-SET-G-004",
        "status": "PASS",
        "duration_ms": 0.32240200000524055
      },
      {
        "id": "FE-SET-G-005",
        "status": "PASS",
        "duration_ms": 0.6028460000088671
      },
      {
        "id": "FE-SET-G-006",
        "status": "FAIL",
        "duration_ms": 60536.105043999996,
        "error": "BFF /v1/auth/login returned 429: {\"data\":{\"error\":\"too many login attempts; try again in 8m2s\",\"retry_after_seconds\":482,\"scope\":\"email\"},\"message\":\"Too many login attempts. Please wait and try again.\"}"
      },
      {
        "id": "FE-SET-G-007",
        "status": "PASS",
        "duration_ms": 0.5424029999994673
      },
      {
        "id": "FE-SET-G-008",
        "status": "PASS",
        "duration_ms": 0.34187800000654534
      },
      {
        "id": "FE-SET-G-009",
        "status": "PASS",
        "duration_ms": 0.36231599998427555
      },
      {
        "id": "FE-SET-G-010",
        "status": "PASS",
        "duration_ms": 0.2944900000002235
      },
      {
        "id": "FE-SET-G-011",
        "status": "PASS",
        "duration_ms": 0.22290600000997074
      },
      {
        "id": "FE-SET-G-012",
        "status": "PASS",
        "duration_ms": 2.9407309999805875
      },
      {
        "id": "FE-SET-G-013",
        "status": "PASS",
        "duration_ms": 0.4198540000070352
      },
      {
        "id": "FE-SET-G-014",
        "status": "PASS",
        "duration_ms": 1.8034890000126325
      },
      {
        "id": "FE-SET-G-015",
        "status": "PASS",
        "duration_ms": 0.4313959999999497
      },
      {
        "id": "FE-SET-S-001",
        "status": "FAIL",
        "duration_ms": 60423.28831999999,
        "error": "BFF /v1/auth/login returned 429: {\"data\":{\"error\":\"too many login attempts; try again in 7m2s\",\"retry_after_seconds\":422,\"scope\":\"email\"},\"message\":\"Too many login attempts. Please wait and try again.\"}"
      },
      {
        "id": "FE-SET-S-002",
        "status": "PASS",
        "duration_ms": 1.1935079999966547
      },
      {
        "id": "FE-SET-S-003",
        "status": "PASS",
        "duration_ms": 0.39059900000575
      },
      {
        "id": "FE-SET-S-004",
        "status": "PASS",
        "duration_ms": 0.28798799999640323
      },
      {
        "id": "FE-SET-S-005",
        "status": "PASS",
        "duration_ms": 0.3824040000035893
      },
      {
        "id": "FE-SET-S-006",
        "status": "PASS",
        "duration_ms": 0.20234699998400174
      },
      {
        "id": "FE-SET-S-007",
        "status": "PASS",
        "duration_ms": 0.22532999998657033
      },
      {
        "id": "FE-SET-M-001",
        "status": "FAIL",
        "duration_ms": 60513.736309,
        "error": "BFF /v1/auth/login returned 429: {\"data\":{\"error\":\"too many login attempts; try again in 6m1s\",\"retry_after_seconds\":361,\"scope\":\"email\"},\"message\":\"Too many login attempts. Please wait and try again.\"}"
      },
      {
        "id": "FE-SET-M-002",
        "status": "PASS",
        "duration_ms": 0.3736780000035651
      },
      {
        "id": "FE-SET-M-003",
        "status": "PASS",
        "duration_ms": 0.2025990000111051
      },
      {
        "id": "FE-SET-M-004",
        "status": "PASS",
        "duration_ms": 0.16245300002628937
      },
      {
        "id": "FE-SET-M-005",
        "status": "PASS",
        "duration_ms": 0.21774599998025224
      },
      {
        "id": "FE-SET-M-006",
        "status": "PASS",
        "duration_ms": 0.15435900003649294
      },
      {
        "id": "FE-USER-001",
        "status": "FAIL",
        "duration_ms": 60380.78425899998,
        "error": "BFF /v1/auth/login returned 429: {\"data\":{\"error\":\"too many login attempts; try again in 5m1s\",\"retry_after_seconds\":301,\"scope\":\"email\"},\"message\":\"Too many login attempts. Please wait and try again.\"}"
      },
      {
        "id": "FE-USER-002",
        "status": "FAIL",
        "duration_ms": 60253.28373199998,
        "error": "BFF /v1/auth/login returned 429: {\"data\":{\"error\":\"too many login attempts; try again in 4m1s\",\"retry_after_seconds\":241,\"scope\":\"email\"},\"message\":\"Too many login attempts. Please wait and try again.\"}"
      },
      {
        "id": "FE-USER-003",
        "status": "PASS",
        "duration_ms": 0.45467900001676753
      },
      {
        "id": "FE-USER-004",
        "status": "PASS",
        "duration_ms": 0.20915000000968575
      },
      {
        "id": "FE-USER-005",
        "status": "PASS",
        "duration_ms": 0.1444599999813363
      },
      {
        "id": "FE-USER-006",
        "status": "PASS",
        "duration_ms": 0.2710949999745935
      },
      {
        "id": "FE-PHONE-001",
        "status": "FAIL",
        "duration_ms": 60652.094398,
        "error": "BFF /v1/auth/login returned 429: {\"data\":{\"error\":\"too many login attempts; try again in 3m8s\",\"retry_after_seconds\":188,\"scope\":\"email\"},\"message\":\"Too many login attempts. Please wait and try again.\"}"
      },
      {
        "id": "FE-PHONE-002",
        "status": "FAIL",
        "duration_ms": 60951.428230000005,
        "error": "BFF /v1/auth/login returned 429: {\"data\":{\"error\":\"too many login attempts; try again in 2m7s\",\"retry_after_seconds\":127,\"scope\":\"email\"},\"message\":\"Too many login attempts. Please wait and try again.\"}"
      },
      {
        "id": "FE-PHONE-003",
        "status": "FAIL",
        "duration_ms": 60182.48144999999,
        "error": "BFF /v1/auth/login returned 429: {\"data\":{\"error\":\"too many login attempts; try again in 1m6s\",\"retry_after_seconds\":66,\"scope\":\"email\"},\"message\":\"Too many login attempts. Please wait and try again.\"}"
      },
      {
        "id": "FE-PHONE-004",
        "status": "FAIL",
        "duration_ms": 60234.172807000024,
        "error": "BFF /v1/auth/login returned 429: {\"data\":{\"error\":\"too many login attempts; try again in 6s\",\"retry_after_seconds\":6,\"scope\":\"email\"},\"message\":\"Too many login attempts. Please wait and try again.\"}"
      },
      {
        "id": "FE-PHONE-005",
        "status": "PASS",
        "duration_ms": 5.00575700000627
      },
      {
        "id": "FE-PHONE-006",
        "status": "PASS",
        "duration_ms": 0.414814000017941
      },
      {
        "id": "FE-PHONE-007",
        "status": "PASS",
        "duration_ms": 0.2797830000054091
      },
      {
        "id": "FE-PHONE-008",
        "status": "PASS",
        "duration_ms": 0.41681700001936406
      },
      {
        "id": "FE-PHONE-009",
        "status": "PASS",
        "duration_ms": 0.8109149999800138
      },
      {
        "id": "FE-SMS-TOKY-001",
        "status": "PASS",
        "duration_ms": 2.5521949999999833
      },
      {
        "id": "FE-SMS-TOKY-002",
        "status": "PASS",
        "duration_ms": 0.4071710000000621
      },
      {
        "id": "FE-SMS-TOKY-003",
        "status": "PASS",
        "duration_ms": 0.2831380000000081
      },
      {
        "id": "FE-SMS-TOKY-004",
        "status": "PASS",
        "duration_ms": 0.39183200000002216
      },
      {
        "id": "FE-SMS-TOKY-005",
        "status": "PASS",
        "duration_ms": 0.30332599999997
      },
      {
        "id": "FE-SMS-TOKY-006",
        "status": "PASS",
        "duration_ms": 0.4212569999999687
      },
      {
        "id": "FE-SMS-TOKY-007",
        "status": "PASS",
        "duration_ms": 0.30656299999986913
      },
      {
        "id": "FE-SMS-TOKY-008",
        "status": "PASS",
        "duration_ms": 0.21016200000008212
      },
      {
        "id": "FE-SMS-TOKY-009",
        "status": "PASS",
        "duration_ms": 0.27680599999985134
      },
      {
        "id": "FE-SMS-TOKY-010",
        "status": "PASS",
        "duration_ms": 246.23172899999986
      },
      {
        "id": "FE-SMS-TOKY-011",
        "status": "PASS",
        "duration_ms": 0.8318329999999605
      },
      {
        "id": "FE-SMS-TOKY-012",
        "status": "PASS",
        "duration_ms": 0.33456500000011147
      },
      {
        "id": "FE-SMS-TOKY-013",
        "status": "PASS",
        "duration_ms": 0.22059199999989687
      },
      {
        "id": "FE-SMS-TOKY-014",
        "status": "PASS",
        "duration_ms": 0.5168350000001283
      },
      {
        "id": "FE-SMS-TOKY-015",
        "status": "PASS",
        "duration_ms": 0.1621820000000298
      },
      {
        "id": "FE-SMS-TOKY-016",
        "status": "PASS",
        "duration_ms": 0.28961099999992257
      },
      {
        "id": "FE-SMS-TOKY-017",
        "status": "PASS",
        "duration_ms": 0.15576099999998405
      },
      {
        "id": "FE-SMS-TOKY-018",
        "status": "PASS",
        "duration_ms": 0.3476499999999305
      },
      {
        "id": "FE-SMS-TOKY-019",
        "status": "PASS",
        "duration_ms": 0.236131000000114
      },
      {
        "id": "FE-SMS-TOKY-020",
        "status": "PASS",
        "duration_ms": 0.3486400000001595
      },
      {
        "id": "FE-SMS-TW-001",
        "status": "PASS",
        "duration_ms": 2.2438200000001416
      },
      {
        "id": "FE-SMS-TW-002",
        "status": "PASS",
        "duration_ms": 0.5123360000000048
      },
      {
        "id": "FE-SMS-TW-003",
        "status": "PASS",
        "duration_ms": 0.448477000000139
      },
      {
        "id": "FE-SMS-TW-004",
        "status": "PASS",
        "duration_ms": 0.36166499999990265
      },
      {
        "id": "FE-SMS-TW-005",
        "status": "PASS",
        "duration_ms": 0.6127140000000963
      },
      {
        "id": "FE-SMS-TW-006",
        "status": "PASS",
        "duration_ms": 0.4069390000001931
      },
      {
        "id": "FE-SMS-TW-007",
        "status": "PASS",
        "duration_ms": 1.8012630000000627
      },
      {
        "id": "FE-SMS-TW-008",
        "status": "PASS",
        "duration_ms": 0.4012190000000828
      },
      {
        "id": "FE-SMS-TW-009",
        "status": "PASS",
        "duration_ms": 0.2883990000000267
      },
      {
        "id": "FE-SMS-TW-010",
        "status": "PASS",
        "duration_ms": 0.3444539999998142
      },
      {
        "id": "FE-SMS-TW-011",
        "status": "PASS",
        "duration_ms": 458.55770800000005
      },
      {
        "id": "FE-SMS-TW-012",
        "status": "PASS",
        "duration_ms": 0.28267699999992146
      }
    ]
  },
  "results": [
    {
      "id": "FE-AUTH-001",
      "description": "/login page renders with email + password + Forgot Password + Login + Register link",
      "status": "PASS",
      "duration_ms": 2087.967415,
      "file_path": "/app/runner/tests/auth/fe-auth.test.ts",
      "test_path": "tests/auth/fe-auth.test.ts > Authentication (FE-AUTH) > FE-AUTH-001 — /login page renders with email + password + Forgot Password + Login + Register link"
    },
    {
      "id": "FE-AUTH-002",
      "description": "Login with valid credentials → redirect to /automation-campaign",
      "status": "FAIL",
      "duration_ms": 60516.336562000004,
      "file_path": "/app/runner/tests/auth/fe-auth.test.ts",
      "test_path": "tests/auth/fe-auth.test.ts > Authentication (FE-AUTH) > FE-AUTH-002 — Login with valid credentials → redirect to /automation-campaign",
      "error": "BFF /v1/auth/login returned 429: {\"data\":{\"error\":\"too many login attempts; try again in 10m2s\",\"retry_after_seconds\":602,\"scope\":\"email\"},\"message\":\"Too many login attempts. Please wait and try again.\"}"
    },
    {
      "id": "FE-AUTH-003",
      "description": "Login with wrong password → friendly error, no stack trace",
      "status": "PASS",
      "duration_ms": 228.56874000000244,
      "file_path": "/app/runner/tests/auth/fe-auth.test.ts",
      "test_path": "tests/auth/fe-auth.test.ts > Authentication (FE-AUTH) > FE-AUTH-003 — Login with wrong password → friendly error, no stack trace"
    },
    {
      "id": "FE-AUTH-004",
      "description": "Login with non-existent email → generic friendly error (no enumeration)",
      "status": "PASS",
      "duration_ms": 60.06046700000297,
      "file_path": "/app/runner/tests/auth/fe-auth.test.ts",
      "test_path": "tests/auth/fe-auth.test.ts > Authentication (FE-AUTH) > FE-AUTH-004 — Login with non-existent email → generic friendly error (no enumeration)"
    },
    {
      "id": "FE-AUTH-005",
      "description": "Login with empty fields → form validation errors",
      "status": "PASS",
      "duration_ms": 1489.485950999995,
      "file_path": "/app/runner/tests/auth/fe-auth.test.ts",
      "test_path": "tests/auth/fe-auth.test.ts > Authentication (FE-AUTH) > FE-AUTH-005 — Login with empty fields → form validation errors"
    },
    {
      "id": "FE-AUTH-006",
      "description": "Eye icon on password field toggles show/hide",
      "status": "PASS",
      "duration_ms": 817.7645349999948,
      "file_path": "/app/runner/tests/auth/fe-auth.test.ts",
      "test_path": "tests/auth/fe-auth.test.ts > Authentication (FE-AUTH) > FE-AUTH-006 — Eye icon on password field toggles show/hide"
    },
    {
      "id": "FE-AUTH-007",
      "description": "Forgot Password link → /forgot-password page renders",
      "status": "PASS",
      "duration_ms": 1107.484156999999,
      "file_path": "/app/runner/tests/auth/fe-auth.test.ts",
      "test_path": "tests/auth/fe-auth.test.ts > Authentication (FE-AUTH) > FE-AUTH-007 — Forgot Password link → /forgot-password page renders"
    },
    {
      "id": "FE-AUTH-008",
      "description": "Submit forgot password form with valid email → success message",
      "status": "PASS",
      "duration_ms": 276.6376440000022,
      "file_path": "/app/runner/tests/auth/fe-auth.test.ts",
      "test_path": "tests/auth/fe-auth.test.ts > Authentication (FE-AUTH) > FE-AUTH-008 — Submit forgot password form with valid email → success message"
    },
    {
      "id": "FE-AUTH-009",
      "description": "Submit forgot password with non-existent email → generic success (anti-enumeration)",
      "status": "FAIL",
      "duration_ms": 104.41744900000049,
      "file_path": "/app/runner/tests/auth/fe-auth.test.ts",
      "test_path": "tests/auth/fe-auth.test.ts > Authentication (FE-AUTH) > FE-AUTH-009 — Submit forgot password with non-existent email → generic success (anti-enumeration)",
      "error": "expected 500 to be 404 // Object.is equality"
    },
    {
      "id": "FE-AUTH-010",
      "description": "/auth-reset-password?token=invalid → friendly invalid token error",
      "status": "PASS",
      "duration_ms": 51.013552999997046,
      "file_path": "/app/runner/tests/auth/fe-auth.test.ts",
      "test_path": "tests/auth/fe-auth.test.ts > Authentication (FE-AUTH) > FE-AUTH-010 — /auth-reset-password?token=invalid → friendly invalid token error"
    },
    {
      "id": "FE-AUTH-011",
      "description": "/auth-reset-password validates min length and match",
      "status": "PASS",
      "duration_ms": 13.609032999986084,
      "file_path": "/app/runner/tests/auth/fe-auth.test.ts",
      "test_path": "tests/auth/fe-auth.test.ts > Authentication (FE-AUTH) > FE-AUTH-011 — /auth-reset-password validates min length and match"
    },
    {
      "id": "FE-AUTH-012",
      "description": "Sign Out button → clears cookies → redirects to /login",
      "status": "FAIL",
      "duration_ms": 60222.418596,
      "file_path": "/app/runner/tests/auth/fe-auth.test.ts",
      "test_path": "tests/auth/fe-auth.test.ts > Authentication (FE-AUTH) > FE-AUTH-012 — Sign Out button → clears cookies → redirects to /login",
      "error": "BFF /v1/auth/login returned 429: {\"data\":{\"error\":\"too many login attempts; try again in 8m58s\",\"retry_after_seconds\":538,\"scope\":\"email\"},\"message\":\"Too many login attempts. Please wait and try again.\"}"
    },
    {
      "id": "FE-AUTH-013",
      "description": "Hard refresh of authenticated page → session restores, no console errors",
      "status": "FAIL",
      "duration_ms": 60337.876546,
      "file_path": "/app/runner/tests/auth/fe-auth.test.ts",
      "test_path": "tests/auth/fe-auth.test.ts > Authentication (FE-AUTH) > FE-AUTH-013 — Hard refresh of authenticated page → session restores, no console errors",
      "error": "BFF /v1/auth/login returned 429: {\"data\":{\"error\":\"too many login attempts; try again in 7m58s\",\"retry_after_seconds\":478,\"scope\":\"email\"},\"message\":\"Too many login attempts. Please wait and try again.\"}"
    },
    {
      "id": "FE-AUTH-014",
      "description": "Direct nav to authenticated route while logged out → redirects to /login with ?redirect=",
      "status": "PASS",
      "duration_ms": 781.347363000008,
      "file_path": "/app/runner/tests/auth/fe-auth.test.ts",
      "test_path": "tests/auth/fe-auth.test.ts > Authentication (FE-AUTH) > FE-AUTH-014 — Direct nav to authenticated route while logged out → redirects to /login with ?redirect="
    },
    {
      "id": "FE-AUTH-015",
      "description": "JWT expires mid-session → next API call triggers refresh; refresh fail → logout",
      "status": "PASS",
      "duration_ms": 78.82301399999415,
      "file_path": "/app/runner/tests/auth/fe-auth.test.ts",
      "test_path": "tests/auth/fe-auth.test.ts > Authentication (FE-AUTH) > FE-AUTH-015 — JWT expires mid-session → next API call triggers refresh; refresh fail → logout"
    },
    {
      "id": "FE-AUTH-016",
      "description": "Login on staging hits staging BFF, NOT prod (FE-BUG-002 regression)",
      "status": "PASS",
      "duration_ms": 5799.605815999996,
      "file_path": "/app/runner/tests/auth/fe-auth.test.ts",
      "test_path": "tests/auth/fe-auth.test.ts > Authentication (FE-AUTH) > FE-AUTH-016 — Login on staging hits staging BFF, NOT prod (FE-BUG-002 regression)"
    },
    {
      "id": "FE-AUTH-017",
      "description": "Cookie has Secure, HttpOnly, SameSite flags set on auth cookies",
      "status": "FAIL",
      "duration_ms": 60192.68126099999,
      "file_path": "/app/runner/tests/auth/fe-auth.test.ts",
      "test_path": "tests/auth/fe-auth.test.ts > Authentication (FE-AUTH) > FE-AUTH-017 — Cookie has Secure, HttpOnly, SameSite flags set on auth cookies",
      "error": "BFF /v1/auth/login returned 429: {\"data\":{\"error\":\"too many login attempts; try again in 6m51s\",\"retry_after_seconds\":411,\"scope\":\"email\"},\"message\":\"Too many login attempts. Please wait and try again.\"}"
    },
    {
      "id": "FE-AUTH-018",
      "description": "Open redirect — ?redirect=https://evil.com after login → blocked",
      "status": "FAIL",
      "duration_ms": 60310.02076800002,
      "file_path": "/app/runner/tests/auth/fe-auth.test.ts",
      "test_path": "tests/auth/fe-auth.test.ts > Authentication (FE-AUTH) > FE-AUTH-018 — Open redirect — ?redirect=https://evil.com after login → blocked",
      "error": "BFF /v1/auth/login returned 429: {\"data\":{\"error\":\"too many login attempts; try again in 5m51s\",\"retry_after_seconds\":351,\"scope\":\"email\"},\"message\":\"Too many login attempts. Please wait and try again.\"}"
    },
    {
      "id": "FE-AUTH-019",
      "description": "Login button shows loading spinner while authenticating",
      "status": "PASS",
      "duration_ms": 2156.254446999985,
      "file_path": "/app/runner/tests/auth/fe-auth.test.ts",
      "test_path": "tests/auth/fe-auth.test.ts > Authentication (FE-AUTH) > FE-AUTH-019 — Login button shows loading spinner while authenticating"
    },
    {
      "id": "FE-AUTH-020",
      "description": "Rate limiting on /login — rapid wrong-password attempts trigger 429",
      "status": "PASS",
      "duration_ms": 477.429123000009,
      "file_path": "/app/runner/tests/auth/fe-auth.test.ts",
      "test_path": "tests/auth/fe-auth.test.ts > Authentication (FE-AUTH) > FE-AUTH-020 — Rate limiting on /login — rapid wrong-password attempts trigger 429"
    },
    {
      "id": "FE-REG-001",
      "description": "/signup step 1 renders register form (name, email, password, phone)",
      "status": "PASS",
      "duration_ms": 2425.2681060000004,
      "file_path": "/app/runner/tests/auth/fe-reg.test.ts",
      "test_path": "tests/auth/fe-reg.test.ts > Registration wizard (FE-REG) > FE-REG-001 — /signup step 1 renders register form (name, email, password, phone)"
    },
    {
      "id": "FE-REG-002",
      "description": "Submit empty form → field validation errors",
      "status": "PASS",
      "duration_ms": 2309.0702020000003,
      "file_path": "/app/runner/tests/auth/fe-reg.test.ts",
      "test_path": "tests/auth/fe-reg.test.ts > Registration wizard (FE-REG) > FE-REG-002 — Submit empty form → field validation errors"
    },
    {
      "id": "FE-REG-003",
      "description": "Submit with invalid email format → validation error",
      "status": "PASS",
      "duration_ms": 3171.4728969999996,
      "file_path": "/app/runner/tests/auth/fe-reg.test.ts",
      "test_path": "tests/auth/fe-reg.test.ts > Registration wizard (FE-REG) > FE-REG-003 — Submit with invalid email format → validation error"
    },
    {
      "id": "FE-REG-004",
      "description": "Submit with weak password → strength meter + rejection",
      "status": "PASS",
      "duration_ms": 2499.9063069999993,
      "file_path": "/app/runner/tests/auth/fe-reg.test.ts",
      "test_path": "tests/auth/fe-reg.test.ts > Registration wizard (FE-REG) > FE-REG-004 — Submit with weak password → strength meter + rejection"
    },
    {
      "id": "FE-REG-005",
      "description": "Submit with duplicate email → friendly 'email already registered'",
      "status": "PASS",
      "duration_ms": 149.86601999999948,
      "file_path": "/app/runner/tests/auth/fe-reg.test.ts",
      "test_path": "tests/auth/fe-reg.test.ts > Registration wizard (FE-REG) > FE-REG-005 — Submit with duplicate email → friendly 'email already registered'"
    },
    {
      "id": "FE-REG-006",
      "description": "Submit valid form → advances to step 2 (Select Plan)",
      "status": "PASS",
      "duration_ms": 23061.617943999998,
      "file_path": "/app/runner/tests/auth/fe-reg.test.ts",
      "test_path": "tests/auth/fe-reg.test.ts > Registration wizard (FE-REG) > FE-REG-006 — Submit valid form → advances to step 2 (Select Plan)"
    },
    {
      "id": "FE-REG-007",
      "description": "Step 2 shows Pulse Free + Pulse Pro side-by-side",
      "status": "PASS",
      "duration_ms": 1973.7406069999997,
      "file_path": "/app/runner/tests/auth/fe-reg.test.ts",
      "test_path": "tests/auth/fe-reg.test.ts > Registration wizard (FE-REG) > FE-REG-007 — Step 2 shows Pulse Free + Pulse Pro side-by-side"
    },
    {
      "id": "FE-REG-008",
      "description": "Toggle Monthly / Annually switches plan prices",
      "status": "PASS",
      "duration_ms": 1024.2647690000013,
      "file_path": "/app/runner/tests/auth/fe-reg.test.ts",
      "test_path": "tests/auth/fe-reg.test.ts > Registration wizard (FE-REG) > FE-REG-008 — Toggle Monthly / Annually switches plan prices"
    },
    {
      "id": "FE-REG-009",
      "description": "Click Free Plan → advances to step 4 (Order Information), skipping step 3",
      "status": "PASS",
      "duration_ms": 1810.6306230000046,
      "file_path": "/app/runner/tests/auth/fe-reg.test.ts",
      "test_path": "tests/auth/fe-reg.test.ts > Registration wizard (FE-REG) > FE-REG-009 — Click Free Plan → advances to step 4 (Order Information), skipping step 3"
    },
    {
      "id": "FE-REG-010",
      "description": "Click Pulse Pro → advances to step 3 (Add-ons)",
      "status": "PASS",
      "duration_ms": 932.7144509999998,
      "file_path": "/app/runner/tests/auth/fe-reg.test.ts",
      "test_path": "tests/auth/fe-reg.test.ts > Registration wizard (FE-REG) > FE-REG-010 — Click Pulse Pro → advances to step 3 (Add-ons)"
    },
    {
      "id": "FE-REG-011",
      "description": "Step 4 (Free Plan) — Total Due $0.00, 'Continue' button (NOT 'Continue to Payment')",
      "status": "PASS",
      "duration_ms": 449.24925200000143,
      "file_path": "/app/runner/tests/auth/fe-reg.test.ts",
      "test_path": "tests/auth/fe-reg.test.ts > Registration wizard (FE-REG) > FE-REG-011 — Step 4 (Free Plan) — Total Due $0.00, 'Continue' button (NOT 'Continue to Payment')"
    },
    {
      "id": "FE-REG-012",
      "description": "Step 4 (Free Plan) — promo code field hidden (FE-BUG-001 fix)",
      "status": "PASS",
      "duration_ms": 794.1524749999953,
      "file_path": "/app/runner/tests/auth/fe-reg.test.ts",
      "test_path": "tests/auth/fe-reg.test.ts > Registration wizard (FE-REG) > FE-REG-012 — Step 4 (Free Plan) — promo code field hidden (FE-BUG-001 fix)"
    },
    {
      "id": "FE-REG-013",
      "description": "Step 4 (Free Plan) — clicking Continue skips payment form",
      "status": "PASS",
      "duration_ms": 1161.1368500000026,
      "file_path": "/app/runner/tests/auth/fe-reg.test.ts",
      "test_path": "tests/auth/fe-reg.test.ts > Registration wizard (FE-REG) > FE-REG-013 — Step 4 (Free Plan) — clicking Continue skips payment form"
    },
    {
      "id": "FE-REG-014",
      "description": "Step 4 (Paid plan) — Payment Information form shows card fields @paid",
      "status": "NOT_EXEC",
      "duration_ms": 0,
      "file_path": "/app/runner/tests/auth/fe-reg.test.ts",
      "test_path": "tests/auth/fe-reg.test.ts > Registration wizard (FE-REG) > FE-REG-014 — Step 4 (Paid plan) — Payment Information form shows card fields @paid"
    },
    {
      "id": "FE-REG-015",
      "description": "Step 4 — apply promo code BETAOFFER → 100% discount → label changes @paid",
      "status": "NOT_EXEC",
      "duration_ms": 0,
      "file_path": "/app/runner/tests/auth/fe-reg.test.ts",
      "test_path": "tests/auth/fe-reg.test.ts > Registration wizard (FE-REG) > FE-REG-015 — Step 4 — apply promo code BETAOFFER → 100% discount → label changes @paid"
    },
    {
      "id": "FE-REG-016",
      "description": "Step 4 — invalid promo code → friendly error @paid",
      "status": "NOT_EXEC",
      "duration_ms": 0,
      "file_path": "/app/runner/tests/auth/fe-reg.test.ts",
      "test_path": "tests/auth/fe-reg.test.ts > Registration wizard (FE-REG) > FE-REG-016 — Step 4 — invalid promo code → friendly error @paid"
    },
    {
      "id": "FE-REG-017",
      "description": "Step 4 — expired promo code → friendly error @paid",
      "status": "NOT_EXEC",
      "duration_ms": 0,
      "file_path": "/app/runner/tests/auth/fe-reg.test.ts",
      "test_path": "tests/auth/fe-reg.test.ts > Registration wizard (FE-REG) > FE-REG-017 — Step 4 — expired promo code → friendly error @paid"
    },
    {
      "id": "FE-REG-018",
      "description": "Step 4 — payment form rejects invalid card number @paid",
      "status": "NOT_EXEC",
      "duration_ms": 0,
      "file_path": "/app/runner/tests/auth/fe-reg.test.ts",
      "test_path": "tests/auth/fe-reg.test.ts > Registration wizard (FE-REG) > FE-REG-018 — Step 4 — payment form rejects invalid card number @paid"
    },
    {
      "id": "FE-REG-019",
      "description": "Step 4 — payment form rejects expired card @paid",
      "status": "NOT_EXEC",
      "duration_ms": 0,
      "file_path": "/app/runner/tests/auth/fe-reg.test.ts",
      "test_path": "tests/auth/fe-reg.test.ts > Registration wizard (FE-REG) > FE-REG-019 — Step 4 — payment form rejects expired card @paid"
    },
    {
      "id": "FE-REG-020",
      "description": "Step 4 — payment form requires all billing address fields @paid",
      "status": "NOT_EXEC",
      "duration_ms": 0,
      "file_path": "/app/runner/tests/auth/fe-reg.test.ts",
      "test_path": "tests/auth/fe-reg.test.ts > Registration wizard (FE-REG) > FE-REG-020 — Step 4 — payment form requires all billing address fields @paid"
    },
    {
      "id": "FE-REG-021",
      "description": "Browser back button mid-wizard preserves form state",
      "status": "PASS",
      "duration_ms": 1430.5816589999959,
      "file_path": "/app/runner/tests/auth/fe-reg.test.ts",
      "test_path": "tests/auth/fe-reg.test.ts > Registration wizard (FE-REG) > FE-REG-021 — Browser back button mid-wizard preserves form state"
    },
    {
      "id": "FE-REG-022",
      "description": "Direct nav to ?step=4 without completing 1-3 → redirects",
      "status": "PASS",
      "duration_ms": 2271.907868000002,
      "file_path": "/app/runner/tests/auth/fe-reg.test.ts",
      "test_path": "tests/auth/fe-reg.test.ts > Registration wizard (FE-REG) > FE-REG-022 — Direct nav to ?step=4 without completing 1-3 → redirects"
    },
    {
      "id": "FE-REG-023",
      "description": "Already-authenticated user navigating to /signup → redirects to dashboard",
      "status": "FAIL",
      "duration_ms": 60561.324339000006,
      "file_path": "/app/runner/tests/auth/fe-reg.test.ts",
      "test_path": "tests/auth/fe-reg.test.ts > Registration wizard (FE-REG) > FE-REG-023 — Already-authenticated user navigating to /signup → redirects to dashboard",
      "error": "BFF /v1/auth/login returned 429: {\"data\":{\"error\":\"too many login attempts; try again in 9m19s\",\"retry_after_seconds\":559,\"scope\":\"email\"},\"message\":\"Too many login attempts. Please wait and try again.\"}"
    },
    {
      "id": "FE-REG-024",
      "description": "Wizard step indicator updates correctly per step",
      "status": "PASS",
      "duration_ms": 1822.0861730000033,
      "file_path": "/app/runner/tests/auth/fe-reg.test.ts",
      "test_path": "tests/auth/fe-reg.test.ts > Registration wizard (FE-REG) > FE-REG-024 — Wizard step indicator updates correctly per step"
    },
    {
      "id": "FE-SETUP-001",
      "description": "/setup page renders for newly-signed-up users",
      "status": "FAIL",
      "duration_ms": 61203.160087000004,
      "file_path": "/app/runner/tests/auth/fe-setup.test.ts",
      "test_path": "tests/auth/fe-setup.test.ts > Onboarding / Setup (FE-SETUP) > FE-SETUP-001 — /setup page renders for newly-signed-up users",
      "error": "BFF /v1/auth/login returned 429: {\"data\":{\"error\":\"too many login attempts; try again in 8m15s\",\"retry_after_seconds\":495,\"scope\":\"email\"},\"message\":\"Too many login attempts. Please wait and try again.\"}"
    },
    {
      "id": "FE-SETUP-002",
      "description": "Setup wizard captures business profile info (form renders)",
      "status": "PASS",
      "duration_ms": 1635.285477999998,
      "file_path": "/app/runner/tests/auth/fe-setup.test.ts",
      "test_path": "tests/auth/fe-setup.test.ts > Onboarding / Setup (FE-SETUP) > FE-SETUP-002 — Setup wizard captures business profile info (form renders)"
    },
    {
      "id": "FE-SETUP-003",
      "description": "Skip onboarding via 'Skip for now' → dashboard with welcome modal (skip CTA exists)",
      "status": "FAIL",
      "duration_ms": 60165.32076999999,
      "file_path": "/app/runner/tests/auth/fe-setup.test.ts",
      "test_path": "tests/auth/fe-setup.test.ts > Onboarding / Setup (FE-SETUP) > FE-SETUP-003 — Skip onboarding via 'Skip for now' → dashboard with welcome modal (skip CTA exists)",
      "error": "BFF /v1/auth/login returned 429: {\"data\":{\"error\":\"too many login attempts; try again in 7m13s\",\"retry_after_seconds\":433,\"scope\":\"email\"},\"message\":\"Too many login attempts. Please wait and try again.\"}"
    },
    {
      "id": "FE-SETUP-004",
      "description": "/getting-started shows checklist with at least one step",
      "status": "FAIL",
      "duration_ms": 60291.41411499999,
      "file_path": "/app/runner/tests/auth/fe-setup.test.ts",
      "test_path": "tests/auth/fe-setup.test.ts > Onboarding / Setup (FE-SETUP) > FE-SETUP-004 — /getting-started shows checklist with at least one step",
      "error": "BFF /v1/auth/login returned 429: {\"data\":{\"error\":\"too many login attempts; try again in 6m13s\",\"retry_after_seconds\":373,\"scope\":\"email\"},\"message\":\"Too many login attempts. Please wait and try again.\"}"
    },
    {
      "id": "FE-SETUP-005",
      "description": "Welcome greeting renders user's first name",
      "status": "FAIL",
      "duration_ms": 60299.651681999996,
      "file_path": "/app/runner/tests/auth/fe-setup.test.ts",
      "test_path": "tests/auth/fe-setup.test.ts > Onboarding / Setup (FE-SETUP) > FE-SETUP-005 — Welcome greeting renders user's first name",
      "error": "BFF /v1/auth/login returned 429: {\"data\":{\"error\":\"too many login attempts; try again in 5m12s\",\"retry_after_seconds\":312,\"scope\":\"email\"},\"message\":\"Too many login attempts. Please wait and try again.\"}"
    },
    {
      "id": "FE-SETUP-006",
      "description": "setup_finished flag persists in DB for the test admin",
      "status": "PASS",
      "duration_ms": 291.7421880000038,
      "file_path": "/app/runner/tests/auth/fe-setup.test.ts",
      "test_path": "tests/auth/fe-setup.test.ts > Onboarding / Setup (FE-SETUP) > FE-SETUP-006 — setup_finished flag persists in DB for the test admin"
    },
    {
      "id": "FE-SETUP-007",
      "description": "/getting-started accessible even when setup_finished is true (onboarding route exception)",
      "status": "FAIL",
      "duration_ms": 60282.686581000016,
      "file_path": "/app/runner/tests/auth/fe-setup.test.ts",
      "test_path": "tests/auth/fe-setup.test.ts > Onboarding / Setup (FE-SETUP) > FE-SETUP-007 — /getting-started accessible even when setup_finished is true (onboarding route exception)",
      "error": "BFF /v1/auth/login returned 429: {\"data\":{\"error\":\"too many login attempts; try again in 4m12s\",\"retry_after_seconds\":252,\"scope\":\"email\"},\"message\":\"Too many login attempts. Please wait and try again.\"}"
    },
    {
      "id": "FE-DEAL-001",
      "description": "Sweep endpoint returns jobs_scheduled count",
      "status": "PASS",
      "duration_ms": 555.3482180000001,
      "file_path": "/app/runner/tests/deal-mover/fe-deal.test.ts",
      "test_path": "tests/deal-mover/fe-deal.test.ts > Deal Mover (FE-DEAL) > FE-DEAL-001 — Sweep endpoint returns jobs_scheduled count"
    },
    {
      "id": "FE-DEAL-002",
      "description": "Sweep moves a deal forward (smoke — needs seeded campaign)",
      "status": "PASS",
      "duration_ms": 0.7793050000000221,
      "file_path": "/app/runner/tests/deal-mover/fe-deal.test.ts",
      "test_path": "tests/deal-mover/fe-deal.test.ts > Deal Mover (FE-DEAL) > FE-DEAL-002 — Sweep moves a deal forward (smoke — needs seeded campaign)"
    },
    {
      "id": "FE-DEAL-003",
      "description": "Inactive campaign skips sweep (smoke)",
      "status": "PASS",
      "duration_ms": 0.46289500000011685,
      "file_path": "/app/runner/tests/deal-mover/fe-deal.test.ts",
      "test_path": "tests/deal-mover/fe-deal.test.ts > Deal Mover (FE-DEAL) > FE-DEAL-003 — Inactive campaign skips sweep (smoke)"
    },
    {
      "id": "FE-DEAL-004",
      "description": "Inactive user's stages skipped (smoke)",
      "status": "PASS",
      "duration_ms": 0.7506620000001476,
      "file_path": "/app/runner/tests/deal-mover/fe-deal.test.ts",
      "test_path": "tests/deal-mover/fe-deal.test.ts > Deal Mover (FE-DEAL) > FE-DEAL-004 — Inactive user's stages skipped (smoke)"
    },
    {
      "id": "FE-DEAL-005",
      "description": "max_deals_to_move quota respected (smoke)",
      "status": "PASS",
      "duration_ms": 0.1948539999998502,
      "file_path": "/app/runner/tests/deal-mover/fe-deal.test.ts",
      "test_path": "tests/deal-mover/fe-deal.test.ts > Deal Mover (FE-DEAL) > FE-DEAL-005 — max_deals_to_move quota respected (smoke)"
    },
    {
      "id": "FE-DEAL-006",
      "description": "Worker pops job within 5s (smoke)",
      "status": "PASS",
      "duration_ms": 0.3717540000000099,
      "file_path": "/app/runner/tests/deal-mover/fe-deal.test.ts",
      "test_path": "tests/deal-mover/fe-deal.test.ts > Deal Mover (FE-DEAL) > FE-DEAL-006 — Worker pops job within 5s (smoke)"
    },
    {
      "id": "FE-DEAL-007",
      "description": "Worker triggers email/SMS action (smoke)",
      "status": "PASS",
      "duration_ms": 0.25563800000008996,
      "file_path": "/app/runner/tests/deal-mover/fe-deal.test.ts",
      "test_path": "tests/deal-mover/fe-deal.test.ts > Deal Mover (FE-DEAL) > FE-DEAL-007 — Worker triggers email/SMS action (smoke)"
    },
    {
      "id": "FE-DEAL-008",
      "description": "Action returns 425 → deal rolled back (smoke)",
      "status": "PASS",
      "duration_ms": 0.2082580000001144,
      "file_path": "/app/runner/tests/deal-mover/fe-deal.test.ts",
      "test_path": "tests/deal-mover/fe-deal.test.ts > Deal Mover (FE-DEAL) > FE-DEAL-008 — Action returns 425 → deal rolled back (smoke)"
    },
    {
      "id": "FE-DEAL-009",
      "description": "Action 5xx → exponential backoff retry (smoke)",
      "status": "PASS",
      "duration_ms": 1.4725899999998546,
      "file_path": "/app/runner/tests/deal-mover/fe-deal.test.ts",
      "test_path": "tests/deal-mover/fe-deal.test.ts > Deal Mover (FE-DEAL) > FE-DEAL-009 — Action 5xx → exponential backoff retry (smoke)"
    },
    {
      "id": "FE-DEAL-010",
      "description": "Successful move appears in BFF /v1/deals/filter (smoke)",
      "status": "PASS",
      "duration_ms": 0.8465499999999793,
      "file_path": "/app/runner/tests/deal-mover/fe-deal.test.ts",
      "test_path": "tests/deal-mover/fe-deal.test.ts > Deal Mover (FE-DEAL) > FE-DEAL-010 — Successful move appears in BFF /v1/deals/filter (smoke)"
    },
    {
      "id": "FE-DEAL-011",
      "description": "Successful move does NOT create activity row (smoke)",
      "status": "PASS",
      "duration_ms": 0.805515000000014,
      "file_path": "/app/runner/tests/deal-mover/fe-deal.test.ts",
      "test_path": "tests/deal-mover/fe-deal.test.ts > Deal Mover (FE-DEAL) > FE-DEAL-011 — Successful move does NOT create activity row (smoke)"
    },
    {
      "id": "FE-DEAL-012",
      "description": "CRM sync goroutine fires after move (smoke)",
      "status": "PASS",
      "duration_ms": 0.20453300000008312,
      "file_path": "/app/runner/tests/deal-mover/fe-deal.test.ts",
      "test_path": "tests/deal-mover/fe-deal.test.ts > Deal Mover (FE-DEAL) > FE-DEAL-012 — CRM sync goroutine fires after move (smoke)"
    },
    {
      "id": "FE-DEAL-013",
      "description": "/v1/stages/scheduled endpoint reachable",
      "status": "PASS",
      "duration_ms": 40.74212299999999,
      "file_path": "/app/runner/tests/deal-mover/fe-deal.test.ts",
      "test_path": "tests/deal-mover/fe-deal.test.ts > Deal Mover (FE-DEAL) > FE-DEAL-013 — /v1/stages/scheduled endpoint reachable"
    },
    {
      "id": "FE-DEAL-014",
      "description": "/v1/stages/moved endpoint reachable",
      "status": "PASS",
      "duration_ms": 175.25268800000003,
      "file_path": "/app/runner/tests/deal-mover/fe-deal.test.ts",
      "test_path": "tests/deal-mover/fe-deal.test.ts > Deal Mover (FE-DEAL) > FE-DEAL-014 — /v1/stages/moved endpoint reachable"
    },
    {
      "id": "FE-DEAL-015",
      "description": "Redis isolation between staging and prod (smoke)",
      "status": "PASS",
      "duration_ms": 0.2849020000001019,
      "file_path": "/app/runner/tests/deal-mover/fe-deal.test.ts",
      "test_path": "tests/deal-mover/fe-deal.test.ts > Deal Mover (FE-DEAL) > FE-DEAL-015 — Redis isolation between staging and prod (smoke)"
    },
    {
      "id": "FE-DEAL-016",
      "description": "Super-admin sweeper button (smoke)",
      "status": "PASS",
      "duration_ms": 0.16081099999996695,
      "file_path": "/app/runner/tests/deal-mover/fe-deal.test.ts",
      "test_path": "tests/deal-mover/fe-deal.test.ts > Deal Mover (FE-DEAL) > FE-DEAL-016 — Super-admin sweeper button (smoke)"
    },
    {
      "id": "FE-DEAL-017",
      "description": "next_move_date NULL → deal NOT picked up (smoke)",
      "status": "PASS",
      "duration_ms": 0.19674699999995937,
      "file_path": "/app/runner/tests/deal-mover/fe-deal.test.ts",
      "test_path": "tests/deal-mover/fe-deal.test.ts > Deal Mover (FE-DEAL) > FE-DEAL-017 — next_move_date NULL → deal NOT picked up (smoke)"
    },
    {
      "id": "FE-EMAIL-IN-001",
      "description": "Reply appears in FE thread within ~30s (smoke)",
      "status": "PASS",
      "duration_ms": 5.963265000000092,
      "file_path": "/app/runner/tests/email/fe-email-in.test.ts",
      "test_path": "tests/email/fe-email-in.test.ts > Inbound Email + Sentiment (FE-EMAIL-IN) > FE-EMAIL-IN-001 — Reply appears in FE thread within ~30s (smoke)"
    },
    {
      "id": "FE-EMAIL-IN-002",
      "description": "email row has sentiment after scoring (smoke)",
      "status": "PASS",
      "duration_ms": 0.7486280000000534,
      "file_path": "/app/runner/tests/email/fe-email-in.test.ts",
      "test_path": "tests/email/fe-email-in.test.ts > Inbound Email + Sentiment (FE-EMAIL-IN) > FE-EMAIL-IN-002 — email row has sentiment after scoring (smoke)"
    },
    {
      "id": "FE-EMAIL-IN-003",
      "description": "'unsubscribe' triggers NEGATIVE heuristic + deal-loss (smoke)",
      "status": "PASS",
      "duration_ms": 0.3577980000000025,
      "file_path": "/app/runner/tests/email/fe-email-in.test.ts",
      "test_path": "tests/email/fe-email-in.test.ts > Inbound Email + Sentiment (FE-EMAIL-IN) > FE-EMAIL-IN-003 — 'unsubscribe' triggers NEGATIVE heuristic + deal-loss (smoke)"
    },
    {
      "id": "FE-EMAIL-IN-004",
      "description": "OOO autoresponder → NEUTRAL + date extraction (smoke)",
      "status": "PASS",
      "duration_ms": 0.35813899999993737,
      "file_path": "/app/runner/tests/email/fe-email-in.test.ts",
      "test_path": "tests/email/fe-email-in.test.ts > Inbound Email + Sentiment (FE-EMAIL-IN) > FE-EMAIL-IN-004 — OOO autoresponder → NEUTRAL + date extraction (smoke)"
    },
    {
      "id": "FE-EMAIL-IN-005",
      "description": "Self-reply skips sentiment (smoke)",
      "status": "PASS",
      "duration_ms": 0.35024399999997513,
      "file_path": "/app/runner/tests/email/fe-email-in.test.ts",
      "test_path": "tests/email/fe-email-in.test.ts > Inbound Email + Sentiment (FE-EMAIL-IN) > FE-EMAIL-IN-005 — Self-reply skips sentiment (smoke)"
    },
    {
      "id": "FE-EMAIL-IN-006",
      "description": "Inbound XSS subject escapes on render (smoke)",
      "status": "PASS",
      "duration_ms": 0.4388810000000376,
      "file_path": "/app/runner/tests/email/fe-email-in.test.ts",
      "test_path": "tests/email/fe-email-in.test.ts > Inbound Email + Sentiment (FE-EMAIL-IN) > FE-EMAIL-IN-006 — Inbound XSS subject escapes on render (smoke)"
    },
    {
      "id": "FE-EMAIL-IN-007",
      "description": "Bounce notification flags original send (smoke)",
      "status": "PASS",
      "duration_ms": 0.4449210000000221,
      "file_path": "/app/runner/tests/email/fe-email-in.test.ts",
      "test_path": "tests/email/fe-email-in.test.ts > Inbound Email + Sentiment (FE-EMAIL-IN) > FE-EMAIL-IN-007 — Bounce notification flags original send (smoke)"
    },
    {
      "id": "FE-EMAIL-IN-008",
      "description": "POST /v1/emails/sentiment-webhook from public internet — must return 401/403/404",
      "status": "PASS",
      "duration_ms": 330.0300340000001,
      "file_path": "/app/runner/tests/email/fe-email-in.test.ts",
      "test_path": "tests/email/fe-email-in.test.ts > Inbound Email + Sentiment (FE-EMAIL-IN) > FE-EMAIL-IN-008 — POST /v1/emails/sentiment-webhook from public internet — must return 401/403/404"
    },
    {
      "id": "FE-EMAIL-IN-009",
      "description": "Mark inbound email Read/Unread/Favourite/Archive (smoke)",
      "status": "PASS",
      "duration_ms": 3.694578999999976,
      "file_path": "/app/runner/tests/email/fe-email-in.test.ts",
      "test_path": "tests/email/fe-email-in.test.ts > Inbound Email + Sentiment (FE-EMAIL-IN) > FE-EMAIL-IN-009 — Mark inbound email Read/Unread/Favourite/Archive (smoke)"
    },
    {
      "id": "FE-EMAIL-IN-010",
      "description": "Conversation history merges sent + received chronologically (smoke)",
      "status": "PASS",
      "duration_ms": 1.3029220000000805,
      "file_path": "/app/runner/tests/email/fe-email-in.test.ts",
      "test_path": "tests/email/fe-email-in.test.ts > Inbound Email + Sentiment (FE-EMAIL-IN) > FE-EMAIL-IN-010 — Conversation history merges sent + received chronologically (smoke)"
    },
    {
      "id": "FE-EMAIL-IN-011",
      "description": "Cross-tenant email isolation (smoke)",
      "status": "PASS",
      "duration_ms": 0.29332700000009027,
      "file_path": "/app/runner/tests/email/fe-email-in.test.ts",
      "test_path": "tests/email/fe-email-in.test.ts > Inbound Email + Sentiment (FE-EMAIL-IN) > FE-EMAIL-IN-011 — Cross-tenant email isolation (smoke)"
    },
    {
      "id": "FE-EMAIL-OUT-001",
      "description": "Connect Gmail mailbox via OAuth (external-blocked) — assert URL request returns redirect URL",
      "status": "FAIL",
      "duration_ms": 60710.178931,
      "file_path": "/app/runner/tests/email/fe-email-out.test.ts",
      "test_path": "tests/email/fe-email-out.test.ts > Outbound Email (FE-EMAIL-OUT) > FE-EMAIL-OUT-001 — Connect Gmail mailbox via OAuth (external-blocked) — assert URL request returns redirect URL",
      "error": "BFF /v1/auth/login returned 429: {\"data\":{\"error\":\"too many login attempts; try again in 4m58s\",\"retry_after_seconds\":298,\"scope\":\"email\"},\"message\":\"Too many login attempts. Please wait and try again.\"}"
    },
    {
      "id": "FE-EMAIL-OUT-002",
      "description": "Connect Microsoft mailbox same flow (external-blocked)",
      "status": "FAIL",
      "duration_ms": 60282.746203,
      "file_path": "/app/runner/tests/email/fe-email-out.test.ts",
      "test_path": "tests/email/fe-email-out.test.ts > Outbound Email (FE-EMAIL-OUT) > FE-EMAIL-OUT-002 — Connect Microsoft mailbox same flow (external-blocked)",
      "error": "BFF /v1/auth/login returned 429: {\"data\":{\"error\":\"too many login attempts; try again in 3m58s\",\"retry_after_seconds\":238,\"scope\":\"email\"},\"message\":\"Too many login attempts. Please wait and try again.\"}"
    },
    {
      "id": "FE-EMAIL-OUT-003",
      "description": "Disconnect mailbox via POST /v1/user-mailboxes/:id/disconnect (smoke)",
      "status": "PASS",
      "duration_ms": 4.266596999994363,
      "file_path": "/app/runner/tests/email/fe-email-out.test.ts",
      "test_path": "tests/email/fe-email-out.test.ts > Outbound Email (FE-EMAIL-OUT) > FE-EMAIL-OUT-003 — Disconnect mailbox via POST /v1/user-mailboxes/:id/disconnect (smoke)"
    },
    {
      "id": "FE-EMAIL-OUT-004",
      "description": "Test Email (rate-limited 5/hr) endpoint exists",
      "status": "FAIL",
      "duration_ms": 60567.33516100001,
      "file_path": "/app/runner/tests/email/fe-email-out.test.ts",
      "test_path": "tests/email/fe-email-out.test.ts > Outbound Email (FE-EMAIL-OUT) > FE-EMAIL-OUT-004 — Test Email (rate-limited 5/hr) endpoint exists",
      "error": "BFF /v1/auth/login returned 429: {\"data\":{\"error\":\"too many login attempts; try again in 2m58s\",\"retry_after_seconds\":178,\"scope\":\"email\"},\"message\":\"Too many login attempts. Please wait and try again.\"}"
    },
    {
      "id": "FE-EMAIL-OUT-005",
      "description": "Test-Email button disabled when ai_personalization_enabled=false (FE check)",
      "status": "PASS",
      "duration_ms": 0.6085360000142828,
      "file_path": "/app/runner/tests/email/fe-email-out.test.ts",
      "test_path": "tests/email/fe-email-out.test.ts > Outbound Email (FE-EMAIL-OUT) > FE-EMAIL-OUT-005 — Test-Email button disabled when ai_personalization_enabled=false (FE check)"
    },
    {
      "id": "FE-EMAIL-OUT-006",
      "description": "6 test emails in 1 hour → 429",
      "status": "PASS",
      "duration_ms": 0.5615779999934603,
      "file_path": "/app/runner/tests/email/fe-email-out.test.ts",
      "test_path": "tests/email/fe-email-out.test.ts > Outbound Email (FE-EMAIL-OUT) > FE-EMAIL-OUT-006 — 6 test emails in 1 hour → 429"
    },
    {
      "id": "FE-EMAIL-OUT-007",
      "description": "Send manual email with merge tags (composer renders)",
      "status": "FAIL",
      "duration_ms": 60208.71666800001,
      "file_path": "/app/runner/tests/email/fe-email-out.test.ts",
      "test_path": "tests/email/fe-email-out.test.ts > Outbound Email (FE-EMAIL-OUT) > FE-EMAIL-OUT-007 — Send manual email with merge tags (composer renders)",
      "error": "BFF /v1/auth/login returned 429: {\"data\":{\"error\":\"too many login attempts; try again in 1m57s\",\"retry_after_seconds\":117,\"scope\":\"email\"},\"message\":\"Too many login attempts. Please wait and try again.\"}"
    },
    {
      "id": "FE-EMAIL-OUT-008",
      "description": "Manual email to deal contact creates sent_email row (smoke)",
      "status": "PASS",
      "duration_ms": 0.6186450000095647,
      "file_path": "/app/runner/tests/email/fe-email-out.test.ts",
      "test_path": "tests/email/fe-email-out.test.ts > Outbound Email (FE-EMAIL-OUT) > FE-EMAIL-OUT-008 — Manual email to deal contact creates sent_email row (smoke)"
    },
    {
      "id": "FE-EMAIL-OUT-009",
      "description": "Email signature appended to outbound (smoke)",
      "status": "PASS",
      "duration_ms": 0.38878599999588914,
      "file_path": "/app/runner/tests/email/fe-email-out.test.ts",
      "test_path": "tests/email/fe-email-out.test.ts > Outbound Email (FE-EMAIL-OUT) > FE-EMAIL-OUT-009 — Email signature appended to outbound (smoke)"
    },
    {
      "id": "FE-EMAIL-OUT-010",
      "description": "Empty subject → form validation rejects",
      "status": "FAIL",
      "duration_ms": 60176.37206999998,
      "file_path": "/app/runner/tests/email/fe-email-out.test.ts",
      "test_path": "tests/email/fe-email-out.test.ts > Outbound Email (FE-EMAIL-OUT) > FE-EMAIL-OUT-010 — Empty subject → form validation rejects",
      "error": "BFF /v1/auth/login returned 429: {\"data\":{\"error\":\"too many login attempts; try again in 57s\",\"retry_after_seconds\":57,\"scope\":\"email\"},\"message\":\"Too many login attempts. Please wait and try again.\"}"
    },
    {
      "id": "FE-EMAIL-OUT-011",
      "description": "Long body (>50 KB) handled (smoke — no 500)",
      "status": "PASS",
      "duration_ms": 0.6954590000095777,
      "file_path": "/app/runner/tests/email/fe-email-out.test.ts",
      "test_path": "tests/email/fe-email-out.test.ts > Outbound Email (FE-EMAIL-OUT) > FE-EMAIL-OUT-011 — Long body (>50 KB) handled (smoke — no 500)"
    },
    {
      "id": "FE-EMAIL-OUT-012",
      "description": "XSS in subject + body sanitised (smoke — no script execution)",
      "status": "PASS",
      "duration_ms": 0.4470649999566376,
      "file_path": "/app/runner/tests/email/fe-email-out.test.ts",
      "test_path": "tests/email/fe-email-out.test.ts > Outbound Email (FE-EMAIL-OUT) > FE-EMAIL-OUT-012 — XSS in subject + body sanitised (smoke — no script execution)"
    },
    {
      "id": "FE-EMAIL-001",
      "description": "/email-system/email lists messages or empty state",
      "status": "FAIL",
      "duration_ms": 60733.702407000004,
      "file_path": "/app/runner/tests/email/fe-email.test.ts",
      "test_path": "tests/email/fe-email.test.ts > Email System (FE-EMAIL) > FE-EMAIL-001 — /email-system/email lists messages or empty state",
      "error": "BFF /v1/auth/login returned 429: {\"data\":{\"error\":\"too many login attempts; try again in 9m33s\",\"retry_after_seconds\":573,\"scope\":\"email\"},\"message\":\"Too many login attempts. Please wait and try again.\"}"
    },
    {
      "id": "FE-EMAIL-002",
      "description": "'Mailbox not connected' empty state with Connect Mailbox CTA",
      "status": "FAIL",
      "duration_ms": 60634.410730999996,
      "file_path": "/app/runner/tests/email/fe-email.test.ts",
      "test_path": "tests/email/fe-email.test.ts > Email System (FE-EMAIL) > FE-EMAIL-002 — 'Mailbox not connected' empty state with Connect Mailbox CTA",
      "error": "BFF /v1/auth/login returned 429: {\"data\":{\"error\":\"too many login attempts; try again in 8m32s\",\"retry_after_seconds\":512,\"scope\":\"email\"},\"message\":\"Too many login attempts. Please wait and try again.\"}"
    },
    {
      "id": "FE-EMAIL-003",
      "description": "Connect Mailbox button opens OAuth flow (button presence)",
      "status": "FAIL",
      "duration_ms": 60244.962220999994,
      "file_path": "/app/runner/tests/email/fe-email.test.ts",
      "test_path": "tests/email/fe-email.test.ts > Email System (FE-EMAIL) > FE-EMAIL-003 — Connect Mailbox button opens OAuth flow (button presence)",
      "error": "BFF /v1/auth/login returned 429: {\"data\":{\"error\":\"too many login attempts; try again in 7m32s\",\"retry_after_seconds\":452,\"scope\":\"email\"},\"message\":\"Too many login attempts. Please wait and try again.\"}"
    },
    {
      "id": "FE-EMAIL-004",
      "description": "Email filters work (filter UI exists)",
      "status": "FAIL",
      "duration_ms": 60189.19443999999,
      "file_path": "/app/runner/tests/email/fe-email.test.ts",
      "test_path": "tests/email/fe-email.test.ts > Email System (FE-EMAIL) > FE-EMAIL-004 — Email filters work (filter UI exists)",
      "error": "BFF /v1/auth/login returned 429: {\"data\":{\"error\":\"too many login attempts; try again in 6m32s\",\"retry_after_seconds\":392,\"scope\":\"email\"},\"message\":\"Too many login attempts. Please wait and try again.\"}"
    },
    {
      "id": "FE-EMAIL-005",
      "description": "Search Emails input filters list",
      "status": "FAIL",
      "duration_ms": 60446.91737599997,
      "file_path": "/app/runner/tests/email/fe-email.test.ts",
      "test_path": "tests/email/fe-email.test.ts > Email System (FE-EMAIL) > FE-EMAIL-005 — Search Emails input filters list",
      "error": "BFF /v1/auth/login returned 429: {\"data\":{\"error\":\"too many login attempts; try again in 5m32s\",\"retry_after_seconds\":332,\"scope\":\"email\"},\"message\":\"Too many login attempts. Please wait and try again.\"}"
    },
    {
      "id": "FE-EMAIL-006",
      "description": "'+' button opens compose / add modal",
      "status": "FAIL",
      "duration_ms": 60176.74557900004,
      "file_path": "/app/runner/tests/email/fe-email.test.ts",
      "test_path": "tests/email/fe-email.test.ts > Email System (FE-EMAIL) > FE-EMAIL-006 — '+' button opens compose / add modal",
      "error": "BFF /v1/auth/login returned 429: {\"data\":{\"error\":\"too many login attempts; try again in 4m31s\",\"retry_after_seconds\":271,\"scope\":\"email\"},\"message\":\"Too many login attempts. Please wait and try again.\"}"
    },
    {
      "id": "FE-EMAIL-007",
      "description": "/email-system/email/add page renders without crashing",
      "status": "FAIL",
      "duration_ms": 60245.94355199998,
      "file_path": "/app/runner/tests/email/fe-email.test.ts",
      "test_path": "tests/email/fe-email.test.ts > Email System (FE-EMAIL) > FE-EMAIL-007 — /email-system/email/add page renders without crashing",
      "error": "BFF /v1/auth/login returned 429: {\"data\":{\"error\":\"too many login attempts; try again in 3m31s\",\"retry_after_seconds\":211,\"scope\":\"email\"},\"message\":\"Too many login attempts. Please wait and try again.\"}"
    },
    {
      "id": "FE-EMAIL-008",
      "description": "Compose form requires recipient + subject + body",
      "status": "FAIL",
      "duration_ms": 61071.302070999984,
      "file_path": "/app/runner/tests/email/fe-email.test.ts",
      "test_path": "tests/email/fe-email.test.ts > Email System (FE-EMAIL) > FE-EMAIL-008 — Compose form requires recipient + subject + body",
      "error": "BFF /v1/auth/login returned 429: {\"data\":{\"error\":\"too many login attempts; try again in 2m30s\",\"retry_after_seconds\":150,\"scope\":\"email\"},\"message\":\"Too many login attempts. Please wait and try again.\"}"
    },
    {
      "id": "FE-EMAIL-009",
      "description": "Send email triggers BFF call (network observation)",
      "status": "PASS",
      "duration_ms": 1.9923499999567866,
      "file_path": "/app/runner/tests/email/fe-email.test.ts",
      "test_path": "tests/email/fe-email.test.ts > Email System (FE-EMAIL) > FE-EMAIL-009 — Send email triggers BFF call (network observation)"
    },
    {
      "id": "FE-EMAIL-010",
      "description": "/email-system/email/[id] shows email detail (route accessible)",
      "status": "FAIL",
      "duration_ms": 60237.98257999995,
      "file_path": "/app/runner/tests/email/fe-email.test.ts",
      "test_path": "tests/email/fe-email.test.ts > Email System (FE-EMAIL) > FE-EMAIL-010 — /email-system/email/[id] shows email detail (route accessible)",
      "error": "BFF /v1/auth/login returned 429: {\"data\":{\"error\":\"too many login attempts; try again in 1m30s\",\"retry_after_seconds\":90,\"scope\":\"email\"},\"message\":\"Too many login attempts. Please wait and try again.\"}"
    },
    {
      "id": "FE-EMAIL-011",
      "description": "Email categories sidebar navigates",
      "status": "FAIL",
      "duration_ms": 60764.63252600003,
      "file_path": "/app/runner/tests/email/fe-email.test.ts",
      "test_path": "tests/email/fe-email.test.ts > Email System (FE-EMAIL) > FE-EMAIL-011 — Email categories sidebar navigates",
      "error": "BFF /v1/auth/login returned 429: {\"data\":{\"error\":\"too many login attempts; try again in 29s\",\"retry_after_seconds\":29,\"scope\":\"email\"},\"message\":\"Too many login attempts. Please wait and try again.\"}"
    },
    {
      "id": "FE-EMAIL-012",
      "description": "Pagination at top right (X of Y) updates with results",
      "status": "PASS",
      "duration_ms": 1.324443000019528,
      "file_path": "/app/runner/tests/email/fe-email.test.ts",
      "test_path": "tests/email/fe-email.test.ts > Email System (FE-EMAIL) > FE-EMAIL-012 — Pagination at top right (X of Y) updates with results"
    },
    {
      "id": "FE-CAMP-001",
      "description": "/automation-campaign lists campaigns or shows empty state",
      "status": "SKIP",
      "duration_ms": 0,
      "file_path": "/app/runner/tests/campaign/fe-camp.test.ts",
      "test_path": "tests/campaign/fe-camp.test.ts > Campaign Builder (FE-CAMP) > FE-CAMP-001 — /automation-campaign lists campaigns or shows empty state"
    },
    {
      "id": "FE-CAMP-002",
      "description": "Tabs Active / Inactive / All switch correctly",
      "status": "SKIP",
      "duration_ms": 0,
      "file_path": "/app/runner/tests/campaign/fe-camp.test.ts",
      "test_path": "tests/campaign/fe-camp.test.ts > Campaign Builder (FE-CAMP) > FE-CAMP-002 — Tabs Active / Inactive / All switch correctly"
    },
    {
      "id": "FE-CAMP-003",
      "description": "Search Campaigns input filters list",
      "status": "SKIP",
      "duration_ms": 0,
      "file_path": "/app/runner/tests/campaign/fe-camp.test.ts",
      "test_path": "tests/campaign/fe-camp.test.ts > Campaign Builder (FE-CAMP) > FE-CAMP-003 — Search Campaigns input filters list"
    },
    {
      "id": "FE-CAMP-004",
      "description": "Pagination Next/Prev (where present) is sane",
      "status": "SKIP",
      "duration_ms": 0,
      "file_path": "/app/runner/tests/campaign/fe-camp.test.ts",
      "test_path": "tests/campaign/fe-camp.test.ts > Campaign Builder (FE-CAMP) > FE-CAMP-004 — Pagination Next/Prev (where present) is sane"
    },
    {
      "id": "FE-CAMP-005",
      "description": "PULSE / SWARM tabs at top (SWARM dev-only on staging)",
      "status": "SKIP",
      "duration_ms": 0,
      "file_path": "/app/runner/tests/campaign/fe-camp.test.ts",
      "test_path": "tests/campaign/fe-camp.test.ts > Campaign Builder (FE-CAMP) > FE-CAMP-005 — PULSE / SWARM tabs at top (SWARM dev-only on staging)"
    },
    {
      "id": "FE-CAMP-006",
      "description": "/automation-campaign/create renders builder",
      "status": "SKIP",
      "duration_ms": 0,
      "file_path": "/app/runner/tests/campaign/fe-camp.test.ts",
      "test_path": "tests/campaign/fe-camp.test.ts > Campaign Builder (FE-CAMP) > FE-CAMP-006 — /automation-campaign/create renders builder"
    },
    {
      "id": "FE-CAMP-007",
      "description": "Builder header shows 'Untitled' (FE-BUG-08 fix — not literal 'undefined')",
      "status": "SKIP",
      "duration_ms": 0,
      "file_path": "/app/runner/tests/campaign/fe-camp.test.ts",
      "test_path": "tests/campaign/fe-camp.test.ts > Campaign Builder (FE-CAMP) > FE-CAMP-007 — Builder header shows 'Untitled' (FE-BUG-08 fix — not literal 'undefined')"
    },
    {
      "id": "FE-CAMP-008",
      "description": "Builder canvas shows 'Add Stage +' button",
      "status": "SKIP",
      "duration_ms": 0,
      "file_path": "/app/runner/tests/campaign/fe-camp.test.ts",
      "test_path": "tests/campaign/fe-camp.test.ts > Campaign Builder (FE-CAMP) > FE-CAMP-008 — Builder canvas shows 'Add Stage +' button"
    },
    {
      "id": "FE-CAMP-009",
      "description": "Click Add Stage opens stage type modal",
      "status": "SKIP",
      "duration_ms": 0,
      "file_path": "/app/runner/tests/campaign/fe-camp.test.ts",
      "test_path": "tests/campaign/fe-camp.test.ts > Campaign Builder (FE-CAMP) > FE-CAMP-009 — Click Add Stage opens stage type modal"
    },
    {
      "id": "FE-CAMP-010",
      "description": "Stage settings modal validates required fields (sanity check)",
      "status": "SKIP",
      "duration_ms": 0,
      "file_path": "/app/runner/tests/campaign/fe-camp.test.ts",
      "test_path": "tests/campaign/fe-camp.test.ts > Campaign Builder (FE-CAMP) > FE-CAMP-010 — Stage settings modal validates required fields (sanity check)"
    },
    {
      "id": "FE-CAMP-011",
      "description": "Builder name area exists (route smoke)",
      "status": "SKIP",
      "duration_ms": 0,
      "file_path": "/app/runner/tests/campaign/fe-camp.test.ts",
      "test_path": "tests/campaign/fe-camp.test.ts > Campaign Builder (FE-CAMP) > FE-CAMP-011 — Builder name area exists (route smoke)"
    },
    {
      "id": "FE-CAMP-012",
      "description": "Save Campaign with no stages → friendly error or warning",
      "status": "SKIP",
      "duration_ms": 0,
      "file_path": "/app/runner/tests/campaign/fe-camp.test.ts",
      "test_path": "tests/campaign/fe-camp.test.ts > Campaign Builder (FE-CAMP) > FE-CAMP-012 — Save Campaign with no stages → friendly error or warning"
    },
    {
      "id": "FE-CAMP-013",
      "description": "Active toggle persists after save (visual presence)",
      "status": "SKIP",
      "duration_ms": 0,
      "file_path": "/app/runner/tests/campaign/fe-camp.test.ts",
      "test_path": "tests/campaign/fe-camp.test.ts > Campaign Builder (FE-CAMP) > FE-CAMP-013 — Active toggle persists after save (visual presence)"
    },
    {
      "id": "FE-CAMP-014",
      "description": "Click 'Import campaign from CRM' opens import modal",
      "status": "SKIP",
      "duration_ms": 0,
      "file_path": "/app/runner/tests/campaign/fe-camp.test.ts",
      "test_path": "tests/campaign/fe-camp.test.ts > Campaign Builder (FE-CAMP) > FE-CAMP-014 — Click 'Import campaign from CRM' opens import modal"
    },
    {
      "id": "FE-CAMP-015",
      "description": "Import campaign validates CRM connection state (smoke)",
      "status": "SKIP",
      "duration_ms": 0,
      "file_path": "/app/runner/tests/campaign/fe-camp.test.ts",
      "test_path": "tests/campaign/fe-camp.test.ts > Campaign Builder (FE-CAMP) > FE-CAMP-015 — Import campaign validates CRM connection state (smoke)"
    },
    {
      "id": "FE-CAMP-016",
      "description": "/automation-campaign/[id] for non-existent ID → 404 or friendly error",
      "status": "SKIP",
      "duration_ms": 0,
      "file_path": "/app/runner/tests/campaign/fe-camp.test.ts",
      "test_path": "tests/campaign/fe-camp.test.ts > Campaign Builder (FE-CAMP) > FE-CAMP-016 — /automation-campaign/[id] for non-existent ID → 404 or friendly error"
    },
    {
      "id": "FE-CAMP-017",
      "description": "/automation-campaign/[id]/deals lists campaign deals",
      "status": "SKIP",
      "duration_ms": 0,
      "file_path": "/app/runner/tests/campaign/fe-camp.test.ts",
      "test_path": "tests/campaign/fe-camp.test.ts > Campaign Builder (FE-CAMP) > FE-CAMP-017 — /automation-campaign/[id]/deals lists campaign deals"
    },
    {
      "id": "FE-CAMP-018",
      "description": "Deals table renders without crashing (smoke)",
      "status": "SKIP",
      "duration_ms": 0,
      "file_path": "/app/runner/tests/campaign/fe-camp.test.ts",
      "test_path": "tests/campaign/fe-camp.test.ts > Campaign Builder (FE-CAMP) > FE-CAMP-018 — Deals table renders without crashing (smoke)"
    },
    {
      "id": "FE-CAMP-019",
      "description": "Pull CRM State button triggers sync (button present)",
      "status": "SKIP",
      "duration_ms": 0,
      "file_path": "/app/runner/tests/campaign/fe-camp.test.ts",
      "test_path": "tests/campaign/fe-camp.test.ts > Campaign Builder (FE-CAMP) > FE-CAMP-019 — Pull CRM State button triggers sync (button present)"
    },
    {
      "id": "FE-CAMP-020",
      "description": "Stage drag-and-drop reorders without crashes (page renders)",
      "status": "SKIP",
      "duration_ms": 0,
      "file_path": "/app/runner/tests/campaign/fe-camp.test.ts",
      "test_path": "tests/campaign/fe-camp.test.ts > Campaign Builder (FE-CAMP) > FE-CAMP-020 — Stage drag-and-drop reorders without crashes (page renders)"
    },
    {
      "id": "FE-DEAL-SEARCH-001",
      "description": "Type email into Search Deals input → table filters by email",
      "status": "FAIL",
      "duration_ms": 60478.772274999996,
      "file_path": "/app/runner/tests/campaign/fe-deal-search.test.ts",
      "test_path": "tests/campaign/fe-deal-search.test.ts > Deal Search regression (FE-DEAL-SEARCH) > FE-DEAL-SEARCH-001 — Type email into Search Deals input → table filters by email",
      "error": "BFF /v1/auth/login returned 429: {\"data\":{\"error\":\"too many login attempts; try again in 4m44s\",\"retry_after_seconds\":284,\"scope\":\"email\"},\"message\":\"Too many login attempts. Please wait and try again.\"}"
    },
    {
      "id": "FE-DEAL-SEARCH-002",
      "description": "Type partial first name → filter applies",
      "status": "FAIL",
      "duration_ms": 60339.01618,
      "file_path": "/app/runner/tests/campaign/fe-deal-search.test.ts",
      "test_path": "tests/campaign/fe-deal-search.test.ts > Deal Search regression (FE-DEAL-SEARCH) > FE-DEAL-SEARCH-002 — Type partial first name → filter applies",
      "error": "BFF /v1/auth/login returned 429: {\"data\":{\"error\":\"too many login attempts; try again in 3m44s\",\"retry_after_seconds\":224,\"scope\":\"email\"},\"message\":\"Too many login attempts. Please wait and try again.\"}"
    },
    {
      "id": "FE-DEAL-SEARCH-003",
      "description": "Press Enter in search submits without page reload",
      "status": "FAIL",
      "duration_ms": 60476.584512000016,
      "file_path": "/app/runner/tests/campaign/fe-deal-search.test.ts",
      "test_path": "tests/campaign/fe-deal-search.test.ts > Deal Search regression (FE-DEAL-SEARCH) > FE-DEAL-SEARCH-003 — Press Enter in search submits without page reload",
      "error": "BFF /v1/auth/login returned 429: {\"data\":{\"error\":\"too many login attempts; try again in 2m44s\",\"retry_after_seconds\":164,\"scope\":\"email\"},\"message\":\"Too many login attempts. Please wait and try again.\"}"
    },
    {
      "id": "FE-DEAL-SEARCH-004",
      "description": "Clear input → full deal list returns",
      "status": "FAIL",
      "duration_ms": 60370.00157699999,
      "file_path": "/app/runner/tests/campaign/fe-deal-search.test.ts",
      "test_path": "tests/campaign/fe-deal-search.test.ts > Deal Search regression (FE-DEAL-SEARCH) > FE-DEAL-SEARCH-004 — Clear input → full deal list returns",
      "error": "BFF /v1/auth/login returned 429: {\"data\":{\"error\":\"too many login attempts; try again in 1m43s\",\"retry_after_seconds\":103,\"scope\":\"email\"},\"message\":\"Too many login attempts. Please wait and try again.\"}"
    },
    {
      "id": "FE-DEAL-SEARCH-005",
      "description": "Search persists across pagination",
      "status": "PASS",
      "duration_ms": 2.530213999998523,
      "file_path": "/app/runner/tests/campaign/fe-deal-search.test.ts",
      "test_path": "tests/campaign/fe-deal-search.test.ts > Deal Search regression (FE-DEAL-SEARCH) > FE-DEAL-SEARCH-005 — Search persists across pagination"
    },
    {
      "id": "FE-DEAL-SEARCH-006",
      "description": "Include lost deals toggle ON/OFF persists",
      "status": "FAIL",
      "duration_ms": 60390.964791000006,
      "file_path": "/app/runner/tests/campaign/fe-deal-search.test.ts",
      "test_path": "tests/campaign/fe-deal-search.test.ts > Deal Search regression (FE-DEAL-SEARCH) > FE-DEAL-SEARCH-006 — Include lost deals toggle ON/OFF persists",
      "error": "BFF /v1/auth/login returned 429: {\"data\":{\"error\":\"too many login attempts; try again in 43s\",\"retry_after_seconds\":43,\"scope\":\"email\"},\"message\":\"Too many login attempts. Please wait and try again.\"}"
    },
    {
      "id": "FE-LAY-001",
      "description": "Sidebar visible on every authenticated dashboard page",
      "status": "FAIL",
      "duration_ms": 61218.901192000005,
      "file_path": "/app/runner/tests/layout/fe-layout-cross.test.ts",
      "test_path": "tests/layout/fe-layout-cross.test.ts > Layout / Shell (FE-LAY) > FE-LAY-001 — Sidebar visible on every authenticated dashboard page",
      "error": "BFF /v1/auth/login returned 429: {\"data\":{\"error\":\"too many login attempts; try again in 10m4s\",\"retry_after_seconds\":604,\"scope\":\"email\"},\"message\":\"Too many login attempts. Please wait and try again.\"}"
    },
    {
      "id": "FE-LAY-002",
      "description": "Sidebar shows Dashboard / Campaign / Phone / Email / Settings (smoke)",
      "status": "FAIL",
      "duration_ms": 60360.881545,
      "file_path": "/app/runner/tests/layout/fe-layout-cross.test.ts",
      "test_path": "tests/layout/fe-layout-cross.test.ts > Layout / Shell (FE-LAY) > FE-LAY-002 — Sidebar shows Dashboard / Campaign / Phone / Email / Settings (smoke)",
      "error": "BFF /v1/auth/login returned 429: {\"data\":{\"error\":\"too many login attempts; try again in 9m4s\",\"retry_after_seconds\":544,\"scope\":\"email\"},\"message\":\"Too many login attempts. Please wait and try again.\"}"
    },
    {
      "id": "FE-LAY-003",
      "description": "Header shows credit balance, notification bell, sign out",
      "status": "FAIL",
      "duration_ms": 61020.819006000005,
      "file_path": "/app/runner/tests/layout/fe-layout-cross.test.ts",
      "test_path": "tests/layout/fe-layout-cross.test.ts > Layout / Shell (FE-LAY) > FE-LAY-003 — Header shows credit balance, notification bell, sign out",
      "error": "BFF /v1/auth/login returned 429: {\"data\":{\"error\":\"too many login attempts; try again in 8m3s\",\"retry_after_seconds\":483,\"scope\":\"email\"},\"message\":\"Too many login attempts. Please wait and try again.\"}"
    },
    {
      "id": "FE-LAY-004",
      "description": "Active sidebar item highlighted in primary color (smoke)",
      "status": "PASS",
      "duration_ms": 4.683094000007259,
      "file_path": "/app/runner/tests/layout/fe-layout-cross.test.ts",
      "test_path": "tests/layout/fe-layout-cross.test.ts > Layout / Shell (FE-LAY) > FE-LAY-004 — Active sidebar item highlighted in primary color (smoke)"
    },
    {
      "id": "FE-LAY-005",
      "description": "Click sidebar item navigates without full page reload (smoke)",
      "status": "PASS",
      "duration_ms": 0.47002700000302866,
      "file_path": "/app/runner/tests/layout/fe-layout-cross.test.ts",
      "test_path": "tests/layout/fe-layout-cross.test.ts > Layout / Shell (FE-LAY) > FE-LAY-005 — Click sidebar item navigates without full page reload (smoke)"
    },
    {
      "id": "FE-LAY-006",
      "description": "Mobile nav (<768px) collapses sidebar to hamburger (smoke)",
      "status": "PASS",
      "duration_ms": 0.5582620000059251,
      "file_path": "/app/runner/tests/layout/fe-layout-cross.test.ts",
      "test_path": "tests/layout/fe-layout-cross.test.ts > Layout / Shell (FE-LAY) > FE-LAY-006 — Mobile nav (<768px) collapses sidebar to hamburger (smoke)"
    },
    {
      "id": "FE-LAY-007",
      "description": "Layout no CLS when notifications appear/dismiss (smoke)",
      "status": "PASS",
      "duration_ms": 1.1823370000056457,
      "file_path": "/app/runner/tests/layout/fe-layout-cross.test.ts",
      "test_path": "tests/layout/fe-layout-cross.test.ts > Layout / Shell (FE-LAY) > FE-LAY-007 — Layout no CLS when notifications appear/dismiss (smoke)"
    },
    {
      "id": "FE-LAY-008",
      "description": "Layout no CLS when modals open/close (smoke)",
      "status": "PASS",
      "duration_ms": 0.3071730000083335,
      "file_path": "/app/runner/tests/layout/fe-layout-cross.test.ts",
      "test_path": "tests/layout/fe-layout-cross.test.ts > Layout / Shell (FE-LAY) > FE-LAY-008 — Layout no CLS when modals open/close (smoke)"
    },
    {
      "id": "FE-CROSS-001",
      "description": "All staging API calls go to *.test.revhero.io (FE-BUG-002 regression)",
      "status": "FAIL",
      "duration_ms": 60479.93298000001,
      "file_path": "/app/runner/tests/layout/fe-layout-cross.test.ts",
      "test_path": "tests/layout/fe-layout-cross.test.ts > Cross-cutting (FE-CROSS) > FE-CROSS-001 — All staging API calls go to *.test.revhero.io (FE-BUG-002 regression)",
      "error": "BFF /v1/auth/login returned 429: {\"data\":{\"error\":\"too many login attempts; try again in 7m2s\",\"retry_after_seconds\":422,\"scope\":\"email\"},\"message\":\"Too many login attempts. Please wait and try again.\"}"
    },
    {
      "id": "FE-CROSS-002",
      "description": "Cloud-document uploads go to staging cloud-documents (smoke)",
      "status": "PASS",
      "duration_ms": 1.8442639999848325,
      "file_path": "/app/runner/tests/layout/fe-layout-cross.test.ts",
      "test_path": "tests/layout/fe-layout-cross.test.ts > Cross-cutting (FE-CROSS) > FE-CROSS-002 — Cloud-document uploads go to staging cloud-documents (smoke)"
    },
    {
      "id": "FE-CROSS-003",
      "description": "Dev-only routes accessible on staging (proxy.ts hostname check)",
      "status": "FAIL",
      "duration_ms": 60361.34250800003,
      "file_path": "/app/runner/tests/layout/fe-layout-cross.test.ts",
      "test_path": "tests/layout/fe-layout-cross.test.ts > Cross-cutting (FE-CROSS) > FE-CROSS-003 — Dev-only routes accessible on staging (proxy.ts hostname check)",
      "error": "BFF /v1/auth/login returned 429: {\"data\":{\"error\":\"too many login attempts; try again in 6m2s\",\"retry_after_seconds\":362,\"scope\":\"email\"},\"message\":\"Too many login attempts. Please wait and try again.\"}"
    },
    {
      "id": "FE-CROSS-004",
      "description": "Same routes redirect to /automation-campaign on prod (skip on staging)",
      "status": "PASS",
      "duration_ms": 2.407695000001695,
      "file_path": "/app/runner/tests/layout/fe-layout-cross.test.ts",
      "test_path": "tests/layout/fe-layout-cross.test.ts > Cross-cutting (FE-CROSS) > FE-CROSS-004 — Same routes redirect to /automation-campaign on prod (skip on staging)"
    },
    {
      "id": "FE-CROSS-005",
      "description": "Free Plan signup completes without payment form (FE-BUG-001 regression)",
      "status": "PASS",
      "duration_ms": 0.34419199998956174,
      "file_path": "/app/runner/tests/layout/fe-layout-cross.test.ts",
      "test_path": "tests/layout/fe-layout-cross.test.ts > Cross-cutting (FE-CROSS) > FE-CROSS-005 — Free Plan signup completes without payment form (FE-BUG-001 regression)"
    },
    {
      "id": "FE-CROSS-006",
      "description": "Plan-feature labels render numbers with thousands separators (smoke)",
      "status": "PASS",
      "duration_ms": 0.21067299996502697,
      "file_path": "/app/runner/tests/layout/fe-layout-cross.test.ts",
      "test_path": "tests/layout/fe-layout-cross.test.ts > Cross-cutting (FE-CROSS) > FE-CROSS-006 — Plan-feature labels render numbers with thousands separators (smoke)"
    },
    {
      "id": "FE-CROSS-007",
      "description": "Settings right-rail items don't truncate (smoke)",
      "status": "PASS",
      "duration_ms": 0.2173550000297837,
      "file_path": "/app/runner/tests/layout/fe-layout-cross.test.ts",
      "test_path": "tests/layout/fe-layout-cross.test.ts > Cross-cutting (FE-CROSS) > FE-CROSS-007 — Settings right-rail items don't truncate (smoke)"
    },
    {
      "id": "FE-CROSS-008",
      "description": "Currency values show 2 decimals consistently (smoke)",
      "status": "PASS",
      "duration_ms": 0.2599449999979697,
      "file_path": "/app/runner/tests/layout/fe-layout-cross.test.ts",
      "test_path": "tests/layout/fe-layout-cross.test.ts > Cross-cutting (FE-CROSS) > FE-CROSS-008 — Currency values show 2 decimals consistently (smoke)"
    },
    {
      "id": "FE-CROSS-009",
      "description": "Campaign create header shows 'Untitled campaign' (FE-BUG-08 regression)",
      "status": "PASS",
      "duration_ms": 0.23865500005194917,
      "file_path": "/app/runner/tests/layout/fe-layout-cross.test.ts",
      "test_path": "tests/layout/fe-layout-cross.test.ts > Cross-cutting (FE-CROSS) > FE-CROSS-009 — Campaign create header shows 'Untitled campaign' (FE-BUG-08 regression)"
    },
    {
      "id": "FE-CROSS-010",
      "description": "Phone /sms doesn't get stuck on skeleton (FE-BUG-04 regression)",
      "status": "PASS",
      "duration_ms": 0.3001800000201911,
      "file_path": "/app/runner/tests/layout/fe-layout-cross.test.ts",
      "test_path": "tests/layout/fe-layout-cross.test.ts > Cross-cutting (FE-CROSS) > FE-CROSS-010 — Phone /sms doesn't get stuck on skeleton (FE-BUG-04 regression)"
    },
    {
      "id": "FE-NOTIF-001",
      "description": "/notifications renders list with All / Read / Unread tabs",
      "status": "FAIL",
      "duration_ms": 60851.488429,
      "file_path": "/app/runner/tests/notifications/fe-notifications.test.ts",
      "test_path": "tests/notifications/fe-notifications.test.ts > Notifications + Help (FE-NOTIF / FE-HELP) > FE-NOTIF-001 — /notifications renders list with All / Read / Unread tabs",
      "error": "BFF /v1/auth/login returned 429: {\"data\":{\"error\":\"too many login attempts; try again in 2m57s\",\"retry_after_seconds\":177,\"scope\":\"email\"},\"message\":\"Too many login attempts. Please wait and try again.\"}"
    },
    {
      "id": "FE-NOTIF-002",
      "description": "Tabs filter notifications",
      "status": "PASS",
      "duration_ms": 2.254861000001256,
      "file_path": "/app/runner/tests/notifications/fe-notifications.test.ts",
      "test_path": "tests/notifications/fe-notifications.test.ts > Notifications + Help (FE-NOTIF / FE-HELP) > FE-NOTIF-002 — Tabs filter notifications"
    },
    {
      "id": "FE-NOTIF-003",
      "description": "Sub-tabs Email/SMS/LinkedIn/System filter by type",
      "status": "PASS",
      "duration_ms": 0.41238999999768566,
      "file_path": "/app/runner/tests/notifications/fe-notifications.test.ts",
      "test_path": "tests/notifications/fe-notifications.test.ts > Notifications + Help (FE-NOTIF / FE-HELP) > FE-NOTIF-003 — Sub-tabs Email/SMS/LinkedIn/System filter by type"
    },
    {
      "id": "FE-NOTIF-004",
      "description": "Mark all as read clears unread",
      "status": "PASS",
      "duration_ms": 0.49548499999946216,
      "file_path": "/app/runner/tests/notifications/fe-notifications.test.ts",
      "test_path": "tests/notifications/fe-notifications.test.ts > Notifications + Help (FE-NOTIF / FE-HELP) > FE-NOTIF-004 — Mark all as read clears unread"
    },
    {
      "id": "FE-NOTIF-005",
      "description": "Per-row 'Mark as Read' updates row (smoke)",
      "status": "PASS",
      "duration_ms": 0.3501940000060131,
      "file_path": "/app/runner/tests/notifications/fe-notifications.test.ts",
      "test_path": "tests/notifications/fe-notifications.test.ts > Notifications + Help (FE-NOTIF / FE-HELP) > FE-NOTIF-005 — Per-row 'Mark as Read' updates row (smoke)"
    },
    {
      "id": "FE-NOTIF-006",
      "description": "Notifications scoped to current account_id (smoke)",
      "status": "PASS",
      "duration_ms": 0.5152219999945373,
      "file_path": "/app/runner/tests/notifications/fe-notifications.test.ts",
      "test_path": "tests/notifications/fe-notifications.test.ts > Notifications + Help (FE-NOTIF / FE-HELP) > FE-NOTIF-006 — Notifications scoped to current account_id (smoke)"
    },
    {
      "id": "FE-NOTIF-007",
      "description": "Bell icon shows unread badge (smoke)",
      "status": "PASS",
      "duration_ms": 0.3306369999991148,
      "file_path": "/app/runner/tests/notifications/fe-notifications.test.ts",
      "test_path": "tests/notifications/fe-notifications.test.ts > Notifications + Help (FE-NOTIF / FE-HELP) > FE-NOTIF-007 — Bell icon shows unread badge (smoke)"
    },
    {
      "id": "FE-NOTIF-008",
      "description": "Relative timestamps update (smoke)",
      "status": "PASS",
      "duration_ms": 0.2934380000006058,
      "file_path": "/app/runner/tests/notifications/fe-notifications.test.ts",
      "test_path": "tests/notifications/fe-notifications.test.ts > Notifications + Help (FE-NOTIF / FE-HELP) > FE-NOTIF-008 — Relative timestamps update (smoke)"
    },
    {
      "id": "FE-HELP-001",
      "description": "/help renders FAQ section (dev-only on staging)",
      "status": "FAIL",
      "duration_ms": 60160.908458000005,
      "file_path": "/app/runner/tests/notifications/fe-notifications.test.ts",
      "test_path": "tests/notifications/fe-notifications.test.ts > Notifications + Help (FE-NOTIF / FE-HELP) > FE-HELP-001 — /help renders FAQ section (dev-only on staging)",
      "error": "BFF /v1/auth/login returned 429: {\"data\":{\"error\":\"too many login attempts; try again in 1m57s\",\"retry_after_seconds\":117,\"scope\":\"email\"},\"message\":\"Too many login attempts. Please wait and try again.\"}"
    },
    {
      "id": "FE-HELP-002",
      "description": "Search articles input filters FAQ",
      "status": "PASS",
      "duration_ms": 0.7104160000017146,
      "file_path": "/app/runner/tests/notifications/fe-notifications.test.ts",
      "test_path": "tests/notifications/fe-notifications.test.ts > Notifications + Help (FE-NOTIF / FE-HELP) > FE-HELP-002 — Search articles input filters FAQ"
    },
    {
      "id": "FE-HELP-003",
      "description": "Help category cards render",
      "status": "PASS",
      "duration_ms": 0.34048499999335036,
      "file_path": "/app/runner/tests/notifications/fe-notifications.test.ts",
      "test_path": "tests/notifications/fe-notifications.test.ts > Notifications + Help (FE-NOTIF / FE-HELP) > FE-HELP-003 — Help category cards render"
    },
    {
      "id": "FE-HELP-004",
      "description": "Contact Support button opens email/chat",
      "status": "PASS",
      "duration_ms": 0.25792200000432786,
      "file_path": "/app/runner/tests/notifications/fe-notifications.test.ts",
      "test_path": "tests/notifications/fe-notifications.test.ts > Notifications + Help (FE-NOTIF / FE-HELP) > FE-HELP-004 — Contact Support button opens email/chat"
    },
    {
      "id": "FE-HELP-005",
      "description": "/getting-started checklist progress bar updates",
      "status": "FAIL",
      "duration_ms": 60379.62480799999,
      "file_path": "/app/runner/tests/notifications/fe-notifications.test.ts",
      "test_path": "tests/notifications/fe-notifications.test.ts > Notifications + Help (FE-NOTIF / FE-HELP) > FE-HELP-005 — /getting-started checklist progress bar updates",
      "error": "BFF /v1/auth/login returned 429: {\"data\":{\"error\":\"too many login attempts; try again in 57s\",\"retry_after_seconds\":57,\"scope\":\"email\"},\"message\":\"Too many login attempts. Please wait and try again.\"}"
    },
    {
      "id": "FE-HELP-006",
      "description": "Watch Video opens modal",
      "status": "PASS",
      "duration_ms": 1.2709630000172183,
      "file_path": "/app/runner/tests/notifications/fe-notifications.test.ts",
      "test_path": "tests/notifications/fe-notifications.test.ts > Notifications + Help (FE-NOTIF / FE-HELP) > FE-HELP-006 — Watch Video opens modal"
    },
    {
      "id": "FE-HELP-007",
      "description": "Add Signature redirects to email signature settings",
      "status": "PASS",
      "duration_ms": 0.2261630000139121,
      "file_path": "/app/runner/tests/notifications/fe-notifications.test.ts",
      "test_path": "tests/notifications/fe-notifications.test.ts > Notifications + Help (FE-NOTIF / FE-HELP) > FE-HELP-007 — Add Signature redirects to email signature settings"
    },
    {
      "id": "FE-HELP-008",
      "description": "Start Guided Walkthrough triggers tour",
      "status": "PASS",
      "duration_ms": 0.2002830000128597,
      "file_path": "/app/runner/tests/notifications/fe-notifications.test.ts",
      "test_path": "tests/notifications/fe-notifications.test.ts > Notifications + Help (FE-NOTIF / FE-HELP) > FE-HELP-008 — Start Guided Walkthrough triggers tour"
    },
    {
      "id": "UNKNOWN-8j1wpx",
      "description": "WEBHOOK-AUTH-001 — email-ingress sentiment-webhook rejects without auth",
      "status": "PASS",
      "duration_ms": 119.25229200000001,
      "file_path": "/app/runner/tests/security/fe-webhook-auth.test.ts",
      "test_path": "tests/security/fe-webhook-auth.test.ts > Internal-services webhook auth (cross-service) > WEBHOOK-AUTH-001 — email-ingress sentiment-webhook rejects without auth"
    },
    {
      "id": "UNKNOWN-dowjgh",
      "description": "WEBHOOK-AUTH-002 — sms-service sentiment-webhook rejects without auth",
      "status": "PASS",
      "duration_ms": 57.29734700000006,
      "file_path": "/app/runner/tests/security/fe-webhook-auth.test.ts",
      "test_path": "tests/security/fe-webhook-auth.test.ts > Internal-services webhook auth (cross-service) > WEBHOOK-AUTH-002 — sms-service sentiment-webhook rejects without auth"
    },
    {
      "id": "UNKNOWN-z228x5",
      "description": "WEBHOOK-AUTH-003 — deal-mover sweeper rejects without auth",
      "status": "PASS",
      "duration_ms": 100.88907399999994,
      "file_path": "/app/runner/tests/security/fe-webhook-auth.test.ts",
      "test_path": "tests/security/fe-webhook-auth.test.ts > Internal-services webhook auth (cross-service) > WEBHOOK-AUTH-003 — deal-mover sweeper rejects without auth"
    },
    {
      "id": "FE-SET-G-001",
      "description": "/settings/general renders Billing section by default",
      "status": "FAIL",
      "duration_ms": 61449.192729,
      "file_path": "/app/runner/tests/settings/fe-settings.test.ts",
      "test_path": "tests/settings/fe-settings.test.ts > Settings — General (FE-SET-G) > FE-SET-G-001 — /settings/general renders Billing section by default",
      "error": "BFF /v1/auth/login returned 429: {\"data\":{\"error\":\"too many login attempts; try again in 10m4s\",\"retry_after_seconds\":604,\"scope\":\"email\"},\"message\":\"Too many login attempts. Please wait and try again.\"}"
    },
    {
      "id": "FE-SET-G-002",
      "description": "Right sidebar nav items show full text (fe-ui-01 regression)",
      "status": "FAIL",
      "duration_ms": 61039.297593999996,
      "file_path": "/app/runner/tests/settings/fe-settings.test.ts",
      "test_path": "tests/settings/fe-settings.test.ts > Settings — General (FE-SET-G) > FE-SET-G-002 — Right sidebar nav items show full text (fe-ui-01 regression)",
      "error": "BFF /v1/auth/login returned 429: {\"data\":{\"error\":\"too many login attempts; try again in 9m3s\",\"retry_after_seconds\":543,\"scope\":\"email\"},\"message\":\"Too many login attempts. Please wait and try again.\"}"
    },
    {
      "id": "FE-SET-G-003",
      "description": "Right sidebar nav items list (smoke)",
      "status": "PASS",
      "duration_ms": 2.793846000000485,
      "file_path": "/app/runner/tests/settings/fe-settings.test.ts",
      "test_path": "tests/settings/fe-settings.test.ts > Settings — General (FE-SET-G) > FE-SET-G-003 — Right sidebar nav items list (smoke)"
    },
    {
      "id": "FE-SET-G-004",
      "description": "Switching nav items updates panel without reload (smoke)",
      "status": "PASS",
      "duration_ms": 0.32240200000524055,
      "file_path": "/app/runner/tests/settings/fe-settings.test.ts",
      "test_path": "tests/settings/fe-settings.test.ts > Settings — General (FE-SET-G) > FE-SET-G-004 — Switching nav items updates panel without reload (smoke)"
    },
    {
      "id": "FE-SET-G-005",
      "description": "Current Plan card shows plan name + price (smoke)",
      "status": "PASS",
      "duration_ms": 0.6028460000088671,
      "file_path": "/app/runner/tests/settings/fe-settings.test.ts",
      "test_path": "tests/settings/fe-settings.test.ts > Settings — General (FE-SET-G) > FE-SET-G-005 — Current Plan card shows plan name + price (smoke)"
    },
    {
      "id": "FE-SET-G-006",
      "description": "Plan features show numbers with thousands separators (fe-ui-02 regression)",
      "status": "FAIL",
      "duration_ms": 60536.105043999996,
      "file_path": "/app/runner/tests/settings/fe-settings.test.ts",
      "test_path": "tests/settings/fe-settings.test.ts > Settings — General (FE-SET-G) > FE-SET-G-006 — Plan features show numbers with thousands separators (fe-ui-02 regression)",
      "error": "BFF /v1/auth/login returned 429: {\"data\":{\"error\":\"too many login attempts; try again in 8m2s\",\"retry_after_seconds\":482,\"scope\":\"email\"},\"message\":\"Too many login attempts. Please wait and try again.\"}"
    },
    {
      "id": "FE-SET-G-007",
      "description": "Promo code card shows discount + expiry + COPY (smoke)",
      "status": "PASS",
      "duration_ms": 0.5424029999994673,
      "file_path": "/app/runner/tests/settings/fe-settings.test.ts",
      "test_path": "tests/settings/fe-settings.test.ts > Settings — General (FE-SET-G) > FE-SET-G-007 — Promo code card shows discount + expiry + COPY (smoke)"
    },
    {
      "id": "FE-SET-G-008",
      "description": "Manage Add-ons button opens manage-plans page (smoke)",
      "status": "PASS",
      "duration_ms": 0.34187800000654534,
      "file_path": "/app/runner/tests/settings/fe-settings.test.ts",
      "test_path": "tests/settings/fe-settings.test.ts > Settings — General (FE-SET-G) > FE-SET-G-008 — Manage Add-ons button opens manage-plans page (smoke)"
    },
    {
      "id": "FE-SET-G-009",
      "description": "CRM API tab shows connected CRM with masked key (smoke)",
      "status": "PASS",
      "duration_ms": 0.36231599998427555,
      "file_path": "/app/runner/tests/settings/fe-settings.test.ts",
      "test_path": "tests/settings/fe-settings.test.ts > Settings — General (FE-SET-G) > FE-SET-G-009 — CRM API tab shows connected CRM with masked key (smoke)"
    },
    {
      "id": "FE-SET-G-010",
      "description": "Sub-User Management lists invited users (smoke)",
      "status": "PASS",
      "duration_ms": 0.2944900000002235,
      "file_path": "/app/runner/tests/settings/fe-settings.test.ts",
      "test_path": "tests/settings/fe-settings.test.ts > Settings — General (FE-SET-G) > FE-SET-G-010 — Sub-User Management lists invited users (smoke)"
    },
    {
      "id": "FE-SET-G-011",
      "description": "Sub-User Invite form validates email (smoke)",
      "status": "PASS",
      "duration_ms": 0.22290600000997074,
      "file_path": "/app/runner/tests/settings/fe-settings.test.ts",
      "test_path": "tests/settings/fe-settings.test.ts > Settings — General (FE-SET-G) > FE-SET-G-011 — Sub-User Invite form validates email (smoke)"
    },
    {
      "id": "FE-SET-G-012",
      "description": "Active Hours tab allows setting weekly schedule (smoke)",
      "status": "PASS",
      "duration_ms": 2.9407309999805875,
      "file_path": "/app/runner/tests/settings/fe-settings.test.ts",
      "test_path": "tests/settings/fe-settings.test.ts > Settings — General (FE-SET-G) > FE-SET-G-012 — Active Hours tab allows setting weekly schedule (smoke)"
    },
    {
      "id": "FE-SET-G-013",
      "description": "Email Signatures tab renders editor + preview (smoke)",
      "status": "PASS",
      "duration_ms": 0.4198540000070352,
      "file_path": "/app/runner/tests/settings/fe-settings.test.ts",
      "test_path": "tests/settings/fe-settings.test.ts > Settings — General (FE-SET-G) > FE-SET-G-013 — Email Signatures tab renders editor + preview (smoke)"
    },
    {
      "id": "FE-SET-G-014",
      "description": "Book Link tab persists URL (smoke)",
      "status": "PASS",
      "duration_ms": 1.8034890000126325,
      "file_path": "/app/runner/tests/settings/fe-settings.test.ts",
      "test_path": "tests/settings/fe-settings.test.ts > Settings — General (FE-SET-G) > FE-SET-G-014 — Book Link tab persists URL (smoke)"
    },
    {
      "id": "FE-SET-G-015",
      "description": "AI Customized Templates tab lists templates (smoke)",
      "status": "PASS",
      "duration_ms": 0.4313959999999497,
      "file_path": "/app/runner/tests/settings/fe-settings.test.ts",
      "test_path": "tests/settings/fe-settings.test.ts > Settings — General (FE-SET-G) > FE-SET-G-015 — AI Customized Templates tab lists templates (smoke)"
    },
    {
      "id": "FE-SET-S-001",
      "description": "/settings/system renders Brand Status + Phone Settings",
      "status": "FAIL",
      "duration_ms": 60423.28831999999,
      "file_path": "/app/runner/tests/settings/fe-settings.test.ts",
      "test_path": "tests/settings/fe-settings.test.ts > Settings — System (FE-SET-S) > FE-SET-S-001 — /settings/system renders Brand Status + Phone Settings",
      "error": "BFF /v1/auth/login returned 429: {\"data\":{\"error\":\"too many login attempts; try again in 7m2s\",\"retry_after_seconds\":422,\"scope\":\"email\"},\"message\":\"Too many login attempts. Please wait and try again.\"}"
    },
    {
      "id": "FE-SET-S-002",
      "description": "Right sidebar Phone / Email Settings (smoke)",
      "status": "PASS",
      "duration_ms": 1.1935079999966547,
      "file_path": "/app/runner/tests/settings/fe-settings.test.ts",
      "test_path": "tests/settings/fe-settings.test.ts > Settings — System (FE-SET-S) > FE-SET-S-002 — Right sidebar Phone / Email Settings (smoke)"
    },
    {
      "id": "FE-SET-S-003",
      "description": "Brand Status badge color matches status (smoke)",
      "status": "PASS",
      "duration_ms": 0.39059900000575,
      "file_path": "/app/runner/tests/settings/fe-settings.test.ts",
      "test_path": "tests/settings/fe-settings.test.ts > Settings — System (FE-SET-S) > FE-SET-S-003 — Brand Status badge color matches status (smoke)"
    },
    {
      "id": "FE-SET-S-004",
      "description": "Register Brand button opens modal (smoke)",
      "status": "PASS",
      "duration_ms": 0.28798799999640323,
      "file_path": "/app/runner/tests/settings/fe-settings.test.ts",
      "test_path": "tests/settings/fe-settings.test.ts > Settings — System (FE-SET-S) > FE-SET-S-004 — Register Brand button opens modal (smoke)"
    },
    {
      "id": "FE-SET-S-005",
      "description": "Phone Number Settings shows empty state (smoke)",
      "status": "PASS",
      "duration_ms": 0.3824040000035893,
      "file_path": "/app/runner/tests/settings/fe-settings.test.ts",
      "test_path": "tests/settings/fe-settings.test.ts > Settings — System (FE-SET-S) > FE-SET-S-005 — Phone Number Settings shows empty state (smoke)"
    },
    {
      "id": "FE-SET-S-006",
      "description": "Email Settings shows OAuth connection state (smoke)",
      "status": "PASS",
      "duration_ms": 0.20234699998400174,
      "file_path": "/app/runner/tests/settings/fe-settings.test.ts",
      "test_path": "tests/settings/fe-settings.test.ts > Settings — System (FE-SET-S) > FE-SET-S-006 — Email Settings shows OAuth connection state (smoke)"
    },
    {
      "id": "FE-SET-S-007",
      "description": "Save Route button persists route preferences (smoke)",
      "status": "PASS",
      "duration_ms": 0.22532999998657033,
      "file_path": "/app/runner/tests/settings/fe-settings.test.ts",
      "test_path": "tests/settings/fe-settings.test.ts > Settings — System (FE-SET-S) > FE-SET-S-007 — Save Route button persists route preferences (smoke)"
    },
    {
      "id": "FE-SET-M-001",
      "description": "/settings/manage-plans renders manage add-ons section",
      "status": "FAIL",
      "duration_ms": 60513.736309,
      "file_path": "/app/runner/tests/settings/fe-settings.test.ts",
      "test_path": "tests/settings/fe-settings.test.ts > Settings — Manage Plans (FE-SET-M) > FE-SET-M-001 — /settings/manage-plans renders manage add-ons section",
      "error": "BFF /v1/auth/login returned 429: {\"data\":{\"error\":\"too many login attempts; try again in 6m1s\",\"retry_after_seconds\":361,\"scope\":\"email\"},\"message\":\"Too many login attempts. Please wait and try again.\"}"
    },
    {
      "id": "FE-SET-M-002",
      "description": "Existing add-ons list (smoke)",
      "status": "PASS",
      "duration_ms": 0.3736780000035651,
      "file_path": "/app/runner/tests/settings/fe-settings.test.ts",
      "test_path": "tests/settings/fe-settings.test.ts > Settings — Manage Plans (FE-SET-M) > FE-SET-M-002 — Existing add-ons list (smoke)"
    },
    {
      "id": "FE-SET-M-003",
      "description": "Empty state friendly message (smoke)",
      "status": "PASS",
      "duration_ms": 0.2025990000111051,
      "file_path": "/app/runner/tests/settings/fe-settings.test.ts",
      "test_path": "tests/settings/fe-settings.test.ts > Settings — Manage Plans (FE-SET-M) > FE-SET-M-003 — Empty state friendly message (smoke)"
    },
    {
      "id": "FE-SET-M-004",
      "description": "Available add-ons list (smoke)",
      "status": "PASS",
      "duration_ms": 0.16245300002628937,
      "file_path": "/app/runner/tests/settings/fe-settings.test.ts",
      "test_path": "tests/settings/fe-settings.test.ts > Settings — Manage Plans (FE-SET-M) > FE-SET-M-004 — Available add-ons list (smoke)"
    },
    {
      "id": "FE-SET-M-005",
      "description": "Add new add-on triggers checkout flow (smoke)",
      "status": "PASS",
      "duration_ms": 0.21774599998025224,
      "file_path": "/app/runner/tests/settings/fe-settings.test.ts",
      "test_path": "tests/settings/fe-settings.test.ts > Settings — Manage Plans (FE-SET-M) > FE-SET-M-005 — Add new add-on triggers checkout flow (smoke)"
    },
    {
      "id": "FE-SET-M-006",
      "description": "Cancel add-on triggers confirmation modal (smoke)",
      "status": "PASS",
      "duration_ms": 0.15435900003649294,
      "file_path": "/app/runner/tests/settings/fe-settings.test.ts",
      "test_path": "tests/settings/fe-settings.test.ts > Settings — Manage Plans (FE-SET-M) > FE-SET-M-006 — Cancel add-on triggers confirmation modal (smoke)"
    },
    {
      "id": "FE-USER-001",
      "description": "/user renders profile fields",
      "status": "FAIL",
      "duration_ms": 60380.78425899998,
      "file_path": "/app/runner/tests/settings/fe-settings.test.ts",
      "test_path": "tests/settings/fe-settings.test.ts > User Settings (FE-USER) > FE-USER-001 — /user renders profile fields",
      "error": "BFF /v1/auth/login returned 429: {\"data\":{\"error\":\"too many login attempts; try again in 5m1s\",\"retry_after_seconds\":301,\"scope\":\"email\"},\"message\":\"Too many login attempts. Please wait and try again.\"}"
    },
    {
      "id": "FE-USER-002",
      "description": "Created date renders correctly (NOT 'Invalid Date')",
      "status": "FAIL",
      "duration_ms": 60253.28373199998,
      "file_path": "/app/runner/tests/settings/fe-settings.test.ts",
      "test_path": "tests/settings/fe-settings.test.ts > User Settings (FE-USER) > FE-USER-002 — Created date renders correctly (NOT 'Invalid Date')",
      "error": "BFF /v1/auth/login returned 429: {\"data\":{\"error\":\"too many login attempts; try again in 4m1s\",\"retry_after_seconds\":241,\"scope\":\"email\"},\"message\":\"Too many login attempts. Please wait and try again.\"}"
    },
    {
      "id": "FE-USER-003",
      "description": "Change Password button opens modal (smoke)",
      "status": "PASS",
      "duration_ms": 0.45467900001676753,
      "file_path": "/app/runner/tests/settings/fe-settings.test.ts",
      "test_path": "tests/settings/fe-settings.test.ts > User Settings (FE-USER) > FE-USER-003 — Change Password button opens modal (smoke)"
    },
    {
      "id": "FE-USER-004",
      "description": "Password modal validates fields (smoke)",
      "status": "PASS",
      "duration_ms": 0.20915000000968575,
      "file_path": "/app/runner/tests/settings/fe-settings.test.ts",
      "test_path": "tests/settings/fe-settings.test.ts > User Settings (FE-USER) > FE-USER-004 — Password modal validates fields (smoke)"
    },
    {
      "id": "FE-USER-005",
      "description": "Wrong current password → friendly error (smoke)",
      "status": "PASS",
      "duration_ms": 0.1444599999813363,
      "file_path": "/app/runner/tests/settings/fe-settings.test.ts",
      "test_path": "tests/settings/fe-settings.test.ts > User Settings (FE-USER) > FE-USER-005 — Wrong current password → friendly error (smoke)"
    },
    {
      "id": "FE-USER-006",
      "description": "Password change success closes modal + toast (smoke)",
      "status": "PASS",
      "duration_ms": 0.2710949999745935,
      "file_path": "/app/runner/tests/settings/fe-settings.test.ts",
      "test_path": "tests/settings/fe-settings.test.ts > User Settings (FE-USER) > FE-USER-006 — Password change success closes modal + toast (smoke)"
    },
    {
      "id": "FE-PHONE-001",
      "description": "/phone-system redirects to /phone-system/sms",
      "status": "FAIL",
      "duration_ms": 60652.094398,
      "file_path": "/app/runner/tests/sms/fe-phone.test.ts",
      "test_path": "tests/sms/fe-phone.test.ts > Phone System (FE-PHONE) > FE-PHONE-001 — /phone-system redirects to /phone-system/sms",
      "error": "BFF /v1/auth/login returned 429: {\"data\":{\"error\":\"too many login attempts; try again in 3m8s\",\"retry_after_seconds\":188,\"scope\":\"email\"},\"message\":\"Too many login attempts. Please wait and try again.\"}"
    },
    {
      "id": "FE-PHONE-002",
      "description": "/phone-system/sms renders empty state (FE-BUG-04 fix — no permanent skeleton)",
      "status": "FAIL",
      "duration_ms": 60951.428230000005,
      "file_path": "/app/runner/tests/sms/fe-phone.test.ts",
      "test_path": "tests/sms/fe-phone.test.ts > Phone System (FE-PHONE) > FE-PHONE-002 — /phone-system/sms renders empty state (FE-BUG-04 fix — no permanent skeleton)",
      "error": "BFF /v1/auth/login returned 429: {\"data\":{\"error\":\"too many login attempts; try again in 2m7s\",\"retry_after_seconds\":127,\"scope\":\"email\"},\"message\":\"Too many login attempts. Please wait and try again.\"}"
    },
    {
      "id": "FE-PHONE-003",
      "description": "Empty state shows 'Go to Phone System Settings' CTA (best-effort)",
      "status": "FAIL",
      "duration_ms": 60182.48144999999,
      "file_path": "/app/runner/tests/sms/fe-phone.test.ts",
      "test_path": "tests/sms/fe-phone.test.ts > Phone System (FE-PHONE) > FE-PHONE-003 — Empty state shows 'Go to Phone System Settings' CTA (best-effort)",
      "error": "BFF /v1/auth/login returned 429: {\"data\":{\"error\":\"too many login attempts; try again in 1m6s\",\"retry_after_seconds\":66,\"scope\":\"email\"},\"message\":\"Too many login attempts. Please wait and try again.\"}"
    },
    {
      "id": "FE-PHONE-004",
      "description": "/phone-system/voicemails lists voicemails or empty state",
      "status": "FAIL",
      "duration_ms": 60234.172807000024,
      "file_path": "/app/runner/tests/sms/fe-phone.test.ts",
      "test_path": "tests/sms/fe-phone.test.ts > Phone System (FE-PHONE) > FE-PHONE-004 — /phone-system/voicemails lists voicemails or empty state",
      "error": "BFF /v1/auth/login returned 429: {\"data\":{\"error\":\"too many login attempts; try again in 6s\",\"retry_after_seconds\":6,\"scope\":\"email\"},\"message\":\"Too many login attempts. Please wait and try again.\"}"
    },
    {
      "id": "FE-PHONE-005",
      "description": "Brand registration flow accessible from phone system",
      "status": "PASS",
      "duration_ms": 5.00575700000627,
      "file_path": "/app/runner/tests/sms/fe-phone.test.ts",
      "test_path": "tests/sms/fe-phone.test.ts > Phone System (FE-PHONE) > FE-PHONE-005 — Brand registration flow accessible from phone system"
    },
    {
      "id": "FE-PHONE-006",
      "description": "A2P status badge displays correct color/text (smoke)",
      "status": "PASS",
      "duration_ms": 0.414814000017941,
      "file_path": "/app/runner/tests/sms/fe-phone.test.ts",
      "test_path": "tests/sms/fe-phone.test.ts > Phone System (FE-PHONE) > FE-PHONE-006 — A2P status badge displays correct color/text (smoke)"
    },
    {
      "id": "FE-PHONE-007",
      "description": "Phone Number purchase flow renders available numbers (smoke)",
      "status": "PASS",
      "duration_ms": 0.2797830000054091,
      "file_path": "/app/runner/tests/sms/fe-phone.test.ts",
      "test_path": "tests/sms/fe-phone.test.ts > Phone System (FE-PHONE) > FE-PHONE-007 — Phone Number purchase flow renders available numbers (smoke)"
    },
    {
      "id": "FE-PHONE-008",
      "description": "Buy phone number button triggers purchase API call (smoke)",
      "status": "PASS",
      "duration_ms": 0.41681700001936406,
      "file_path": "/app/runner/tests/sms/fe-phone.test.ts",
      "test_path": "tests/sms/fe-phone.test.ts > Phone System (FE-PHONE) > FE-PHONE-008 — Buy phone number button triggers purchase API call (smoke)"
    },
    {
      "id": "FE-PHONE-009",
      "description": "Send SMS modal validates recipient + body (smoke)",
      "status": "PASS",
      "duration_ms": 0.8109149999800138,
      "file_path": "/app/runner/tests/sms/fe-phone.test.ts",
      "test_path": "tests/sms/fe-phone.test.ts > Phone System (FE-PHONE) > FE-PHONE-009 — Send SMS modal validates recipient + body (smoke)"
    },
    {
      "id": "FE-SMS-TOKY-001",
      "description": "BYOC card lists Toky in /settings/system (smoke)",
      "status": "PASS",
      "duration_ms": 2.5521949999999833,
      "file_path": "/app/runner/tests/sms/fe-sms-toky.test.ts",
      "test_path": "tests/sms/fe-sms-toky.test.ts > Toky BYOC path (FE-SMS-TOKY) > FE-SMS-TOKY-001 — BYOC card lists Toky in /settings/system (smoke)"
    },
    {
      "id": "FE-SMS-TOKY-002",
      "description": "Save bogus Toky API key → red error (smoke)",
      "status": "PASS",
      "duration_ms": 0.4071710000000621,
      "file_path": "/app/runner/tests/sms/fe-sms-toky.test.ts",
      "test_path": "tests/sms/fe-sms-toky.test.ts > Toky BYOC path (FE-SMS-TOKY) > FE-SMS-TOKY-002 — Save bogus Toky API key → red error (smoke)"
    },
    {
      "id": "FE-SMS-TOKY-003",
      "description": "Save real test API key creates carrier_credentials row (smoke)",
      "status": "PASS",
      "duration_ms": 0.2831380000000081,
      "file_path": "/app/runner/tests/sms/fe-sms-toky.test.ts",
      "test_path": "tests/sms/fe-sms-toky.test.ts > Toky BYOC path (FE-SMS-TOKY) > FE-SMS-TOKY-003 — Save real test API key creates carrier_credentials row (smoke)"
    },
    {
      "id": "FE-SMS-TOKY-004",
      "description": "Save handshake registers webhook on Toky side (smoke)",
      "status": "PASS",
      "duration_ms": 0.39183200000002216,
      "file_path": "/app/runner/tests/sms/fe-sms-toky.test.ts",
      "test_path": "tests/sms/fe-sms-toky.test.ts > Toky BYOC path (FE-SMS-TOKY) > FE-SMS-TOKY-004 — Save handshake registers webhook on Toky side (smoke)"
    },
    {
      "id": "FE-SMS-TOKY-005",
      "description": "Re-save credential clears existing webhook auth (smoke)",
      "status": "PASS",
      "duration_ms": 0.30332599999997,
      "file_path": "/app/runner/tests/sms/fe-sms-toky.test.ts",
      "test_path": "tests/sms/fe-sms-toky.test.ts > Toky BYOC path (FE-SMS-TOKY) > FE-SMS-TOKY-005 — Re-save credential clears existing webhook auth (smoke)"
    },
    {
      "id": "FE-SMS-TOKY-006",
      "description": "Add Toky Number lists user inventory (smoke)",
      "status": "PASS",
      "duration_ms": 0.4212569999999687,
      "file_path": "/app/runner/tests/sms/fe-sms-toky.test.ts",
      "test_path": "tests/sms/fe-sms-toky.test.ts > Toky BYOC path (FE-SMS-TOKY) > FE-SMS-TOKY-006 — Add Toky Number lists user inventory (smoke)"
    },
    {
      "id": "FE-SMS-TOKY-007",
      "description": "Import test number creates phonenumbers row (smoke)",
      "status": "PASS",
      "duration_ms": 0.30656299999986913,
      "file_path": "/app/runner/tests/sms/fe-sms-toky.test.ts",
      "test_path": "tests/sms/fe-sms-toky.test.ts > Toky BYOC path (FE-SMS-TOKY) > FE-SMS-TOKY-007 — Import test number creates phonenumbers row (smoke)"
    },
    {
      "id": "FE-SMS-TOKY-008",
      "description": "Send SMS via Toky doesn't decrement credits (smoke)",
      "status": "PASS",
      "duration_ms": 0.21016200000008212,
      "file_path": "/app/runner/tests/sms/fe-sms-toky.test.ts",
      "test_path": "tests/sms/fe-sms-toky.test.ts > Toky BYOC path (FE-SMS-TOKY) > FE-SMS-TOKY-008 — Send SMS via Toky doesn't decrement credits (smoke)"
    },
    {
      "id": "FE-SMS-TOKY-009",
      "description": "Reply lands inbound within 10s (smoke)",
      "status": "PASS",
      "duration_ms": 0.27680599999985134,
      "file_path": "/app/runner/tests/sms/fe-sms-toky.test.ts",
      "test_path": "tests/sms/fe-sms-toky.test.ts > Toky BYOC path (FE-SMS-TOKY) > FE-SMS-TOKY-009 — Reply lands inbound within 10s (smoke)"
    },
    {
      "id": "FE-SMS-TOKY-010",
      "description": "Toky inbound webhook validates HTTP Basic auth",
      "status": "PASS",
      "duration_ms": 246.23172899999986,
      "file_path": "/app/runner/tests/sms/fe-sms-toky.test.ts",
      "test_path": "tests/sms/fe-sms-toky.test.ts > Toky BYOC path (FE-SMS-TOKY) > FE-SMS-TOKY-010 — Toky inbound webhook validates HTTP Basic auth"
    },
    {
      "id": "FE-SMS-TOKY-011",
      "description": "Toky payload is JSON array (smoke)",
      "status": "PASS",
      "duration_ms": 0.8318329999999605,
      "file_path": "/app/runner/tests/sms/fe-sms-toky.test.ts",
      "test_path": "tests/sms/fe-sms-toky.test.ts > Toky BYOC path (FE-SMS-TOKY) > FE-SMS-TOKY-011 — Toky payload is JSON array (smoke)"
    },
    {
      "id": "FE-SMS-TOKY-012",
      "description": "Toky inbound NEGATIVE sentiment marks deal LOST (smoke)",
      "status": "PASS",
      "duration_ms": 0.33456500000011147,
      "file_path": "/app/runner/tests/sms/fe-sms-toky.test.ts",
      "test_path": "tests/sms/fe-sms-toky.test.ts > Toky BYOC path (FE-SMS-TOKY) > FE-SMS-TOKY-012 — Toky inbound NEGATIVE sentiment marks deal LOST (smoke)"
    },
    {
      "id": "FE-SMS-TOKY-013",
      "description": "Replay same payload twice → idempotent (smoke)",
      "status": "PASS",
      "duration_ms": 0.22059199999989687,
      "file_path": "/app/runner/tests/sms/fe-sms-toky.test.ts",
      "test_path": "tests/sms/fe-sms-toky.test.ts > Toky BYOC path (FE-SMS-TOKY) > FE-SMS-TOKY-013 — Replay same payload twice → idempotent (smoke)"
    },
    {
      "id": "FE-SMS-TOKY-014",
      "description": "Disconnect Toky credential revokes webhook (smoke)",
      "status": "PASS",
      "duration_ms": 0.5168350000001283,
      "file_path": "/app/runner/tests/sms/fe-sms-toky.test.ts",
      "test_path": "tests/sms/fe-sms-toky.test.ts > Toky BYOC path (FE-SMS-TOKY) > FE-SMS-TOKY-014 — Disconnect Toky credential revokes webhook (smoke)"
    },
    {
      "id": "FE-SMS-TOKY-015",
      "description": "Twilio + Toky number coexistence (smoke)",
      "status": "PASS",
      "duration_ms": 0.1621820000000298,
      "file_path": "/app/runner/tests/sms/fe-sms-toky.test.ts",
      "test_path": "tests/sms/fe-sms-toky.test.ts > Toky BYOC path (FE-SMS-TOKY) > FE-SMS-TOKY-015 — Twilio + Toky number coexistence (smoke)"
    },
    {
      "id": "FE-SMS-TOKY-016",
      "description": "AI personalization charges AI credits but not phone (smoke)",
      "status": "PASS",
      "duration_ms": 0.28961099999992257,
      "file_path": "/app/runner/tests/sms/fe-sms-toky.test.ts",
      "test_path": "tests/sms/fe-sms-toky.test.ts > Toky BYOC path (FE-SMS-TOKY) > FE-SMS-TOKY-016 — AI personalization charges AI credits but not phone (smoke)"
    },
    {
      "id": "FE-SMS-TOKY-017",
      "description": "Twilio regression after Toky enabled (smoke)",
      "status": "PASS",
      "duration_ms": 0.15576099999998405,
      "file_path": "/app/runner/tests/sms/fe-sms-toky.test.ts",
      "test_path": "tests/sms/fe-sms-toky.test.ts > Toky BYOC path (FE-SMS-TOKY) > FE-SMS-TOKY-017 — Twilio regression after Toky enabled (smoke)"
    },
    {
      "id": "FE-SMS-TOKY-018",
      "description": "Legacy provider=NULL treated as 'twilio' (smoke)",
      "status": "PASS",
      "duration_ms": 0.3476499999999305,
      "file_path": "/app/runner/tests/sms/fe-sms-toky.test.ts",
      "test_path": "tests/sms/fe-sms-toky.test.ts > Toky BYOC path (FE-SMS-TOKY) > FE-SMS-TOKY-018 — Legacy provider=NULL treated as 'twilio' (smoke)"
    },
    {
      "id": "FE-SMS-TOKY-019",
      "description": "Toky API key with zero numbers → empty inventory (smoke)",
      "status": "PASS",
      "duration_ms": 0.236131000000114,
      "file_path": "/app/runner/tests/sms/fe-sms-toky.test.ts",
      "test_path": "tests/sms/fe-sms-toky.test.ts > Toky BYOC path (FE-SMS-TOKY) > FE-SMS-TOKY-019 — Toky API key with zero numbers → empty inventory (smoke)"
    },
    {
      "id": "FE-SMS-TOKY-020",
      "description": "Webhook dedup respects DRF pagination shape (smoke)",
      "status": "PASS",
      "duration_ms": 0.3486400000001595,
      "file_path": "/app/runner/tests/sms/fe-sms-toky.test.ts",
      "test_path": "tests/sms/fe-sms-toky.test.ts > Toky BYOC path (FE-SMS-TOKY) > FE-SMS-TOKY-020 — Webhook dedup respects DRF pagination shape (smoke)"
    },
    {
      "id": "FE-SMS-TW-001",
      "description": "A2P brand registration starts from /settings/system (smoke)",
      "status": "PASS",
      "duration_ms": 2.2438200000001416,
      "file_path": "/app/runner/tests/sms/fe-sms-tw.test.ts",
      "test_path": "tests/sms/fe-sms-tw.test.ts > Twilio SMS path (FE-SMS-TW) > FE-SMS-TW-001 — A2P brand registration starts from /settings/system (smoke)"
    },
    {
      "id": "FE-SMS-TW-002",
      "description": "Phone-number purchase blocked when A2P != brand_approved",
      "status": "PASS",
      "duration_ms": 0.5123360000000048,
      "file_path": "/app/runner/tests/sms/fe-sms-tw.test.ts",
      "test_path": "tests/sms/fe-sms-tw.test.ts > Twilio SMS path (FE-SMS-TW) > FE-SMS-TW-002 — Phone-number purchase blocked when A2P != brand_approved"
    },
    {
      "id": "FE-SMS-TW-003",
      "description": "Phone-number purchase succeeds when approved",
      "status": "PASS",
      "duration_ms": 0.448477000000139,
      "file_path": "/app/runner/tests/sms/fe-sms-tw.test.ts",
      "test_path": "tests/sms/fe-sms-tw.test.ts > Twilio SMS path (FE-SMS-TW) > FE-SMS-TW-003 — Phone-number purchase succeeds when approved"
    },
    {
      "id": "FE-SMS-TW-004",
      "description": "Send SMS from /phone-system/sms (smoke)",
      "status": "PASS",
      "duration_ms": 0.36166499999990265,
      "file_path": "/app/runner/tests/sms/fe-sms-tw.test.ts",
      "test_path": "tests/sms/fe-sms-tw.test.ts > Twilio SMS path (FE-SMS-TW) > FE-SMS-TW-004 — Send SMS from /phone-system/sms (smoke)"
    },
    {
      "id": "FE-SMS-TW-005",
      "description": "Send SMS with merge tag rendered correctly",
      "status": "PASS",
      "duration_ms": 0.6127140000000963,
      "file_path": "/app/runner/tests/sms/fe-sms-tw.test.ts",
      "test_path": "tests/sms/fe-sms-tw.test.ts > Twilio SMS path (FE-SMS-TW) > FE-SMS-TW-005 — Send SMS with merge tag rendered correctly"
    },
    {
      "id": "FE-SMS-TW-006",
      "description": "Send SMS with no credits → 402 / out-of-credits",
      "status": "PASS",
      "duration_ms": 0.4069390000001931,
      "file_path": "/app/runner/tests/sms/fe-sms-tw.test.ts",
      "test_path": "tests/sms/fe-sms-tw.test.ts > Twilio SMS path (FE-SMS-TW) > FE-SMS-TW-006 — Send SMS with no credits → 402 / out-of-credits"
    },
    {
      "id": "FE-SMS-TW-007",
      "description": "Twilio API failure releases reserved credits",
      "status": "PASS",
      "duration_ms": 1.8012630000000627,
      "file_path": "/app/runner/tests/sms/fe-sms-tw.test.ts",
      "test_path": "tests/sms/fe-sms-tw.test.ts > Twilio SMS path (FE-SMS-TW) > FE-SMS-TW-007 — Twilio API failure releases reserved credits"
    },
    {
      "id": "FE-SMS-TW-008",
      "description": "Send SMS exceeds rate limit → 429",
      "status": "PASS",
      "duration_ms": 0.4012190000000828,
      "file_path": "/app/runner/tests/sms/fe-sms-tw.test.ts",
      "test_path": "tests/sms/fe-sms-tw.test.ts > Twilio SMS path (FE-SMS-TW) > FE-SMS-TW-008 — Send SMS exceeds rate limit → 429"
    },
    {
      "id": "FE-SMS-TW-009",
      "description": "Inbound SMS appears in FE thread (smoke)",
      "status": "PASS",
      "duration_ms": 0.2883990000000267,
      "file_path": "/app/runner/tests/sms/fe-sms-tw.test.ts",
      "test_path": "tests/sms/fe-sms-tw.test.ts > Twilio SMS path (FE-SMS-TW) > FE-SMS-TW-009 — Inbound SMS appears in FE thread (smoke)"
    },
    {
      "id": "FE-SMS-TW-010",
      "description": "Inbound negative sentiment marks deal LOST (smoke)",
      "status": "PASS",
      "duration_ms": 0.3444539999998142,
      "file_path": "/app/runner/tests/sms/fe-sms-tw.test.ts",
      "test_path": "tests/sms/fe-sms-tw.test.ts > Twilio SMS path (FE-SMS-TW) > FE-SMS-TW-010 — Inbound negative sentiment marks deal LOST (smoke)"
    },
    {
      "id": "FE-SMS-TW-011",
      "description": "Twilio webhook with wrong bears_key → 401",
      "status": "PASS",
      "duration_ms": 458.55770800000005,
      "file_path": "/app/runner/tests/sms/fe-sms-tw.test.ts",
      "test_path": "tests/sms/fe-sms-tw.test.ts > Twilio SMS path (FE-SMS-TW) > FE-SMS-TW-011 — Twilio webhook with wrong bears_key → 401"
    },
    {
      "id": "FE-SMS-TW-012",
      "description": "Twilio status callback updates messages.status (smoke)",
      "status": "PASS",
      "duration_ms": 0.28267699999992146,
      "file_path": "/app/runner/tests/sms/fe-sms-tw.test.ts",
      "test_path": "tests/sms/fe-sms-tw.test.ts > Twilio SMS path (FE-SMS-TW) > FE-SMS-TW-012 — Twilio status callback updates messages.status (smoke)"
    }
  ]
}