{
  "schemaVersion": 1,
  "date": "2026-11-09",
  "scope": "Installed-source review and SELECT-only demo observations; no loader execution, form submission, data/configuration change, service operation or call test.",
  "installedHopper": {
    "version": "2.14",
    "build": "250224-1641",
    "sha256": "6d3879e1c3158160bfdf3ba61dc66e69bafb99d347362a0cbead7042b5a97b94"
  },
  "runtime": {
    "database": "vicidb",
    "cronMinutes": 2,
    "sourceHeaderRecommendedMinutes": 1,
    "runCheckEnabledInCron": false
  },
  "solarFunnel": {
    "activeListLeads": 108288,
    "matchingDialStatus": 17,
    "matchingStatusAndUncalled": 0,
    "readyRows": 0,
    "hopperMinimum": 5000
  },
  "captures": {
    "schedule": {
      "command": "crontab -l | grep -E '^([^#].*AST_VDhopper\\.pl|#.*AST_VDhopper\\.pl)'",
      "output": [
        "#* * * * * /usr/share/astguiclient/AST_VDhopper.pl -q",
        "*/2 * * * * /usr/share/astguiclient/AST_VDhopper.pl -q",
        ""
      ],
      "capturedAt": "2026-11-09T17:19:55.586465+00:00",
      "exitCode": 0,
      "stdoutSha256": "2d72b914a05bf4917282c694888dd2819c46df518647b99994cbef9fb62f2dfe",
      "image": {
        "src": "/evidence/hopper-2026-11-09/schedule.png",
        "width": 1200,
        "height": 394
      },
      "imageSha256": "8c914e8a3532ea233438415e1849c39fbc3a1c5e94836e0228cc1de916cdfc41"
    },
    "eligibility": {
      "command": "mysql --defaults-extra-file=/etc/vicidial-readonly.cnf --table -e \"SELECT COUNT(*) AS total_leads, SUM(v.status IN ('N','NA','A','AA','NEW')) AS matching_status, SUM(v.status IN ('N','NA','A','AA','NEW') AND v.called_since_last_reset='N') AS matching_status_uncalled FROM vicidial_list v JOIN vicidial_lists l ON l.list_id=v.list_id WHERE l.campaign_id='SOLAR' AND l.active='Y' AND l.expiration_date>=CURDATE();\"",
      "output": [
        "+-------------+-----------------+--------------------------+",
        "| total_leads | matching_status | matching_status_uncalled |",
        "+-------------+-----------------+--------------------------+",
        "|      108288 |              17 |                        0 |",
        "+-------------+-----------------+--------------------------+",
        ""
      ],
      "capturedAt": "2026-11-09T17:19:58.610477+00:00",
      "exitCode": 0,
      "stdoutSha256": "7b51eb3ee5785ff322a1bb9e9447e2b8c64804a5058e059936525e500914989c",
      "image": {
        "src": "/evidence/hopper-2026-11-09/eligibility.png",
        "width": 1200,
        "height": 562
      },
      "imageSha256": "54616e64540e452684301daa8e923f6bb76ba1fa63f5fe5197054e020d06afa5"
    },
    "queue": {
      "command": "mysql --defaults-extra-file=/etc/vicidial-readonly.cnf --table -e \"SELECT h.campaign_id, c.active, h.status AS hopper_status, v.status AS lead_status, COUNT(*) AS queued FROM vicidial_hopper h JOIN vicidial_campaigns c ON c.campaign_id=h.campaign_id JOIN vicidial_list v ON v.lead_id=h.lead_id GROUP BY h.campaign_id,c.active,h.status,v.status ORDER BY h.campaign_id;\"",
      "output": [
        "+-------------+--------+---------------+-------------+--------+",
        "| campaign_id | active | hopper_status | lead_status | queued |",
        "+-------------+--------+---------------+-------------+--------+",
        "| KPISYN1     | Y      | READY         | NEW         |      1 |",
        "| LAB01       | N      | READY         | NEW         |      1 |",
        "| SIPPQA1     | Y      | READY         | SVYEXT      |      1 |",
        "+-------------+--------+---------------+-------------+--------+",
        ""
      ],
      "capturedAt": "2026-11-09T17:20:01.467786+00:00",
      "exitCode": 0,
      "stdoutSha256": "f7b24a823b25a87f260afdb5f8f77345a9d500dfadafaeb06d79acd709112c7c",
      "image": {
        "src": "/evidence/hopper-2026-11-09/queue.png",
        "width": 1200,
        "height": 618
      },
      "imageSha256": "bb0689ad80b0a7d2c63943b4936bf61a7dd319748594456ad919f63f59ad8154"
    },
    "flags": {
      "command": "grep -n -E '\\$T\\b|\\$TEST\\b|\\$run_check=|if \\(\\$run_check' /usr/share/astguiclient/AST_VDhopper.pl",
      "output": [
        "126:$run_check=0;",
        "281:\t\t\t$T=1;   $TEST=1;",
        "294:\t\t\t$run_check=1;",
        "305:if ($run_check > 0)",
        ""
      ],
      "capturedAt": "2026-11-09T17:20:04.322709+00:00",
      "exitCode": 0,
      "stdoutSha256": "5dada8da98947a0de292a57338ef65881d960562f09396c8facda05752614ee5",
      "image": {
        "src": "/evidence/hopper-2026-11-09/flags.png",
        "width": 1200,
        "height": 450
      },
      "imageSha256": "05e27626c3dddc5cd9ee730a50647b21d8d7af06dc54a09343e07b1cb4c8841a"
    }
  },
  "limits": [
    "Counts are dated snapshots, not a current live dashboard.",
    "Rendered transcript screenshots are not native terminal UI screenshots.",
    "Two linked native control screenshots from November 4 show unsaved example values.",
    "No completed call, carrier or audio result is claimed."
  ],
  "sourceReviewLocations": {
    "configAndInitialization": "AST_VDhopper.pl:319-417",
    "countOnlyAfterWrite": "AST_VDhopper.pl:413,485",
    "testFlagAssignments": "AST_VDhopper.pl:281",
    "campaignSelection": "AST_VDhopper.pl:1292-1304",
    "automaticSizing": "AST_VDhopper.pl:1360-1396",
    "autoTrim": "AST_VDhopper.pl:1418-1446",
    "readyCount": "AST_VDhopper.pl:2218-2235",
    "standardSelection": "AST_VDhopper.pl:2859,3029-3066,3245",
    "queueInsert": "AST_VDhopper.pl:3662-3667",
    "automaticConsumer": "AST_VDauto_dial.pl:1755-1795,1939-1948,2084,2388-2393",
    "manualConsumer": "vdc_db_query.php:3219"
  }
}
