{
  "summary": {
    "run_id": "scheduled-20260602T084046",
    "started_at": "2026-06-02T08:40:49.744Z",
    "finished_at": "2026-06-02T08:44:08.024Z",
    "total": 469,
    "passed": 459,
    "failed": 0,
    "skipped": 0,
    "not_exec": 10,
    "flaky": 0,
    "results": [
      {
        "id": "FE-ACT-001",
        "status": "PASS",
        "duration_ms": 7.58994000000007
      },
      {
        "id": "FE-ACT-002",
        "status": "PASS",
        "duration_ms": 0.4420540000000983
      },
      {
        "id": "FE-ACT-003",
        "status": "PASS",
        "duration_ms": 0.30678199999988465
      },
      {
        "id": "FE-ACT-004",
        "status": "PASS",
        "duration_ms": 5.802846000000045
      },
      {
        "id": "FE-ACT-005",
        "status": "PASS",
        "duration_ms": 0.3429800000001251
      },
      {
        "id": "FE-ACT-006",
        "status": "PASS",
        "duration_ms": 1.80642899999998
      },
      {
        "id": "FE-ACT-007",
        "status": "PASS",
        "duration_ms": 0.4903150000000096
      },
      {
        "id": "FE-ACT-008",
        "status": "PASS",
        "duration_ms": 0.2749340000000302
      },
      {
        "id": "FE-ACT-009",
        "status": "PASS",
        "duration_ms": 0.338561000000027
      },
      {
        "id": "FE-ACT-010",
        "status": "PASS",
        "duration_ms": 3844.8432900000007
      },
      {
        "id": "FE-ACT-011",
        "status": "PASS",
        "duration_ms": 0.4899439999999231
      },
      {
        "id": "FE-ADM-001",
        "status": "PASS",
        "duration_ms": 5741.698877000001
      },
      {
        "id": "FE-ADM-003",
        "status": "PASS",
        "duration_ms": 5759.218000999999
      },
      {
        "id": "FE-ADM-004",
        "status": "PASS",
        "duration_ms": 4550.153918
      },
      {
        "id": "FE-ADM-005",
        "status": "PASS",
        "duration_ms": 3192.885094000001
      },
      {
        "id": "FE-ADM-006",
        "status": "PASS",
        "duration_ms": 4535.447500999999
      },
      {
        "id": "FE-ADM-007",
        "status": "PASS",
        "duration_ms": 4601.145060999999
      },
      {
        "id": "FE-ADM-008",
        "status": "PASS",
        "duration_ms": 4153.524246000001
      },
      {
        "id": "FE-ADM-012",
        "status": "PASS",
        "duration_ms": 3753.191877999998
      },
      {
        "id": "FE-ADM-013",
        "status": "PASS",
        "duration_ms": 5293.377572000005
      },
      {
        "id": "FE-ADM-014",
        "status": "PASS",
        "duration_ms": 4639.372976999999
      },
      {
        "id": "FE-ADM-015",
        "status": "PASS",
        "duration_ms": 7295.374079000001
      },
      {
        "id": "FE-ADM-016",
        "status": "PASS",
        "duration_ms": 4128.2120739999955
      },
      {
        "id": "FE-ADM-002",
        "status": "PASS",
        "duration_ms": 9.947539000000688
      },
      {
        "id": "FE-ADM-017",
        "status": "PASS",
        "duration_ms": 4885.307007999996
      },
      {
        "id": "FE-ADM-018",
        "status": "PASS",
        "duration_ms": 0.4017299999977695
      },
      {
        "id": "FE-ADM-PLAN-001",
        "status": "PASS",
        "duration_ms": 4226.3303030000025
      },
      {
        "id": "FE-ADM-PLAN-002",
        "status": "PASS",
        "duration_ms": 0.4634539999970002
      },
      {
        "id": "FE-ADM-PLAN-003",
        "status": "PASS",
        "duration_ms": 0.3519559999986086
      },
      {
        "id": "FE-ADM-PLAN-004",
        "status": "PASS",
        "duration_ms": 0.2211819999938598
      },
      {
        "id": "FE-ADM-PLAN-005",
        "status": "PASS",
        "duration_ms": 0.2721880000026431
      },
      {
        "id": "FE-ADM-PLAN-006",
        "status": "PASS",
        "duration_ms": 5.310448000003817
      },
      {
        "id": "FE-ADM-ADDON-001",
        "status": "PASS",
        "duration_ms": 5418.085699000003
      },
      {
        "id": "FE-ADM-ADDON-002",
        "status": "PASS",
        "duration_ms": 3.576212999993004
      },
      {
        "id": "FE-ADM-ADDON-003",
        "status": "PASS",
        "duration_ms": 3.5666539999947418
      },
      {
        "id": "FE-ADM-ADDON-004",
        "status": "PASS",
        "duration_ms": 0.359191000010469
      },
      {
        "id": "FE-ADM-ADDON-005",
        "status": "PASS",
        "duration_ms": 0.20871900000202004
      },
      {
        "id": "FE-ADM-PROMO-001",
        "status": "PASS",
        "duration_ms": 5496.845969000002
      },
      {
        "id": "FE-ADM-PROMO-002",
        "status": "PASS",
        "duration_ms": 1.276331000000937
      },
      {
        "id": "FE-ADM-PROMO-003",
        "status": "PASS",
        "duration_ms": 0.29115299999830313
      },
      {
        "id": "FE-ADM-PROMO-004",
        "status": "PASS",
        "duration_ms": 0.21457999999984168
      },
      {
        "id": "FE-ADM-PROMO-005",
        "status": "PASS",
        "duration_ms": 0.16672100000141654
      },
      {
        "id": "FE-AI-001",
        "status": "PASS",
        "duration_ms": 7244.121049
      },
      {
        "id": "FE-AI-002",
        "status": "PASS",
        "duration_ms": 14.00778199999877
      },
      {
        "id": "FE-AI-003",
        "status": "PASS",
        "duration_ms": 0.406648000000132
      },
      {
        "id": "FE-AI-004",
        "status": "PASS",
        "duration_ms": 0.3454149999997753
      },
      {
        "id": "FE-AI-005",
        "status": "PASS",
        "duration_ms": 0.3158590000002732
      },
      {
        "id": "FE-AI-006",
        "status": "PASS",
        "duration_ms": 0.34019400000033784
      },
      {
        "id": "FE-AI-007",
        "status": "PASS",
        "duration_ms": 13.803421999999046
      },
      {
        "id": "FE-AI-008",
        "status": "PASS",
        "duration_ms": 0.28182599999854574
      },
      {
        "id": "FE-AI-009",
        "status": "PASS",
        "duration_ms": 0.33896199999981036
      },
      {
        "id": "FE-AI-010",
        "status": "PASS",
        "duration_ms": 1.0605580000010377
      },
      {
        "id": "FE-AI-011",
        "status": "PASS",
        "duration_ms": 0.1981789999990724
      },
      {
        "id": "FE-AI-012",
        "status": "PASS",
        "duration_ms": 767.4065719999999
      },
      {
        "id": "FE-AI-013",
        "status": "PASS",
        "duration_ms": 0.5278149999994639
      },
      {
        "id": "FE-AI-014",
        "status": "PASS",
        "duration_ms": 3.2685079999992013
      },
      {
        "id": "FE-AI-015",
        "status": "PASS",
        "duration_ms": 0.3425699999988865
      },
      {
        "id": "FE-AI-016",
        "status": "PASS",
        "duration_ms": 0.22807399999874178
      },
      {
        "id": "FE-AI-017",
        "status": "PASS",
        "duration_ms": 243.71538599999985
      },
      {
        "id": "FE-AI-018",
        "status": "PASS",
        "duration_ms": 0.3609629999991739
      },
      {
        "id": "FE-AI-019",
        "status": "PASS",
        "duration_ms": 1.185512000000017
      },
      {
        "id": "FE-AI-020",
        "status": "PASS",
        "duration_ms": 300.37469899999996
      },
      {
        "id": "FE-CRED-001",
        "status": "PASS",
        "duration_ms": 2724.5112309999995
      },
      {
        "id": "FE-CRED-002",
        "status": "PASS",
        "duration_ms": 0.8978049999996074
      },
      {
        "id": "FE-CRED-003",
        "status": "PASS",
        "duration_ms": 0.39804199999980483
      },
      {
        "id": "FE-CRED-004",
        "status": "PASS",
        "duration_ms": 0.38237300000037067
      },
      {
        "id": "FE-CRED-005",
        "status": "PASS",
        "duration_ms": 0.33762099999967177
      },
      {
        "id": "FE-CRED-006",
        "status": "PASS",
        "duration_ms": 0.4013990000003105
      },
      {
        "id": "FE-CRED-007",
        "status": "PASS",
        "duration_ms": 0.7404620000006616
      },
      {
        "id": "FE-CRED-008",
        "status": "PASS",
        "duration_ms": 0.29865699999936623
      },
      {
        "id": "FE-CRED-009",
        "status": "PASS",
        "duration_ms": 0.3544800000008763
      },
      {
        "id": "FE-CRED-010",
        "status": "PASS",
        "duration_ms": 1.061900999999125
      },
      {
        "id": "FE-CRM-001",
        "status": "PASS",
        "duration_ms": 16484.614582
      },
      {
        "id": "FE-CRM-002",
        "status": "PASS",
        "duration_ms": 0.5933570000015607
      },
      {
        "id": "FE-CRM-003",
        "status": "PASS",
        "duration_ms": 0.31641099999978906
      },
      {
        "id": "FE-CRM-004",
        "status": "PASS",
        "duration_ms": 0.32384499999898253
      },
      {
        "id": "FE-CRM-005",
        "status": "PASS",
        "duration_ms": 0.3340729999981704
      },
      {
        "id": "FE-CRM-006",
        "status": "PASS",
        "duration_ms": 0.3067620000001625
      },
      {
        "id": "FE-CRM-007",
        "status": "PASS",
        "duration_ms": 0.5778080000018235
      },
      {
        "id": "FE-CRM-008",
        "status": "PASS",
        "duration_ms": 0.35074299999905634
      },
      {
        "id": "FE-CRM-009",
        "status": "PASS",
        "duration_ms": 0.2998889999980747
      },
      {
        "id": "FE-CRM-010",
        "status": "PASS",
        "duration_ms": 2812.9448779999984
      },
      {
        "id": "FE-AUTH-021",
        "status": "NOT_EXEC",
        "duration_ms": 0
      },
      {
        "id": "FE-AUTH-022",
        "status": "NOT_EXEC",
        "duration_ms": 0
      },
      {
        "id": "FE-AUTH-023",
        "status": "NOT_EXEC",
        "duration_ms": 0
      },
      {
        "id": "FE-AUTH-001",
        "status": "PASS",
        "duration_ms": 2854.1635199999996
      },
      {
        "id": "FE-AUTH-002",
        "status": "PASS",
        "duration_ms": 4041.131399000001
      },
      {
        "id": "FE-AUTH-003",
        "status": "PASS",
        "duration_ms": 178.96343999999954
      },
      {
        "id": "FE-AUTH-004",
        "status": "PASS",
        "duration_ms": 168.07875499999864
      },
      {
        "id": "FE-AUTH-005",
        "status": "PASS",
        "duration_ms": 1326.6276590000016
      },
      {
        "id": "FE-AUTH-006",
        "status": "PASS",
        "duration_ms": 1793.1024450000004
      },
      {
        "id": "FE-AUTH-007",
        "status": "PASS",
        "duration_ms": 2754.875242
      },
      {
        "id": "FE-AUTH-008",
        "status": "PASS",
        "duration_ms": 91.18421200000012
      },
      {
        "id": "FE-AUTH-009",
        "status": "PASS",
        "duration_ms": 141.4612820000002
      },
      {
        "id": "FE-AUTH-010",
        "status": "PASS",
        "duration_ms": 30.880417000000307
      },
      {
        "id": "FE-AUTH-011",
        "status": "PASS",
        "duration_ms": 30.950127000000066
      },
      {
        "id": "FE-AUTH-012",
        "status": "PASS",
        "duration_ms": 37705.690040999994
      },
      {
        "id": "FE-AUTH-013",
        "status": "PASS",
        "duration_ms": 8346.651104999997
      },
      {
        "id": "FE-AUTH-014",
        "status": "PASS",
        "duration_ms": 844.8895950000006
      },
      {
        "id": "FE-AUTH-015",
        "status": "PASS",
        "duration_ms": 51.990530999995826
      },
      {
        "id": "FE-AUTH-016",
        "status": "PASS",
        "duration_ms": 5956.581818999992
      },
      {
        "id": "FE-AUTH-017",
        "status": "PASS",
        "duration_ms": 2471.576834000007
      },
      {
        "id": "FE-AUTH-018",
        "status": "PASS",
        "duration_ms": 4617.419471999994
      },
      {
        "id": "FE-AUTH-019",
        "status": "PASS",
        "duration_ms": 4717.190696999998
      },
      {
        "id": "FE-AUTH-020",
        "status": "PASS",
        "duration_ms": 363.0110859999986
      },
      {
        "id": "FE-REG-001",
        "status": "PASS",
        "duration_ms": 3494.5575670000003
      },
      {
        "id": "FE-REG-002",
        "status": "PASS",
        "duration_ms": 3192.7091419999997
      },
      {
        "id": "FE-REG-003",
        "status": "PASS",
        "duration_ms": 3063.5424839999996
      },
      {
        "id": "FE-REG-004",
        "status": "PASS",
        "duration_ms": 3234.951790000001
      },
      {
        "id": "FE-REG-005",
        "status": "PASS",
        "duration_ms": 294.839516
      },
      {
        "id": "FE-REG-006",
        "status": "PASS",
        "duration_ms": 23424.099846
      },
      {
        "id": "FE-REG-007",
        "status": "PASS",
        "duration_ms": 1128.3222739999983
      },
      {
        "id": "FE-REG-008",
        "status": "PASS",
        "duration_ms": 1000.2177240000019
      },
      {
        "id": "FE-REG-009",
        "status": "PASS",
        "duration_ms": 500.73144400000456
      },
      {
        "id": "FE-REG-010",
        "status": "PASS",
        "duration_ms": 492.02435200000036
      },
      {
        "id": "FE-REG-011",
        "status": "PASS",
        "duration_ms": 1048.9125790000035
      },
      {
        "id": "FE-REG-012",
        "status": "PASS",
        "duration_ms": 597.0467749999953
      },
      {
        "id": "FE-REG-013",
        "status": "PASS",
        "duration_ms": 813.7245719999992
      },
      {
        "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": 2458.2498609999966
      },
      {
        "id": "FE-REG-022",
        "status": "PASS",
        "duration_ms": 2003.934752000001
      },
      {
        "id": "FE-REG-023",
        "status": "PASS",
        "duration_ms": 3911.7999999999956
      },
      {
        "id": "FE-REG-024",
        "status": "PASS",
        "duration_ms": 792.9541270000045
      },
      {
        "id": "FE-SETUP-001",
        "status": "PASS",
        "duration_ms": 4743.020261
      },
      {
        "id": "FE-SETUP-002",
        "status": "PASS",
        "duration_ms": 1778.6517090000007
      },
      {
        "id": "FE-SETUP-003",
        "status": "PASS",
        "duration_ms": 3145.6424289999995
      },
      {
        "id": "FE-SETUP-004",
        "status": "PASS",
        "duration_ms": 2515.247276
      },
      {
        "id": "FE-SETUP-005",
        "status": "PASS",
        "duration_ms": 4049.869649
      },
      {
        "id": "FE-SETUP-006",
        "status": "PASS",
        "duration_ms": 355.7157279999992
      },
      {
        "id": "FE-SETUP-007",
        "status": "PASS",
        "duration_ms": 5893.616529999999
      },
      {
        "id": "FE-CAMP-021",
        "status": "PASS",
        "duration_ms": 3230.6075090000004
      },
      {
        "id": "FE-CAMP-022",
        "status": "PASS",
        "duration_ms": 2380.3731319999997
      },
      {
        "id": "FE-CAMP-023",
        "status": "PASS",
        "duration_ms": 2075.6568450000004
      },
      {
        "id": "FE-CAMP-024",
        "status": "PASS",
        "duration_ms": 2379.3229570000003
      },
      {
        "id": "FE-CAMP-001",
        "status": "PASS",
        "duration_ms": 4639.374423
      },
      {
        "id": "FE-CAMP-002",
        "status": "PASS",
        "duration_ms": 4972.197964999999
      },
      {
        "id": "FE-CAMP-003",
        "status": "PASS",
        "duration_ms": 4704.082855000001
      },
      {
        "id": "FE-CAMP-004",
        "status": "PASS",
        "duration_ms": 6558.492031999998
      },
      {
        "id": "FE-CAMP-005",
        "status": "PASS",
        "duration_ms": 8765.181177000002
      },
      {
        "id": "FE-CAMP-006",
        "status": "PASS",
        "duration_ms": 5086.922852000003
      },
      {
        "id": "FE-CAMP-007",
        "status": "PASS",
        "duration_ms": 5922.442040000002
      },
      {
        "id": "FE-CAMP-008",
        "status": "PASS",
        "duration_ms": 3398.4116760000034
      },
      {
        "id": "FE-CAMP-009",
        "status": "PASS",
        "duration_ms": 11048.92134
      },
      {
        "id": "FE-CAMP-010",
        "status": "PASS",
        "duration_ms": 7204.3610090000075
      },
      {
        "id": "FE-CAMP-011",
        "status": "PASS",
        "duration_ms": 6636.577198999992
      },
      {
        "id": "FE-CAMP-012",
        "status": "PASS",
        "duration_ms": 36918.59454400001
      },
      {
        "id": "FE-CAMP-013",
        "status": "PASS",
        "duration_ms": 2669.3323799999926
      },
      {
        "id": "FE-CAMP-014",
        "status": "PASS",
        "duration_ms": 35995.255353000015
      },
      {
        "id": "FE-CAMP-015",
        "status": "PASS",
        "duration_ms": 0.4162470000155736
      },
      {
        "id": "FE-CAMP-016",
        "status": "PASS",
        "duration_ms": 4957.743783000013
      },
      {
        "id": "FE-CAMP-017",
        "status": "PASS",
        "duration_ms": 2312.218345000001
      },
      {
        "id": "FE-CAMP-018",
        "status": "PASS",
        "duration_ms": 5517.577456000028
      },
      {
        "id": "FE-CAMP-019",
        "status": "PASS",
        "duration_ms": 5719.334264000005
      },
      {
        "id": "FE-CAMP-020",
        "status": "PASS",
        "duration_ms": 7650.387145000015
      },
      {
        "id": "FE-DEAL-SEARCH-001",
        "status": "PASS",
        "duration_ms": 9117.972544
      },
      {
        "id": "FE-DEAL-SEARCH-002",
        "status": "PASS",
        "duration_ms": 6167.826759000001
      },
      {
        "id": "FE-DEAL-SEARCH-003",
        "status": "PASS",
        "duration_ms": 5789.973722999999
      },
      {
        "id": "FE-DEAL-SEARCH-004",
        "status": "PASS",
        "duration_ms": 6880.155365999999
      },
      {
        "id": "FE-DEAL-SEARCH-005",
        "status": "PASS",
        "duration_ms": 8.89925299999959
      },
      {
        "id": "FE-DEAL-SEARCH-006",
        "status": "PASS",
        "duration_ms": 5966.640097000003
      },
      {
        "id": "UNKNOWN-dzoe1s",
        "status": "PASS",
        "duration_ms": 5.153896000000032
      },
      {
        "id": "UNKNOWN-t83mlk",
        "status": "PASS",
        "duration_ms": 0.5424619999998868
      },
      {
        "id": "UNKNOWN-xsosqo",
        "status": "PASS",
        "duration_ms": 0.3599819999999454
      },
      {
        "id": "UNKNOWN-qxbtlf",
        "status": "PASS",
        "duration_ms": 13.767205999999987
      },
      {
        "id": "UNKNOWN-dc9d0u",
        "status": "PASS",
        "duration_ms": 0.3895169999998416
      },
      {
        "id": "UNKNOWN-pbnp9i",
        "status": "PASS",
        "duration_ms": 0.33823999999981424
      },
      {
        "id": "UNKNOWN-xzdegj",
        "status": "PASS",
        "duration_ms": 0.27092500000003383
      },
      {
        "id": "UNKNOWN-r22g4l",
        "status": "PASS",
        "duration_ms": 0.3530289999998786
      },
      {
        "id": "UNKNOWN-w8umew",
        "status": "PASS",
        "duration_ms": 0.3713740000000598
      },
      {
        "id": "UNKNOWN-x32c6a",
        "status": "PASS",
        "duration_ms": 0.4912259999998696
      },
      {
        "id": "FE-EMAIL-IN-012",
        "status": "PASS",
        "duration_ms": 348.8750909999999
      },
      {
        "id": "FE-EMAIL-IN-013",
        "status": "PASS",
        "duration_ms": 57.20429800000011
      },
      {
        "id": "FE-EMAIL-IN-014",
        "status": "PASS",
        "duration_ms": 0.3621160000002419
      },
      {
        "id": "FE-EMAIL-IN-001",
        "status": "PASS",
        "duration_ms": 2.818226999999979
      },
      {
        "id": "FE-EMAIL-IN-002",
        "status": "PASS",
        "duration_ms": 0.6234929999998258
      },
      {
        "id": "FE-EMAIL-IN-003",
        "status": "PASS",
        "duration_ms": 0.37377700000001823
      },
      {
        "id": "FE-EMAIL-IN-004",
        "status": "PASS",
        "duration_ms": 0.2746519999998327
      },
      {
        "id": "FE-EMAIL-IN-005",
        "status": "PASS",
        "duration_ms": 0.28002200000014454
      },
      {
        "id": "FE-EMAIL-IN-006",
        "status": "PASS",
        "duration_ms": 0.40353299999992487
      },
      {
        "id": "FE-EMAIL-IN-007",
        "status": "PASS",
        "duration_ms": 0.42171699999994416
      },
      {
        "id": "FE-EMAIL-IN-008",
        "status": "PASS",
        "duration_ms": 101.658545
      },
      {
        "id": "FE-EMAIL-IN-009",
        "status": "PASS",
        "duration_ms": 5.042687999999998
      },
      {
        "id": "FE-EMAIL-IN-010",
        "status": "PASS",
        "duration_ms": 1.0217669999999544
      },
      {
        "id": "FE-EMAIL-IN-011",
        "status": "PASS",
        "duration_ms": 0.4245930000001863
      },
      {
        "id": "FE-EMAIL-OUT-013",
        "status": "PASS",
        "duration_ms": 168.31577000000016
      },
      {
        "id": "FE-EMAIL-OUT-014",
        "status": "PASS",
        "duration_ms": 63.799207000000024
      },
      {
        "id": "FE-EMAIL-OUT-015",
        "status": "PASS",
        "duration_ms": 110.31479000000036
      },
      {
        "id": "FE-EMAIL-OUT-001",
        "status": "PASS",
        "duration_ms": 3202.1297999999997
      },
      {
        "id": "FE-EMAIL-OUT-002",
        "status": "PASS",
        "duration_ms": 1922.7335469999998
      },
      {
        "id": "FE-EMAIL-OUT-003",
        "status": "PASS",
        "duration_ms": 3.9425860000001194
      },
      {
        "id": "FE-EMAIL-OUT-004",
        "status": "PASS",
        "duration_ms": 1542.3790519999993
      },
      {
        "id": "FE-EMAIL-OUT-005",
        "status": "PASS",
        "duration_ms": 1.2442620000001625
      },
      {
        "id": "FE-EMAIL-OUT-006",
        "status": "PASS",
        "duration_ms": 0.42661600000064936
      },
      {
        "id": "FE-EMAIL-OUT-007",
        "status": "PASS",
        "duration_ms": 5219.633622000001
      },
      {
        "id": "FE-EMAIL-OUT-008",
        "status": "PASS",
        "duration_ms": 2.4613919999992504
      },
      {
        "id": "FE-EMAIL-OUT-009",
        "status": "PASS",
        "duration_ms": 6.068401999998969
      },
      {
        "id": "FE-EMAIL-OUT-010",
        "status": "PASS",
        "duration_ms": 35182.949489
      },
      {
        "id": "FE-EMAIL-OUT-011",
        "status": "PASS",
        "duration_ms": 0.4483970000001136
      },
      {
        "id": "FE-EMAIL-OUT-012",
        "status": "PASS",
        "duration_ms": 0.25522699999419274
      },
      {
        "id": "FE-EMAIL-001",
        "status": "PASS",
        "duration_ms": 7509.912055000001
      },
      {
        "id": "FE-EMAIL-002",
        "status": "PASS",
        "duration_ms": 5110.930274
      },
      {
        "id": "FE-EMAIL-003",
        "status": "PASS",
        "duration_ms": 9399.815465000001
      },
      {
        "id": "FE-EMAIL-004",
        "status": "PASS",
        "duration_ms": 8850.879504999997
      },
      {
        "id": "FE-EMAIL-005",
        "status": "PASS",
        "duration_ms": 5976.100567000001
      },
      {
        "id": "FE-EMAIL-006",
        "status": "PASS",
        "duration_ms": 5681.5253470000025
      },
      {
        "id": "FE-EMAIL-007",
        "status": "PASS",
        "duration_ms": 5950.092258000004
      },
      {
        "id": "FE-EMAIL-008",
        "status": "PASS",
        "duration_ms": 35620.75337
      },
      {
        "id": "FE-EMAIL-009",
        "status": "PASS",
        "duration_ms": 0.5725779999920633
      },
      {
        "id": "FE-EMAIL-010",
        "status": "PASS",
        "duration_ms": 7099.652528000006
      },
      {
        "id": "FE-EMAIL-011",
        "status": "PASS",
        "duration_ms": 5233.714426999999
      },
      {
        "id": "FE-EMAIL-012",
        "status": "PASS",
        "duration_ms": 0.4310540000005858
      },
      {
        "id": "FE-LAY-001",
        "status": "PASS",
        "duration_ms": 5560.3841
      },
      {
        "id": "FE-LAY-002",
        "status": "PASS",
        "duration_ms": 6332.103060999999
      },
      {
        "id": "FE-LAY-003",
        "status": "PASS",
        "duration_ms": 3931.5732989999997
      },
      {
        "id": "FE-LAY-004",
        "status": "PASS",
        "duration_ms": 0.49757799999861163
      },
      {
        "id": "FE-LAY-005",
        "status": "PASS",
        "duration_ms": 0.32003700000132085
      },
      {
        "id": "FE-LAY-006",
        "status": "PASS",
        "duration_ms": 0.34762899999986985
      },
      {
        "id": "FE-LAY-007",
        "status": "PASS",
        "duration_ms": 4.212088000000222
      },
      {
        "id": "FE-LAY-008",
        "status": "PASS",
        "duration_ms": 0.27253799999743933
      },
      {
        "id": "FE-CROSS-001",
        "status": "PASS",
        "duration_ms": 7716.544194999999
      },
      {
        "id": "FE-CROSS-002",
        "status": "PASS",
        "duration_ms": 0.5701139999982843
      },
      {
        "id": "FE-CROSS-003",
        "status": "PASS",
        "duration_ms": 4751.065873000003
      },
      {
        "id": "FE-CROSS-004",
        "status": "PASS",
        "duration_ms": 0.4315040000001318
      },
      {
        "id": "FE-CROSS-005",
        "status": "PASS",
        "duration_ms": 0.44547199999942677
      },
      {
        "id": "FE-CROSS-006",
        "status": "PASS",
        "duration_ms": 0.22458999999798834
      },
      {
        "id": "FE-CROSS-007",
        "status": "PASS",
        "duration_ms": 0.16684199999872362
      },
      {
        "id": "FE-CROSS-008",
        "status": "PASS",
        "duration_ms": 0.18822200000067824
      },
      {
        "id": "FE-CROSS-009",
        "status": "PASS",
        "duration_ms": 0.17529800000193063
      },
      {
        "id": "FE-CROSS-010",
        "status": "PASS",
        "duration_ms": 1.0345689999994647
      },
      {
        "id": "FE-NOTIF-001",
        "status": "PASS",
        "duration_ms": 6021.449499
      },
      {
        "id": "FE-NOTIF-002",
        "status": "PASS",
        "duration_ms": 1.2758700000003955
      },
      {
        "id": "FE-NOTIF-003",
        "status": "PASS",
        "duration_ms": 0.33884200000011333
      },
      {
        "id": "FE-NOTIF-004",
        "status": "PASS",
        "duration_ms": 0.21541200000046956
      },
      {
        "id": "FE-NOTIF-005",
        "status": "PASS",
        "duration_ms": 0.5812149999992471
      },
      {
        "id": "FE-NOTIF-006",
        "status": "PASS",
        "duration_ms": 0.2451970000001893
      },
      {
        "id": "FE-NOTIF-007",
        "status": "PASS",
        "duration_ms": 0.18049599999994825
      },
      {
        "id": "FE-NOTIF-008",
        "status": "PASS",
        "duration_ms": 0.27289900000050693
      },
      {
        "id": "FE-HELP-001",
        "status": "PASS",
        "duration_ms": 5173.291267
      },
      {
        "id": "FE-HELP-002",
        "status": "PASS",
        "duration_ms": 0.6500030000006518
      },
      {
        "id": "FE-HELP-003",
        "status": "PASS",
        "duration_ms": 0.2730699999992794
      },
      {
        "id": "FE-HELP-004",
        "status": "PASS",
        "duration_ms": 0.22486900000149035
      },
      {
        "id": "FE-HELP-005",
        "status": "PASS",
        "duration_ms": 5321.467538000001
      },
      {
        "id": "FE-HELP-006",
        "status": "PASS",
        "duration_ms": 0.43451099999947473
      },
      {
        "id": "FE-HELP-007",
        "status": "PASS",
        "duration_ms": 2.3680679999997665
      },
      {
        "id": "FE-HELP-008",
        "status": "PASS",
        "duration_ms": 0.5206309999994119
      },
      {
        "id": "FE-DEAL-001",
        "status": "PASS",
        "duration_ms": 117.35577000000012
      },
      {
        "id": "FE-DEAL-002",
        "status": "PASS",
        "duration_ms": 1.2572860000000219
      },
      {
        "id": "FE-DEAL-003",
        "status": "PASS",
        "duration_ms": 0.3637300000000323
      },
      {
        "id": "FE-DEAL-004",
        "status": "PASS",
        "duration_ms": 0.2901910000000498
      },
      {
        "id": "FE-DEAL-005",
        "status": "PASS",
        "duration_ms": 0.6741669999996702
      },
      {
        "id": "FE-DEAL-006",
        "status": "PASS",
        "duration_ms": 0.30292499999995925
      },
      {
        "id": "FE-DEAL-007",
        "status": "PASS",
        "duration_ms": 0.23724300000003495
      },
      {
        "id": "FE-DEAL-008",
        "status": "PASS",
        "duration_ms": 0.1901639999996405
      },
      {
        "id": "FE-DEAL-009",
        "status": "PASS",
        "duration_ms": 0.22066200000017488
      },
      {
        "id": "FE-DEAL-010",
        "status": "PASS",
        "duration_ms": 0.23489900000004127
      },
      {
        "id": "FE-DEAL-011",
        "status": "PASS",
        "duration_ms": 0.20501300000023548
      },
      {
        "id": "FE-DEAL-012",
        "status": "PASS",
        "duration_ms": 0.1815889999998035
      },
      {
        "id": "FE-DEAL-013",
        "status": "PASS",
        "duration_ms": 85.37581499999987
      },
      {
        "id": "FE-DEAL-014",
        "status": "PASS",
        "duration_ms": 22.868876
      },
      {
        "id": "FE-DEAL-015",
        "status": "PASS",
        "duration_ms": 0.2559479999999894
      },
      {
        "id": "FE-DEAL-016",
        "status": "PASS",
        "duration_ms": 0.19631600000002436
      },
      {
        "id": "FE-DEAL-017",
        "status": "PASS",
        "duration_ms": 0.17965500000036627
      },
      {
        "id": "FE-PERF-001",
        "status": "PASS",
        "duration_ms": 3581.7171609999996
      },
      {
        "id": "FE-PERF-002",
        "status": "PASS",
        "duration_ms": 3259.7274609999995
      },
      {
        "id": "FE-PERF-003",
        "status": "PASS",
        "duration_ms": 2874.449358
      },
      {
        "id": "FE-PERF-004",
        "status": "PASS",
        "duration_ms": 2094.2926100000004
      },
      {
        "id": "FE-PERF-005",
        "status": "PASS",
        "duration_ms": 3078.4497850000007
      },
      {
        "id": "FE-PERF-006",
        "status": "PASS",
        "duration_ms": 3869.1255180000007
      },
      {
        "id": "FE-PERF-007",
        "status": "PASS",
        "duration_ms": 4379.701903000001
      },
      {
        "id": "FE-PERF-008",
        "status": "PASS",
        "duration_ms": 8531.041632999997
      },
      {
        "id": "FE-PERF-009",
        "status": "PASS",
        "duration_ms": 5200.435380999996
      },
      {
        "id": "FE-PERF-010",
        "status": "PASS",
        "duration_ms": 5495.1491620000015
      },
      {
        "id": "FE-PERF-011",
        "status": "PASS",
        "duration_ms": 5331.061041000001
      },
      {
        "id": "FE-PERF-012",
        "status": "PASS",
        "duration_ms": 0.5859930000005988
      },
      {
        "id": "FE-PERF-013",
        "status": "PASS",
        "duration_ms": 3699.471701000002
      },
      {
        "id": "FE-PERF-014",
        "status": "PASS",
        "duration_ms": 0.43972000000212574
      },
      {
        "id": "FE-PERF-015",
        "status": "PASS",
        "duration_ms": 2129.01354
      },
      {
        "id": "FE-CSV-011",
        "status": "PASS",
        "duration_ms": 262.486308
      },
      {
        "id": "FE-CSV-012",
        "status": "PASS",
        "duration_ms": 0.41842099999985294
      },
      {
        "id": "FE-CSV-013",
        "status": "PASS",
        "duration_ms": 0.3674959999998464
      },
      {
        "id": "FE-CSV-014",
        "status": "PASS",
        "duration_ms": 0.3509249999999611
      },
      {
        "id": "FE-CSV-001",
        "status": "PASS",
        "duration_ms": 2705.8294810000007
      },
      {
        "id": "FE-CSV-002",
        "status": "PASS",
        "duration_ms": 0.7768200000000434
      },
      {
        "id": "FE-CSV-003",
        "status": "PASS",
        "duration_ms": 0.3332620000001043
      },
      {
        "id": "FE-CSV-004",
        "status": "PASS",
        "duration_ms": 0.35527300000012474
      },
      {
        "id": "FE-CSV-005",
        "status": "PASS",
        "duration_ms": 0.33972499999981665
      },
      {
        "id": "FE-CSV-006",
        "status": "PASS",
        "duration_ms": 6.978521000000001
      },
      {
        "id": "FE-CSV-007",
        "status": "PASS",
        "duration_ms": 0.4494089999998323
      },
      {
        "id": "FE-CSV-008",
        "status": "PASS",
        "duration_ms": 0.231923000000279
      },
      {
        "id": "FE-CSV-009",
        "status": "PASS",
        "duration_ms": 0.24188200000025972
      },
      {
        "id": "FE-CSV-010",
        "status": "PASS",
        "duration_ms": 8.489448999999695
      },
      {
        "id": "FE-SEAT-001",
        "status": "PASS",
        "duration_ms": 8984.741779
      },
      {
        "id": "FE-SEAT-002",
        "status": "PASS",
        "duration_ms": 2.4488769999989017
      },
      {
        "id": "FE-SEAT-003",
        "status": "PASS",
        "duration_ms": 0.36586199999874225
      },
      {
        "id": "FE-SEAT-004",
        "status": "PASS",
        "duration_ms": 5098.708597000001
      },
      {
        "id": "FE-SEAT-005",
        "status": "PASS",
        "duration_ms": 0.4897430000000895
      },
      {
        "id": "FE-SEAT-006",
        "status": "PASS",
        "duration_ms": 6.050366999999824
      },
      {
        "id": "FE-SEAT-007",
        "status": "PASS",
        "duration_ms": 0.7548179999994318
      },
      {
        "id": "FE-SEAT-008",
        "status": "PASS",
        "duration_ms": 0.26214900000013586
      },
      {
        "id": "FE-SEAT-009",
        "status": "PASS",
        "duration_ms": 2825.9166259999984
      },
      {
        "id": "FE-AH-001",
        "status": "PASS",
        "duration_ms": 0.5377840000001015
      },
      {
        "id": "FE-AH-002",
        "status": "PASS",
        "duration_ms": 0.32867199999964214
      },
      {
        "id": "FE-AH-003",
        "status": "PASS",
        "duration_ms": 0.7237809999969613
      },
      {
        "id": "FE-AH-004",
        "status": "PASS",
        "duration_ms": 0.6390009999995527
      },
      {
        "id": "FE-SIG-001",
        "status": "PASS",
        "duration_ms": 1.816979999999603
      },
      {
        "id": "FE-SIG-002",
        "status": "PASS",
        "duration_ms": 0.6668840000020282
      },
      {
        "id": "FE-SIG-003",
        "status": "PASS",
        "duration_ms": 0.2716770000006363
      },
      {
        "id": "FE-SIG-004",
        "status": "PASS",
        "duration_ms": 0.30830499999865424
      },
      {
        "id": "FE-SIG-005",
        "status": "PASS",
        "duration_ms": 2.6346550000016578
      },
      {
        "id": "FE-MISC-001",
        "status": "PASS",
        "duration_ms": 0.28145600000061677
      },
      {
        "id": "FE-MISC-002",
        "status": "PASS",
        "duration_ms": 0.4692059999979392
      },
      {
        "id": "FE-MISC-003",
        "status": "PASS",
        "duration_ms": 0.2943090000007942
      },
      {
        "id": "FE-MISC-004",
        "status": "PASS",
        "duration_ms": 0.8536729999977979
      },
      {
        "id": "FE-MISC-005",
        "status": "PASS",
        "duration_ms": 0.5056530000001658
      },
      {
        "id": "FE-MISC-006",
        "status": "PASS",
        "duration_ms": 3544.540878
      },
      {
        "id": "FE-MISC-007",
        "status": "PASS",
        "duration_ms": 1.5525149999994028
      },
      {
        "id": "FE-MISC-008",
        "status": "PASS",
        "duration_ms": 0.23854500000015832
      },
      {
        "id": "FE-MISC-009",
        "status": "PASS",
        "duration_ms": 0.1421440000012808
      },
      {
        "id": "FE-MISC-010",
        "status": "PASS",
        "duration_ms": 0.13533300000199233
      },
      {
        "id": "FE-PUR-001",
        "status": "PASS",
        "duration_ms": 5313.565967999999
      },
      {
        "id": "FE-PUR-002",
        "status": "PASS",
        "duration_ms": 3.9025199999996403
      },
      {
        "id": "FE-PUR-003",
        "status": "PASS",
        "duration_ms": 1.422113000000536
      },
      {
        "id": "FE-PUR-004",
        "status": "PASS",
        "duration_ms": 0.5371110000014596
      },
      {
        "id": "FE-PUR-005",
        "status": "PASS",
        "duration_ms": 6910.210921000002
      },
      {
        "id": "FE-PUR-006",
        "status": "PASS",
        "duration_ms": 0.5137679999970715
      },
      {
        "id": "FE-PUR-007",
        "status": "PASS",
        "duration_ms": 0.27310900000156835
      },
      {
        "id": "FE-PUR-008",
        "status": "PASS",
        "duration_ms": 0.3050999999977648
      },
      {
        "id": "FE-ACT-VM-001",
        "status": "PASS",
        "duration_ms": 3004.2687929999997
      },
      {
        "id": "FE-ACT-VM-002",
        "status": "PASS",
        "duration_ms": 0.5737500000004729
      },
      {
        "id": "FE-ACT-VM-003",
        "status": "PASS",
        "duration_ms": 0.47051699999974517
      },
      {
        "id": "FE-ACT-VM-004",
        "status": "PASS",
        "duration_ms": 0.3077339999999822
      },
      {
        "id": "FE-ACT-VM-005",
        "status": "PASS",
        "duration_ms": 0.34514499999932013
      },
      {
        "id": "FE-ACT-VM-006",
        "status": "PASS",
        "duration_ms": 0.4213759999993272
      },
      {
        "id": "FE-ACT-VM-007",
        "status": "PASS",
        "duration_ms": 0.9745470000007117
      },
      {
        "id": "FE-ACT-AIC-001",
        "status": "PASS",
        "duration_ms": 2965.723801
      },
      {
        "id": "FE-ACT-AIC-002",
        "status": "PASS",
        "duration_ms": 0.5443749999994907
      },
      {
        "id": "FE-ACT-AIC-003",
        "status": "PASS",
        "duration_ms": 0.42807900000025256
      },
      {
        "id": "FE-ACT-AIC-004",
        "status": "PASS",
        "duration_ms": 0.2578620000003866
      },
      {
        "id": "FE-ACT-AIC-005",
        "status": "PASS",
        "duration_ms": 0.3372799999997369
      },
      {
        "id": "FE-ACT-BBS-001",
        "status": "PASS",
        "duration_ms": 2508.0596299999997
      },
      {
        "id": "FE-ACT-BBS-002",
        "status": "PASS",
        "duration_ms": 0.3832560000009835
      },
      {
        "id": "FE-ACT-BBS-003",
        "status": "PASS",
        "duration_ms": 0.3567659999989701
      },
      {
        "id": "FE-ACT-PD-001",
        "status": "PASS",
        "duration_ms": 1943.8340710000011
      },
      {
        "id": "FE-ACT-PD-002",
        "status": "PASS",
        "duration_ms": 3.7060639999999694
      },
      {
        "id": "FE-ACT-PD-003",
        "status": "PASS",
        "duration_ms": 1.8294029999997292
      },
      {
        "id": "FE-ACT-PD-004",
        "status": "PASS",
        "duration_ms": 0.2788700000000972
      },
      {
        "id": "FE-ACT-PD-005",
        "status": "PASS",
        "duration_ms": 0.21723500000007334
      },
      {
        "id": "UNKNOWN-hogc7o",
        "status": "PASS",
        "duration_ms": 2333.286164000001
      },
      {
        "id": "UNKNOWN-sr1p10",
        "status": "PASS",
        "duration_ms": 76.52646199999981
      },
      {
        "id": "UNKNOWN-6sx43v",
        "status": "PASS",
        "duration_ms": 0.38242299999910756
      },
      {
        "id": "UNKNOWN-zz24ml",
        "status": "PASS",
        "duration_ms": 0.19260899999972025
      },
      {
        "id": "FE-ACT-SF-001",
        "status": "PASS",
        "duration_ms": 2839.506356
      },
      {
        "id": "FE-ACT-SF-002",
        "status": "PASS",
        "duration_ms": 0.4882609999986016
      },
      {
        "id": "FE-ACT-SF-003",
        "status": "PASS",
        "duration_ms": 4.043452999998408
      },
      {
        "id": "FE-ACT-SF-004",
        "status": "PASS",
        "duration_ms": 0.22045100000104867
      },
      {
        "id": "FE-VM-001",
        "status": "PASS",
        "duration_ms": 5156.482891000001
      },
      {
        "id": "FE-VM-002",
        "status": "PASS",
        "duration_ms": 1.3377769999997327
      },
      {
        "id": "FE-VM-003",
        "status": "PASS",
        "duration_ms": 0.548993999999766
      },
      {
        "id": "FE-VM-004",
        "status": "PASS",
        "duration_ms": 0.34774900000047637
      },
      {
        "id": "FE-VM-005",
        "status": "PASS",
        "duration_ms": 0.3836459999993167
      },
      {
        "id": "FE-VM-006",
        "status": "PASS",
        "duration_ms": 0.7276870000005147
      },
      {
        "id": "FE-SEC-001",
        "status": "PASS",
        "duration_ms": 254.4573509999998
      },
      {
        "id": "FE-SEC-002",
        "status": "PASS",
        "duration_ms": 22.135667999999896
      },
      {
        "id": "FE-SEC-003",
        "status": "PASS",
        "duration_ms": 0.7793839999999363
      },
      {
        "id": "FE-SEC-004",
        "status": "PASS",
        "duration_ms": 0.43665500000020074
      },
      {
        "id": "FE-SEC-005",
        "status": "PASS",
        "duration_ms": 0.41283000000021275
      },
      {
        "id": "FE-SEC-006",
        "status": "PASS",
        "duration_ms": 0.8473109999999906
      },
      {
        "id": "FE-SEC-007",
        "status": "PASS",
        "duration_ms": 6115.583557
      },
      {
        "id": "FE-SEC-008",
        "status": "PASS",
        "duration_ms": 3.621635999999853
      },
      {
        "id": "FE-SEC-009",
        "status": "PASS",
        "duration_ms": 0.40128900000036083
      },
      {
        "id": "FE-SEC-010",
        "status": "PASS",
        "duration_ms": 0.5146709999999075
      },
      {
        "id": "FE-SEC-011",
        "status": "PASS",
        "duration_ms": 1.918800000000374
      },
      {
        "id": "FE-SEC-012",
        "status": "PASS",
        "duration_ms": 0.37207499999931315
      },
      {
        "id": "FE-SEC-013",
        "status": "PASS",
        "duration_ms": 0.4077109999998356
      },
      {
        "id": "FE-SEC-014",
        "status": "PASS",
        "duration_ms": 463.9421349999993
      },
      {
        "id": "FE-SEC-015",
        "status": "PASS",
        "duration_ms": 0.5600150000009307
      },
      {
        "id": "FE-ROLE-001",
        "status": "PASS",
        "duration_ms": 2211.5447490000006
      },
      {
        "id": "FE-ROLE-002",
        "status": "PASS",
        "duration_ms": 3736.2673080000004
      },
      {
        "id": "FE-ROLE-003",
        "status": "PASS",
        "duration_ms": 0.4915679999994609
      },
      {
        "id": "FE-ROLE-004",
        "status": "PASS",
        "duration_ms": 0.5328249999984109
      },
      {
        "id": "FE-ROLE-005",
        "status": "PASS",
        "duration_ms": 0.3013019999998505
      },
      {
        "id": "FE-ROLE-006",
        "status": "PASS",
        "duration_ms": 0.2524200000007113
      },
      {
        "id": "UNKNOWN-2nen14",
        "status": "PASS",
        "duration_ms": 171.45789300000013
      },
      {
        "id": "UNKNOWN-jjyv39",
        "status": "PASS",
        "duration_ms": 85.61102699999992
      },
      {
        "id": "UNKNOWN-p55aig",
        "status": "PASS",
        "duration_ms": 80.246938
      },
      {
        "id": "FE-PHONE-001",
        "status": "PASS",
        "duration_ms": 5204.207968
      },
      {
        "id": "FE-PHONE-002",
        "status": "PASS",
        "duration_ms": 8528.907858
      },
      {
        "id": "FE-PHONE-003",
        "status": "PASS",
        "duration_ms": 4622.201472000001
      },
      {
        "id": "FE-PHONE-004",
        "status": "PASS",
        "duration_ms": 5761.6609690000005
      },
      {
        "id": "FE-PHONE-005",
        "status": "PASS",
        "duration_ms": 3.8089170000021113
      },
      {
        "id": "FE-PHONE-006",
        "status": "PASS",
        "duration_ms": 1.0075900000010733
      },
      {
        "id": "FE-PHONE-007",
        "status": "PASS",
        "duration_ms": 0.3181530000001658
      },
      {
        "id": "FE-PHONE-008",
        "status": "PASS",
        "duration_ms": 0.18337200000314624
      },
      {
        "id": "FE-PHONE-009",
        "status": "PASS",
        "duration_ms": 0.34879999999975553
      },
      {
        "id": "FE-SMS-TOKY-001",
        "status": "PASS",
        "duration_ms": 2.3638999999998305
      },
      {
        "id": "FE-SMS-TOKY-002",
        "status": "PASS",
        "duration_ms": 0.3588190000000395
      },
      {
        "id": "FE-SMS-TOKY-003",
        "status": "PASS",
        "duration_ms": 0.34682699999984834
      },
      {
        "id": "FE-SMS-TOKY-004",
        "status": "PASS",
        "duration_ms": 0.36385900000004767
      },
      {
        "id": "FE-SMS-TOKY-005",
        "status": "PASS",
        "duration_ms": 0.5165839999999662
      },
      {
        "id": "FE-SMS-TOKY-006",
        "status": "PASS",
        "duration_ms": 4.194324999999935
      },
      {
        "id": "FE-SMS-TOKY-007",
        "status": "PASS",
        "duration_ms": 0.273569999999836
      },
      {
        "id": "FE-SMS-TOKY-008",
        "status": "PASS",
        "duration_ms": 0.20203599999967992
      },
      {
        "id": "FE-SMS-TOKY-009",
        "status": "PASS",
        "duration_ms": 0.3203680000001441
      },
      {
        "id": "FE-SMS-TOKY-010",
        "status": "PASS",
        "duration_ms": 147.85075000000006
      },
      {
        "id": "FE-SMS-TOKY-011",
        "status": "PASS",
        "duration_ms": 0.312923999999839
      },
      {
        "id": "FE-SMS-TOKY-012",
        "status": "PASS",
        "duration_ms": 0.4843430000000808
      },
      {
        "id": "FE-SMS-TOKY-013",
        "status": "PASS",
        "duration_ms": 0.5610160000001088
      },
      {
        "id": "FE-SMS-TOKY-014",
        "status": "PASS",
        "duration_ms": 1.5290829999999005
      },
      {
        "id": "FE-SMS-TOKY-015",
        "status": "PASS",
        "duration_ms": 0.25301100000024235
      },
      {
        "id": "FE-SMS-TOKY-016",
        "status": "PASS",
        "duration_ms": 0.22521099999994476
      },
      {
        "id": "FE-SMS-TOKY-017",
        "status": "PASS",
        "duration_ms": 0.1479250000002139
      },
      {
        "id": "FE-SMS-TOKY-018",
        "status": "PASS",
        "duration_ms": 0.16823500000009517
      },
      {
        "id": "FE-SMS-TOKY-019",
        "status": "PASS",
        "duration_ms": 0.18562599999995655
      },
      {
        "id": "FE-SMS-TOKY-020",
        "status": "PASS",
        "duration_ms": 0.2231059999999161
      },
      {
        "id": "FE-SMS-TW-001",
        "status": "PASS",
        "duration_ms": 1.8387410000000273
      },
      {
        "id": "FE-SMS-TW-002",
        "status": "PASS",
        "duration_ms": 0.3079640000000836
      },
      {
        "id": "FE-SMS-TW-003",
        "status": "PASS",
        "duration_ms": 0.32521700000006604
      },
      {
        "id": "FE-SMS-TW-004",
        "status": "PASS",
        "duration_ms": 0.33952399999998306
      },
      {
        "id": "FE-SMS-TW-005",
        "status": "PASS",
        "duration_ms": 0.22929799999997158
      },
      {
        "id": "FE-SMS-TW-006",
        "status": "PASS",
        "duration_ms": 0.29989899999986847
      },
      {
        "id": "FE-SMS-TW-007",
        "status": "PASS",
        "duration_ms": 0.4675119999999424
      },
      {
        "id": "FE-SMS-TW-008",
        "status": "PASS",
        "duration_ms": 0.3461160000001655
      },
      {
        "id": "FE-SMS-TW-009",
        "status": "PASS",
        "duration_ms": 0.39824300000009316
      },
      {
        "id": "FE-SMS-TW-010",
        "status": "PASS",
        "duration_ms": 0.3599010000000362
      },
      {
        "id": "FE-SMS-TW-011",
        "status": "PASS",
        "duration_ms": 104.88570699999991
      },
      {
        "id": "FE-SMS-TW-012",
        "status": "PASS",
        "duration_ms": 0.4233400000000529
      },
      {
        "id": "FE-SET-G-016",
        "status": "PASS",
        "duration_ms": 3116.1511269999996
      },
      {
        "id": "FE-SET-G-017",
        "status": "PASS",
        "duration_ms": 2605.6856590000007
      },
      {
        "id": "FE-SET-G-018",
        "status": "PASS",
        "duration_ms": 2707.1014030000006
      },
      {
        "id": "FE-SET-G-001",
        "status": "PASS",
        "duration_ms": 9003.508824
      },
      {
        "id": "FE-SET-G-002",
        "status": "PASS",
        "duration_ms": 7497.713575000002
      },
      {
        "id": "FE-SET-G-003",
        "status": "PASS",
        "duration_ms": 0.4380479999999807
      },
      {
        "id": "FE-SET-G-004",
        "status": "PASS",
        "duration_ms": 0.29159400000207825
      },
      {
        "id": "FE-SET-G-005",
        "status": "PASS",
        "duration_ms": 0.32708999999886146
      },
      {
        "id": "FE-SET-G-006",
        "status": "PASS",
        "duration_ms": 6712.1552599999995
      },
      {
        "id": "FE-SET-G-007",
        "status": "PASS",
        "duration_ms": 0.47022699999797624
      },
      {
        "id": "FE-SET-G-008",
        "status": "PASS",
        "duration_ms": 13.04959400000007
      },
      {
        "id": "FE-SET-G-009",
        "status": "PASS",
        "duration_ms": 0.5022270000008575
      },
      {
        "id": "FE-SET-G-010",
        "status": "PASS",
        "duration_ms": 0.3530179999979737
      },
      {
        "id": "FE-SET-G-011",
        "status": "PASS",
        "duration_ms": 0.4014790000001085
      },
      {
        "id": "FE-SET-G-012",
        "status": "PASS",
        "duration_ms": 0.2141090000004624
      },
      {
        "id": "FE-SET-G-013",
        "status": "PASS",
        "duration_ms": 0.19345099999918602
      },
      {
        "id": "FE-SET-G-014",
        "status": "PASS",
        "duration_ms": 0.6261080000003858
      },
      {
        "id": "FE-SET-G-015",
        "status": "PASS",
        "duration_ms": 0.20102499999848078
      },
      {
        "id": "FE-SET-S-001",
        "status": "PASS",
        "duration_ms": 4768.8608840000015
      },
      {
        "id": "FE-SET-S-002",
        "status": "PASS",
        "duration_ms": 0.41444400000182213
      },
      {
        "id": "FE-SET-S-003",
        "status": "PASS",
        "duration_ms": 0.34155699999973876
      },
      {
        "id": "FE-SET-S-004",
        "status": "PASS",
        "duration_ms": 3.3279879999972763
      },
      {
        "id": "FE-SET-S-005",
        "status": "PASS",
        "duration_ms": 0.503459000003204
      },
      {
        "id": "FE-SET-S-006",
        "status": "PASS",
        "duration_ms": 1.0881210000006831
      },
      {
        "id": "FE-SET-S-007",
        "status": "PASS",
        "duration_ms": 0.2627809999976307
      },
      {
        "id": "FE-SET-M-001",
        "status": "PASS",
        "duration_ms": 6173.034062999999
      },
      {
        "id": "FE-SET-M-002",
        "status": "PASS",
        "duration_ms": 0.4435059999959776
      },
      {
        "id": "FE-SET-M-003",
        "status": "PASS",
        "duration_ms": 0.2367519999970682
      },
      {
        "id": "FE-SET-M-004",
        "status": "PASS",
        "duration_ms": 0.30872599999565864
      },
      {
        "id": "FE-SET-M-005",
        "status": "PASS",
        "duration_ms": 0.23373600000195438
      },
      {
        "id": "FE-SET-M-006",
        "status": "PASS",
        "duration_ms": 2.9001400000051945
      },
      {
        "id": "FE-USER-001",
        "status": "PASS",
        "duration_ms": 5175.661627999994
      },
      {
        "id": "FE-USER-002",
        "status": "PASS",
        "duration_ms": 5682.023916999999
      },
      {
        "id": "FE-USER-003",
        "status": "PASS",
        "duration_ms": 2.47099999999773
      },
      {
        "id": "FE-USER-004",
        "status": "PASS",
        "duration_ms": 0.3050589999984368
      },
      {
        "id": "FE-USER-005",
        "status": "PASS",
        "duration_ms": 0.3116020000015851
      },
      {
        "id": "FE-USER-006",
        "status": "PASS",
        "duration_ms": 0.3216400000019348
      }
    ]
  },
  "results": [
    {
      "id": "FE-ACT-001",
      "description": "Outbound SMS produces 'SMS Sent' activity (smoke)",
      "status": "PASS",
      "duration_ms": 7.58994000000007,
      "file_path": "/app/runner/tests/activity/fe-activity.test.ts",
      "test_path": "tests/activity/fe-activity.test.ts > Activity feed (FE-ACT) > FE-ACT-001 — Outbound SMS produces 'SMS Sent' activity (smoke)"
    },
    {
      "id": "FE-ACT-002",
      "description": "Inbound SMS produces 'SMS Received' activity (smoke)",
      "status": "PASS",
      "duration_ms": 0.4420540000000983,
      "file_path": "/app/runner/tests/activity/fe-activity.test.ts",
      "test_path": "tests/activity/fe-activity.test.ts > Activity feed (FE-ACT) > FE-ACT-002 — Inbound SMS produces 'SMS Received' activity (smoke)"
    },
    {
      "id": "FE-ACT-003",
      "description": "Email sent produces 'Email Sent' activity (smoke)",
      "status": "PASS",
      "duration_ms": 0.30678199999988465,
      "file_path": "/app/runner/tests/activity/fe-activity.test.ts",
      "test_path": "tests/activity/fe-activity.test.ts > Activity feed (FE-ACT) > FE-ACT-003 — Email sent produces 'Email Sent' activity (smoke)"
    },
    {
      "id": "FE-ACT-004",
      "description": "Email received produces 'Email Received' activity (smoke)",
      "status": "PASS",
      "duration_ms": 5.802846000000045,
      "file_path": "/app/runner/tests/activity/fe-activity.test.ts",
      "test_path": "tests/activity/fe-activity.test.ts > Activity feed (FE-ACT) > FE-ACT-004 — Email received produces 'Email Received' activity (smoke)"
    },
    {
      "id": "FE-ACT-005",
      "description": "A2P brand approved produces activity (smoke)",
      "status": "PASS",
      "duration_ms": 0.3429800000001251,
      "file_path": "/app/runner/tests/activity/fe-activity.test.ts",
      "test_path": "tests/activity/fe-activity.test.ts > Activity feed (FE-ACT) > FE-ACT-005 — A2P brand approved produces activity (smoke)"
    },
    {
      "id": "FE-ACT-006",
      "description": "Phone purchase produces 'Phone Number Purchased' (smoke)",
      "status": "PASS",
      "duration_ms": 1.80642899999998,
      "file_path": "/app/runner/tests/activity/fe-activity.test.ts",
      "test_path": "tests/activity/fe-activity.test.ts > Activity feed (FE-ACT) > FE-ACT-006 — Phone purchase produces 'Phone Number Purchased' (smoke)"
    },
    {
      "id": "FE-ACT-007",
      "description": "Toky import produces 'Phone Number Imported' (smoke)",
      "status": "PASS",
      "duration_ms": 0.4903150000000096,
      "file_path": "/app/runner/tests/activity/fe-activity.test.ts",
      "test_path": "tests/activity/fe-activity.test.ts > Activity feed (FE-ACT) > FE-ACT-007 — Toky import produces 'Phone Number Imported' (smoke)"
    },
    {
      "id": "FE-ACT-008",
      "description": "Deal-loss negative-sentiment activity (smoke)",
      "status": "PASS",
      "duration_ms": 0.2749340000000302,
      "file_path": "/app/runner/tests/activity/fe-activity.test.ts",
      "test_path": "tests/activity/fe-activity.test.ts > Activity feed (FE-ACT) > FE-ACT-008 — Deal-loss negative-sentiment activity (smoke)"
    },
    {
      "id": "FE-ACT-009",
      "description": "Stage processing failure activity (smoke)",
      "status": "PASS",
      "duration_ms": 0.338561000000027,
      "file_path": "/app/runner/tests/activity/fe-activity.test.ts",
      "test_path": "tests/activity/fe-activity.test.ts > Activity feed (FE-ACT) > FE-ACT-009 — Stage processing failure activity (smoke)"
    },
    {
      "id": "FE-ACT-010",
      "description": "Activities mark-read endpoints respond",
      "status": "PASS",
      "duration_ms": 3844.8432900000007,
      "file_path": "/app/runner/tests/activity/fe-activity.test.ts",
      "test_path": "tests/activity/fe-activity.test.ts > Activity feed (FE-ACT) > FE-ACT-010 — Activities mark-read endpoints respond"
    },
    {
      "id": "FE-ACT-011",
      "description": "Activity feed scoped to current account_id (smoke)",
      "status": "PASS",
      "duration_ms": 0.4899439999999231,
      "file_path": "/app/runner/tests/activity/fe-activity.test.ts",
      "test_path": "tests/activity/fe-activity.test.ts > Activity feed (FE-ACT) > FE-ACT-011 — Activity feed scoped to current account_id (smoke)"
    },
    {
      "id": "FE-ADM-001",
      "description": "/admin/dashboard renders without crashing",
      "status": "PASS",
      "duration_ms": 5741.698877000001,
      "file_path": "/app/runner/tests/admin/fe-admin.test.ts",
      "test_path": "tests/admin/fe-admin.test.ts > Admin (FE-ADM) > FE-ADM-001 — /admin/dashboard renders without crashing"
    },
    {
      "id": "FE-ADM-003",
      "description": "/admin/billing renders without crashing",
      "status": "PASS",
      "duration_ms": 5759.218000999999,
      "file_path": "/app/runner/tests/admin/fe-admin.test.ts",
      "test_path": "tests/admin/fe-admin.test.ts > Admin (FE-ADM) > FE-ADM-003 — /admin/billing renders without crashing"
    },
    {
      "id": "FE-ADM-004",
      "description": "/admin/billing/clients renders without crashing",
      "status": "PASS",
      "duration_ms": 4550.153918,
      "file_path": "/app/runner/tests/admin/fe-admin.test.ts",
      "test_path": "tests/admin/fe-admin.test.ts > Admin (FE-ADM) > FE-ADM-004 — /admin/billing/clients renders without crashing"
    },
    {
      "id": "FE-ADM-005",
      "description": "/admin/billing/payments renders without crashing",
      "status": "PASS",
      "duration_ms": 3192.885094000001,
      "file_path": "/app/runner/tests/admin/fe-admin.test.ts",
      "test_path": "tests/admin/fe-admin.test.ts > Admin (FE-ADM) > FE-ADM-005 — /admin/billing/payments renders without crashing"
    },
    {
      "id": "FE-ADM-006",
      "description": "/admin/campaigns renders without crashing",
      "status": "PASS",
      "duration_ms": 4535.447500999999,
      "file_path": "/app/runner/tests/admin/fe-admin.test.ts",
      "test_path": "tests/admin/fe-admin.test.ts > Admin (FE-ADM) > FE-ADM-006 — /admin/campaigns renders without crashing"
    },
    {
      "id": "FE-ADM-007",
      "description": "/admin/campaigns/analytics renders without crashing",
      "status": "PASS",
      "duration_ms": 4601.145060999999,
      "file_path": "/app/runner/tests/admin/fe-admin.test.ts",
      "test_path": "tests/admin/fe-admin.test.ts > Admin (FE-ADM) > FE-ADM-007 — /admin/campaigns/analytics renders without crashing"
    },
    {
      "id": "FE-ADM-008",
      "description": "/admin/campaigns/templates renders without crashing",
      "status": "PASS",
      "duration_ms": 4153.524246000001,
      "file_path": "/app/runner/tests/admin/fe-admin.test.ts",
      "test_path": "tests/admin/fe-admin.test.ts > Admin (FE-ADM) > FE-ADM-008 — /admin/campaigns/templates renders without crashing"
    },
    {
      "id": "FE-ADM-012",
      "description": "/admin/pricing/plans renders without crashing",
      "status": "PASS",
      "duration_ms": 3753.191877999998,
      "file_path": "/app/runner/tests/admin/fe-admin.test.ts",
      "test_path": "tests/admin/fe-admin.test.ts > Admin (FE-ADM) > FE-ADM-012 — /admin/pricing/plans renders without crashing"
    },
    {
      "id": "FE-ADM-013",
      "description": "/admin/pricing/plans/create renders without crashing",
      "status": "PASS",
      "duration_ms": 5293.377572000005,
      "file_path": "/app/runner/tests/admin/fe-admin.test.ts",
      "test_path": "tests/admin/fe-admin.test.ts > Admin (FE-ADM) > FE-ADM-013 — /admin/pricing/plans/create renders without crashing"
    },
    {
      "id": "FE-ADM-014",
      "description": "/admin/pricing/promo-codes renders without crashing",
      "status": "PASS",
      "duration_ms": 4639.372976999999,
      "file_path": "/app/runner/tests/admin/fe-admin.test.ts",
      "test_path": "tests/admin/fe-admin.test.ts > Admin (FE-ADM) > FE-ADM-014 — /admin/pricing/promo-codes renders without crashing"
    },
    {
      "id": "FE-ADM-015",
      "description": "/admin/pricing/addons renders without crashing",
      "status": "PASS",
      "duration_ms": 7295.374079000001,
      "file_path": "/app/runner/tests/admin/fe-admin.test.ts",
      "test_path": "tests/admin/fe-admin.test.ts > Admin (FE-ADM) > FE-ADM-015 — /admin/pricing/addons renders without crashing"
    },
    {
      "id": "FE-ADM-016",
      "description": "/admin/user-settings renders without crashing",
      "status": "PASS",
      "duration_ms": 4128.2120739999955,
      "file_path": "/app/runner/tests/admin/fe-admin.test.ts",
      "test_path": "tests/admin/fe-admin.test.ts > Admin (FE-ADM) > FE-ADM-016 — /admin/user-settings renders without crashing"
    },
    {
      "id": "FE-ADM-002",
      "description": "Sidebar shows Billing/Dashboard/Pricing/Campaigns (smoke)",
      "status": "PASS",
      "duration_ms": 9.947539000000688,
      "file_path": "/app/runner/tests/admin/fe-admin.test.ts",
      "test_path": "tests/admin/fe-admin.test.ts > Admin (FE-ADM) > FE-ADM-002 — Sidebar shows Billing/Dashboard/Pricing/Campaigns (smoke)"
    },
    {
      "id": "FE-ADM-017",
      "description": "MEMBER role hits /admin/dashboard → 403 or redirect",
      "status": "PASS",
      "duration_ms": 4885.307007999996,
      "file_path": "/app/runner/tests/admin/fe-admin.test.ts",
      "test_path": "tests/admin/fe-admin.test.ts > Admin (FE-ADM) > FE-ADM-017 — MEMBER role hits /admin/dashboard → 403 or redirect"
    },
    {
      "id": "FE-ADM-018",
      "description": "/admin/* on prod hostname → redirected (skip on staging)",
      "status": "PASS",
      "duration_ms": 0.4017299999977695,
      "file_path": "/app/runner/tests/admin/fe-admin.test.ts",
      "test_path": "tests/admin/fe-admin.test.ts > Admin (FE-ADM) > FE-ADM-018 — /admin/* on prod hostname → redirected (skip on staging)"
    },
    {
      "id": "FE-ADM-PLAN-001",
      "description": "Plans list renders",
      "status": "PASS",
      "duration_ms": 4226.3303030000025,
      "file_path": "/app/runner/tests/admin/fe-admin.test.ts",
      "test_path": "tests/admin/fe-admin.test.ts > Admin — Plans CRUD (FE-ADM-PLAN) > FE-ADM-PLAN-001 — Plans list renders"
    },
    {
      "id": "FE-ADM-PLAN-002",
      "description": "Create form validates required fields (smoke)",
      "status": "PASS",
      "duration_ms": 0.4634539999970002,
      "file_path": "/app/runner/tests/admin/fe-admin.test.ts",
      "test_path": "tests/admin/fe-admin.test.ts > Admin — Plans CRUD (FE-ADM-PLAN) > FE-ADM-PLAN-002 — Create form validates required fields (smoke)"
    },
    {
      "id": "FE-ADM-PLAN-003",
      "description": "POST /v1/admin/plans creates plan (smoke)",
      "status": "PASS",
      "duration_ms": 0.3519559999986086,
      "file_path": "/app/runner/tests/admin/fe-admin.test.ts",
      "test_path": "tests/admin/fe-admin.test.ts > Admin — Plans CRUD (FE-ADM-PLAN) > FE-ADM-PLAN-003 — POST /v1/admin/plans creates plan (smoke)"
    },
    {
      "id": "FE-ADM-PLAN-004",
      "description": "PUT updates plan, public endpoint reflects (smoke)",
      "status": "PASS",
      "duration_ms": 0.2211819999938598,
      "file_path": "/app/runner/tests/admin/fe-admin.test.ts",
      "test_path": "tests/admin/fe-admin.test.ts > Admin — Plans CRUD (FE-ADM-PLAN) > FE-ADM-PLAN-004 — PUT updates plan, public endpoint reflects (smoke)"
    },
    {
      "id": "FE-ADM-PLAN-005",
      "description": "Delete with active subs → friendly block (smoke)",
      "status": "PASS",
      "duration_ms": 0.2721880000026431,
      "file_path": "/app/runner/tests/admin/fe-admin.test.ts",
      "test_path": "tests/admin/fe-admin.test.ts > Admin — Plans CRUD (FE-ADM-PLAN) > FE-ADM-PLAN-005 — Delete with active subs → friendly block (smoke)"
    },
    {
      "id": "FE-ADM-PLAN-006",
      "description": "Delete unused plan succeeds (smoke)",
      "status": "PASS",
      "duration_ms": 5.310448000003817,
      "file_path": "/app/runner/tests/admin/fe-admin.test.ts",
      "test_path": "tests/admin/fe-admin.test.ts > Admin — Plans CRUD (FE-ADM-PLAN) > FE-ADM-PLAN-006 — Delete unused plan succeeds (smoke)"
    },
    {
      "id": "FE-ADM-ADDON-001",
      "description": "Add-ons list renders",
      "status": "PASS",
      "duration_ms": 5418.085699000003,
      "file_path": "/app/runner/tests/admin/fe-admin.test.ts",
      "test_path": "tests/admin/fe-admin.test.ts > Admin — Add-ons CRUD (FE-ADM-ADDON) > FE-ADM-ADDON-001 — Add-ons list renders"
    },
    {
      "id": "FE-ADM-ADDON-002",
      "description": "Create requires name/price/scope (smoke)",
      "status": "PASS",
      "duration_ms": 3.576212999993004,
      "file_path": "/app/runner/tests/admin/fe-admin.test.ts",
      "test_path": "tests/admin/fe-admin.test.ts > Admin — Add-ons CRUD (FE-ADM-ADDON) > FE-ADM-ADDON-002 — Create requires name/price/scope (smoke)"
    },
    {
      "id": "FE-ADM-ADDON-003",
      "description": "Created add-on appears in public list (smoke)",
      "status": "PASS",
      "duration_ms": 3.5666539999947418,
      "file_path": "/app/runner/tests/admin/fe-admin.test.ts",
      "test_path": "tests/admin/fe-admin.test.ts > Admin — Add-ons CRUD (FE-ADM-ADDON) > FE-ADM-ADDON-003 — Created add-on appears in public list (smoke)"
    },
    {
      "id": "FE-ADM-ADDON-004",
      "description": "Update price reflects on /settings/manage-plans (smoke)",
      "status": "PASS",
      "duration_ms": 0.359191000010469,
      "file_path": "/app/runner/tests/admin/fe-admin.test.ts",
      "test_path": "tests/admin/fe-admin.test.ts > Admin — Add-ons CRUD (FE-ADM-ADDON) > FE-ADM-ADDON-004 — Update price reflects on /settings/manage-plans (smoke)"
    },
    {
      "id": "FE-ADM-ADDON-005",
      "description": "Delete blocked when subs active (smoke)",
      "status": "PASS",
      "duration_ms": 0.20871900000202004,
      "file_path": "/app/runner/tests/admin/fe-admin.test.ts",
      "test_path": "tests/admin/fe-admin.test.ts > Admin — Add-ons CRUD (FE-ADM-ADDON) > FE-ADM-ADDON-005 — Delete blocked when subs active (smoke)"
    },
    {
      "id": "FE-ADM-PROMO-001",
      "description": "Promo list shows discount/expiry/usage",
      "status": "PASS",
      "duration_ms": 5496.845969000002,
      "file_path": "/app/runner/tests/admin/fe-admin.test.ts",
      "test_path": "tests/admin/fe-admin.test.ts > Admin — Promo codes CRUD (FE-ADM-PROMO) > FE-ADM-PROMO-001 — Promo list shows discount/expiry/usage"
    },
    {
      "id": "FE-ADM-PROMO-002",
      "description": "Create 100% code applies on signup (smoke)",
      "status": "PASS",
      "duration_ms": 1.276331000000937,
      "file_path": "/app/runner/tests/admin/fe-admin.test.ts",
      "test_path": "tests/admin/fe-admin.test.ts > Admin — Promo codes CRUD (FE-ADM-PROMO) > FE-ADM-PROMO-002 — Create 100% code applies on signup (smoke)"
    },
    {
      "id": "FE-ADM-PROMO-003",
      "description": "Past-expiry code returns expired (smoke)",
      "status": "PASS",
      "duration_ms": 0.29115299999830313,
      "file_path": "/app/runner/tests/admin/fe-admin.test.ts",
      "test_path": "tests/admin/fe-admin.test.ts > Admin — Promo codes CRUD (FE-ADM-PROMO) > FE-ADM-PROMO-003 — Past-expiry code returns expired (smoke)"
    },
    {
      "id": "FE-ADM-PROMO-004",
      "description": "Usage cap enforced (smoke)",
      "status": "PASS",
      "duration_ms": 0.21457999999984168,
      "file_path": "/app/runner/tests/admin/fe-admin.test.ts",
      "test_path": "tests/admin/fe-admin.test.ts > Admin — Promo codes CRUD (FE-ADM-PROMO) > FE-ADM-PROMO-004 — Usage cap enforced (smoke)"
    },
    {
      "id": "FE-ADM-PROMO-005",
      "description": "Delete cleanly removes (smoke)",
      "status": "PASS",
      "duration_ms": 0.16672100000141654,
      "file_path": "/app/runner/tests/admin/fe-admin.test.ts",
      "test_path": "tests/admin/fe-admin.test.ts > Admin — Promo codes CRUD (FE-ADM-PROMO) > FE-ADM-PROMO-005 — Delete cleanly removes (smoke)"
    },
    {
      "id": "FE-AI-001",
      "description": "/automation-campaign/[id] shows AI personalization toggle",
      "status": "PASS",
      "duration_ms": 7244.121049,
      "file_path": "/app/runner/tests/ai/fe-ai.test.ts",
      "test_path": "tests/ai/fe-ai.test.ts > AI personalization (FE-AI) > FE-AI-001 — /automation-campaign/[id] shows AI personalization toggle"
    },
    {
      "id": "FE-AI-002",
      "description": "Toggle ON opens cost modal + persists (smoke)",
      "status": "PASS",
      "duration_ms": 14.00778199999877,
      "file_path": "/app/runner/tests/ai/fe-ai.test.ts",
      "test_path": "tests/ai/fe-ai.test.ts > AI personalization (FE-AI) > FE-AI-002 — Toggle ON opens cost modal + persists (smoke)"
    },
    {
      "id": "FE-AI-003",
      "description": "Toggle OFF flips back, banner disappears (smoke)",
      "status": "PASS",
      "duration_ms": 0.406648000000132,
      "file_path": "/app/runner/tests/ai/fe-ai.test.ts",
      "test_path": "tests/ai/fe-ai.test.ts > AI personalization (FE-AI) > FE-AI-003 — Toggle OFF flips back, banner disappears (smoke)"
    },
    {
      "id": "FE-AI-004",
      "description": "Test-Email button disabled when AI flag OFF (smoke)",
      "status": "PASS",
      "duration_ms": 0.3454149999997753,
      "file_path": "/app/runner/tests/ai/fe-ai.test.ts",
      "test_path": "tests/ai/fe-ai.test.ts > AI personalization (FE-AI) > FE-AI-004 — Test-Email button disabled when AI flag OFF (smoke)"
    },
    {
      "id": "FE-AI-005",
      "description": "Personalised stage email differs from template (smoke)",
      "status": "PASS",
      "duration_ms": 0.3158590000002732,
      "file_path": "/app/runner/tests/ai/fe-ai.test.ts",
      "test_path": "tests/ai/fe-ai.test.ts > AI personalization (FE-AI) > FE-AI-005 — Personalised stage email differs from template (smoke)"
    },
    {
      "id": "FE-AI-006",
      "description": "AI flag OFF sends literal template (smoke)",
      "status": "PASS",
      "duration_ms": 0.34019400000033784,
      "file_path": "/app/runner/tests/ai/fe-ai.test.ts",
      "test_path": "tests/ai/fe-ai.test.ts > AI personalization (FE-AI) > FE-AI-006 — AI flag OFF sends literal template (smoke)"
    },
    {
      "id": "FE-AI-007",
      "description": "AI ON + empty goal → fallback to template (smoke)",
      "status": "PASS",
      "duration_ms": 13.803421999999046,
      "file_path": "/app/runner/tests/ai/fe-ai.test.ts",
      "test_path": "tests/ai/fe-ai.test.ts > AI personalization (FE-AI) > FE-AI-007 — AI ON + empty goal → fallback to template (smoke)"
    },
    {
      "id": "FE-AI-008",
      "description": "AI ON + empty offering → fallback (smoke)",
      "status": "PASS",
      "duration_ms": 0.28182599999854574,
      "file_path": "/app/runner/tests/ai/fe-ai.test.ts",
      "test_path": "tests/ai/fe-ai.test.ts > AI personalization (FE-AI) > FE-AI-008 — AI ON + empty offering → fallback (smoke)"
    },
    {
      "id": "FE-AI-009",
      "description": "Stage SMS with AI ON personalises body (smoke)",
      "status": "PASS",
      "duration_ms": 0.33896199999981036,
      "file_path": "/app/runner/tests/ai/fe-ai.test.ts",
      "test_path": "tests/ai/fe-ai.test.ts > AI personalization (FE-AI) > FE-AI-009 — Stage SMS with AI ON personalises body (smoke)"
    },
    {
      "id": "FE-AI-010",
      "description": "AI runs before merge-tag rendering (smoke)",
      "status": "PASS",
      "duration_ms": 1.0605580000010377,
      "file_path": "/app/runner/tests/ai/fe-ai.test.ts",
      "test_path": "tests/ai/fe-ai.test.ts > AI personalization (FE-AI) > FE-AI-010 — AI runs before merge-tag rendering (smoke)"
    },
    {
      "id": "FE-AI-011",
      "description": "generate_ai_variants switch hidden in prod (smoke)",
      "status": "PASS",
      "duration_ms": 0.1981789999990724,
      "file_path": "/app/runner/tests/ai/fe-ai.test.ts",
      "test_path": "tests/ai/fe-ai.test.ts > AI personalization (FE-AI) > FE-AI-011 — generate_ai_variants switch hidden in prod (smoke)"
    },
    {
      "id": "FE-AI-012",
      "description": "ai-agent /health endpoint reports OpenAI connectivity",
      "status": "PASS",
      "duration_ms": 767.4065719999999,
      "file_path": "/app/runner/tests/ai/fe-ai.test.ts",
      "test_path": "tests/ai/fe-ai.test.ts > AI personalization (FE-AI) > FE-AI-012 — ai-agent /health endpoint reports OpenAI connectivity"
    },
    {
      "id": "FE-AI-013",
      "description": "Inbound sentiment runs regardless of AI flag (smoke)",
      "status": "PASS",
      "duration_ms": 0.5278149999994639,
      "file_path": "/app/runner/tests/ai/fe-ai.test.ts",
      "test_path": "tests/ai/fe-ai.test.ts > AI personalization (FE-AI) > FE-AI-013 — Inbound sentiment runs regardless of AI flag (smoke)"
    },
    {
      "id": "FE-AI-014",
      "description": "Heuristic infers NEGATIVE on 'unsubscribe' fast (smoke)",
      "status": "PASS",
      "duration_ms": 3.2685079999992013,
      "file_path": "/app/runner/tests/ai/fe-ai.test.ts",
      "test_path": "tests/ai/fe-ai.test.ts > AI personalization (FE-AI) > FE-AI-014 — Heuristic infers NEGATIVE on 'unsubscribe' fast (smoke)"
    },
    {
      "id": "FE-AI-015",
      "description": "Heuristic falls through to OpenAI (smoke)",
      "status": "PASS",
      "duration_ms": 0.3425699999988865,
      "file_path": "/app/runner/tests/ai/fe-ai.test.ts",
      "test_path": "tests/ai/fe-ai.test.ts > AI personalization (FE-AI) > FE-AI-015 — Heuristic falls through to OpenAI (smoke)"
    },
    {
      "id": "FE-AI-016",
      "description": "OpenAI failure retries 5 times → sentiment NONE (smoke)",
      "status": "PASS",
      "duration_ms": 0.22807399999874178,
      "file_path": "/app/runner/tests/ai/fe-ai.test.ts",
      "test_path": "tests/ai/fe-ai.test.ts > AI personalization (FE-AI) > FE-AI-016 — OpenAI failure retries 5 times → sentiment NONE (smoke)"
    },
    {
      "id": "FE-AI-017",
      "description": "sentiment-webhook from public internet must require auth",
      "status": "PASS",
      "duration_ms": 243.71538599999985,
      "file_path": "/app/runner/tests/ai/fe-ai.test.ts",
      "test_path": "tests/ai/fe-ai.test.ts > AI personalization (FE-AI) > FE-AI-017 — sentiment-webhook from public internet must require auth"
    },
    {
      "id": "FE-AI-018",
      "description": "Credit balance drops by AI rate after personalised send (smoke)",
      "status": "PASS",
      "duration_ms": 0.3609629999991739,
      "file_path": "/app/runner/tests/ai/fe-ai.test.ts",
      "test_path": "tests/ai/fe-ai.test.ts > AI personalization (FE-AI) > FE-AI-018 — Credit balance drops by AI rate after personalised send (smoke)"
    },
    {
      "id": "FE-AI-019",
      "description": "Toky + AI charges AI credits, not phone (smoke)",
      "status": "PASS",
      "duration_ms": 1.185512000000017,
      "file_path": "/app/runner/tests/ai/fe-ai.test.ts",
      "test_path": "tests/ai/fe-ai.test.ts > AI personalization (FE-AI) > FE-AI-019 — Toky + AI charges AI credits, not phone (smoke)"
    },
    {
      "id": "FE-AI-020",
      "description": "cleanup-old-prompts endpoint exists at both legacy and /v1 paths",
      "status": "PASS",
      "duration_ms": 300.37469899999996,
      "file_path": "/app/runner/tests/ai/fe-ai.test.ts",
      "test_path": "tests/ai/fe-ai.test.ts > AI personalization (FE-AI) > FE-AI-020 — cleanup-old-prompts endpoint exists at both legacy and /v1 paths"
    },
    {
      "id": "FE-CRED-001",
      "description": "Header credit balance widget reflects /v1/credit",
      "status": "PASS",
      "duration_ms": 2724.5112309999995,
      "file_path": "/app/runner/tests/credits/fe-credits.test.ts",
      "test_path": "tests/credits/fe-credits.test.ts > Credits + billing (FE-CRED) > FE-CRED-001 — Header credit balance widget reflects /v1/credit"
    },
    {
      "id": "FE-CRED-002",
      "description": "Top-up via card increases balance (smoke @paid)",
      "status": "PASS",
      "duration_ms": 0.8978049999996074,
      "file_path": "/app/runner/tests/credits/fe-credits.test.ts",
      "test_path": "tests/credits/fe-credits.test.ts > Credits + billing (FE-CRED) > FE-CRED-002 — Top-up via card increases balance (smoke @paid)"
    },
    {
      "id": "FE-CRED-003",
      "description": "Twilio SMS decrements balance by 1 (smoke)",
      "status": "PASS",
      "duration_ms": 0.39804199999980483,
      "file_path": "/app/runner/tests/credits/fe-credits.test.ts",
      "test_path": "tests/credits/fe-credits.test.ts > Credits + billing (FE-CRED) > FE-CRED-003 — Twilio SMS decrements balance by 1 (smoke)"
    },
    {
      "id": "FE-CRED-004",
      "description": "Twilio failure releases reserved credits (smoke)",
      "status": "PASS",
      "duration_ms": 0.38237300000037067,
      "file_path": "/app/runner/tests/credits/fe-credits.test.ts",
      "test_path": "tests/credits/fe-credits.test.ts > Credits + billing (FE-CRED) > FE-CRED-004 — Twilio failure releases reserved credits (smoke)"
    },
    {
      "id": "FE-CRED-005",
      "description": "Toky SMS leaves balance unchanged (smoke)",
      "status": "PASS",
      "duration_ms": 0.33762099999967177,
      "file_path": "/app/runner/tests/credits/fe-credits.test.ts",
      "test_path": "tests/credits/fe-credits.test.ts > Credits + billing (FE-CRED) > FE-CRED-005 — Toky SMS leaves balance unchanged (smoke)"
    },
    {
      "id": "FE-CRED-006",
      "description": "Personalised stage send charges AI unit not phone (smoke)",
      "status": "PASS",
      "duration_ms": 0.4013990000003105,
      "file_path": "/app/runner/tests/credits/fe-credits.test.ts",
      "test_path": "tests/credits/fe-credits.test.ts > Credits + billing (FE-CRED) > FE-CRED-006 — Personalised stage send charges AI unit not phone (smoke)"
    },
    {
      "id": "FE-CRED-007",
      "description": "Failed AI personalization → AI credit not committed (smoke)",
      "status": "PASS",
      "duration_ms": 0.7404620000006616,
      "file_path": "/app/runner/tests/credits/fe-credits.test.ts",
      "test_path": "tests/credits/fe-credits.test.ts > Credits + billing (FE-CRED) > FE-CRED-007 — Failed AI personalization → AI credit not committed (smoke)"
    },
    {
      "id": "FE-CRED-008",
      "description": "Hit balance=0 → friendly out-of-credits modal (smoke)",
      "status": "PASS",
      "duration_ms": 0.29865699999936623,
      "file_path": "/app/runner/tests/credits/fe-credits.test.ts",
      "test_path": "tests/credits/fe-credits.test.ts > Credits + billing (FE-CRED) > FE-CRED-008 — Hit balance=0 → friendly out-of-credits modal (smoke)"
    },
    {
      "id": "FE-CRED-009",
      "description": "Add-on activation increases credit allowance (smoke)",
      "status": "PASS",
      "duration_ms": 0.3544800000008763,
      "file_path": "/app/runner/tests/credits/fe-credits.test.ts",
      "test_path": "tests/credits/fe-credits.test.ts > Credits + billing (FE-CRED) > FE-CRED-009 — Add-on activation increases credit allowance (smoke)"
    },
    {
      "id": "FE-CRED-010",
      "description": "Cancel add-on at end of period → next month reverts (smoke)",
      "status": "PASS",
      "duration_ms": 1.061900999999125,
      "file_path": "/app/runner/tests/credits/fe-credits.test.ts",
      "test_path": "tests/credits/fe-credits.test.ts > Credits + billing (FE-CRED) > FE-CRED-010 — Cancel add-on at end of period → next month reverts (smoke)"
    },
    {
      "id": "FE-CRM-001",
      "description": "Pipedrive verify-api-key endpoint exists",
      "status": "PASS",
      "duration_ms": 16484.614582,
      "file_path": "/app/runner/tests/crm/fe-crm.test.ts",
      "test_path": "tests/crm/fe-crm.test.ts > CRM sync (FE-CRM) > FE-CRM-001 — Pipedrive verify-api-key endpoint exists"
    },
    {
      "id": "FE-CRM-002",
      "description": "Invalid Pipedrive API key → friendly error (smoke)",
      "status": "PASS",
      "duration_ms": 0.5933570000015607,
      "file_path": "/app/runner/tests/crm/fe-crm.test.ts",
      "test_path": "tests/crm/fe-crm.test.ts > CRM sync (FE-CRM) > FE-CRM-002 — Invalid Pipedrive API key → friendly error (smoke)"
    },
    {
      "id": "FE-CRM-003",
      "description": "Map Pipedrive user to RevHero account (smoke)",
      "status": "PASS",
      "duration_ms": 0.31641099999978906,
      "file_path": "/app/runner/tests/crm/fe-crm.test.ts",
      "test_path": "tests/crm/fe-crm.test.ts > CRM sync (FE-CRM) > FE-CRM-003 — Map Pipedrive user to RevHero account (smoke)"
    },
    {
      "id": "FE-CRM-004",
      "description": "Enable CRM sync on campaign pulls existing deals (smoke)",
      "status": "PASS",
      "duration_ms": 0.32384499999898253,
      "file_path": "/app/runner/tests/crm/fe-crm.test.ts",
      "test_path": "tests/crm/fe-crm.test.ts > CRM sync (FE-CRM) > FE-CRM-004 — Enable CRM sync on campaign pulls existing deals (smoke)"
    },
    {
      "id": "FE-CRM-005",
      "description": "Force-pull from CRM enqueues sweeper candidates (smoke)",
      "status": "PASS",
      "duration_ms": 0.3340729999981704,
      "file_path": "/app/runner/tests/crm/fe-crm.test.ts",
      "test_path": "tests/crm/fe-crm.test.ts > CRM sync (FE-CRM) > FE-CRM-005 — Force-pull from CRM enqueues sweeper candidates (smoke)"
    },
    {
      "id": "FE-CRM-006",
      "description": "Disable CRM sync stops auto-pulls (smoke)",
      "status": "PASS",
      "duration_ms": 0.3067620000001625,
      "file_path": "/app/runner/tests/crm/fe-crm.test.ts",
      "test_path": "tests/crm/fe-crm.test.ts > CRM sync (FE-CRM) > FE-CRM-006 — Disable CRM sync stops auto-pulls (smoke)"
    },
    {
      "id": "FE-CRM-007",
      "description": "Stage move with CRM connected → Pipedrive note + stage update (smoke)",
      "status": "PASS",
      "duration_ms": 0.5778080000018235,
      "file_path": "/app/runner/tests/crm/fe-crm.test.ts",
      "test_path": "tests/crm/fe-crm.test.ts > CRM sync (FE-CRM) > FE-CRM-007 — Stage move with CRM connected → Pipedrive note + stage update (smoke)"
    },
    {
      "id": "FE-CRM-008",
      "description": "Pipedrive webhook updates RevHero deal record (smoke)",
      "status": "PASS",
      "duration_ms": 0.35074299999905634,
      "file_path": "/app/runner/tests/crm/fe-crm.test.ts",
      "test_path": "tests/crm/fe-crm.test.ts > CRM sync (FE-CRM) > FE-CRM-008 — Pipedrive webhook updates RevHero deal record (smoke)"
    },
    {
      "id": "FE-CRM-009",
      "description": "Pipedrive outage → CRM goroutine fails silently, move proceeds (smoke)",
      "status": "PASS",
      "duration_ms": 0.2998889999980747,
      "file_path": "/app/runner/tests/crm/fe-crm.test.ts",
      "test_path": "tests/crm/fe-crm.test.ts > CRM sync (FE-CRM) > FE-CRM-009 — Pipedrive outage → CRM goroutine fails silently, move proceeds (smoke)"
    },
    {
      "id": "FE-CRM-010",
      "description": "HubSpot verify-api-key endpoint exists",
      "status": "PASS",
      "duration_ms": 2812.9448779999984,
      "file_path": "/app/runner/tests/crm/fe-crm.test.ts",
      "test_path": "tests/crm/fe-crm.test.ts > CRM sync (FE-CRM) > FE-CRM-010 — HubSpot verify-api-key endpoint exists"
    },
    {
      "id": "FE-AUTH-021",
      "description": "rapid wrong-password attempts on a unique email return 429 within budget",
      "status": "NOT_EXEC",
      "duration_ms": 0,
      "file_path": "/app/runner/tests/auth/fe-auth-ratelimit.test.ts",
      "test_path": "tests/auth/fe-auth-ratelimit.test.ts > BFF Login Rate Limiter (FE-AUTH) [soak-only] > FE-AUTH-021 — rapid wrong-password attempts on a unique email return 429 within budget"
    },
    {
      "id": "FE-AUTH-022",
      "description": "429 response carries a friendly message + retry hint, no internals leaked",
      "status": "NOT_EXEC",
      "duration_ms": 0,
      "file_path": "/app/runner/tests/auth/fe-auth-ratelimit.test.ts",
      "test_path": "tests/auth/fe-auth-ratelimit.test.ts > BFF Login Rate Limiter (FE-AUTH) [soak-only] > FE-AUTH-022 — 429 response carries a friendly message + retry hint, no internals leaked"
    },
    {
      "id": "FE-AUTH-023",
      "description": "rate limit is scoped per-email (different fakes don't share budget)",
      "status": "NOT_EXEC",
      "duration_ms": 0,
      "file_path": "/app/runner/tests/auth/fe-auth-ratelimit.test.ts",
      "test_path": "tests/auth/fe-auth-ratelimit.test.ts > BFF Login Rate Limiter (FE-AUTH) [soak-only] > FE-AUTH-023 — rate limit is scoped per-email (different fakes don't share budget)"
    },
    {
      "id": "FE-AUTH-001",
      "description": "/login page renders with email + password + Forgot Password + Login + Register link",
      "status": "PASS",
      "duration_ms": 2854.1635199999996,
      "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": "PASS",
      "duration_ms": 4041.131399000001,
      "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"
    },
    {
      "id": "FE-AUTH-003",
      "description": "Login with wrong password → friendly error, no stack trace",
      "status": "PASS",
      "duration_ms": 178.96343999999954,
      "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": 168.07875499999864,
      "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": 1326.6276590000016,
      "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": 1793.1024450000004,
      "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": 2754.875242,
      "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": 91.18421200000012,
      "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": "PASS",
      "duration_ms": 141.4612820000002,
      "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)"
    },
    {
      "id": "FE-AUTH-010",
      "description": "/auth-reset-password?token=invalid → friendly invalid token error",
      "status": "PASS",
      "duration_ms": 30.880417000000307,
      "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": 30.950127000000066,
      "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 clears cookies and redirects to /login",
      "status": "PASS",
      "duration_ms": 37705.690040999994,
      "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 clears cookies and redirects to /login"
    },
    {
      "id": "FE-AUTH-013",
      "description": "Hard refresh of authenticated page → session restores, no console errors",
      "status": "PASS",
      "duration_ms": 8346.651104999997,
      "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"
    },
    {
      "id": "FE-AUTH-014",
      "description": "Direct nav to authenticated route while logged out → redirects to /login with ?redirect=",
      "status": "PASS",
      "duration_ms": 844.8895950000006,
      "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": 51.990530999995826,
      "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": 5956.581818999992,
      "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": "BFF auth cookies have HttpOnly + Secure + SameSite flags",
      "status": "PASS",
      "duration_ms": 2471.576834000007,
      "file_path": "/app/runner/tests/auth/fe-auth.test.ts",
      "test_path": "tests/auth/fe-auth.test.ts > Authentication (FE-AUTH) > FE-AUTH-017 — BFF auth cookies have HttpOnly + Secure + SameSite flags"
    },
    {
      "id": "FE-AUTH-018",
      "description": "Open redirect — ?redirect=https://evil.com after login → blocked",
      "status": "PASS",
      "duration_ms": 4617.419471999994,
      "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"
    },
    {
      "id": "FE-AUTH-019",
      "description": "Login button shows loading spinner while authenticating",
      "status": "PASS",
      "duration_ms": 4717.190696999998,
      "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": 363.0110859999986,
      "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": 3494.5575670000003,
      "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": 3192.7091419999997,
      "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": 3063.5424839999996,
      "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": 3234.951790000001,
      "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": 294.839516,
      "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": 23424.099846,
      "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": 1128.3222739999983,
      "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": 1000.2177240000019,
      "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": 500.73144400000456,
      "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": 492.02435200000036,
      "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": 1048.9125790000035,
      "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": 597.0467749999953,
      "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": 813.7245719999992,
      "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": 2458.2498609999966,
      "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": 2003.934752000001,
      "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": "PASS",
      "duration_ms": 3911.7999999999956,
      "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"
    },
    {
      "id": "FE-REG-024",
      "description": "Wizard step indicator updates correctly per step",
      "status": "PASS",
      "duration_ms": 792.9541270000045,
      "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": "PASS",
      "duration_ms": 4743.020261,
      "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"
    },
    {
      "id": "FE-SETUP-002",
      "description": "Setup wizard captures business profile info (form renders)",
      "status": "PASS",
      "duration_ms": 1778.6517090000007,
      "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": "PASS",
      "duration_ms": 3145.6424289999995,
      "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)"
    },
    {
      "id": "FE-SETUP-004",
      "description": "/getting-started shows checklist with at least one step",
      "status": "PASS",
      "duration_ms": 2515.247276,
      "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"
    },
    {
      "id": "FE-SETUP-005",
      "description": "Welcome greeting renders user's first name",
      "status": "PASS",
      "duration_ms": 4049.869649,
      "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"
    },
    {
      "id": "FE-SETUP-006",
      "description": "setup_finished flag persists in DB for the test admin",
      "status": "PASS",
      "duration_ms": 355.7157279999992,
      "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": "PASS",
      "duration_ms": 5893.616529999999,
      "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)"
    },
    {
      "id": "FE-CAMP-021",
      "description": "Deals search page renders with filter components",
      "status": "PASS",
      "duration_ms": 3230.6075090000004,
      "file_path": "/app/runner/tests/campaign/fe-camp-deals-search.test.ts",
      "test_path": "tests/campaign/fe-camp-deals-search.test.ts > Campaign Deals Search filters (FE-CAMP) > FE-CAMP-021 — Deals search page renders with filter components"
    },
    {
      "id": "FE-CAMP-022",
      "description": "Search filter updates URL params when typed + submitted",
      "status": "PASS",
      "duration_ms": 2380.3731319999997,
      "file_path": "/app/runner/tests/campaign/fe-camp-deals-search.test.ts",
      "test_path": "tests/campaign/fe-camp-deals-search.test.ts > Campaign Deals Search filters (FE-CAMP) > FE-CAMP-022 — Search filter updates URL params when typed + submitted"
    },
    {
      "id": "FE-CAMP-023",
      "description": "Status filter (when present) updates URL state",
      "status": "PASS",
      "duration_ms": 2075.6568450000004,
      "file_path": "/app/runner/tests/campaign/fe-camp-deals-search.test.ts",
      "test_path": "tests/campaign/fe-camp-deals-search.test.ts > Campaign Deals Search filters (FE-CAMP) > FE-CAMP-023 — Status filter (when present) updates URL state"
    },
    {
      "id": "FE-CAMP-024",
      "description": "Pagination controls (when present) navigate without crash",
      "status": "PASS",
      "duration_ms": 2379.3229570000003,
      "file_path": "/app/runner/tests/campaign/fe-camp-deals-search.test.ts",
      "test_path": "tests/campaign/fe-camp-deals-search.test.ts > Campaign Deals Search filters (FE-CAMP) > FE-CAMP-024 — Pagination controls (when present) navigate without crash"
    },
    {
      "id": "FE-CAMP-001",
      "description": "/automation-campaign lists campaigns or shows empty state",
      "status": "PASS",
      "duration_ms": 4639.374423,
      "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": "PASS",
      "duration_ms": 4972.197964999999,
      "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": "PASS",
      "duration_ms": 4704.082855000001,
      "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": "PASS",
      "duration_ms": 6558.492031999998,
      "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": "PASS",
      "duration_ms": 8765.181177000002,
      "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": "PASS",
      "duration_ms": 5086.922852000003,
      "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": "PASS",
      "duration_ms": 5922.442040000002,
      "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": "PASS",
      "duration_ms": 3398.4116760000034,
      "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": "PASS",
      "duration_ms": 11048.92134,
      "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": "PASS",
      "duration_ms": 7204.3610090000075,
      "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": "PASS",
      "duration_ms": 6636.577198999992,
      "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": "PASS",
      "duration_ms": 36918.59454400001,
      "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": "PASS",
      "duration_ms": 2669.3323799999926,
      "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": "PASS",
      "duration_ms": 35995.255353000015,
      "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": "PASS",
      "duration_ms": 0.4162470000155736,
      "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": "PASS",
      "duration_ms": 4957.743783000013,
      "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": "PASS",
      "duration_ms": 2312.218345000001,
      "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": "PASS",
      "duration_ms": 5517.577456000028,
      "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": "PASS",
      "duration_ms": 5719.334264000005,
      "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": "PASS",
      "duration_ms": 7650.387145000015,
      "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": "PASS",
      "duration_ms": 9117.972544,
      "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"
    },
    {
      "id": "FE-DEAL-SEARCH-002",
      "description": "Type partial first name → filter applies",
      "status": "PASS",
      "duration_ms": 6167.826759000001,
      "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"
    },
    {
      "id": "FE-DEAL-SEARCH-003",
      "description": "Press Enter in search submits without page reload",
      "status": "PASS",
      "duration_ms": 5789.973722999999,
      "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"
    },
    {
      "id": "FE-DEAL-SEARCH-004",
      "description": "Clear input → full deal list returns",
      "status": "PASS",
      "duration_ms": 6880.155365999999,
      "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"
    },
    {
      "id": "FE-DEAL-SEARCH-005",
      "description": "Search persists across pagination",
      "status": "PASS",
      "duration_ms": 8.89925299999959,
      "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": "PASS",
      "duration_ms": 5966.640097000003,
      "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"
    },
    {
      "id": "UNKNOWN-dzoe1s",
      "description": "FE-E2E-001 — Signup → Onboarding → First campaign → First deal email sent (smoke)",
      "status": "PASS",
      "duration_ms": 5.153896000000032,
      "file_path": "/app/runner/tests/e2e/fe-e2e.test.ts",
      "test_path": "tests/e2e/fe-e2e.test.ts > Cross-service E2E (FE-E2E) > FE-E2E-001 — Signup → Onboarding → First campaign → First deal email sent (smoke)"
    },
    {
      "id": "UNKNOWN-t83mlk",
      "description": "FE-E2E-002 — Inbound reply NEGATIVE → deal auto-Lost (smoke)",
      "status": "PASS",
      "duration_ms": 0.5424619999998868,
      "file_path": "/app/runner/tests/e2e/fe-e2e.test.ts",
      "test_path": "tests/e2e/fe-e2e.test.ts > Cross-service E2E (FE-E2E) > FE-E2E-002 — Inbound reply NEGATIVE → deal auto-Lost (smoke)"
    },
    {
      "id": "UNKNOWN-xsosqo",
      "description": "FE-E2E-003 — Toky BYOC end-to-end SMS round-trip (smoke)",
      "status": "PASS",
      "duration_ms": 0.3599819999999454,
      "file_path": "/app/runner/tests/e2e/fe-e2e.test.ts",
      "test_path": "tests/e2e/fe-e2e.test.ts > Cross-service E2E (FE-E2E) > FE-E2E-003 — Toky BYOC end-to-end SMS round-trip (smoke)"
    },
    {
      "id": "UNKNOWN-qxbtlf",
      "description": "FE-E2E-004 — Multi-stage campaign with wait + actions (smoke)",
      "status": "PASS",
      "duration_ms": 13.767205999999987,
      "file_path": "/app/runner/tests/e2e/fe-e2e.test.ts",
      "test_path": "tests/e2e/fe-e2e.test.ts > Cross-service E2E (FE-E2E) > FE-E2E-004 — Multi-stage campaign with wait + actions (smoke)"
    },
    {
      "id": "UNKNOWN-dc9d0u",
      "description": "FE-E2E-005 — Quota cap respected (smoke)",
      "status": "PASS",
      "duration_ms": 0.3895169999998416,
      "file_path": "/app/runner/tests/e2e/fe-e2e.test.ts",
      "test_path": "tests/e2e/fe-e2e.test.ts > Cross-service E2E (FE-E2E) > FE-E2E-005 — Quota cap respected (smoke)"
    },
    {
      "id": "UNKNOWN-pbnp9i",
      "description": "FE-E2E-006 — Inactive user pause-billing edge case (smoke)",
      "status": "PASS",
      "duration_ms": 0.33823999999981424,
      "file_path": "/app/runner/tests/e2e/fe-e2e.test.ts",
      "test_path": "tests/e2e/fe-e2e.test.ts > Cross-service E2E (FE-E2E) > FE-E2E-006 — Inactive user pause-billing edge case (smoke)"
    },
    {
      "id": "UNKNOWN-xzdegj",
      "description": "FE-E2E-007 — Free-plan SMS via Toky succeeds, via Twilio rejected (smoke)",
      "status": "PASS",
      "duration_ms": 0.27092500000003383,
      "file_path": "/app/runner/tests/e2e/fe-e2e.test.ts",
      "test_path": "tests/e2e/fe-e2e.test.ts > Cross-service E2E (FE-E2E) > FE-E2E-007 — Free-plan SMS via Toky succeeds, via Twilio rejected (smoke)"
    },
    {
      "id": "UNKNOWN-r22g4l",
      "description": "FE-E2E-008 — JWT expiry mid-flow auto-refreshes (smoke)",
      "status": "PASS",
      "duration_ms": 0.3530289999998786,
      "file_path": "/app/runner/tests/e2e/fe-e2e.test.ts",
      "test_path": "tests/e2e/fe-e2e.test.ts > Cross-service E2E (FE-E2E) > FE-E2E-008 — JWT expiry mid-flow auto-refreshes (smoke)"
    },
    {
      "id": "UNKNOWN-w8umew",
      "description": "FE-E2E-009 — Multi-tenant isolation across mailboxes/Toky/deals (smoke)",
      "status": "PASS",
      "duration_ms": 0.3713740000000598,
      "file_path": "/app/runner/tests/e2e/fe-e2e.test.ts",
      "test_path": "tests/e2e/fe-e2e.test.ts > Cross-service E2E (FE-E2E) > FE-E2E-009 — Multi-tenant isolation across mailboxes/Toky/deals (smoke)"
    },
    {
      "id": "UNKNOWN-x32c6a",
      "description": "FE-E2E-010 — Webhook-only services not exposed (smoke — covered by WEBHOOK-AUTH)",
      "status": "PASS",
      "duration_ms": 0.4912259999998696,
      "file_path": "/app/runner/tests/e2e/fe-e2e.test.ts",
      "test_path": "tests/e2e/fe-e2e.test.ts > Cross-service E2E (FE-E2E) > FE-E2E-010 — Webhook-only services not exposed (smoke — covered by WEBHOOK-AUTH)"
    },
    {
      "id": "FE-EMAIL-IN-012",
      "description": "bounce-webhook endpoint requires internal-services auth",
      "status": "PASS",
      "duration_ms": 348.8750909999999,
      "file_path": "/app/runner/tests/email/fe-email-in-bounce.test.ts",
      "test_path": "tests/email/fe-email-in-bounce.test.ts > Email bounce debounce (FE-EMAIL-IN) > FE-EMAIL-IN-012 — bounce-webhook endpoint requires internal-services auth"
    },
    {
      "id": "FE-EMAIL-IN-013",
      "description": "duplicate bounces within debounce window are absorbed (smoke)",
      "status": "PASS",
      "duration_ms": 57.20429800000011,
      "file_path": "/app/runner/tests/email/fe-email-in-bounce.test.ts",
      "test_path": "tests/email/fe-email-in-bounce.test.ts > Email bounce debounce (FE-EMAIL-IN) > FE-EMAIL-IN-013 — duplicate bounces within debounce window are absorbed (smoke)"
    },
    {
      "id": "FE-EMAIL-IN-014",
      "description": "bounced address propagates to the blocklist (smoke)",
      "status": "PASS",
      "duration_ms": 0.3621160000002419,
      "file_path": "/app/runner/tests/email/fe-email-in-bounce.test.ts",
      "test_path": "tests/email/fe-email-in-bounce.test.ts > Email bounce debounce (FE-EMAIL-IN) > FE-EMAIL-IN-014 — bounced address propagates to the blocklist (smoke)"
    },
    {
      "id": "FE-EMAIL-IN-001",
      "description": "Reply appears in FE thread within ~30s (smoke)",
      "status": "PASS",
      "duration_ms": 2.818226999999979,
      "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.6234929999998258,
      "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.37377700000001823,
      "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.2746519999998327,
      "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.28002200000014454,
      "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.40353299999992487,
      "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.42171699999994416,
      "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": 101.658545,
      "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": 5.042687999999998,
      "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.0217669999999544,
      "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.4245930000001863,
      "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-013",
      "description": "POST /v1/templates/render endpoint exists on email-ingress",
      "status": "PASS",
      "duration_ms": 168.31577000000016,
      "file_path": "/app/runner/tests/email/fe-email-out-render.test.ts",
      "test_path": "tests/email/fe-email-out-render.test.ts > Email template render preview (FE-EMAIL-OUT) > FE-EMAIL-OUT-013 — POST /v1/templates/render endpoint exists on email-ingress"
    },
    {
      "id": "FE-EMAIL-OUT-014",
      "description": "invalid deal_id is rejected (no panic)",
      "status": "PASS",
      "duration_ms": 63.799207000000024,
      "file_path": "/app/runner/tests/email/fe-email-out-render.test.ts",
      "test_path": "tests/email/fe-email-out-render.test.ts > Email template render preview (FE-EMAIL-OUT) > FE-EMAIL-OUT-014 — invalid deal_id is rejected (no panic)"
    },
    {
      "id": "FE-EMAIL-OUT-015",
      "description": "missing required field returns 400",
      "status": "PASS",
      "duration_ms": 110.31479000000036,
      "file_path": "/app/runner/tests/email/fe-email-out-render.test.ts",
      "test_path": "tests/email/fe-email-out-render.test.ts > Email template render preview (FE-EMAIL-OUT) > FE-EMAIL-OUT-015 — missing required field returns 400"
    },
    {
      "id": "FE-EMAIL-OUT-001",
      "description": "Connect Gmail mailbox via OAuth (external-blocked) — assert URL request returns redirect URL",
      "status": "PASS",
      "duration_ms": 3202.1297999999997,
      "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"
    },
    {
      "id": "FE-EMAIL-OUT-002",
      "description": "Connect Microsoft mailbox same flow (external-blocked)",
      "status": "PASS",
      "duration_ms": 1922.7335469999998,
      "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)"
    },
    {
      "id": "FE-EMAIL-OUT-003",
      "description": "Disconnect mailbox via POST /v1/user-mailboxes/:id/disconnect (smoke)",
      "status": "PASS",
      "duration_ms": 3.9425860000001194,
      "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": "PASS",
      "duration_ms": 1542.3790519999993,
      "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"
    },
    {
      "id": "FE-EMAIL-OUT-005",
      "description": "Test-Email button disabled when ai_personalization_enabled=false (FE check)",
      "status": "PASS",
      "duration_ms": 1.2442620000001625,
      "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.42661600000064936,
      "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": "PASS",
      "duration_ms": 5219.633622000001,
      "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)"
    },
    {
      "id": "FE-EMAIL-OUT-008",
      "description": "Manual email to deal contact creates sent_email row (smoke)",
      "status": "PASS",
      "duration_ms": 2.4613919999992504,
      "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": 6.068401999998969,
      "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": "PASS",
      "duration_ms": 35182.949489,
      "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"
    },
    {
      "id": "FE-EMAIL-OUT-011",
      "description": "Long body (>50 KB) handled (smoke — no 500)",
      "status": "PASS",
      "duration_ms": 0.4483970000001136,
      "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.25522699999419274,
      "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": "PASS",
      "duration_ms": 7509.912055000001,
      "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"
    },
    {
      "id": "FE-EMAIL-002",
      "description": "'Mailbox not connected' empty state with Connect Mailbox CTA",
      "status": "PASS",
      "duration_ms": 5110.930274,
      "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"
    },
    {
      "id": "FE-EMAIL-003",
      "description": "Connect Mailbox button opens OAuth flow (button presence)",
      "status": "PASS",
      "duration_ms": 9399.815465000001,
      "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)"
    },
    {
      "id": "FE-EMAIL-004",
      "description": "Email filters work (filter UI exists)",
      "status": "PASS",
      "duration_ms": 8850.879504999997,
      "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)"
    },
    {
      "id": "FE-EMAIL-005",
      "description": "Search Emails input filters list",
      "status": "PASS",
      "duration_ms": 5976.100567000001,
      "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"
    },
    {
      "id": "FE-EMAIL-006",
      "description": "'+' button opens compose / add modal",
      "status": "PASS",
      "duration_ms": 5681.5253470000025,
      "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"
    },
    {
      "id": "FE-EMAIL-007",
      "description": "/email-system/email/add page renders without crashing",
      "status": "PASS",
      "duration_ms": 5950.092258000004,
      "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"
    },
    {
      "id": "FE-EMAIL-008",
      "description": "Compose form requires recipient + subject + body",
      "status": "PASS",
      "duration_ms": 35620.75337,
      "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"
    },
    {
      "id": "FE-EMAIL-009",
      "description": "Send email triggers BFF call (network observation)",
      "status": "PASS",
      "duration_ms": 0.5725779999920633,
      "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": "PASS",
      "duration_ms": 7099.652528000006,
      "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)"
    },
    {
      "id": "FE-EMAIL-011",
      "description": "Email categories sidebar navigates",
      "status": "PASS",
      "duration_ms": 5233.714426999999,
      "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"
    },
    {
      "id": "FE-EMAIL-012",
      "description": "Pagination at top right (X of Y) updates with results",
      "status": "PASS",
      "duration_ms": 0.4310540000005858,
      "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-LAY-001",
      "description": "Sidebar visible on every authenticated dashboard page",
      "status": "PASS",
      "duration_ms": 5560.3841,
      "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"
    },
    {
      "id": "FE-LAY-002",
      "description": "Sidebar shows Dashboard / Campaign / Phone / Email / Settings (smoke)",
      "status": "PASS",
      "duration_ms": 6332.103060999999,
      "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)"
    },
    {
      "id": "FE-LAY-003",
      "description": "Header shows credit balance, notification bell, sign out",
      "status": "PASS",
      "duration_ms": 3931.5732989999997,
      "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"
    },
    {
      "id": "FE-LAY-004",
      "description": "Active sidebar item highlighted in primary color (smoke)",
      "status": "PASS",
      "duration_ms": 0.49757799999861163,
      "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.32003700000132085,
      "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.34762899999986985,
      "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": 4.212088000000222,
      "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.27253799999743933,
      "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": "PASS",
      "duration_ms": 7716.544194999999,
      "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)"
    },
    {
      "id": "FE-CROSS-002",
      "description": "Cloud-document uploads go to staging cloud-documents (smoke)",
      "status": "PASS",
      "duration_ms": 0.5701139999982843,
      "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": "PASS",
      "duration_ms": 4751.065873000003,
      "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)"
    },
    {
      "id": "FE-CROSS-004",
      "description": "Same routes redirect to /automation-campaign on prod (skip on staging)",
      "status": "PASS",
      "duration_ms": 0.4315040000001318,
      "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.44547199999942677,
      "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.22458999999798834,
      "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.16684199999872362,
      "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.18822200000067824,
      "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.17529800000193063,
      "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": 1.0345689999994647,
      "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": "PASS",
      "duration_ms": 6021.449499,
      "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"
    },
    {
      "id": "FE-NOTIF-002",
      "description": "Tabs filter notifications",
      "status": "PASS",
      "duration_ms": 1.2758700000003955,
      "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.33884200000011333,
      "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.21541200000046956,
      "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.5812149999992471,
      "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.2451970000001893,
      "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.18049599999994825,
      "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.27289900000050693,
      "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": "PASS",
      "duration_ms": 5173.291267,
      "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)"
    },
    {
      "id": "FE-HELP-002",
      "description": "Search articles input filters FAQ",
      "status": "PASS",
      "duration_ms": 0.6500030000006518,
      "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.2730699999992794,
      "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.22486900000149035,
      "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": "PASS",
      "duration_ms": 5321.467538000001,
      "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"
    },
    {
      "id": "FE-HELP-006",
      "description": "Watch Video opens modal",
      "status": "PASS",
      "duration_ms": 0.43451099999947473,
      "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": 2.3680679999997665,
      "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.5206309999994119,
      "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": "FE-DEAL-001",
      "description": "Sweep endpoint returns jobs_scheduled count",
      "status": "PASS",
      "duration_ms": 117.35577000000012,
      "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": 1.2572860000000219,
      "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.3637300000000323,
      "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.2901910000000498,
      "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.6741669999996702,
      "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.30292499999995925,
      "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.23724300000003495,
      "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.1901639999996405,
      "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": 0.22066200000017488,
      "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.23489900000004127,
      "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.20501300000023548,
      "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.1815889999998035,
      "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": 85.37581499999987,
      "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": 22.868876,
      "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.2559479999999894,
      "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.19631600000002436,
      "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.17965500000036627,
      "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-PERF-001",
      "description": "/automation-campaign reaches DOMContentLoaded under 15000ms (warn >5000ms)",
      "status": "PASS",
      "duration_ms": 3581.7171609999996,
      "file_path": "/app/runner/tests/perf/fe-perf.test.ts",
      "test_path": "tests/perf/fe-perf.test.ts > Performance (FE-PERF) > FE-PERF-001 — /automation-campaign reaches DOMContentLoaded under 15000ms (warn >5000ms)"
    },
    {
      "id": "FE-PERF-002",
      "description": "/dashboard reaches DOMContentLoaded under 15000ms (warn >5000ms)",
      "status": "PASS",
      "duration_ms": 3259.7274609999995,
      "file_path": "/app/runner/tests/perf/fe-perf.test.ts",
      "test_path": "tests/perf/fe-perf.test.ts > Performance (FE-PERF) > FE-PERF-002 — /dashboard reaches DOMContentLoaded under 15000ms (warn >5000ms)"
    },
    {
      "id": "FE-PERF-003",
      "description": "/email-system/email reaches DOMContentLoaded under 15000ms (warn >5000ms)",
      "status": "PASS",
      "duration_ms": 2874.449358,
      "file_path": "/app/runner/tests/perf/fe-perf.test.ts",
      "test_path": "tests/perf/fe-perf.test.ts > Performance (FE-PERF) > FE-PERF-003 — /email-system/email reaches DOMContentLoaded under 15000ms (warn >5000ms)"
    },
    {
      "id": "FE-PERF-004",
      "description": "/phone-system/sms reaches DOMContentLoaded under 15000ms (warn >5000ms)",
      "status": "PASS",
      "duration_ms": 2094.2926100000004,
      "file_path": "/app/runner/tests/perf/fe-perf.test.ts",
      "test_path": "tests/perf/fe-perf.test.ts > Performance (FE-PERF) > FE-PERF-004 — /phone-system/sms reaches DOMContentLoaded under 15000ms (warn >5000ms)"
    },
    {
      "id": "FE-PERF-005",
      "description": "/notifications reaches DOMContentLoaded under 15000ms (warn >5000ms)",
      "status": "PASS",
      "duration_ms": 3078.4497850000007,
      "file_path": "/app/runner/tests/perf/fe-perf.test.ts",
      "test_path": "tests/perf/fe-perf.test.ts > Performance (FE-PERF) > FE-PERF-005 — /notifications reaches DOMContentLoaded under 15000ms (warn >5000ms)"
    },
    {
      "id": "FE-PERF-006",
      "description": "/settings/general reaches DOMContentLoaded under 15000ms (warn >5000ms)",
      "status": "PASS",
      "duration_ms": 3869.1255180000007,
      "file_path": "/app/runner/tests/perf/fe-perf.test.ts",
      "test_path": "tests/perf/fe-perf.test.ts > Performance (FE-PERF) > FE-PERF-006 — /settings/general reaches DOMContentLoaded under 15000ms (warn >5000ms)"
    },
    {
      "id": "FE-PERF-007",
      "description": "/admin/dashboard reaches DOMContentLoaded under 15000ms (warn >5000ms)",
      "status": "PASS",
      "duration_ms": 4379.701903000001,
      "file_path": "/app/runner/tests/perf/fe-perf.test.ts",
      "test_path": "tests/perf/fe-perf.test.ts > Performance (FE-PERF) > FE-PERF-007 — /admin/dashboard reaches DOMContentLoaded under 15000ms (warn >5000ms)"
    },
    {
      "id": "FE-PERF-008",
      "description": "axe-core /automation-campaign zero serious violations",
      "status": "PASS",
      "duration_ms": 8531.041632999997,
      "file_path": "/app/runner/tests/perf/fe-perf.test.ts",
      "test_path": "tests/perf/fe-perf.test.ts > Performance (FE-PERF) > FE-PERF-008 — axe-core /automation-campaign zero serious violations"
    },
    {
      "id": "FE-PERF-009",
      "description": "axe-core /settings/general zero serious violations",
      "status": "PASS",
      "duration_ms": 5200.435380999996,
      "file_path": "/app/runner/tests/perf/fe-perf.test.ts",
      "test_path": "tests/perf/fe-perf.test.ts > Performance (FE-PERF) > FE-PERF-009 — axe-core /settings/general zero serious violations"
    },
    {
      "id": "FE-PERF-010",
      "description": "Form inputs have associated labels (axe label rule)",
      "status": "PASS",
      "duration_ms": 5495.1491620000015,
      "file_path": "/app/runner/tests/perf/fe-perf.test.ts",
      "test_path": "tests/perf/fe-perf.test.ts > Performance (FE-PERF) > FE-PERF-010 — Form inputs have associated labels (axe label rule)"
    },
    {
      "id": "FE-PERF-011",
      "description": "Color contrast meets WCAG AA (axe color-contrast rule)",
      "status": "PASS",
      "duration_ms": 5331.061041000001,
      "file_path": "/app/runner/tests/perf/fe-perf.test.ts",
      "test_path": "tests/perf/fe-perf.test.ts > Performance (FE-PERF) > FE-PERF-011 — Color contrast meets WCAG AA (axe color-contrast rule)"
    },
    {
      "id": "FE-PERF-012",
      "description": "Tab order through forms is logical (smoke)",
      "status": "PASS",
      "duration_ms": 0.5859930000005988,
      "file_path": "/app/runner/tests/perf/fe-perf.test.ts",
      "test_path": "tests/perf/fe-perf.test.ts > Performance (FE-PERF) > FE-PERF-012 — Tab order through forms is logical (smoke)"
    },
    {
      "id": "FE-PERF-013",
      "description": "Images have alt text (axe image-alt rule)",
      "status": "PASS",
      "duration_ms": 3699.471701000002,
      "file_path": "/app/runner/tests/perf/fe-perf.test.ts",
      "test_path": "tests/perf/fe-perf.test.ts > Performance (FE-PERF) > FE-PERF-013 — Images have alt text (axe image-alt rule)"
    },
    {
      "id": "FE-PERF-014",
      "description": "Page titles match content (smoke)",
      "status": "PASS",
      "duration_ms": 0.43972000000212574,
      "file_path": "/app/runner/tests/perf/fe-perf.test.ts",
      "test_path": "tests/perf/fe-perf.test.ts > Performance (FE-PERF) > FE-PERF-014 — Page titles match content (smoke)"
    },
    {
      "id": "FE-PERF-015",
      "description": "No 404s on static assets (smoke — checked via network observer)",
      "status": "PASS",
      "duration_ms": 2129.01354,
      "file_path": "/app/runner/tests/perf/fe-perf.test.ts",
      "test_path": "tests/perf/fe-perf.test.ts > Performance (FE-PERF) > FE-PERF-015 — No 404s on static assets (smoke — checked via network observer)"
    },
    {
      "id": "FE-CSV-011",
      "description": "lead_ingestion_analytics table exists in deals-actions DB",
      "status": "PASS",
      "duration_ms": 262.486308,
      "file_path": "/app/runner/tests/csv/fe-csv-leadingestion.test.ts",
      "test_path": "tests/csv/fe-csv-leadingestion.test.ts > Lead Ingestion Executor (FE-CSV) > FE-CSV-011 — lead_ingestion_analytics table exists in deals-actions DB"
    },
    {
      "id": "FE-CSV-012",
      "description": "lead-ingestion event contract has v1 (smoke)",
      "status": "PASS",
      "duration_ms": 0.41842099999985294,
      "file_path": "/app/runner/tests/csv/fe-csv-leadingestion.test.ts",
      "test_path": "tests/csv/fe-csv-leadingestion.test.ts > Lead Ingestion Executor (FE-CSV) > FE-CSV-012 — lead-ingestion event contract has v1 (smoke)"
    },
    {
      "id": "FE-CSV-013",
      "description": "OAuth2 token acquisition + refresh via leadingestion/auth.go (smoke)",
      "status": "PASS",
      "duration_ms": 0.3674959999998464,
      "file_path": "/app/runner/tests/csv/fe-csv-leadingestion.test.ts",
      "test_path": "tests/csv/fe-csv-leadingestion.test.ts > Lead Ingestion Executor (FE-CSV) > FE-CSV-013 — OAuth2 token acquisition + refresh via leadingestion/auth.go (smoke)"
    },
    {
      "id": "FE-CSV-014",
      "description": "analytics record carries success / partial / failed status (smoke)",
      "status": "PASS",
      "duration_ms": 0.3509249999999611,
      "file_path": "/app/runner/tests/csv/fe-csv-leadingestion.test.ts",
      "test_path": "tests/csv/fe-csv-leadingestion.test.ts > Lead Ingestion Executor (FE-CSV) > FE-CSV-014 — analytics record carries success / partial / failed status (smoke)"
    },
    {
      "id": "FE-CSV-001",
      "description": "GET /v1/csv-imports/template returns CSV template",
      "status": "PASS",
      "duration_ms": 2705.8294810000007,
      "file_path": "/app/runner/tests/csv/fe-csv.test.ts",
      "test_path": "tests/csv/fe-csv.test.ts > CSV imports (FE-CSV) > FE-CSV-001 — GET /v1/csv-imports/template returns CSV template"
    },
    {
      "id": "FE-CSV-002",
      "description": "POST /v1/stages/:id/csv-imports creates pending job (smoke)",
      "status": "PASS",
      "duration_ms": 0.7768200000000434,
      "file_path": "/app/runner/tests/csv/fe-csv.test.ts",
      "test_path": "tests/csv/fe-csv.test.ts > CSV imports (FE-CSV) > FE-CSV-002 — POST /v1/stages/:id/csv-imports creates pending job (smoke)"
    },
    {
      "id": "FE-CSV-003",
      "description": "Job advances pending → processing → completed (smoke)",
      "status": "PASS",
      "duration_ms": 0.3332620000001043,
      "file_path": "/app/runner/tests/csv/fe-csv.test.ts",
      "test_path": "tests/csv/fe-csv.test.ts > CSV imports (FE-CSV) > FE-CSV-003 — Job advances pending → processing → completed (smoke)"
    },
    {
      "id": "FE-CSV-004",
      "description": "Missing required columns → per-row error report (smoke)",
      "status": "PASS",
      "duration_ms": 0.35527300000012474,
      "file_path": "/app/runner/tests/csv/fe-csv.test.ts",
      "test_path": "tests/csv/fe-csv.test.ts > CSV imports (FE-CSV) > FE-CSV-004 — Missing required columns → per-row error report (smoke)"
    },
    {
      "id": "FE-CSV-005",
      "description": "Malformed phones skipped, valid rows ingested (smoke)",
      "status": "PASS",
      "duration_ms": 0.33972499999981665,
      "file_path": "/app/runner/tests/csv/fe-csv.test.ts",
      "test_path": "tests/csv/fe-csv.test.ts > CSV imports (FE-CSV) > FE-CSV-005 — Malformed phones skipped, valid rows ingested (smoke)"
    },
    {
      "id": "FE-CSV-006",
      "description": "Duplicate emails skipped or merged (smoke)",
      "status": "PASS",
      "duration_ms": 6.978521000000001,
      "file_path": "/app/runner/tests/csv/fe-csv.test.ts",
      "test_path": "tests/csv/fe-csv.test.ts > CSV imports (FE-CSV) > FE-CSV-006 — Duplicate emails skipped or merged (smoke)"
    },
    {
      "id": "FE-CSV-007",
      "description": "Reprocess endpoint idempotent (smoke)",
      "status": "PASS",
      "duration_ms": 0.4494089999998323,
      "file_path": "/app/runner/tests/csv/fe-csv.test.ts",
      "test_path": "tests/csv/fe-csv.test.ts > CSV imports (FE-CSV) > FE-CSV-007 — Reprocess endpoint idempotent (smoke)"
    },
    {
      "id": "FE-CSV-008",
      "description": "GET /v1/stages/:id/csv-imports lists jobs (smoke)",
      "status": "PASS",
      "duration_ms": 0.231923000000279,
      "file_path": "/app/runner/tests/csv/fe-csv.test.ts",
      "test_path": "tests/csv/fe-csv.test.ts > CSV imports (FE-CSV) > FE-CSV-008 — GET /v1/stages/:id/csv-imports lists jobs (smoke)"
    },
    {
      "id": "FE-CSV-009",
      "description": "suppress-import-actions flag toggles trigger behavior (smoke)",
      "status": "PASS",
      "duration_ms": 0.24188200000025972,
      "file_path": "/app/runner/tests/csv/fe-csv.test.ts",
      "test_path": "tests/csv/fe-csv.test.ts > CSV imports (FE-CSV) > FE-CSV-009 — suppress-import-actions flag toggles trigger behavior (smoke)"
    },
    {
      "id": "FE-CSV-010",
      "description": "Oversized CSV handled gracefully (smoke)",
      "status": "PASS",
      "duration_ms": 8.489448999999695,
      "file_path": "/app/runner/tests/csv/fe-csv.test.ts",
      "test_path": "tests/csv/fe-csv.test.ts > CSV imports (FE-CSV) > FE-CSV-010 — Oversized CSV handled gracefully (smoke)"
    },
    {
      "id": "FE-SEAT-001",
      "description": "Sub-User Invite form requires valid email + role",
      "status": "PASS",
      "duration_ms": 8984.741779,
      "file_path": "/app/runner/tests/seats/fe-seat-ah-sig-misc.test.ts",
      "test_path": "tests/seats/fe-seat-ah-sig-misc.test.ts > Sub-user invite (FE-SEAT) > FE-SEAT-001 — Sub-User Invite form requires valid email + role"
    },
    {
      "id": "FE-SEAT-002",
      "description": "Invite creates pending seat row (smoke)",
      "status": "PASS",
      "duration_ms": 2.4488769999989017,
      "file_path": "/app/runner/tests/seats/fe-seat-ah-sig-misc.test.ts",
      "test_path": "tests/seats/fe-seat-ah-sig-misc.test.ts > Sub-user invite (FE-SEAT) > FE-SEAT-002 — Invite creates pending seat row (smoke)"
    },
    {
      "id": "FE-SEAT-003",
      "description": "Recipient receives /invite/[id] email (smoke)",
      "status": "PASS",
      "duration_ms": 0.36586199999874225,
      "file_path": "/app/runner/tests/seats/fe-seat-ah-sig-misc.test.ts",
      "test_path": "tests/seats/fe-seat-ah-sig-misc.test.ts > Sub-user invite (FE-SEAT) > FE-SEAT-003 — Recipient receives /invite/[id] email (smoke)"
    },
    {
      "id": "FE-SEAT-004",
      "description": "/invite/[id] shows account + inviter + Accept",
      "status": "PASS",
      "duration_ms": 5098.708597000001,
      "file_path": "/app/runner/tests/seats/fe-seat-ah-sig-misc.test.ts",
      "test_path": "tests/seats/fe-seat-ah-sig-misc.test.ts > Sub-user invite (FE-SEAT) > FE-SEAT-004 — /invite/[id] shows account + inviter + Accept"
    },
    {
      "id": "FE-SEAT-005",
      "description": "Accept invite from new email creates account (smoke)",
      "status": "PASS",
      "duration_ms": 0.4897430000000895,
      "file_path": "/app/runner/tests/seats/fe-seat-ah-sig-misc.test.ts",
      "test_path": "tests/seats/fe-seat-ah-sig-misc.test.ts > Sub-user invite (FE-SEAT) > FE-SEAT-005 — Accept invite from new email creates account (smoke)"
    },
    {
      "id": "FE-SEAT-006",
      "description": "Reuse accepted invite shows already-accepted (smoke)",
      "status": "PASS",
      "duration_ms": 6.050366999999824,
      "file_path": "/app/runner/tests/seats/fe-seat-ah-sig-misc.test.ts",
      "test_path": "tests/seats/fe-seat-ah-sig-misc.test.ts > Sub-user invite (FE-SEAT) > FE-SEAT-006 — Reuse accepted invite shows already-accepted (smoke)"
    },
    {
      "id": "FE-SEAT-007",
      "description": "Expired invite shows expired-link (smoke)",
      "status": "PASS",
      "duration_ms": 0.7548179999994318,
      "file_path": "/app/runner/tests/seats/fe-seat-ah-sig-misc.test.ts",
      "test_path": "tests/seats/fe-seat-ah-sig-misc.test.ts > Sub-user invite (FE-SEAT) > FE-SEAT-007 — Expired invite shows expired-link (smoke)"
    },
    {
      "id": "FE-SEAT-008",
      "description": "Admin revokes seat → MEMBER session invalidated (smoke)",
      "status": "PASS",
      "duration_ms": 0.26214900000013586,
      "file_path": "/app/runner/tests/seats/fe-seat-ah-sig-misc.test.ts",
      "test_path": "tests/seats/fe-seat-ah-sig-misc.test.ts > Sub-user invite (FE-SEAT) > FE-SEAT-008 — Admin revokes seat → MEMBER session invalidated (smoke)"
    },
    {
      "id": "FE-SEAT-009",
      "description": "GET /v1/user/seats returns seat count",
      "status": "PASS",
      "duration_ms": 2825.9166259999984,
      "file_path": "/app/runner/tests/seats/fe-seat-ah-sig-misc.test.ts",
      "test_path": "tests/seats/fe-seat-ah-sig-misc.test.ts > Sub-user invite (FE-SEAT) > FE-SEAT-009 — GET /v1/user/seats returns seat count"
    },
    {
      "id": "FE-AH-001",
      "description": "PUT /v1/active-hours/:id saves schedule (smoke)",
      "status": "PASS",
      "duration_ms": 0.5377840000001015,
      "file_path": "/app/runner/tests/seats/fe-seat-ah-sig-misc.test.ts",
      "test_path": "tests/seats/fe-seat-ah-sig-misc.test.ts > Active hours (FE-AH) > FE-AH-001 — PUT /v1/active-hours/:id saves schedule (smoke)"
    },
    {
      "id": "FE-AH-002",
      "description": "Stage actions defer outside active window (smoke)",
      "status": "PASS",
      "duration_ms": 0.32867199999964214,
      "file_path": "/app/runner/tests/seats/fe-seat-ah-sig-misc.test.ts",
      "test_path": "tests/seats/fe-seat-ah-sig-misc.test.ts > Active hours (FE-AH) > FE-AH-002 — Stage actions defer outside active window (smoke)"
    },
    {
      "id": "FE-AH-003",
      "description": "Saturday outside window → defer to Monday (smoke)",
      "status": "PASS",
      "duration_ms": 0.7237809999969613,
      "file_path": "/app/runner/tests/seats/fe-seat-ah-sig-misc.test.ts",
      "test_path": "tests/seats/fe-seat-ah-sig-misc.test.ts > Active hours (FE-AH) > FE-AH-003 — Saturday outside window → defer to Monday (smoke)"
    },
    {
      "id": "FE-AH-004",
      "description": "PUT /v1/active-hours-preferences globally disables (smoke)",
      "status": "PASS",
      "duration_ms": 0.6390009999995527,
      "file_path": "/app/runner/tests/seats/fe-seat-ah-sig-misc.test.ts",
      "test_path": "tests/seats/fe-seat-ah-sig-misc.test.ts > Active hours (FE-AH) > FE-AH-004 — PUT /v1/active-hours-preferences globally disables (smoke)"
    },
    {
      "id": "FE-SIG-001",
      "description": "Save email signature persists across reload (smoke)",
      "status": "PASS",
      "duration_ms": 1.816979999999603,
      "file_path": "/app/runner/tests/seats/fe-seat-ah-sig-misc.test.ts",
      "test_path": "tests/seats/fe-seat-ah-sig-misc.test.ts > Signature + booking link (FE-SIG) > FE-SIG-001 — Save email signature persists across reload (smoke)"
    },
    {
      "id": "FE-SIG-002",
      "description": "Outbound email shows signature appended (smoke)",
      "status": "PASS",
      "duration_ms": 0.6668840000020282,
      "file_path": "/app/runner/tests/seats/fe-seat-ah-sig-misc.test.ts",
      "test_path": "tests/seats/fe-seat-ah-sig-misc.test.ts > Signature + booking link (FE-SIG) > FE-SIG-002 — Outbound email shows signature appended (smoke)"
    },
    {
      "id": "FE-SIG-003",
      "description": "Save booking link persists (smoke)",
      "status": "PASS",
      "duration_ms": 0.2716770000006363,
      "file_path": "/app/runner/tests/seats/fe-seat-ah-sig-misc.test.ts",
      "test_path": "tests/seats/fe-seat-ah-sig-misc.test.ts > Signature + booking link (FE-SIG) > FE-SIG-003 — Save booking link persists (smoke)"
    },
    {
      "id": "FE-SIG-004",
      "description": "{{sender_booking_link}} merge tag rendered (smoke)",
      "status": "PASS",
      "duration_ms": 0.30830499999865424,
      "file_path": "/app/runner/tests/seats/fe-seat-ah-sig-misc.test.ts",
      "test_path": "tests/seats/fe-seat-ah-sig-misc.test.ts > Signature + booking link (FE-SIG) > FE-SIG-004 — {{sender_booking_link}} merge tag rendered (smoke)"
    },
    {
      "id": "FE-SIG-005",
      "description": "Empty signature → no trailing artifact (smoke)",
      "status": "PASS",
      "duration_ms": 2.6346550000016578,
      "file_path": "/app/runner/tests/seats/fe-seat-ah-sig-misc.test.ts",
      "test_path": "tests/seats/fe-seat-ah-sig-misc.test.ts > Signature + booking link (FE-SIG) > FE-SIG-005 — Empty signature → no trailing artifact (smoke)"
    },
    {
      "id": "FE-MISC-001",
      "description": "Wrong current password → friendly error not 500 (smoke)",
      "status": "PASS",
      "duration_ms": 0.28145600000061677,
      "file_path": "/app/runner/tests/seats/fe-seat-ah-sig-misc.test.ts",
      "test_path": "tests/seats/fe-seat-ah-sig-misc.test.ts > Misc settings (FE-MISC) > FE-MISC-001 — Wrong current password → friendly error not 500 (smoke)"
    },
    {
      "id": "FE-MISC-002",
      "description": "Same-as-old password blocked (smoke)",
      "status": "PASS",
      "duration_ms": 0.4692059999979392,
      "file_path": "/app/runner/tests/seats/fe-seat-ah-sig-misc.test.ts",
      "test_path": "tests/seats/fe-seat-ah-sig-misc.test.ts > Misc settings (FE-MISC) > FE-MISC-002 — Same-as-old password blocked (smoke)"
    },
    {
      "id": "FE-MISC-003",
      "description": "Password change success → next login uses new (smoke)",
      "status": "PASS",
      "duration_ms": 0.2943090000007942,
      "file_path": "/app/runner/tests/seats/fe-seat-ah-sig-misc.test.ts",
      "test_path": "tests/seats/fe-seat-ah-sig-misc.test.ts > Misc settings (FE-MISC) > FE-MISC-003 — Password change success → next login uses new (smoke)"
    },
    {
      "id": "FE-MISC-004",
      "description": "Driver License upload accepts JPG/PNG/PDF (smoke)",
      "status": "PASS",
      "duration_ms": 0.8536729999977979,
      "file_path": "/app/runner/tests/seats/fe-seat-ah-sig-misc.test.ts",
      "test_path": "tests/seats/fe-seat-ah-sig-misc.test.ts > Misc settings (FE-MISC) > FE-MISC-004 — Driver License upload accepts JPG/PNG/PDF (smoke)"
    },
    {
      "id": "FE-MISC-005",
      "description": "Driver License rejects >5 MB (smoke)",
      "status": "PASS",
      "duration_ms": 0.5056530000001658,
      "file_path": "/app/runner/tests/seats/fe-seat-ah-sig-misc.test.ts",
      "test_path": "tests/seats/fe-seat-ah-sig-misc.test.ts > Misc settings (FE-MISC) > FE-MISC-005 — Driver License rejects >5 MB (smoke)"
    },
    {
      "id": "FE-MISC-006",
      "description": "GET /v1/user/driver-license returns previously uploaded",
      "status": "PASS",
      "duration_ms": 3544.540878,
      "file_path": "/app/runner/tests/seats/fe-seat-ah-sig-misc.test.ts",
      "test_path": "tests/seats/fe-seat-ah-sig-misc.test.ts > Misc settings (FE-MISC) > FE-MISC-006 — GET /v1/user/driver-license returns previously uploaded"
    },
    {
      "id": "FE-MISC-007",
      "description": "Add invalid card → friendly inline error (smoke)",
      "status": "PASS",
      "duration_ms": 1.5525149999994028,
      "file_path": "/app/runner/tests/seats/fe-seat-ah-sig-misc.test.ts",
      "test_path": "tests/seats/fe-seat-ah-sig-misc.test.ts > Misc settings (FE-MISC) > FE-MISC-007 — Add invalid card → friendly inline error (smoke)"
    },
    {
      "id": "FE-MISC-008",
      "description": "Delete only payment method blocked (smoke)",
      "status": "PASS",
      "duration_ms": 0.23854500000015832,
      "file_path": "/app/runner/tests/seats/fe-seat-ah-sig-misc.test.ts",
      "test_path": "tests/seats/fe-seat-ah-sig-misc.test.ts > Misc settings (FE-MISC) > FE-MISC-008 — Delete only payment method blocked (smoke)"
    },
    {
      "id": "FE-MISC-009",
      "description": "Set default payment method updates (smoke)",
      "status": "PASS",
      "duration_ms": 0.1421440000012808,
      "file_path": "/app/runner/tests/seats/fe-seat-ah-sig-misc.test.ts",
      "test_path": "tests/seats/fe-seat-ah-sig-misc.test.ts > Misc settings (FE-MISC) > FE-MISC-009 — Set default payment method updates (smoke)"
    },
    {
      "id": "FE-MISC-010",
      "description": "AI Customized Templates editor saves + renders (smoke)",
      "status": "PASS",
      "duration_ms": 0.13533300000199233,
      "file_path": "/app/runner/tests/seats/fe-seat-ah-sig-misc.test.ts",
      "test_path": "tests/seats/fe-seat-ah-sig-misc.test.ts > Misc settings (FE-MISC) > FE-MISC-010 — AI Customized Templates editor saves + renders (smoke)"
    },
    {
      "id": "FE-PUR-001",
      "description": "/purchase-lists renders (dev-only on staging)",
      "status": "PASS",
      "duration_ms": 5313.565967999999,
      "file_path": "/app/runner/tests/seats/fe-seat-ah-sig-misc.test.ts",
      "test_path": "tests/seats/fe-seat-ah-sig-misc.test.ts > Purchase Lists (FE-PUR) > FE-PUR-001 — /purchase-lists renders (dev-only on staging)"
    },
    {
      "id": "FE-PUR-002",
      "description": "Search by Name filters list (smoke)",
      "status": "PASS",
      "duration_ms": 3.9025199999996403,
      "file_path": "/app/runner/tests/seats/fe-seat-ah-sig-misc.test.ts",
      "test_path": "tests/seats/fe-seat-ah-sig-misc.test.ts > Purchase Lists (FE-PUR) > FE-PUR-002 — Search by Name filters list (smoke)"
    },
    {
      "id": "FE-PUR-003",
      "description": "Status badges In Progress / Success render correct colors (smoke)",
      "status": "PASS",
      "duration_ms": 1.422113000000536,
      "file_path": "/app/runner/tests/seats/fe-seat-ah-sig-misc.test.ts",
      "test_path": "tests/seats/fe-seat-ah-sig-misc.test.ts > Purchase Lists (FE-PUR) > FE-PUR-003 — Status badges In Progress / Success render correct colors (smoke)"
    },
    {
      "id": "FE-PUR-004",
      "description": "Download Leads icon enabled only on Success (smoke)",
      "status": "PASS",
      "duration_ms": 0.5371110000014596,
      "file_path": "/app/runner/tests/seats/fe-seat-ah-sig-misc.test.ts",
      "test_path": "tests/seats/fe-seat-ah-sig-misc.test.ts > Purchase Lists (FE-PUR) > FE-PUR-004 — Download Leads icon enabled only on Success (smoke)"
    },
    {
      "id": "FE-PUR-005",
      "description": "/purchase-lists/create renders form",
      "status": "PASS",
      "duration_ms": 6910.210921000002,
      "file_path": "/app/runner/tests/seats/fe-seat-ah-sig-misc.test.ts",
      "test_path": "tests/seats/fe-seat-ah-sig-misc.test.ts > Purchase Lists (FE-PUR) > FE-PUR-005 — /purchase-lists/create renders form"
    },
    {
      "id": "FE-PUR-006",
      "description": "Create requires name + filters (smoke)",
      "status": "PASS",
      "duration_ms": 0.5137679999970715,
      "file_path": "/app/runner/tests/seats/fe-seat-ah-sig-misc.test.ts",
      "test_path": "tests/seats/fe-seat-ah-sig-misc.test.ts > Purchase Lists (FE-PUR) > FE-PUR-006 — Create requires name + filters (smoke)"
    },
    {
      "id": "FE-PUR-007",
      "description": "Pagination Rows-per-page selector (smoke)",
      "status": "PASS",
      "duration_ms": 0.27310900000156835,
      "file_path": "/app/runner/tests/seats/fe-seat-ah-sig-misc.test.ts",
      "test_path": "tests/seats/fe-seat-ah-sig-misc.test.ts > Purchase Lists (FE-PUR) > FE-PUR-007 — Pagination Rows-per-page selector (smoke)"
    },
    {
      "id": "FE-PUR-008",
      "description": "Targeting eye-icon opens detail modal (smoke)",
      "status": "PASS",
      "duration_ms": 0.3050999999977648,
      "file_path": "/app/runner/tests/seats/fe-seat-ah-sig-misc.test.ts",
      "test_path": "tests/seats/fe-seat-ah-sig-misc.test.ts > Purchase Lists (FE-PUR) > FE-PUR-008 — Targeting eye-icon opens detail modal (smoke)"
    },
    {
      "id": "FE-ACT-VM-001",
      "description": "POST /v1/stages/:id/actions/voicemail endpoint exists",
      "status": "PASS",
      "duration_ms": 3004.2687929999997,
      "file_path": "/app/runner/tests/stage-actions/fe-stage-actions.test.ts",
      "test_path": "tests/stage-actions/fe-stage-actions.test.ts > Stage action — Voicemail (FE-ACT-VM) > FE-ACT-VM-001 — POST /v1/stages/:id/actions/voicemail endpoint exists"
    },
    {
      "id": "FE-ACT-VM-002",
      "description": "Voicemail editor accepts audio upload (smoke)",
      "status": "PASS",
      "duration_ms": 0.5737500000004729,
      "file_path": "/app/runner/tests/stage-actions/fe-stage-actions.test.ts",
      "test_path": "tests/stage-actions/fe-stage-actions.test.ts > Stage action — Voicemail (FE-ACT-VM) > FE-ACT-VM-002 — Voicemail editor accepts audio upload (smoke)"
    },
    {
      "id": "FE-ACT-VM-003",
      "description": "PUT updates voicemail action (smoke)",
      "status": "PASS",
      "duration_ms": 0.47051699999974517,
      "file_path": "/app/runner/tests/stage-actions/fe-stage-actions.test.ts",
      "test_path": "tests/stage-actions/fe-stage-actions.test.ts > Stage action — Voicemail (FE-ACT-VM) > FE-ACT-VM-003 — PUT updates voicemail action (smoke)"
    },
    {
      "id": "FE-ACT-VM-004",
      "description": "DELETE removes action (smoke)",
      "status": "PASS",
      "duration_ms": 0.3077339999999822,
      "file_path": "/app/runner/tests/stage-actions/fe-stage-actions.test.ts",
      "test_path": "tests/stage-actions/fe-stage-actions.test.ts > Stage action — Voicemail (FE-ACT-VM) > FE-ACT-VM-004 — DELETE removes action (smoke)"
    },
    {
      "id": "FE-ACT-VM-005",
      "description": "Trigger dispatches voicemail (smoke)",
      "status": "PASS",
      "duration_ms": 0.34514499999932013,
      "file_path": "/app/runner/tests/stage-actions/fe-stage-actions.test.ts",
      "test_path": "tests/stage-actions/fe-stage-actions.test.ts > Stage action — Voicemail (FE-ACT-VM) > FE-ACT-VM-005 — Trigger dispatches voicemail (smoke)"
    },
    {
      "id": "FE-ACT-VM-006",
      "description": "Reject wrong file type with friendly error (smoke)",
      "status": "PASS",
      "duration_ms": 0.4213759999993272,
      "file_path": "/app/runner/tests/stage-actions/fe-stage-actions.test.ts",
      "test_path": "tests/stage-actions/fe-stage-actions.test.ts > Stage action — Voicemail (FE-ACT-VM) > FE-ACT-VM-006 — Reject wrong file type with friendly error (smoke)"
    },
    {
      "id": "FE-ACT-VM-007",
      "description": "Reject oversized audio with friendly error (smoke)",
      "status": "PASS",
      "duration_ms": 0.9745470000007117,
      "file_path": "/app/runner/tests/stage-actions/fe-stage-actions.test.ts",
      "test_path": "tests/stage-actions/fe-stage-actions.test.ts > Stage action — Voicemail (FE-ACT-VM) > FE-ACT-VM-007 — Reject oversized audio with friendly error (smoke)"
    },
    {
      "id": "FE-ACT-AIC-001",
      "description": "POST /v1/stages/:id/actions/ai-call endpoint exists",
      "status": "PASS",
      "duration_ms": 2965.723801,
      "file_path": "/app/runner/tests/stage-actions/fe-stage-actions.test.ts",
      "test_path": "tests/stage-actions/fe-stage-actions.test.ts > Stage action — AI Call (FE-ACT-AIC) > FE-ACT-AIC-001 — POST /v1/stages/:id/actions/ai-call endpoint exists"
    },
    {
      "id": "FE-ACT-AIC-002",
      "description": "PUT updates AI-call action (smoke)",
      "status": "PASS",
      "duration_ms": 0.5443749999994907,
      "file_path": "/app/runner/tests/stage-actions/fe-stage-actions.test.ts",
      "test_path": "tests/stage-actions/fe-stage-actions.test.ts > Stage action — AI Call (FE-ACT-AIC) > FE-ACT-AIC-002 — PUT updates AI-call action (smoke)"
    },
    {
      "id": "FE-ACT-AIC-003",
      "description": "DELETE removes action (smoke)",
      "status": "PASS",
      "duration_ms": 0.42807900000025256,
      "file_path": "/app/runner/tests/stage-actions/fe-stage-actions.test.ts",
      "test_path": "tests/stage-actions/fe-stage-actions.test.ts > Stage action — AI Call (FE-ACT-AIC) > FE-ACT-AIC-003 — DELETE removes action (smoke)"
    },
    {
      "id": "FE-ACT-AIC-004",
      "description": "Trigger requests AI call (smoke)",
      "status": "PASS",
      "duration_ms": 0.2578620000003866,
      "file_path": "/app/runner/tests/stage-actions/fe-stage-actions.test.ts",
      "test_path": "tests/stage-actions/fe-stage-actions.test.ts > Stage action — AI Call (FE-ACT-AIC) > FE-ACT-AIC-004 — Trigger requests AI call (smoke)"
    },
    {
      "id": "FE-ACT-AIC-005",
      "description": "Empty prompt_template → validation error (smoke)",
      "status": "PASS",
      "duration_ms": 0.3372799999997369,
      "file_path": "/app/runner/tests/stage-actions/fe-stage-actions.test.ts",
      "test_path": "tests/stage-actions/fe-stage-actions.test.ts > Stage action — AI Call (FE-ACT-AIC) > FE-ACT-AIC-005 — Empty prompt_template → validation error (smoke)"
    },
    {
      "id": "FE-ACT-BBS-001",
      "description": "Endpoint exists",
      "status": "PASS",
      "duration_ms": 2508.0596299999997,
      "file_path": "/app/runner/tests/stage-actions/fe-stage-actions.test.ts",
      "test_path": "tests/stage-actions/fe-stage-actions.test.ts > Stage action — BizBuySell (FE-ACT-BBS) > FE-ACT-BBS-001 — Endpoint exists"
    },
    {
      "id": "FE-ACT-BBS-002",
      "description": "CRUD verified (smoke)",
      "status": "PASS",
      "duration_ms": 0.3832560000009835,
      "file_path": "/app/runner/tests/stage-actions/fe-stage-actions.test.ts",
      "test_path": "tests/stage-actions/fe-stage-actions.test.ts > Stage action — BizBuySell (FE-ACT-BBS) > FE-ACT-BBS-002 — CRUD verified (smoke)"
    },
    {
      "id": "FE-ACT-BBS-003",
      "description": "Trigger dispatches request (smoke)",
      "status": "PASS",
      "duration_ms": 0.3567659999989701,
      "file_path": "/app/runner/tests/stage-actions/fe-stage-actions.test.ts",
      "test_path": "tests/stage-actions/fe-stage-actions.test.ts > Stage action — BizBuySell (FE-ACT-BBS) > FE-ACT-BBS-003 — Trigger dispatches request (smoke)"
    },
    {
      "id": "FE-ACT-PD-001",
      "description": "Endpoint exists",
      "status": "PASS",
      "duration_ms": 1943.8340710000011,
      "file_path": "/app/runner/tests/stage-actions/fe-stage-actions.test.ts",
      "test_path": "tests/stage-actions/fe-stage-actions.test.ts > Stage action — PandaDoc (FE-ACT-PD) > FE-ACT-PD-001 — Endpoint exists"
    },
    {
      "id": "FE-ACT-PD-002",
      "description": "Editor lists folders/templates (smoke)",
      "status": "PASS",
      "duration_ms": 3.7060639999999694,
      "file_path": "/app/runner/tests/stage-actions/fe-stage-actions.test.ts",
      "test_path": "tests/stage-actions/fe-stage-actions.test.ts > Stage action — PandaDoc (FE-ACT-PD) > FE-ACT-PD-002 — Editor lists folders/templates (smoke)"
    },
    {
      "id": "FE-ACT-PD-003",
      "description": "CRUD verified (smoke)",
      "status": "PASS",
      "duration_ms": 1.8294029999997292,
      "file_path": "/app/runner/tests/stage-actions/fe-stage-actions.test.ts",
      "test_path": "tests/stage-actions/fe-stage-actions.test.ts > Stage action — PandaDoc (FE-ACT-PD) > FE-ACT-PD-003 — CRUD verified (smoke)"
    },
    {
      "id": "FE-ACT-PD-004",
      "description": "Trigger creates + emails doc (smoke)",
      "status": "PASS",
      "duration_ms": 0.2788700000000972,
      "file_path": "/app/runner/tests/stage-actions/fe-stage-actions.test.ts",
      "test_path": "tests/stage-actions/fe-stage-actions.test.ts > Stage action — PandaDoc (FE-ACT-PD) > FE-ACT-PD-004 — Trigger creates + emails doc (smoke)"
    },
    {
      "id": "FE-ACT-PD-005",
      "description": "Invalid template_id → graceful failure (smoke)",
      "status": "PASS",
      "duration_ms": 0.21723500000007334,
      "file_path": "/app/runner/tests/stage-actions/fe-stage-actions.test.ts",
      "test_path": "tests/stage-actions/fe-stage-actions.test.ts > Stage action — PandaDoc (FE-ACT-PD) > FE-ACT-PD-005 — Invalid template_id → graceful failure (smoke)"
    },
    {
      "id": "UNKNOWN-hogc7o",
      "description": "FE-ACT-S2C-001 — Endpoint exists",
      "status": "PASS",
      "duration_ms": 2333.286164000001,
      "file_path": "/app/runner/tests/stage-actions/fe-stage-actions.test.ts",
      "test_path": "tests/stage-actions/fe-stage-actions.test.ts > Stage action — Send-to-Campaign (FE-ACT-S2C) > FE-ACT-S2C-001 — Endpoint exists"
    },
    {
      "id": "UNKNOWN-sr1p10",
      "description": "FE-ACT-S2C-002 — Editor lists user's campaigns + stages (smoke)",
      "status": "PASS",
      "duration_ms": 76.52646199999981,
      "file_path": "/app/runner/tests/stage-actions/fe-stage-actions.test.ts",
      "test_path": "tests/stage-actions/fe-stage-actions.test.ts > Stage action — Send-to-Campaign (FE-ACT-S2C) > FE-ACT-S2C-002 — Editor lists user's campaigns + stages (smoke)"
    },
    {
      "id": "UNKNOWN-6sx43v",
      "description": "FE-ACT-S2C-003 — Trigger moves deal across campaigns (smoke)",
      "status": "PASS",
      "duration_ms": 0.38242299999910756,
      "file_path": "/app/runner/tests/stage-actions/fe-stage-actions.test.ts",
      "test_path": "tests/stage-actions/fe-stage-actions.test.ts > Stage action — Send-to-Campaign (FE-ACT-S2C) > FE-ACT-S2C-003 — Trigger moves deal across campaigns (smoke)"
    },
    {
      "id": "UNKNOWN-zz24ml",
      "description": "FE-ACT-S2C-004 — Cycle prevention at save time (smoke)",
      "status": "PASS",
      "duration_ms": 0.19260899999972025,
      "file_path": "/app/runner/tests/stage-actions/fe-stage-actions.test.ts",
      "test_path": "tests/stage-actions/fe-stage-actions.test.ts > Stage action — Send-to-Campaign (FE-ACT-S2C) > FE-ACT-S2C-004 — Cycle prevention at save time (smoke)"
    },
    {
      "id": "FE-ACT-SF-001",
      "description": "Endpoint exists",
      "status": "PASS",
      "duration_ms": 2839.506356,
      "file_path": "/app/runner/tests/stage-actions/fe-stage-actions.test.ts",
      "test_path": "tests/stage-actions/fe-stage-actions.test.ts > Stage action — Siteforge (FE-ACT-SF) > FE-ACT-SF-001 — Endpoint exists"
    },
    {
      "id": "FE-ACT-SF-002",
      "description": "CRUD verified (smoke)",
      "status": "PASS",
      "duration_ms": 0.4882609999986016,
      "file_path": "/app/runner/tests/stage-actions/fe-stage-actions.test.ts",
      "test_path": "tests/stage-actions/fe-stage-actions.test.ts > Stage action — Siteforge (FE-ACT-SF) > FE-ACT-SF-002 — CRUD verified (smoke)"
    },
    {
      "id": "FE-ACT-SF-003",
      "description": "Invalid API key at save → friendly error (smoke)",
      "status": "PASS",
      "duration_ms": 4.043452999998408,
      "file_path": "/app/runner/tests/stage-actions/fe-stage-actions.test.ts",
      "test_path": "tests/stage-actions/fe-stage-actions.test.ts > Stage action — Siteforge (FE-ACT-SF) > FE-ACT-SF-003 — Invalid API key at save → friendly error (smoke)"
    },
    {
      "id": "FE-ACT-SF-004",
      "description": "Trigger logs activity (smoke)",
      "status": "PASS",
      "duration_ms": 0.22045100000104867,
      "file_path": "/app/runner/tests/stage-actions/fe-stage-actions.test.ts",
      "test_path": "tests/stage-actions/fe-stage-actions.test.ts > Stage action — Siteforge (FE-ACT-SF) > FE-ACT-SF-004 — Trigger logs activity (smoke)"
    },
    {
      "id": "FE-VM-001",
      "description": "/phone-system/voicemails lists records or empty state",
      "status": "PASS",
      "duration_ms": 5156.482891000001,
      "file_path": "/app/runner/tests/voicemails/fe-vm.test.ts",
      "test_path": "tests/voicemails/fe-vm.test.ts > Voicemails page (FE-VM) > FE-VM-001 — /phone-system/voicemails lists records or empty state"
    },
    {
      "id": "FE-VM-002",
      "description": "Each row shows recipient/duration/status/timestamp (smoke)",
      "status": "PASS",
      "duration_ms": 1.3377769999997327,
      "file_path": "/app/runner/tests/voicemails/fe-vm.test.ts",
      "test_path": "tests/voicemails/fe-vm.test.ts > Voicemails page (FE-VM) > FE-VM-002 — Each row shows recipient/duration/status/timestamp (smoke)"
    },
    {
      "id": "FE-VM-003",
      "description": "Play affordance plays audio inline (smoke)",
      "status": "PASS",
      "duration_ms": 0.548993999999766,
      "file_path": "/app/runner/tests/voicemails/fe-vm.test.ts",
      "test_path": "tests/voicemails/fe-vm.test.ts > Voicemails page (FE-VM) > FE-VM-003 — Play affordance plays audio inline (smoke)"
    },
    {
      "id": "FE-VM-004",
      "description": "Filter by status works (smoke)",
      "status": "PASS",
      "duration_ms": 0.34774900000047637,
      "file_path": "/app/runner/tests/voicemails/fe-vm.test.ts",
      "test_path": "tests/voicemails/fe-vm.test.ts > Voicemails page (FE-VM) > FE-VM-004 — Filter by status works (smoke)"
    },
    {
      "id": "FE-VM-005",
      "description": "Pagination works at boundaries (smoke)",
      "status": "PASS",
      "duration_ms": 0.3836459999993167,
      "file_path": "/app/runner/tests/voicemails/fe-vm.test.ts",
      "test_path": "tests/voicemails/fe-vm.test.ts > Voicemails page (FE-VM) > FE-VM-005 — Pagination works at boundaries (smoke)"
    },
    {
      "id": "FE-VM-006",
      "description": "Voicemail audio URL is signed/scoped (smoke)",
      "status": "PASS",
      "duration_ms": 0.7276870000005147,
      "file_path": "/app/runner/tests/voicemails/fe-vm.test.ts",
      "test_path": "tests/voicemails/fe-vm.test.ts > Voicemails page (FE-VM) > FE-VM-006 — Voicemail audio URL is signed/scoped (smoke)"
    },
    {
      "id": "FE-SEC-001",
      "description": "Direct API call to BFF without token → 401",
      "status": "PASS",
      "duration_ms": 254.4573509999998,
      "file_path": "/app/runner/tests/security/fe-sec-role.test.ts",
      "test_path": "tests/security/fe-sec-role.test.ts > Security (FE-SEC) > FE-SEC-001 — Direct API call to BFF without token → 401"
    },
    {
      "id": "FE-SEC-002",
      "description": "Manipulated JWT → 401, FE redirects to login",
      "status": "PASS",
      "duration_ms": 22.135667999999896,
      "file_path": "/app/runner/tests/security/fe-sec-role.test.ts",
      "test_path": "tests/security/fe-sec-role.test.ts > Security (FE-SEC) > FE-SEC-002 — Manipulated JWT → 401, FE redirects to login"
    },
    {
      "id": "FE-SEC-003",
      "description": "XSS via campaign name escaped on render (smoke)",
      "status": "PASS",
      "duration_ms": 0.7793839999999363,
      "file_path": "/app/runner/tests/security/fe-sec-role.test.ts",
      "test_path": "tests/security/fe-sec-role.test.ts > Security (FE-SEC) > FE-SEC-003 — XSS via campaign name escaped on render (smoke)"
    },
    {
      "id": "FE-SEC-004",
      "description": "XSS via email signature escaped (smoke)",
      "status": "PASS",
      "duration_ms": 0.43665500000020074,
      "file_path": "/app/runner/tests/security/fe-sec-role.test.ts",
      "test_path": "tests/security/fe-sec-role.test.ts > Security (FE-SEC) > FE-SEC-004 — XSS via email signature escaped (smoke)"
    },
    {
      "id": "FE-SEC-005",
      "description": "XSS via business profile description escaped (smoke)",
      "status": "PASS",
      "duration_ms": 0.41283000000021275,
      "file_path": "/app/runner/tests/security/fe-sec-role.test.ts",
      "test_path": "tests/security/fe-sec-role.test.ts > Security (FE-SEC) > FE-SEC-005 — XSS via business profile description escaped (smoke)"
    },
    {
      "id": "FE-SEC-006",
      "description": "SQL injection via search inputs safe (smoke — Prisma parameterised)",
      "status": "PASS",
      "duration_ms": 0.8473109999999906,
      "file_path": "/app/runner/tests/security/fe-sec-role.test.ts",
      "test_path": "tests/security/fe-sec-role.test.ts > Security (FE-SEC) > FE-SEC-006 — SQL injection via search inputs safe (smoke — Prisma parameterised)"
    },
    {
      "id": "FE-SEC-007",
      "description": "Direct nav to /admin/* as non-admin blocked",
      "status": "PASS",
      "duration_ms": 6115.583557,
      "file_path": "/app/runner/tests/security/fe-sec-role.test.ts",
      "test_path": "tests/security/fe-sec-role.test.ts > Security (FE-SEC) > FE-SEC-007 — Direct nav to /admin/* as non-admin blocked"
    },
    {
      "id": "FE-SEC-008",
      "description": "IDOR /automation-campaign/[id] foreign id → 403/404 (smoke)",
      "status": "PASS",
      "duration_ms": 3.621635999999853,
      "file_path": "/app/runner/tests/security/fe-sec-role.test.ts",
      "test_path": "tests/security/fe-sec-role.test.ts > Security (FE-SEC) > FE-SEC-008 — IDOR /automation-campaign/[id] foreign id → 403/404 (smoke)"
    },
    {
      "id": "FE-SEC-009",
      "description": "IDOR /admin/billing/clients/[id] foreign id → 403/404 (smoke)",
      "status": "PASS",
      "duration_ms": 0.40128900000036083,
      "file_path": "/app/runner/tests/security/fe-sec-role.test.ts",
      "test_path": "tests/security/fe-sec-role.test.ts > Security (FE-SEC) > FE-SEC-009 — IDOR /admin/billing/clients/[id] foreign id → 403/404 (smoke)"
    },
    {
      "id": "FE-SEC-010",
      "description": "File upload wrong type rejected (smoke)",
      "status": "PASS",
      "duration_ms": 0.5146709999999075,
      "file_path": "/app/runner/tests/security/fe-sec-role.test.ts",
      "test_path": "tests/security/fe-sec-role.test.ts > Security (FE-SEC) > FE-SEC-010 — File upload wrong type rejected (smoke)"
    },
    {
      "id": "FE-SEC-011",
      "description": "File upload oversized rejected (smoke)",
      "status": "PASS",
      "duration_ms": 1.918800000000374,
      "file_path": "/app/runner/tests/security/fe-sec-role.test.ts",
      "test_path": "tests/security/fe-sec-role.test.ts > Security (FE-SEC) > FE-SEC-011 — File upload oversized rejected (smoke)"
    },
    {
      "id": "FE-SEC-012",
      "description": "File upload uses staging cloud-documents URL (regression)",
      "status": "PASS",
      "duration_ms": 0.37207499999931315,
      "file_path": "/app/runner/tests/security/fe-sec-role.test.ts",
      "test_path": "tests/security/fe-sec-role.test.ts > Security (FE-SEC) > FE-SEC-012 — File upload uses staging cloud-documents URL (regression)"
    },
    {
      "id": "FE-SEC-013",
      "description": "CSP blocks third-party scripts not in allowlist (smoke)",
      "status": "PASS",
      "duration_ms": 0.4077109999998356,
      "file_path": "/app/runner/tests/security/fe-sec-role.test.ts",
      "test_path": "tests/security/fe-sec-role.test.ts > Security (FE-SEC) > FE-SEC-013 — CSP blocks third-party scripts not in allowlist (smoke)"
    },
    {
      "id": "FE-SEC-014",
      "description": "Frames-ancestors blocks iframe embedding (smoke)",
      "status": "PASS",
      "duration_ms": 463.9421349999993,
      "file_path": "/app/runner/tests/security/fe-sec-role.test.ts",
      "test_path": "tests/security/fe-sec-role.test.ts > Security (FE-SEC) > FE-SEC-014 — Frames-ancestors blocks iframe embedding (smoke)"
    },
    {
      "id": "FE-SEC-015",
      "description": "Logout invalidates session token (smoke)",
      "status": "PASS",
      "duration_ms": 0.5600150000009307,
      "file_path": "/app/runner/tests/security/fe-sec-role.test.ts",
      "test_path": "tests/security/fe-sec-role.test.ts > Security (FE-SEC) > FE-SEC-015 — Logout invalidates session token (smoke)"
    },
    {
      "id": "FE-ROLE-001",
      "description": "MEMBER login lands on dashboard",
      "status": "PASS",
      "duration_ms": 2211.5447490000006,
      "file_path": "/app/runner/tests/security/fe-sec-role.test.ts",
      "test_path": "tests/security/fe-sec-role.test.ts > Multi-role enforcement (FE-ROLE) > FE-ROLE-001 — MEMBER login lands on dashboard"
    },
    {
      "id": "FE-ROLE-002",
      "description": "MEMBER /admin/dashboard redirected or 403",
      "status": "PASS",
      "duration_ms": 3736.2673080000004,
      "file_path": "/app/runner/tests/security/fe-sec-role.test.ts",
      "test_path": "tests/security/fe-sec-role.test.ts > Multi-role enforcement (FE-ROLE) > FE-ROLE-002 — MEMBER /admin/dashboard redirected or 403"
    },
    {
      "id": "FE-ROLE-003",
      "description": "MEMBER PUT /v1/admin/plans/:id → 403 (smoke)",
      "status": "PASS",
      "duration_ms": 0.4915679999994609,
      "file_path": "/app/runner/tests/security/fe-sec-role.test.ts",
      "test_path": "tests/security/fe-sec-role.test.ts > Multi-role enforcement (FE-ROLE) > FE-ROLE-003 — MEMBER PUT /v1/admin/plans/:id → 403 (smoke)"
    },
    {
      "id": "FE-ROLE-004",
      "description": "MEMBER scoped to own account_id (smoke)",
      "status": "PASS",
      "duration_ms": 0.5328249999984109,
      "file_path": "/app/runner/tests/security/fe-sec-role.test.ts",
      "test_path": "tests/security/fe-sec-role.test.ts > Multi-role enforcement (FE-ROLE) > FE-ROLE-004 — MEMBER scoped to own account_id (smoke)"
    },
    {
      "id": "FE-ROLE-005",
      "description": "MEMBER admin-only actions hidden from UI (smoke)",
      "status": "PASS",
      "duration_ms": 0.3013019999998505,
      "file_path": "/app/runner/tests/security/fe-sec-role.test.ts",
      "test_path": "tests/security/fe-sec-role.test.ts > Multi-role enforcement (FE-ROLE) > FE-ROLE-005 — MEMBER admin-only actions hidden from UI (smoke)"
    },
    {
      "id": "FE-ROLE-006",
      "description": "MEMBER edits own profile, can't delete account (smoke)",
      "status": "PASS",
      "duration_ms": 0.2524200000007113,
      "file_path": "/app/runner/tests/security/fe-sec-role.test.ts",
      "test_path": "tests/security/fe-sec-role.test.ts > Multi-role enforcement (FE-ROLE) > FE-ROLE-006 — MEMBER edits own profile, can't delete account (smoke)"
    },
    {
      "id": "UNKNOWN-2nen14",
      "description": "WEBHOOK-AUTH-001 — email-ingress sentiment-webhook rejects without auth",
      "status": "PASS",
      "duration_ms": 171.45789300000013,
      "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-jjyv39",
      "description": "WEBHOOK-AUTH-002 — sms-service sentiment-webhook rejects without auth",
      "status": "PASS",
      "duration_ms": 85.61102699999992,
      "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-p55aig",
      "description": "WEBHOOK-AUTH-003 — deal-mover sweeper rejects without auth",
      "status": "PASS",
      "duration_ms": 80.246938,
      "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-PHONE-001",
      "description": "/phone-system redirects to /phone-system/sms",
      "status": "PASS",
      "duration_ms": 5204.207968,
      "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"
    },
    {
      "id": "FE-PHONE-002",
      "description": "/phone-system/sms renders empty state (FE-BUG-04 fix — no permanent skeleton)",
      "status": "PASS",
      "duration_ms": 8528.907858,
      "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)"
    },
    {
      "id": "FE-PHONE-003",
      "description": "Empty state shows 'Go to Phone System Settings' CTA (best-effort)",
      "status": "PASS",
      "duration_ms": 4622.201472000001,
      "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)"
    },
    {
      "id": "FE-PHONE-004",
      "description": "/phone-system/voicemails lists voicemails or empty state",
      "status": "PASS",
      "duration_ms": 5761.6609690000005,
      "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"
    },
    {
      "id": "FE-PHONE-005",
      "description": "Brand registration flow accessible from phone system",
      "status": "PASS",
      "duration_ms": 3.8089170000021113,
      "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": 1.0075900000010733,
      "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.3181530000001658,
      "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.18337200000314624,
      "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.34879999999975553,
      "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.3638999999998305,
      "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.3588190000000395,
      "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.34682699999984834,
      "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.36385900000004767,
      "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.5165839999999662,
      "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": 4.194324999999935,
      "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.273569999999836,
      "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.20203599999967992,
      "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.3203680000001441,
      "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": 147.85075000000006,
      "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.312923999999839,
      "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.4843430000000808,
      "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.5610160000001088,
      "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": 1.5290829999999005,
      "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.25301100000024235,
      "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.22521099999994476,
      "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.1479250000002139,
      "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.16823500000009517,
      "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.18562599999995655,
      "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.2231059999999161,
      "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": 1.8387410000000273,
      "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.3079640000000836,
      "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.32521700000006604,
      "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.33952399999998306,
      "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.22929799999997158,
      "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.29989899999986847,
      "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": 0.4675119999999424,
      "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.3461160000001655,
      "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.39824300000009316,
      "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.3599010000000362,
      "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": 104.88570699999991,
      "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.4233400000000529,
      "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)"
    },
    {
      "id": "FE-SET-G-016",
      "description": "/settings/general AI Chat Response tab renders",
      "status": "PASS",
      "duration_ms": 3116.1511269999996,
      "file_path": "/app/runner/tests/settings/fe-set-g-aichat.test.ts",
      "test_path": "tests/settings/fe-set-g-aichat.test.ts > AI Chat Response settings (FE-SET-G) > FE-SET-G-016 — /settings/general AI Chat Response tab renders"
    },
    {
      "id": "FE-SET-G-017",
      "description": "Selecting a campaign reveals channel configuration toggles",
      "status": "PASS",
      "duration_ms": 2605.6856590000007,
      "file_path": "/app/runner/tests/settings/fe-set-g-aichat.test.ts",
      "test_path": "tests/settings/fe-set-g-aichat.test.ts > AI Chat Response settings (FE-SET-G) > FE-SET-G-017 — Selecting a campaign reveals channel configuration toggles"
    },
    {
      "id": "FE-SET-G-018",
      "description": "AI chat config persists in LocalStorage across reload",
      "status": "PASS",
      "duration_ms": 2707.1014030000006,
      "file_path": "/app/runner/tests/settings/fe-set-g-aichat.test.ts",
      "test_path": "tests/settings/fe-set-g-aichat.test.ts > AI Chat Response settings (FE-SET-G) > FE-SET-G-018 — AI chat config persists in LocalStorage across reload"
    },
    {
      "id": "FE-SET-G-001",
      "description": "/settings/general renders Billing section by default",
      "status": "PASS",
      "duration_ms": 9003.508824,
      "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"
    },
    {
      "id": "FE-SET-G-002",
      "description": "Right sidebar nav items show full text (fe-ui-01 regression)",
      "status": "PASS",
      "duration_ms": 7497.713575000002,
      "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)"
    },
    {
      "id": "FE-SET-G-003",
      "description": "Right sidebar nav items list (smoke)",
      "status": "PASS",
      "duration_ms": 0.4380479999999807,
      "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.29159400000207825,
      "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.32708999999886146,
      "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": "PASS",
      "duration_ms": 6712.1552599999995,
      "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)"
    },
    {
      "id": "FE-SET-G-007",
      "description": "Promo code card shows discount + expiry + COPY (smoke)",
      "status": "PASS",
      "duration_ms": 0.47022699999797624,
      "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": 13.04959400000007,
      "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.5022270000008575,
      "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.3530179999979737,
      "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.4014790000001085,
      "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": 0.2141090000004624,
      "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.19345099999918602,
      "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": 0.6261080000003858,
      "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.20102499999848078,
      "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": "PASS",
      "duration_ms": 4768.8608840000015,
      "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"
    },
    {
      "id": "FE-SET-S-002",
      "description": "Right sidebar Phone / Email Settings (smoke)",
      "status": "PASS",
      "duration_ms": 0.41444400000182213,
      "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.34155699999973876,
      "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": 3.3279879999972763,
      "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.503459000003204,
      "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": 1.0881210000006831,
      "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.2627809999976307,
      "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": "PASS",
      "duration_ms": 6173.034062999999,
      "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"
    },
    {
      "id": "FE-SET-M-002",
      "description": "Existing add-ons list (smoke)",
      "status": "PASS",
      "duration_ms": 0.4435059999959776,
      "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.2367519999970682,
      "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.30872599999565864,
      "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.23373600000195438,
      "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": 2.9001400000051945,
      "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": "PASS",
      "duration_ms": 5175.661627999994,
      "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"
    },
    {
      "id": "FE-USER-002",
      "description": "Created date renders correctly (NOT 'Invalid Date')",
      "status": "PASS",
      "duration_ms": 5682.023916999999,
      "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')"
    },
    {
      "id": "FE-USER-003",
      "description": "Change Password button opens modal (smoke)",
      "status": "PASS",
      "duration_ms": 2.47099999999773,
      "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.3050589999984368,
      "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.3116020000015851,
      "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.3216400000019348,
      "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)"
    }
  ]
}