Afternoon Session — Mar 9, 2026 (1PM–5PM EDT)
Cron Job Hardening
- Root cause of “An unknown error occurred” Slack messages: Weekly Investor Research + Weekly Events Refresh both ran at
0 9 * * 1PST usinggemini-2.5-flash— hit Gemini API outage overnight (midnight–4AM PST) - Nightly OpenClaw Update also failed with “fetch failed” — same Gemini outage
- Fix: Spread all cron jobs across providers. No job cluster now uses the same provider at the same time
- Model changes: Weekly Investor Research →
openai/gpt-4.1(10AM Mon), Weekly Events Refresh →openai/gpt-4.1(9AM Mon), Weekly Competitor →anthropic/claude-haiku-4-5, Weekly Skills Digest →anthropic/claude-haiku-4-5, Weekly Model Pricing →openai/gpt-5-mini(11AM Mon), Gateway Providers → Gemini (11AM Mon, staggered from Investor), Nightly Update →openai/gpt-4.1 - Provider spread: 5 Gemini / 4 OpenAI / 3 Anthropic / 4 agent-default
- CLI has no
--fallback-modelflag per job — agent-level fallbacks only apply to unoverridden sessions. Workaround: spread primaries across providers
Slack Duplicate Account Bug — Fixed
- Root cause: interrupted “Developer agent” session last night left a zombie
defaultSlack account with no tokens (botToken/appTokenmissing). OpenClaw was trying to connect bothcustom-1(real tokens) anddefault(empty) → showed “2/2 connected” - Fix: merged
custom-1tokens intodefaultaccount, removedcustom-1. Now singledefaultaccount with all config + tokens +C0AFNTK638Qchannel allowlist - Requires gateway restart to apply (done via Hostinger Docker restart)
Developer Agent — Created (Dash)
- Workspace:
/data/.openclaw/workspace-dev - Files: SOUL.md, IDENTITY.md, AGENTS.md, TOOLS.md, USER.md, HEARTBEAT.md, MEMORY.md
- Agent ID:
developer, display name: Dash 💻, model:anthropic/claude-sonnet-4-6 - Focus: GitHub issues, PRs, code review, implementation across Twill stack
- Added to
openclaw.jsonagents list as index [3] - Agent dir created:
/data/.openclaw/agents/developer/agent
Agent Names — Updated
- All 4 agents now have proper display names in openclaw.json:
main→ Morty 🧙reliability→ Rex 🔧relationship→ Remi 🤝developer→ Dash 💻
Slack Channel Bindings — Wired
- Nader created 3 new Slack channels; bot already member of all:
#rex-reliability→C0AK282411V→ agent:reliability#remi-crm→C0AKE8MQ5RB→ agent:relationship#dash-developer→C0AKHLECS3U→ agent:developer
- Config: channels added to Slack
defaultaccount allowlist +bindingsarray in openclaw.json #open-claw-nader(C0AFNTK638Q) remains Morty’s main channel (unchanged)
GitHub Tunnel — Cloudflare Quick Tunnel Outage
api.trycloudflare.com/tunnelPOST endpoint unreachable on boot (times out via both cloudflared and curl)- Root
/returns 404 (CDN alive) but/tunnelhangs — Cloudflare quick-tunnel registration service down - Webhook proxy running on :18800, no public URL established
- Alerted Slack. Will auto-recover on next boot when Cloudflare service restores
- Updated cloudflared binary to 2026.3.0 (from 2026.2.0) at
/tmp/cloudflared-new— should replace/data/.openclaw/cloudflaredpermanently
Fireflies Transcript: Morty’s Tasks - Mar 09, 2026
- Summary: The meeting focused on improving Twill’s platform, podcast strategy, and partnership opportunities. Key tasks for Morty include GitHub access, lead generation from ads, and managing an LA events calendar with speaking opportunities.
- Morty-specific tasks identified: Provide conversational GitHub access, generate leads from ISO ad screenshots, spend time for training, and create/update an LA networking events calendar with speaker sign-up details.
Twenty CRM — Full Deployment (2026-03-09, ~01:30–02:44 AM EDT)
VPS Details
- Provider: Hostinger | IP: 187.77.22.161 | Hostname: srv1366730
- OS: Ubuntu 24.04.3 LTS | Root access | Docker installed
Twenty CRM Status: LIVE ✓
- URL: https://crm.twill.biz (HTTPS, Zero Trust gated)
- Deploy path:
/opt/twenty/docker-compose.ymlon VPS - 5 containers: twenty_server, twenty_worker, twenty_db, twenty_redis, twenty_tunnel
- Data persisted in Docker volumes: twenty_server_data, twenty_pg_data, twenty_redis_data
- Env/secrets:
/opt/twenty/env.txton VPS (APP_SECRET + DB_PASS)
Migration Complete — 337 records, 0 errors
- 119 partners, 34 partner warm leads, 11 processors, 76 events, 9 investor contacts, 5 investor programs, 83 Apollo leads
- Source files:
data/partners.json,data/processors_clean.json,data/events.json,data/investors.json,data/leadgen/*/leads.json - Migration script:
/data/.openclaw/workspace/twenty-deploy/migrate.py
Custom Object IDs (Twenty schema)
- partner:
c60acda2-8efe-4064-a8c6-d75cbe1095db - processor:
7ca60e00-a989-4592-b7eb-00e88b141760 - twillEvent:
bfa6c3bb-6af3-4e00-b016-cc16461f1371 - investor:
4dc8db7a-10f4-41b7-b329-2de8edf3d7d0 - lead:
0a95d6e2-0292-4a3b-9b60-42a51f8af0e5 - merchant:
6a776c4a-a5fa-439c-aae5-9ed79d59b0ab
Twenty API Notes (hard-learned)
- GraphQL data endpoint:
/graphql(NOT/api) - GraphQL schema endpoint:
/metadata(NOT/api/rest) typeis reserved — usepartnerType,investorTypeetc.createOneObject(input: { object: {...} })— must wrap inobject:key- Only return
id namein mutation responses to avoid reserved-word conflicts
Cloudflare Setup
- Tunnel name:
twenty-crm| Tunnel ID:28617f2e-a628-4c0b-af80-e107cb04392b - Tunnel token:
/data/.openclaw/twenty_crm_tunnel_token.txt - Access App ID:
acf2afa7-9059-49e8-862e-892274c0914c - Zero Trust policy: allow
@twillpayments.com+twilloverthinker@gmail.com(OTP auth) - OTP IDP ID:
47caf1a3-f551-4e4d-a5b4-2aa785460282 - Bug fixed: initial deploy had
allowed_idps: []— fixed to use OTP IDP +auto_redirect_to_identity: true - DNS:
crm CNAME → 28617f2e...cfargotunnel.com(Tunnel type, proxied) on twill.biz - Port 3000 blocked by UFW on VPS
Standard Twill Deploy Pattern (all future internal services)
- Cloudflare Tunnel + Zero Trust, same policy always
- Use
expose:notports:in docker-compose - Update SERVER_URL to HTTPS
- Block port with UFW after tunnel live
- DNS step always manual (API token lacks DNS Edit scope)
- Full pattern in:
/data/.openclaw/workspace/skills/cloudflare/references/zero-trust.md
OPEN ISSUES
- Agent API access broken:
twenty_crm_creds.jsonpoints tohttp://187.77.22.161:3000— now blocked by UFW. Fix: create Cloudflare Access Service Token, add bypass policy, update creds tohttps://crm.twill.bizwith CF-Access headers. - Test account: random Gmail created by Nader during testing — remove via Settings → Members in Twenty UI
SIGN_IN_PREFILLED: truein docker-compose still allows self-signup inside Twenty — consider setting tofalseor disabling invitations after removing test account
Twenty CRM — User Management + Service Token (02:44–02:48 AM EDT)
Current user situation
- Random Gmail created the workspace (is the admin)
- nader@twillpayments.com is NOT yet a workspace member — gets prompted to create new workspace
- Need to fix this before Nader and Mike can use the UI
Fix plan
- Nader runs on VPS:
docker exec -it twenty_db psql -U twenty -d default -c "SELECT id, email FROM core.\"user\" ORDER BY \"createdAt\";" - Morty issues UPDATE to make nader@twillpayments.com the admin, remove random Gmail
- Nader invites mike@twillpayments.com from Settings → Members
- Settings → Workspace → Security → disable “Invite by public link”
Service Token — BLOCKED (API token lacks Zero Trust admin scope)
Nader must create manually:
- Zero Trust → Access → Service Auth → Service Tokens → Create
- Name:
Morty Agent — Twenty CRM - Save both Client ID + Client Secret (secret shown only once)
- Add bypass policy to Twenty CRM app: Action = Service Auth, Include = service token
- Paste credentials to Morty → saves to twenty_crm_creds.json + wires into client.py
twenty_crm_creds.json current state
- base_url:
https://crm.twill.biz(updated from http://187.77.22.161:3000) - api_key: Twenty JWT (unchanged)
- cf_client_id: empty (pending service token)
- cf_client_secret: empty (pending service token)
- File:
/data/.openclaw/twenty_crm_creds.json
client.py needs update
- Must add
CF-Access-Client-IdandCF-Access-Client-Secretheaders to all requests - Currently only sends
Authorization: Bearer <api_key>
Twenty CRM — Service Token + User Fix (02:48–02:56 AM EDT)
Cloudflare Service Token (created by Nader manually)
- Name:
Morty Agent — Twenty CRM - CF-Access-Client-Id:
6705593ccf963258601f5dcf71b35d48.access - CF-Access-Client-Secret:
025aa3da0250e063137ee16918f87aad0b272558332d5b62782506ba07f374e5 - Saved to:
/data/.openclaw/twenty_crm_creds.json - Duration: Non-expiring
Bypass policy — PENDING (Nader must add manually)
- Zero Trust → Access → Applications → Twenty CRM → Policies → Add policy
- Name:
Agent bypass| Action:Service Auth| Include: service tokenMorty Agent — Twenty CRM - Until this is done, agent API calls return HTTP 403
client.py updated
from_creds()now loadscf_client_id+cf_client_secretfrom creds file_headers()now includesCF-Access-Client-Id+CF-Access-Client-Secretwhen present- migrate.py also updated to include CF headers
Database user fix — PENDING (Nader runs on VPS)
- Current Twenty user:
naderatrchin@gmail.com(id:ab82af91-103a-41e6-a759-11025ceecfb0) - Fix command:
UPDATE core."user" SET email = 'nader@twillpayments.com' WHERE email = 'naderatrchin@gmail.com'; - After fix: invite mike@twillpayments.com via Twenty API
twenty_crm_creds.json final shape
{
"base_url": "https://crm.twill.biz",
"api_key": "<Twenty JWT>",
"cf_client_id": "6705593ccf963258601f5dcf71b35d48.access",
"cf_client_secret": "025aa3da0250e063137ee16918f87aad0b272558332d5b62782506ba07f374e5"
}Twenty CRM — DB Reset + Clean Migration (03:05–03:27 AM EDT)
Why reset was needed
- Original API key (JWT) encoded workspaceId
39d63e34-c699-4416-b67b-70477490c28c - Actual DB workspace was
5eaa83d4-df7f-4552-ab81-3b71707fd756— mismatch - Two workspaces created during turbulent setup: first with naderatrchin@gmail.com, second with random Gmail test account
- API key from first workspace, data migrated there — but workspace no longer matched DB state
- apiKey table was empty (0 rows) — API key was never persisted properly
- Decision: wipe DB, start clean over HTTPS with correct user
Reset steps given to Nader
cd /opt/twenty
docker compose down
docker volume rm twenty_twenty_pg_data
docker compose up -dThen: open https://crm.twill.biz → create account with nader@twillpayments.com → Settings → API & Webhooks → generate new key → paste to Morty → re-run migration
Status as of 03:27 AM EDT: PENDING
- Waiting for Nader to complete reset + send new API key
- When key received: update twenty_crm_creds.json + run migrate.py + verify counts
Twenty CRM — FULLY OPERATIONAL (03:27–03:38 AM EDT)
Final state
- URL: https://crm.twill.biz (HTTPS, Cloudflare Zero Trust gated)
- Account: nader@twillpayments.com (workspace owner)
- Workspace ID: c0a3f3f8-34c8-461b-9958-4258c3d44e13
- API key saved to: /data/.openclaw/twenty_crm_creds.json
Migration: 337 records, 0 errors ✓
- 119 partners | 34 partner warm leads | 11 processors | 76 events | 9 investors | 5 investor programs | 83 Apollo leads
Custom object IDs (new workspace)
- partner: 805b32c1-185c-40f4-a41b-4f64bc1e5028
- processor: b323bf80-a971-4f06-a87d-1a877fd395fe
- twillEvent: fb0b2f1d-994e-4101-9dfe-a63699603e68
- investor: 5b2a1349-6482-4893-9ea2-7a0b300ae5d5
- lead: eb17e716-12d2-466a-9701-7cc68bb647ff
- merchant: 799a72bb-6a7f-4f67-86db-ce1ce4eaf1d9
Key lesson: urllib vs curl
- Python urllib blocked by Cloudflare bot protection (error 1010) even with correct headers
- curl works fine — migrate.py and all agent API calls must use subprocess curl
- client.py in the skill still uses urllib — needs same fix if used directly
twenty_crm_creds.json (final shape)
- base_url: https://crm.twill.biz
- api_key: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9…gYqHZp_Pu5YSuGxSlSIoTwLvUuRR3VTUkpiOggHrYjY
- cf_client_id: 6705593ccf963258601f5dcf71b35d48.access
- cf_client_secret: 025aa3da0250e063137ee16918f87aad0b272558332d5b62782506ba07f374e5
TODO (deferred)
- Add mike@twillpayments.com as workspace member (Settings → Members → Invite)
- Disable public invite link (Settings → Workspace → Security)
- Fix client.py to use curl instead of urllib for CF-protected HTTPS endpoint
- Wire Apollo skill to write leads directly to Twenty instead of JSON files
- Wire Fireflies to log meeting notes as Twenty activities
Twenty CRM — Full Enrichment Complete (03:38–03:50 AM EDT)
What was done
- Deleted 5 Twenty demo People (Ivan Zhao, Dario Amodei, Brian Chesky, Dylan Field, Patrick Collison)
- Fixed metadata API field creation: requires
field: { ... }wrapper (not flat input) - Added schema fields: partner (tags, stageDescription, firefliesRefs, source), processor (contact, apiDocs, specialties, sandboxAvailable, processorType), twillEvent (score, price, category, laFocus), investor (focus, source, lastContact), lead (warmLead)
- Backfilled all new fields from JSON source files: 119 partners, 61 events, 5 investors — 0 errors
- Added 11 missing real processors (Nexio, NMI, Stax Connect, WorldPay, Stripe, Authorize.Net, Elavon, TSYS, North, Forte, Priority Commerce) — processors now 22 total
- Tagged 34 warm research leads with warmLead=true to separate from 83 Apollo people leads
- Created 110 People records from real contacts extracted from partners/processors/investors
Final record counts
- Partners: 119 | Processors: 22 | Leads: 117 | Events: 76 | Investors: 14 | People: 110 | Merchants: 0
Known API quirk
- Python urllib blocked by Cloudflare bot protection (error 1010) even with correct CF-Access headers
- All Twenty API calls must use subprocess curl — urllib does NOT work through CF Tunnel
Metadata API mutation input format (Twenty v0.30+)
mutation {
createOneField(input: {
field: {
objectMetadataId: "..."
type: TEXT
name: "fieldName"
label: "Field Label"
isNullable: true
}
}) { id name }
}Pending (Nader must do in UI)
- Gmail: Settings → Accounts & Channels → Add → Google (auto-wires email threads to contact timelines)
- Kanban pipeline: Partners → grid icon → Board view → group by Stage
- Invite Mike: Settings → Members → Invite → mike@twillpayments.com
- Disable public invite: Settings → Workspace → Security → “Invite by public link” OFF
Playwright Browser Skill — Installed + Operational (03:55–04:00 AM EDT)
Environment
- OS: Debian 13 (trixie) in Docker sandbox
- Playwright: 1.58.0 (Python), 1.58.2 (npx) — both installed
- Chromium: /usr/bin/chromium (v145) + ~/.cache/ms-playwright/chromium-1208
- Always launch with:
executable_path="/usr/bin/chromium",args=["--no-sandbox", "--disable-dev-shm-usage"] - playwright-python installed via:
pip3 install playwright --break-system-packages
Skill location
/data/.openclaw/workspace/skills/playwright/SKILL.md/data/.openclaw/workspace/skills/playwright/scripts/browser.py— core Browser class/data/.openclaw/workspace/skills/playwright/scripts/screenshot.py/data/.openclaw/workspace/skills/playwright/scripts/scrape.py
Capabilities confirmed working
- Navigate any URL, wait for DOM/network
- Extract text, links, HTML
- Click, fill forms, type, press keys
- Screenshot (full page or viewport) — saved to workspace, viewable via image tool
- Save/restore sessions (cookies + localStorage)
- Run arbitrary JavaScript on page
- Login flows (email + password + submit)
Key patterns
sys.path.insert(0, "/data/.openclaw/workspace/skills/playwright")
from scripts.browser import Browser
with Browser() as b:
b.goto("https://example.com")
text = b.get_text()
path = b.screenshot("/data/.openclaw/workspace/shot.png")Notes
- Screenshots must be saved to /data/.openclaw/workspace/ (not /tmp/) for image tool to read them
- Cloudflare-protected sites: use curl with CF-Access headers, not Playwright (bot fingerprint blocked)
- OpenClaw built-in
browsertool (CDP-based) requires gateway service — not running in this env - No Hostinger terminal commands needed — everything runs in agent sandbox
CRM health cron — fixed (03:56 AM)
- crm-health-check job was auto-disabled: used bare cron string instead of
{ kind: "cron", expr: "..." }object - Fixed format, re-enabled:
{ "kind": "cron", "expr": "0 */6 * * *", "tz": "America/Los_Angeles" } - Correct OpenClaw cron schedule format always requires object with
kindkey
Fireflies Cron — Root Cause Found + Fixed (04:00–04:06 AM EDT)
Root cause of “An unknown error occurred” every 30 min
- Fireflies cron was querying with
sentencesfield included - Successful run used 598,647 input tokens (5x normal) — sentences data from 10 transcripts
- Intermittent runs hit Gemini rate limits / timeouts → job crashes → OpenClaw announces “An unknown error occurred” to Slack
- OpenClaw’s announce delivery posts cron errors to Slack by default — no suppression option in config
Root cause of message flood (earlier today)
- When cron succeeded with sentences, it output its entire reasoning process (Python code, raw JSON, transcript sentences) as code blocks
- OUTPUT RULE fix was already in place from earlier today — future runs clean
- Past floods won’t recur
Fix applied
- Removed
sentencesfrom the scheduled Fireflies GraphQL query - Sentences now on-demand only (ask Morty directly for specific transcript analysis)
- Error state reset: consecutiveErrors=0, lastStatus=ok
- Normal runs: ~128K tokens, ~28s → fast, reliable, no timeouts
Slack message “I did respond”
- Nader’s 1:01 AM Slack message (screenshot google.com) WAS answered at 1:02 AM EDT (40s later)
- Google screenshot was delivered to open-claw-nader — buried under the flood of cron messages
Fireflies cron job ID
a21a0d03-15e8-414a-ad97-7fdf030154f3- Schedule: every 30 min | Model: gemini-2.5-flash | Delivery: announce → C0AFNTK638Q
- Run log:
/data/.openclaw/cron/runs/a21a0d03-15e8-414a-ad97-7fdf030154f3.jsonl
Evening Session — Mar 9, 2026 (5PM–11PM EDT)
Slack Threading Rule — All 4 Agents
- Added
## Slack Conversations — Threading Ruleto AGENTS.md in all 4 workspaces (Morty, Rex, Remi, Dash) - Rule: always use
[[reply_to_current]]as first token of every Slack reply - Takes effect next session load
Skills Cleanup — clawsec-suite + openclaw-audit-watchdog Removed
- Removed from both
/data/.openclaw/workspace/skills/and/data/.openclaw/workspace-rex/skills/ - Reason: flagged for dangerous code patterns (env var harvesting, shell exec)
- Rex AGENTS.md updated to remove references
LangChain GTM Agent Learnings → Remi
- Key applicable patterns: do-not-contact check before outreach, relationship-state-aware drafting (partner stage), capture style prefs from Nader’s edits into
memory/nader-style-prefs.md, 48h stale queue flagging, Monday morning partner intelligence sweep, pull Fireflies + Twenty before drafting - Not yet wired in — noted for Remi’s next upgrade
Dash Skills Added
- Created
/data/.openclaw/workspace-dev/skills/with 6 skills:playwright(symlink from workspace)cloudflare(symlink from workspace)mxconnect(symlink from workspace)posthog(symlink from workspace)github(symlink from system)gh-issues(symlink from system)
- Dash AGENTS.md updated with skill descriptions + when to use each
Dash MEMORY.md — Full Local Dev Setup Documented
- Repos:
/tmp/facade(main) +/tmp/twill-ai-ui(main) - Postgres 15:
/home/linuxbrew/.linuxbrew/var/postgresql@15/— persistent on /dev/sda1 - Facade start:
cd /tmp/facade && PICCOLO_CONF=app.db.piccolo_conf poetry run uvicorn app.main:get_app --factory --host 0.0.0.0 --port 8000 - UI start:
cd /tmp/twill-ai-ui && PORT=3002 npm run dev - .env at
/tmp/facade/.env— Nader provided full values Mar 9 - Auth:
ENVIRONMENT=localactivates MockAuthService. Path-based role:/master/→ master user,/partner/→ hardcoded partner owner (partner_id=001, email=partner@twillpayments.com) mocked-tokenworks as Bearer on all paths- Init DB:
cd /tmp/facade && API_BASE_URL=http://localhost:8000 poetry run python tools/init_local_db.py - Private deps (python-shared, twill-llm-engine): need HTTPS+PAT override:
git config --global url."https://${PAT}@github.com/".insteadOf "git@github.com:" - Both services confirmed running and healthy
gmail-mike Skill — Created
- Token:
/data/.openclaw/mike_twillpayments_gmail_token.json(oauth Mar 9 2026) - Script:
workspace/skills/gmail-mike/scripts/gmail_mike.py - Linked into:
workspace-remi/skills/gmail-mike - Functions: list_inbox, read_message, search_messages, get_thread, create_draft, list_drafts, mark_read
- Hard rule: NEVER send. Draft only. Explicit per-email approval required.
- 74,396 messages accessible
gmail-nader Skill — Created
- Token:
/data/.openclaw/nader_twillpayments_gmail_token.json(existing) - Script:
workspace/skills/gmail-nader/scripts/gmail_nader.py - Linked into:
workspace-remi/skills/gmail-nader - Same interface as gmail-mike, same hard rules
- 7,415 messages accessible
MX Connect — UAR POST Fully Unblocked
- Root cause of 500: we were stuffing all merchant data into the POST body. POST should be a minimal shell (domain.id × 3 + DBA name only). All data goes in via PUT calls.
- Source: Nader posted Postman collection JSON to facade#1078 comment. We parsed it and tested live.
- 5-step flow confirmed working:
POST /boarding/v1/uar— shell (201 confirmed)PUT /boarding/v1/uar/{uarId}/location?id={locationId}— DBA address, SIC, phonePUT /boarding/v1/uar/{uarId}/entity?id={entityId}— signers, EIN, jurisdictionPUT /boarding/v1/uar/{uarId}/account— product, sponsor, pricing, funding (account_id in body as “id”)PUT /boarding/v1/uar/{uarId}/accountwith status “E-Signature Sent” — finalize
- Response ID extraction:
uar_id=resp["id"],location_id=resp["location"]["id"],entity_id=resp["location"]["entityId"],account_id=resp["location"]["accountIds"][0] - No separate finalize endpoint — just a status change on the account PUT
- Sandbox constants:
- domainId:
57357606-496a-55db-9d05-2a367c52c212 - TSYS product.id:
3, MX Merchant:5 - pricingTemplateId:
f2d54fa9-0498-5ca6-82dd-2f1823587209 - statementBranding:
8961f3de-b121-5d75-a54b-8deaf8a1065a - welcomeKit:
251b7d9c-2eaa-5f9f-a85f-e30e9fdde2be - TSYS routing (Synovus sandbox):
256074974
- domainId:
- Common field name traps:
country: "United States"(not “US”),street1(not streetAddress),dob(not dateOfBirth),primaryIdentification.taxIdNumber(not ssn),taxId: {number,type,valid}(not ein directly),jurisdictionis an object (not string) - mxconnect skill updated: boarding.py URLs fixed, SANDBOX_CONSTANTS dict added, boarding-schema.md rewritten, sandbox-status.md flipped to ✅
- Donley’s test merchants (Priority): XMID
1000001000157885(MX Merchant) +8739729682933456(TSYS/Synovus) — both Approved under Twill domain - Live UAR we created (empty shell):
418d40c2-93ea-5d41-b99b-4af9cb17a7e8 - facade#1078 comment updated with full schema + skill inventory: https://github.com/Twill-AI/facade/issues/1078#issuecomment-4027503589
Priority Jira Ticket — APIHELP-11236
- Donley Gustave (donley.gustave@prth.com) responded via email to mike@twillpayments.com
- Confirmed Twill sandbox domain ID, noted TSYS + MX Merchant products configured
- Attached Postman collection (linked via GitHub issue by Nader)
- Screenshot showed 2 approved test merchants in Priority dashboard under TWILL PAYMENTS partner
GitHub Webhook Tunnel
- Restarted 3× today (boot checks at 5:29PM, 6:14PM, 7:46PM EDT)
- URLs rotated each time (quick tunnel, expected)
- auto-updater script patches all repo webhooks on restart