Robin is the operations bot for the Amazon R3 program — drivers, sites, partners, finance. The behaviour, tone, and 18 task scopes are still spec'd in Airtable base app6GEKoBtHW1iyu1 (every scope Enabled = false, no n8n Workflow URL). What changed (#259): FIN-01 now writes AWS-only (its Airtable Create Robin Task node was removed) into the shared single-table hv-hub-v2-development-tasks (source = robin, us-east-2). The full cutover is phased — the Hub now reads/acts on Robin in DynamoDB, FIN-01 writes AWS-only, and the pending rows are backfilled; re-pointing DRV/the MCP tool and retiring the Airtable table are still open. Joan reviews with the same 6 source-agnostic actions used for sales.
Three tables: Robin Config, Robin Task Scope, Robin Activity. Fetched live via Airtable Metadata + Data API using the PAT in .env.deploy.
Every Task Scope row still has Enabled=false and an empty n8n Workflow URL — the spec tables don't drive execution. The live queue robin_tasks (mostly Finance + Partner) is now read/acted on in DynamoDB (Airtable is historical); only FIN-01 writes each Major event into DynamoDB source = robin (AWS-only, its Airtable node removed).
Document what Robin should do (the Airtable spec), what writes into its queue today, and the AWS path it now rides — DynamoDB single-table + the Hub v2 human-in-the-loop review surface, shared with the Maestro sales pipeline.
Identity + delivery settings: Display Name, Email, WhatsApp Display, Voice Profile, Languages, Email Signature, Active Hours, Quiet Days.
Per-channel reply delay: Driver / Site / Partner / General Inbound Reply Delay (min) + AI Disclosure Response + Headshot.
One row = one capability. Fields: Task Name, Channel (Email/WhatsApp/Slack/Internal/OCR), Default Mode + Currently Active Mode (Draft / Auto / Escalate), Trigger Condition, Escalate When, Logic Steps, Approval Rule, Edge Cases, Context Inputs, Example Output, Email Template, Slack Template, n8n Workflow URL, Enabled.
Append-only event log: Subject, Timestamp, Channel, Direction, Action Type, Mode at Time, Outcome, Contact Name/Channel ID, Full Message, Confidence Score, Joan Reviewed, n8n Run URL, links to Order / Partner / Site / Driver / Ticket / Task Scope.
Across the wall in base appUDQ65M1lSnSM5p sits robin_tasks (tbl4YywNGbJynrrdk) — 40+ fields including task_guid, recommended_action, action_options, selected_action, edited_content, confidence, escalated, triage_status, audit_log_ref. This is where producers write today (~21 records). Per the robin→DynamoDB migration (#259), FIN-01 now POSTs to /api/queue/ingest with source=robin instead of writing Airtable; the other producers (DRV, the MCP tool) still write Airtable only (an interim n8n bridge mirrors them). The R3 spec tables remain design-only.
Each scope is a tiny state machine: a trigger arrives on a channel, Robin runs the Logic Steps with the Context Inputs, picks a template, and either drafts for Joan, sends automatically, or escalates — based on Currently Active Mode and Approval Rule.
| Code · Task | Channel | Default Mode | n8n URL | Enabled |
|---|---|---|---|---|
| CMP-01 Acknowledge inbound complaint | Draft | empty | false | |
| FIN-01 AP Audit & Variance Tier | Internal | Auto | empty | false |
| FIN-02 AR Generation | Internal | Auto | empty | false |
| FIN-02-AMAZON Vendor Central upload | OCR | Auto | empty | false |
| FIN-03 Partner Price Change Approval Gate | Slack | Escalate | empty | false |
| DRV-04 Driver Silence Escalation | Auto | empty | false | |
| DRV-05 Day-of Route Summary | Auto | empty | false | |
| Confirm pickup completion / photo | Draft | empty | false | |
| Equipment install clean / discrepancy | Draft | empty | false | |
| Tuesday overdue report | Draft | empty | false | |
| Risk alerts | Slack | Escalate | empty | false |
| + 7 more scopes | all empty triggers, all disabled | |||
Robin's behaviour is documented in Robin Task Scope, but the runtime that actually produces tasks is a set of n8n workflows (FIN-01 AP Variance, WF06 CMP Substantive, WF03 Partner Count Chase, WF04 DRV-04 Driver Silence, WF12 FIN-03 Price Gate, Hauling Hub Tickets). FIN-01 writes into the DynamoDB single-table (source=robin, via /api/queue/ingest) — AWS-only, its Airtable Create Robin Task node removed. DRV's 3 POSTs and the MCP tool reach DynamoDB via an interim n8n bridge, not yet natively re-pointed (F2). The Airtable scope rows are still not the source of execution — they describe what should exist.
Full table today (21 records in appUDQ65M1lSnSM5p/tbl4YywNGbJynrrdk, read 2026-06-23). the Hub reads/acts on this queue in DynamoDB (Airtable historical); only FIN-01's Major events are written AWS-only to DynamoDB source=robin. The mix shows where Robin's runtime lands first.
Pending Review 12 · Auto-Resolved 5 · Approved 2 · Rejected 1 · Snoozed 1. Joan is the human approver loop for everything not auto-resolved — reviewed in Hub v2 (/joan/ai-tasks), reading the Robin queue from DynamoDB since the #259 cutover.
Finance 10 · Partner 4 · Other 4 · Complaint 1 · Driver 1 · Risk 1. Finance (FIN-01 AP Variance + Hauling Hub) is roughly half the volume.
The producers (Hauling Hub Tickets, FIN-01 AP Variance/Audit, WF03 Partner Count Chase, WF06/WF04/WF12) are not wired to Robin Task Scope rows. Of these, FIN-01 POSTs directly to /api/queue/ingest with source=robin, while DRV and the MCP tool reach DynamoDB via an interim n8n bridge.
There is no dedicated robin-orchestrator ECS service and no Postgres robin schema — Robin rides the same store and review surface as the sales pipeline, distinguished only by the source attribute. Per ADR 0001, the store is DynamoDB and ingestion is Path B (POST /api/queue/ingest). n8n stays as the producer/adapter layer; Bedrock drafting is the sales /generate path (Robin tasks arrive pre-built); Hub v2 is the shared human-in-the-loop surface.
| Concern | Legacy (Airtable era) | As built on AWS |
|---|---|---|
| Task scope storage | Airtable tblIuSytm3wQBjxbl | Still Airtable (design-only spec; not yet a runtime store) |
| Live queue | Airtable robin_tasks | DynamoDB authoritative for the Hub; FIN-01 writes AWS-only to DynamoDB source=robin (#259, Airtable node removed) |
| Ingestion | n8n writes Airtable directly | FIN-01 → POST /api/queue/ingest (AWS-only, idempotent); DRV + MCP still Airtable, bridged to DynamoDB (F2) |
| Activity / audit log | Airtable Robin Activity (4 rows) | Audit_Log bot event stream revived (#239) after going dark 2026-03-12 |
| Render + tone | n8n prompt nodes | Robin content rendered upstream in n8n (pre-built /ingest); the consumer's Bedrock drafting serves the sales /generate path |
| Review actions | Airtable patches (the 422-prone path) | QueueActionsService · 6 source-agnostic actions (#221 closed) |
| Approval UI | Airtable views | Hub v2 web at hubv2.apphappenventures.com (/joan/ai-tasks); reads from DynamoDB since the #259 cutover |
| Send | n8n Gmail per-rep | /approved hard-gated to source=sales → Robin is never auto-sent |
| Observability | none | SNS maestro-alerts + Sentinel V2 poller → Slack #hv-alerts |
| Secrets | n8n credentials + .env | Secrets Manager + IAM task roles (shared with Hub v2) |
No rebuild of the n8n producers (FIN-01, CMP, DRV, Hauling Hub) — they keep generating tasks into Airtable. FIN-01 now writes AWS-only into the DynamoDB single-table via /api/queue/ingest; DRV and the MCP tool still write Airtable (mirrored to DynamoDB by an interim n8n bridge). The migration is moving the store and the review surface, not the generators — same incremental playbook as the sales cutover.