Memory — 2026-03-10

Overnight Board Review (1AM PST / 4AM ET cron)

Board Updates Pushed

  • T-036 (Developer Sub-Agent): CLOSED as DONE. Dash deployed March 9 — workspace-dev, model sonnet-4-6, github/gh-issues skills, dash-developer channel.
  • T-037 (Twilio SMS): CLOSED as DONE. Twilio creds at /data/.openclaw/twilio_creds.json, outbound number +14242177376.
  • T-038, T-042, T-044, T-047, T-056, T-058, T-064: New overnight comments added.
  • Board pushed to GitHub (commit 24db134).

Key Context

  • TRANSACT 2026 (Atlanta, March 18-20): 8 days away.
  • Saint-UP CTO Lewis call: March 13 (3 days away). Mike needs to send calendar invite today.
  • P-007 Saint-UP + T-064 Rate Transparency Index: processors_rates.json built (13 MCC categories × 4 volume tiers). Saint-UP co-brand angle is demo-ready.
  • T-047 (MCA Pre-Qual Widget): 3 questions still unanswered from Nader since Feb 24 — LAST CALL window before TRANSACT.
  • T-044 (Processor Marketplace): V1 shortlist complete. Forte removed (enterprise ISV). Thesis Payments unknown. Decision needed TODAY.

Fireflies Meeting Tasks (March 9)

  1. GitHub conversational access — addressed via T-036 (Dash) + T-058 update
  2. Leads from ISO ad screenshots — documented in T-038 comment, waiting on screenshots from Mike/Nader
  3. LA events calendar — built at /data/.openclaw/workspace/data/la-events-calendar.md
    • VC World Summit LA: June 9 (speaker app opens ~April)
    • Fintech Pitch & Networking: April 7
    • Founder Institute LA Spring 2026: apps OPEN
    • Techstars LA: applications open

Stale Flags Active

  • T-038: Lead Gen — 16 days stale (last meaningful action Feb 22)
  • T-048: OpenClaw Skills — 16 days stale, likely complete
  • T-049: Dead Deal Dialer (duplicate of T-056?) — 14 days stale
  • T-058: GitHub Webhook — 13 days stale

Partner CRM (T-042) Summary

8 entries, 0 stage movements in 21+ days. Most critical: P-007 Saint-UP (March 13 CTO call), P-001 Robin Hood (Contracting, 29+ days stale).

GitHub Webhook Status

System health report shows githubWebhook: inactive. Worth flagging to Nader — if webhook is down, Morty isn’t reacting to GitHub issues.


Twill Merchant Detail Mockup — Session (3AM–4AM ET)

Work Done

  • Replaced step 7 (“Review & Submit”) with full UW Review section
  • Added step 8 “Solutions” as a new step in the merchant application wizard

UW Review (Step 7) — Key Features

  • 4-score cards: Risk Score 71 (amber), Confidence 68%, Approval Outlook (Likely Approved), Data Coverage
  • AI Assessment narrative with badge pills
  • Bank Statement Analysis: avg 28K/mo, revenue trend +14%
  • Website Analysis: MCC match confirmed, 2 locations, 4.7★ Google, airsoft flag
  • Processor Fit Matrix: First Data 88% / TSYS 79% / Heartland 64% with likelihood bars
  • Risk Flags: Green/Amber/Red grouped
  • Questions to Ask: Critical/Important/Nice-to-have with context
  • Approval Recommendations: 4 prioritized steps
  • Bottom nav: “Send All Questions to Merchant” + “Solutions →” (enabled)

Solutions (Step 8) — Key Features

  • Tab bar: Recommended (3) | Considering (0) + search + grid/list toggle
  • Context banner: card-present 70% / ecom 20% — explains mix-and-match logic for each solution type
  • Card 1 (First Data Omaha, expanded): 88% confidence donut, stats row, “Why it works” grid, 3-col lower section (Marketing Materials + Follow-up Copy | Setup Timeline | UW Notes + Pricing)
  • Card 2 (TSYS, collapsed): 79%, amber airsoft flag
  • Card 3 (NMI + Stripe, collapsed): 72%, purple “Mix & Match” badge — stackable ecom layer
  • Add to Considering / Add to Application actions per card
  • Considering tab: empty state with prompt
  • JS: solTab(), expandCard(), copyEmail()

Design Decision Logged

  • Mike asked: should UW Review and Solutions be separate? Answer: YES — keep separate.
    • UW Review = diagnostic (can we get approved?)
    • Solutions = prescriptive (what do we pitch and submit?)
    • They serve different mental modes; UW Review informs Solutions selection as a natural handoff

Live URLs

Next Likely Steps (from Mike’s direction)

  • May want additional merchant states: active merchant KPI view vs. pending application view (switchable by URL param or merchant status)
  • Knowledge base integration: solutions pulling from Google Drive processor KB
  • More solution types: chargeback mitigation, high-risk processor paths (ECOM + high-risk mix-and-match)

Partner Dashboard — Session Continued (5:13 AM ET)

Step 9 “Submit & Send for Signature” — COMPLETED

  • Added as final step in merchant detail wizard (step nav si-9, panel #step-9)
  • Step 8 bottom nav updated: “Review & Submit →” calls goStep(9)
  • HTML sections in step 9:
    • AI Pre-Submit Check: green ✓ rows (application complete, solution selected, equipment configured) + amber soft-advisory flags (Owner ID missing, no processing statement) — each dismissable with “I’ll handle this” / “Acknowledge” buttons; submit CTA always active, never blocked
    • Application Summary: collapsible accordion (Business Info, Officers, Banking, Processing, Pricing) with Edit buttons that route to specific step
    • Equipment & POS Configuration: PAX A920 Pro × 1 + NMI Gateway × 1 pre-loaded; +/− qty steppers with live total; quick-add strip (Receipt Printer, Cash Drawer, Barcode Scanner, Terminal, PIN Pad); Custom prompt for ad-hoc items; running total in id="equip-total"
    • Selected Solution card: First Data Omaha, all pricing terms, ← Change Solution button
    • Signature Package: MPA + Rate Schedule + Equipment Agreement + NMI Agreement auto-listed; Owner ID upload request shown as amber advisory row with Remove button
    • Send for Signature: recipient (Sarah Chen + email), optional CC, message field, delivery toggle (DocuSign/SMS/In-person), green CTA with 3s confirm animation
  • JS functions added: adjQty(btn, delta), updateEquipTotal(), addEquip(icon, name, sub, priceLabel, price), promptCustomEquip(), sendForSignature()
  • EQUIP_PRICES lookup table: PAX A920 Pro 10, Receipt Printer 79, Barcode Scanner 149
  • STEP_LABELS array: indices 1–9 (Submit at 9)
  • Key design principle: rep authority > AI authority — AI makes soft suggestions only, never hard blocks

UW Review — Statement Coverage & Recency Validation — COMPLETED (5:13 AM session)

Mike’s request: account for how many months of statements are uploaded in both bank and processing analysis tiles; flag stale statements but exempt mid-month (current month’s statement wouldn’t be available yet).

Bank Statement tile changes:

  • New “Statement Coverage” section added above KPI grid
  • Month pills: Dec 2025 · Jan 2026 · Feb 2026 (all green ✓) + Mar 2026 shown as “In progress” (dashed, no flag)
  • “3 of 3 months” green badge in section header
  • Recency row: ✓ green — “most recent complete month (Feb 2026) included · Reviewed Mar 10”
  • Logic: if statement ends before most recent complete month → amber flag with exact month called out

Processing Statement tile changes (not-yet-uploaded state):

  • New “Statement Coverage” section with 3 empty dashed pills (0 of 3 months, red badge)
  • Three greyed-out validation checks that activate on upload:
    1. Most recent complete month included?
    2. Consecutive months (no gaps)?
    3. Statement older than 4 months?
  • Example stale flag shown inline: amber “ends Sep 2025 — 5 months stale, Feb 2026 missing”
  • Mid-month exemption note: green “if day 1–14: Dec–Feb still passes recency check”

Deployed: https://5cb12d0a.twill-partner-dashboard.pages.dev → live at https://twill-partner-dashboard.pages.dev

Current File State

  • Local: /data/.openclaw/workspace/partner-dashboard-mockup/index.html (~4100+ lines)
  • All 9 steps fully functional in merged single-portal dashboard
  • No external URL navigation — all views inside partner-dashboard shell

Cron Jobs Dashboard — Not Showing Up (12PM EDT session)

Problem Diagnosed

  • Gateway dashboard (http://172.18.0.2:18789/) showed “0 shown of 0” for Cron Jobs
  • openclaw cron list returned header but 0 rows + TypeError: Cannot read properties of undefined (reading 'kind')
  • Root cause: crm-health-check job had legacy format — used "task" field instead of "payload" (which requires "kind")
  • This caused the job list renderer to crash on that entry, hiding ALL jobs from display (CLI and web UI)
  • Additionally: job had state.runningAtMs set with no lastRunAtMs — stuck/orphaned state

Fix Applied

  • Converted crm-health-check job: taskpayload.kind = "agentTurn", added sessionTarget, agentId, wakeMode
  • Cleared runningAtMs from stuck state
  • Saved /data/.openclaw/cron/jobs.json (backup at jobs.json.bak)
  • Gateway restart required to reload jobs from disk — told Nader this is the remaining step

Gateway Cron State Confirmed

  • 23 jobs loaded at startup (Mar 9 11:54 UTC) — confirmed from logs
  • jobs.json has 23 valid jobs after fix (was 24 with the malformed entry — wait, need to recount)
  • cron: timer armed logs every minute confirm scheduler is actively running
  • Isolated sessions from cron jobs ARE firing (tool errors in today’s log prove it)

GitHub Webhook Tunnel — Boot Check (2:44 PM EDT)

Tunnel Was Down

  • Both proxy and tunnel processes were dead on boot check
  • Ran bash /data/.openclaw/workspace/scripts/start-github-tunnel.sh
  • New tunnel URL: https://investigator-optical-associated-billy.trycloudflare.com
  • Notified Slack open-claw-nader (C0AFNTK638Q)

Note

  • Quick tunnel URL rotates on every restart — GitHub webhook needs manual update each time
  • The auto-updater script (update-webhook-url.sh) should patch GitHub repo webhooks automatically on restart
  • Worth checking if auto-updater ran successfully this time