| We say | In Zoho | In Supabase |
|---|---|---|
| customer | Contacts | core.customers |
| account | Accounts | core.accounts |
| lead | Leads | sales.leads |
| property | Properties | core.properties |
| equipment, asset | Assets | core.assets |
| product | Products | catalog.items |
| stock material | Stock_Materials | catalog.materials |
| supplier | Vendors | catalog.suppliers |
| purchase order | Supplier_Orders | operations.purchase_orders |
| work order | Work_Orders | operations.workorders |
| line item | Work_Order_Items (a subform) | operations.workorder_line_items |
| appointment | Service_Appointments | operations.service_appointments |
| territory | Service_Territories | scheduling.territories |
| technician | Technicians | scheduling.technicians |
| phone agent | Agents | communication.agents |
| invoice | Invoices | billing.invoices |
| payment | Payments | billing.payment_transactions |
| subscription | Subscriptions | billing.subscriptions |
| subscription payment | Subscription_Payments | billing.subscription_payments |
| checklist template | Checklist_Templates | checklists.templates |
| assigned checklist | Assigned_Checklists | checklists.crm_assigned_checklists |
| checklist submission | Checklist_Submissions | checklists.assigned_checklists |
| timesheet | Timesheets | app.timesheets |
| time off request | Time_Off_Requests | app.time_off_requests |
| payroll calendar | Payroll | payroll.schedules, payroll.pay_periods |
| call | Call_History | communication.calls |
| Email_Tracking | communication.email_messages | |
| record lock | Record_Lock_History | communication.record_locks |
| quote | (not in Zoho) | operations.work_order_quotes |
| stock list | (not in Zoho) | app.stock_lists |
| task, note | (not in Zoho) | operations.tasks, app.notes |
| app user | (not in Zoho) | app.users |
| QuickBooks id | QBO Id, on the customer and the product | integrations.external_ids, system qbo |
| covered items | Covered Items on the subscription | billing.subscription_covered_items |
| subscription visit | Subscription Visits on the subscription | (kept in the CRM; the engine sweeps it) |
| checklist question | Checklist Questions on the template | checklists.template_steps |
| completion note template | (not in Zoho) | app.completion_note_templates |
| stocking order | (not in Zoho) | catalog.stocking_orders |
| supplier branch | a subform on the vendor | catalog.supplier_branches |
| pay period | Payroll, Schedule | payroll.pay_periods |
| statutory holiday | Payroll, Holidays | payroll.statutory_holidays |
| department | (not in Zoho) | communication.departments |
| phone line, its members | (not in Zoho) | communication.phone_lines, communication.line_members |
| phone settings, the closed switch | (not in Zoho) | communication.phone_settings |
| callback request | (not in Zoho) | communication.callback_requests |
| voicemail | (not in Zoho) | communication.voicemails |
| text conversation | (not in Zoho) | communication.sms_conversations |
| Twilio error | (not in Zoho) | communication.twilio_alerts |
| team chat | (not in Zoho) | app.team_threads, app.team_thread_members |
| the crosswalk | Supabase id fields on each record | integrations.external_ids |
| a tombstone | (not in Zoho) | a retired row of integrations.external_ids |
| a finding | (not in Zoho) | integrations.drift_findings |
| the integration ledger | (not in Zoho) | integrations.integration_events |
| the webhook log | (not in Zoho) | integrations.webhook_events |
| the sent-mail ledger | (not in Zoho) | integrations.sent_messages |
Statuses people say
| We say | Means |
|---|---|
| draft | the work order will be invoiced when complete |
| non-billable | nothing on the job is billable; no invoice will be made |
| invoiced | the invoice exists in QuickBooks and Zoho |
| paid, partially paid | what QuickBooks told us |
| void | the invoice was cancelled in QuickBooks and the CRM; the work order stays invoiced |
The monitor
The monitor’s setting lives in the engine’s config table under the keyreliability.monitoring, as the phase value.
| We say | The phase reads |
|---|---|
| off | disabled |
| rehearsing | shadow |
| live | active |
| We say | Timer that wakes it | Route on the ops function | In Sentry |
|---|---|---|---|
| the evaluator | reliability-evaluator | ops/evaluate | cron monitor “Reliability evaluator completion”, slug wake-action-worker |
| the maintenance worker | reliability-maintenance | ops/maintain | |
| the notifier | reliability-notifications | ops/notify | |
| the uptime check | (Sentry calls it) | ops/probe, answering technician_read and monitoring | uptime monitor “Comfort Hub technician access and monitoring” |
| the stand-in technician | the identity in RELIABILITY_PROBE_IDENTITY |
| We say | Check id | Condition keys |
|---|---|---|
| Converted leads | sales.provisioning | sales.provisioning |
| Cancelled work | billing.safety | billing.cancelled_collectible, billing.cancelled_paid_work |
| Human review | business.review | business.external_effect_uncertain, business.review_required |
| Property imagery | technician.imagery | technician.imagery_missing |
| Payroll calendar | payroll.readiness | payroll.calendar_runway, payroll.timesheets_unassigned |
| Card numbers in stored text | privacy.stored_data | privacy.sensitive_data_stored |
| Checkout payments | billing.checkout | billing.checkout |
| Unfinished work | business.work | business.work_incomplete, monitoring.work_scan_capacity |
| Deliveries and logins | business.delivery | business.delivery_incomplete, monitoring.delivery_scan_capacity |
| Invoice amounts | billing.invoice_consistency | billing.invoice_consistency, monitoring.capacity |
| Payment discovery | billing.payment_discovery | (none; a stall shows through billing.checkout) |
| Checkout capture clean-up | privacy.checkout_capture | (none) |
| Phone statistics | phone.statistics | (none) |
| Recording clean-up | privacy.recording_retention | (none) |
| Did every timer finish (one per timer) | database.<timer name>, for example database.appointment-reminders | monitoring.execution_incomplete |
| Nightly sweep | sweep.run | monitoring.execution_incomplete |
| Database advisors | database.advisors | monitoring.execution_incomplete |
| The evaluator’s own run | monitoring.evaluate | (none) |
| Timer outcomes | monitoring.database_jobs | (none) |
| Timer list | monitoring.schedules | monitoring.schedule_changed |
| Every check finished | monitoring.progress | monitoring.execution_incomplete |
| Queue age | monitoring.queue_age | monitoring.queue_age |
| capacity (any bounded business check) | monitoring.scan_capacity |
check and condition_id tags on the Sentry issue; the weight is the disposition tag and the spell number is occurrence.
| Secret | Vault folder | Read by |
|---|---|---|
| SENTRY_DSN, SENTRY_ORG_SLUG, SENTRY_OPS_TOKEN, SENTRY_ENVIRONMENT, SENTRY_TRACES_SAMPLE_RATE | /edge-functions | the functions: crash reporting, the notifier, the evaluator’s check-in |
| RELIABILITY_PROBE_SECRET, RELIABILITY_PROBE_IDENTITY | /edge-functions | the uptime check’s door on the ops function |
| SENTRY_PERSONAL_TOKEN | /operator-tools, and a GitHub repository secret | the gate’s production-clean check |
Routes and inputs
The raw forms other pages may not carry. Say the words in the first column and link here.| We say | The raw name |
|---|---|
| the review route, to list the open flags | GET /ops/review |
| the review route, to close one flag | POST /ops/review/<event id> |
| the cron token | the x-cron-token header, carrying CRON_INVOKE_SECRET |
| the monitor’s header token | the x-monitor-token header, carrying RELIABILITY_PROBE_SECRET |
| resolved, ignored, in review | resolved, ignored, in_review |
| the dead-letter boxes | action_outbound_dlq, sync_outbound_dlq, webhook_inbound_dlq |
| the functions folder in the vault | /edge-functions |
| the database vault folder | /postgres-vault |
| the GitHub folder | /github-actions |
| the gate’s own folder | /operator-tools |
| the Sentry project | comforthub-backend, in the akon-dion organisation |
The workflows on GitHub
Each workflow’s name is what GitHub shows on the Actions page. The boxes are what you fill in when you run it by hand.| Workflow | Its boxes |
|---|---|
| redrive | mode (list, write), queue, msg_id, max |
| sweep | max_findings, recovery_scheduled_at |
| reconcile | mode (dry-run, write), entity, max, show_values |
| backfill | entity, max, write |
| backfill-outbound | mode (list, write), entity, max |
| bootstrap-crosswalk | mode (dry-run, write), max_findings, max_invalid, allow_empty |