M

Manor AI

Leif Johnson Ford
Live
Scheduler
● Running
Process is alive
Log Activity
● 0 min ago
Log is fresh
Browser Session
● Available
No active browser session

📜 Scheduler Log last 100 lines

Modified: 7:48 AM CT
[nav] Retry 1/2 — waiting longer for iframe to load...
[debug] Screenshot saved: /Users/robbins/jarvis/repos/dealership/debug/deep-extract-fatal-2026-09-22T12-45-03-012Z.png
[2026-09-22T12:45:03.066Z] FATAL: Error: page.evaluate: Error: cardashboardframe not found on page
at eval (eval at evaluate (:290:30), <anonymous>:1:79)
at UtilityScript.evaluate (<anonymous>:292:16)
at UtilityScript.<anonymous> (<anonymous>:1:44)
[2026-09-22T12:45:03.120Z] [scheduler] Finished: vin-deep-extract (exit 1, 6123s)
[scheduler] [failstate] vin-deep-extract failure #2 suppressed (ladder 1/6/18, then daily @ 7AM CT once chronic)
[2026-09-22T12:45:03.126Z] [scheduler] Deep extract failed — skipping classify and recommend (exit 1)
[2026-09-22T12:45:04.744Z] staff-message-flush: nothing due (jump-now)
[2026-09-22T12:45:04.745Z] staff-message-flush: nothing due (escalation rollup)
[2026-09-22T12:45:04.760Z] staff-message-flush: nothing due (reply coalesce)
[2026-09-22T12:45:04.760Z] staff-message-flush: nothing due (digest)
[2026-09-22T12:45:04.770Z] [scheduler] Finished: staff-message-flush (exit 0, 4s)
[2026-09-22T12:45:04.991Z] Facebook Automotive Inventory feed generator
[2026-09-22T12:45:05.002Z] Loaded 233 used vehicles from stores: manor, austin, buda
[2026-09-22T12:45:05.032Z] Featuring 1 NEW unit(s) from memory/fb-feature-vins.json: 1FT8W2BM5TEE83280
(node:16899) [DEP0040] DeprecationWarning: The `punycode` module is deprecated. Please use a userland alternative instead.
(Use `node --trace-deprecation ...` to show where the warning was created)
[2026-09-22T12:45:06.243Z] [airtable-sync] Airtable retired 9/16/26 — all reads/writes go to data/store
[2026-09-22T12:45:06.263Z] Session lock acquired by vs-daily-feeds (pid 16897) [.dealership-browser-data-reader]
[login] Navigating to dashboard...
[2026-09-22T12:45:08.485Z] Scraping images for 15 new VIN(s) (cache already has 187)...
[login] Check 1: https://vinsolutions.app.coxautoinc.com/vinconnect/pane-both/vinconnect-dealer-d...
[login] Session valid — already logged in (iframe content verified)
[2026-09-22T12:45:13.969Z] [vs-sold-feed] Parsed 123 sold deal(s) from 123 row(s) (last 30d)
[2026-09-22T12:45:14.198Z] [vs-appointments-feed] Parsed 150 appointment(s) from reportType=10 (180 rows) + reportType=11 (97 rows), last 30d
[2026-09-22T12:45:14.249Z] [vs-daily-feeds] Wrote 123 sold deal(s) -> data/store/vs-sold.json
[2026-09-22T12:45:14.567Z] [vs-daily-feeds] Sales Funnel today: 0 sold, 0 open showroom visits -> data/store/vs-funnel-today.json
[2026-09-22T12:45:14.573Z] [vs-daily-feeds] Wrote 150 appointment(s) -> data/store/vs-appointments.json
[2026-09-22T12:45:15.593Z] Session lock released by vs-daily-feeds [.dealership-browser-data-reader]
[2026-09-22T12:45:15.619Z] [scheduler] Finished: vs-daily-feeds (exit 0, 15s)
[2026-09-22T12:46:00.642Z] [scheduler] Starting: rep-reply-listener
[2026-09-22T12:46:00.653Z] [scheduler] Starting: text-chief
[2026-09-22T12:46:00.965Z] [scheduler] Starting: vin-first-touch
(node:18437) ExperimentalWarning: SQLite is an experimental feature and might change at any time
(Use `node --trace-warnings ...` to show where the warning was created)
(node:18436) ExperimentalWarning: SQLite is an experimental feature and might change at any time
(Use `node --trace-warnings ...` to show where the warning was created)
[2026-09-22T12:46:06.676Z] [airtable-sync] Airtable retired 9/16/26 — all reads/writes go to data/store
[2026-09-22T12:46:07.417Z] ⚠ card not found by title — fallback queued
[2026-09-22T12:46:07.417Z]
[33/71] Ford Transit 350 ($43775 → $42800)
[2026-09-22T12:46:08.108Z] [airtable-sync] Airtable retired 9/16/26 — all reads/writes go to data/store
[2026-09-22T12:46:08.122Z] vin-first-touch starting...
[2026-09-22T12:46:08.126Z] Session lock acquired by vin-first-touch (pid 18435) [.dealership-browser-data]
(node:18435) [DEP0040] DeprecationWarning: The `punycode` module is deprecated. Please use a userland alternative instead.
(Use `node --trace-deprecation ...` to show where the warning was created)
[2026-09-22T12:46:08.410Z] [rep-reply-listener] no new inbound from staff since 2026-09-22T03:37:31.000Z [DRY-RUN]
[2026-09-22T12:46:08.420Z] [scheduler] Finished: rep-reply-listener (exit 0, 8s)
[login] Navigating to dashboard...
[login] Check 1: https://vinsolutions.app.coxautoinc.com/vinconnect/pane-both/vinconnect-dealer-d...
[login] Session valid — already logged in (iframe content verified)
[2026-09-22T12:46:11.684Z] Logged in to VinSolutions
[nav] Leads layout check failed (attempt 1): cardashboardframe element missing
[nav] Retry 1/2 — waiting longer for iframe to load...
[2026-09-22T12:46:15.706Z] Session lock released by vin-first-touch [.dealership-browser-data]
[2026-09-22T12:46:15.706Z] FATAL: Error: page.evaluate: Error: cardashboardframe not found on page
at eval (eval at evaluate (:290:30), <anonymous>:1:79)
at UtilityScript.evaluate (<anonymous>:292:16)
at UtilityScript.<anonymous> (<anonymous>:1:44)
[2026-09-22T12:46:15.736Z] [scheduler] Finished: vin-first-touch (exit 1, 15s)
[scheduler] [failstate] vin-first-touch failure #11 suppressed (frequent job, needs 2 in a row, then daily @ 7AM CT once chronic)
[2026-09-22T12:46:17.021Z] [text-chief] read 0 inbound since watermark — 0 rep, 0 customer qualifying — TEXT_CHIEF_ENABLED=0, not drafting/notifying/sending
(node:18437) [DEP0040] DeprecationWarning: The `punycode` module is deprecated. Please use a userland alternative instead.
[2026-09-22T12:46:17.051Z] [scheduler] Finished: text-chief (exit 0, 16s)
[2026-09-22T12:47:29.510Z] ⚠ card not found by title — fallback queued
[2026-09-22T12:47:29.510Z]
[34/71] BMW 3 Series 330i ($24775 → $23836)
[2026-09-22T12:48:00.197Z] [scheduler] Starting: vin-first-touch
[2026-09-22T12:48:00.880Z] [scheduler] Starting: rep-reply-listener
[2026-09-22T12:48:00.881Z] [scheduler] Starting: text-chief
[2026-09-22T12:48:00.964Z] [airtable-sync] Airtable retired 9/16/26 — all reads/writes go to data/store
[2026-09-22T12:48:00.986Z] vin-first-touch starting...
[2026-09-22T12:48:00.987Z] Session lock acquired by vin-first-touch (pid 20581) [.dealership-browser-data]
(node:20581) [DEP0040] DeprecationWarning: The `punycode` module is deprecated. Please use a userland alternative instead.
(Use `node --trace-deprecation ...` to show where the warning was created)
(node:20646) ExperimentalWarning: SQLite is an experimental feature and might change at any time
(Use `node --trace-warnings ...` to show where the warning was created)
(node:20645) ExperimentalWarning: SQLite is an experimental feature and might change at any time
(Use `node --trace-warnings ...` to show where the warning was created)
[2026-09-22T12:48:01.201Z] [airtable-sync] Airtable retired 9/16/26 — all reads/writes go to data/store
[2026-09-22T12:48:01.404Z] [rep-reply-listener] no new inbound from staff since 2026-09-22T03:37:31.000Z [DRY-RUN]
[2026-09-22T12:48:01.413Z] [scheduler] Finished: rep-reply-listener (exit 0, 1s)
[login] Navigating to dashboard...
[2026-09-22T12:48:01.804Z] [text-chief] read 0 inbound since watermark — 0 rep, 0 customer qualifying — TEXT_CHIEF_ENABLED=0, not drafting/notifying/sending
(node:20645) [DEP0040] DeprecationWarning: The `punycode` module is deprecated. Please use a userland alternative instead.
[2026-09-22T12:48:01.820Z] [scheduler] Finished: text-chief (exit 0, 1s)
[login] Check 1: https://vinsolutions.app.coxautoinc.com/vinconnect/pane-both/vinconnect-dealer-d...
[login] Session valid — already logged in (iframe content verified)
[2026-09-22T12:48:04.010Z] Logged in to VinSolutions
[nav] Leads layout check failed (attempt 1): cardashboardframe element missing
[nav] Retry 1/2 — waiting longer for iframe to load...
[2026-09-22T12:48:08.024Z] Session lock released by vin-first-touch [.dealership-browser-data]
[2026-09-22T12:48:08.025Z] FATAL: Error: page.evaluate: Error: cardashboardframe not found on page
at eval (eval at evaluate (:290:30), <anonymous>:1:79)
at UtilityScript.evaluate (<anonymous>:292:16)
at UtilityScript.<anonymous> (<anonymous>:1:44)
[2026-09-22T12:48:08.069Z] [scheduler] Finished: vin-first-touch (exit 1, 8s)
[scheduler] [failstate] vin-first-touch failure #12 suppressed (frequent job, needs 2 in a row, then daily @ 7AM CT once chronic)

Process Details

Scheduler PID ● Active
Dashboard uptime
Session lock 🔓 Free

Quick Commands

Restart scheduler:
launchctl kickstart -k gui/$(id -u)/com.leifj.dealership-scheduler
View scheduler log:
tail -f ~/Desktop/Code\ ap\ TODO\ LIST/dealership/logs/scheduler.log
Manual VIN login:
npx tsx scripts/vin-login-once.ts --headed
Force deep extract:
npx tsx scripts/vin-deep-extract.ts --limit 50

Job Schedule (CT)

every 30m, around the clock CT heartbeat watchdog
every 2m, around the clock CT rep-reply listener
every 2m, around the clock CT text-chief
1:15 AM CT VS contact backfill
2:00 AM Sun CT Weekly scheduler.log rotation: Sunday 2 AM CT. copytruncate so the
5:00 AM CT Daily Cleanup: debug screenshots + log rotation (5 AM CT)
5:17 AM, 8:17 PM Mon-Sat CT gsm-austin-buda-scrape --send --cap 150
5:30 AM CT VinCue deep market scraper (MMR crawl)
6:02 AM, 12:02 PM, 6:02 PM CT health watchdog
6:03 AM, 10:03 AM, 2:03 PM, 7:03 PM Mon-Sat CT sync pipeline
6:03 AM, 10:03 AM, 2:03 PM, 7:03 PM Sun CT sync pipeline (Sunday)
6:05 AM CT VS report feeds (sold + appointments)
6:10 AM Mon-Sat CT early-AM vin-rep-activity (for morning email)
6:15 AM Mon-Sat CT Axcessa scraper (morning)
6:15 AM Mon-Sat CT dead deal detector
6:20 AM Mon-Sat CT VinCue daily snapshot
6:20 AM CT callrevu-missed-list
6:20 AM, 10:20 AM, 2:20 PM, 7:20 PM Mon-Sat CT dedup scanner
6:25 AM Mon-Sat CT VinCue equity snapshot + aged-unit alerts
6:25 AM, 10:25 AM, 2:25 PM, 7:25 PM Mon-Sat CT auto-assign leads (post-extract)
6:30 AM Mon CT roster-sync-check
6:30 AM Mon CT weekly self-audit
6:30 AM Mon-Sat CT external data sync (VinCue + CallRevu + data refresh)
6:35 AM Mon-Sat CT morning watchlist email
6:40 AM Mon CT weekly manager review (lost/bad + rep scorecards + FB audit -> one email to Will)
6:44 AM, 2:44 PM, 10:44 PM CT impel-keepwarm
6:45 AM Mon-Sat CT Manor daily pipeline (Variable Ops + email)
6:45 AM Mon-Sat CT FB inventory reconcile (audit + mark sold)
6:45 AM Mon-Sat CT orphan lead scanner
6:50 AM Mon-Sat CT callrevu-export + data-refresh
7:00 AM CT fb-keepwarm
every 5m, 7am-8pm CT staff-message flush
7:00 AM Mon CT weekly email rep KPIs
7:05 AM, 4:05 PM Mon-Sat CT new-leads ingest
7:05 AM Sun CT axcessa-history --months 3
7:05 AM Mon-Sat CT axcessa-cardeals-daily
every 30m, 7am-7pm CT hot-scan
7:12 AM, 8:12 AM, 9:12 AM, 10:12 AM, 11:12 AM, 12:12 PM, 1:12 PM, 2:12 PM, 3:12 PM, 4:12 PM, 5:12 PM, 6:12 PM, 7:12 PM Mon-Sat CT build-master-queue (hourly sweep)
7:15 AM, 12:15 PM Mon-Sat CT VinCue service-drive trade-up list
7:15 AM Mon-Sat CT wish-list watch (inventory vs customer criteria)
7:15 AM, 8:15 AM, 9:15 AM, 10:15 AM, 11:15 AM, 12:15 PM, 1:15 PM, 2:15 PM, 3:15 PM, 4:15 PM, 5:15 PM, 6:15 PM, 7:15 PM Mon-Sat CT rep activity fetcher (hourly)
7:20 AM, 12:20 PM, 5:20 PM Mon-Sat CT vs-lead-intake --write (reader lane)
7:25 AM Mon-Sat CT recovered-700 call-list morning delivery
7:30 AM Mon-Sat CT rep daily card (per-rep morning text)
every 2m, within the 7am hour Mon-Sat CT first-touch (7:30 AM start)
7:30 AM Mon-Sat CT morning briefing
7:30 AM Mon-Fri CT stock watch
7:35 AM Mon-Sat CT delivery-tracker-daily --send
7:35 AM, 8:35 AM, 9:35 AM, 10:35 AM, 11:35 AM, 12:35 PM, 1:35 PM, 2:35 PM, 3:35 PM, 4:35 PM, 5:35 PM, 6:35 PM, 7:35 PM Mon-Sat CT Covideo rep activity fetcher (hourly)
7:40 AM Mon-Sat CT reply-verify (--from-replies)
7:40 AM Mon-Sat CT login checklist
7:45 AM Mon-Sat CT VS report feeds intraday (7:45 AM, reader lane)
7:45 AM Mon-Sat CT FB inventory feed generation
7:50 AM Mon-Sat CT TrueCar -> AutoFi gap digest
8:00 AM, 9:00 AM, 10:00 AM, 11:00 AM, 12:00 PM, 1:00 PM, 2:00 PM, 3:00 PM, 4:00 PM, 5:00 PM, 6:00 PM, 7:00 PM Mon-Sat CT action-pulse
every 2m, 8am-7pm Mon-Sat CT first-touch auto-send
every 30m, 8am-8pm CT build-followup-board
every 5m, 8am-6pm Mon-Sat CT leak alert
8:00 AM Mon-Sat CT auto-assign leads (morning catch-all)
8:00 AM Mon CT weekly tier classifier
every 2m, 8am-6pm Mon-Sat CT auto-responder
every 10m, 8am-6pm Mon-Sat CT approval checker
every 10m, 8am-8pm Mon-Sat CT VS report feeds intraday (reader lane)
8:05 AM CT fb-closer (8:05am overnight catch-up)
every 25m, 8am-8pm Mon-Sat CT grid-delta-run --max 40
every 15m, 8am-6pm Mon-Sat CT impel-monitor
every 30m, 8am-6pm Mon-Sat CT impel-outcome-tracker
8:15 AM Mon-Sat CT CallRevu retry: 8:15 CT Mon-Sat — catches a missed 6:50 Duo push (Will's
8:20 AM Mon-Sat CT service-equity outreach (LIVE text+email, full lane)
every 30m, 8am-6pm Mon-Sat CT gsm-phone-enrich
8:25 AM Mon-Sat CT appointment extractor sync (--sync --days 3)
8:30 AM, 6:30 PM Mon-Sat CT delivery-tracker-verify
8:30 AM Mon-Sat CT VinSolutions task reader (AM)
8:40 AM Mon-Sat CT cadence cleanup
8:45 AM Mon-Sat CT showroom morning card (unowned/showed-not-sold text)
every 30m, 9am-5pm Mon-Sat CT situation monitor (full scan)
9:00 AM Mon-Sat CT proactive outreach (with enrollment)
9:00 AM Sat CT Saturday re-engagement sweep
9:00 AM, 1:00 PM, 5:00 PM Mon-Sat CT fb-marketplace-drip-poster (5 vehicles)
every 10m, 9am-5pm Mon-Sat CT situation monitor (quick grid scan)
9:08 AM, 1:08 PM, 5:08 PM Mon-Sat CT gsm-board-sweep
every 15m, 9am-6pm Mon-Sat CT watcher-chase (shadow)
9:10 AM, 11:10 AM, 1:10 PM, 3:10 PM, 5:10 PM Mon-Sat CT action requests
9:13 AM, 1:13 PM Mon-Sat CT appointment remind (8:30am)
9:15 AM, 11:15 AM, 1:15 PM, 3:15 PM, 5:15 PM Mon-Sat CT commitment checker
9:40 AM, 2:40 PM Mon-Sat CT gsm-parked-login
9:50 AM, 11:50 AM, 1:50 PM, 3:50 PM, 5:50 PM, 7:50 PM Mon-Sat CT reply-verify (--from-replies, intraday)
10:00 AM Mon-Sat CT inventory freshness check
every 2m, 10am-5pm Sun CT first-touch auto-send (Sunday)
every 30m, 10am-5pm Sun CT situation monitor full (Sunday)
every 5m, 10am-5pm Sun CT leak alert (Sunday)
10:00 AM, 11:00 AM, 12:00 PM, 1:00 PM, 2:00 PM Mon-Sat CT proactive outreach (hourly 10am-2pm)
every 2m, 10am-6pm Sun CT auto-responder (Sunday)
every 10m, 10am-6pm Sun CT approval checker (Sunday)
every 10m, 10am-5pm Sun CT fb-approve --auto-sweep (Sunday)
every 10m, 10am-5pm Sun CT situation monitor quick (Sunday)
10:20 AM Mon-Sat CT sold check-in send (gated by SOLD_CHECKIN_LIVE)
10:20 AM, 12:20 PM, 2:20 PM, 4:20 PM, 6:20 PM Mon-Sat CT showroom follow-up
10:30 AM, 1:30 PM, 4:30 PM Mon-Sat CT impel-brief
10:30 AM Mon-Sat CT fb-nudge --live
11:00 AM, 2:00 PM, 7:00 PM, 9:00 PM Mon-Sat CT deal tracker
12:05 PM Sun CT appointment remind (Sunday 12:05pm)
12:15 PM, 6:15 PM Mon-Sat CT callrevu-phoneups --date ${today} --resume
12:35 PM, 7:35 PM Mon-Sat CT callrevu-ingest ${file} --confirm --max 10
12:40 PM, 6:40 PM Mon-Sat CT callrevu-phoneups --service + service-desk-build for ${today}
1:00 PM Mon-Sat CT midday VinCue inventory refresh
2:00 PM Mon-Sat CT review request (Google reviews)
every 15m, 15,16,17h Mon-Sat CT proactive outreach (3-6pm concentrated)
5:00 PM Mon-Sat CT VinSolutions task reader (EOD)
5:07 PM CT appointment confirm (5:07pm)
5:10 PM Mon-Sat CT recovered-700 call-list 5 PM digest
5:45 PM Mon-Sat CT Axcessa scraper (EOD)
5:50 PM Mon-Sat CT axcessa-cardeals-daily (EOD)
6:00 PM Mon-Sat CT rep-scorecard
6:05 PM Mon-Sat CT delivery-tracker-daily --send (evening)
6:20 PM CT appointment confirm retry (6:20pm)
every 15m, 7pm-9pm CT auto-responder after-hours
7:05 PM Mon-Sat CT save-a-deal (7:05pm Left-today digest)
7:15 PM Mon-Sat CT watcher-digest --send
every 15m, 8pm-9pm CT first-touch after-hours
8:00 PM, 10:00 PM, 11:00 PM CT after-hours acknowledgment
9:30 PM CT local store parity check
9:30 PM CT anniversary v3 VS enrichment
9:40 PM Sun-Fri CT recovered-700 call-list nightly builder
every 10m, 22,23,0,1,2,3,4,5,6,7,8,9h CT first-touch overnight (10 PM - 10 AM, every 10 min)
Computed schedules (exact times vary by config, see scripts/scheduler.ts): fb-closer (9am-7pm, every 10 min) · fb-approve --auto-sweep · fb-safe-post (up to 5 vehicles)
125 scheduled jobs, regenerated from scripts/scheduler.ts on every load.
🎯 Job pause/resume & pending approvals →