Skip to content

Automation 1.3.0 — Cross-module Production Readiness

FieldValue
Date2026-09-08
StatusGo — engineering residuals closed; Ops migrate + queue/scheduler + staging smoke before production traffic
ScopeAutomation catalog 1.1.1 → 1.2.0 → 1.3.0 (sole event fan-out, installed-module catalog gating, cross-module triggers/templates)
CompanionAutomation production · v1.0.0 readiness · 1.1.1 related-context · Developer guide · User guide

Executive summary

This MINOR closes the dual-bridge double-run risk and makes Automation usable for real workspace journeys across entitled modules:

  • Sole fan-out: IntegrationEventDispatcher only (no AutomationEventBridge)
  • Builder + activate gate on catalog available (module not installed)
  • Templates declare required_modules; list + create-from-template filtered by entitlement
  • Wired triggers: Contacts, Quotations, Expenses, Employees, Payments posted, Credit Notes applied, Projects, Estimates, Contracts, Purchase Orders, Leave, Documents, Knowledge Base, Assets (plus prior CRM/Help Desk/WhatsApp)
  • Invoice trigger module slug corrected to invoices
  • One-session Playwright human workflow; Pest cross-module coverage, template entitlement negatives, and registry↔dispatcher parity

Go / No-Go: Go for staging → production after CI on companion PRs and Ops pre-flight below.

GateResult
Dual bridge removed (sole IntegrationEventDispatcher)Pass
Invoice module slug invoicesPass
Cross-module triggers + dispatcher + payloadsPass
Template required_modules + entitlement filterPass (Pest list + create-from-template negatives)
Registry↔dispatcher wired-trigger parityPass
Catalog migrate 1.2.0 then 1.3.0 (+ companions)Pass
CatalogSeeder automation 1.3.0 + companion versionsPass
SPA available / Module not installed / activate disablePass
Playwright one-session test:e2e:automationPass (local 2026-09-08)
Pest CrossModule + module-not-installed + template gatesPass
Docs recipes + module-dev Automation hooks + CHANGELOGPass
Queues / scheduler / SSRF / activation inactive→activateUnchanged — still required

Catalog version path

MigrationEffect
2026_09_08_011600Automation 1.1.0 → 1.1.1 (related-context)
2026_09_08_034500Automation 1.1.1 → 1.2.0 (platform reliability)
2026_09_08_034600Automation 1.2.0 → 1.3.0 + companion module MINOR bumps for new Automation hooks

Production: migrate only. Do not db:seed on upgrade. Fresh local/CI seed uses CatalogSeeder versions aligned with the 1.3.0 companion bumps.


Deploy order

  1. Backendphp artisan migrate --force (both 1.2.0 and 1.3.0 bumps)
  2. Confirm central catalog automation.version = 1.3.0
  3. Confirm queue workers include automations before emails,default; scheduler automation:dispatch-schedules
  4. Deploy SPA (builder available gating + templates)
  5. Deploy Docs
  6. Staging smoke below

Suggested merge order: Backend → Frontend → Docs.

No new env vars. Optional: AUTOMATION_WEBHOOK_SECRET.


Pre-flight checklist

#CheckOwnerPass?
1Migrations applied; catalog automation = 1.3.0Ops
2Workers include automations; scheduler runs automation:dispatch-schedulesOps
3Creating one lead with active lead.created workflow produces exactly one runQA
4Builder shows Module not installed for WhatsApp when WA not entitled; Save & activate disabledQA
5Invoice / Payment / Contact templates hidden until those modules entitledQA
6Contact created / payment posted / Help Desk SLA can activate when modules entitledQA
7Pest Automation suites green in CIEng
8Playwright npm run test:e2e:automation greenQA

Staging smoke (1.3.0)

  1. Marketplace → entitle Automation
  2. Empty workflow name → Save / Save & activate disabled
  3. Select WhatsApp Message Received without WhatsApp Cloud → badge Module not installed; cannot activate; Save still allowed
  4. Templates list only recipes whose required modules are installed
  5. Manual workflow → Save & activate → Run dialog → Run → Runs page shows queued/completed
  6. Use New Lead Follow-up template → activate → create lead with assignee → one run + task/notify
  7. With Contacts entitled: activate contact.created recipe; create contact → run
  8. With Payments entitled: activate payment-posted notify; post a payment → run
  9. Schedule daily H:i in workspace timezone → single run in window (no duplicates)

Findings remediations

IDSeverityFindingAction
A1CriticalDual bridgeBridge deleted; sole IntegrationEventDispatcher
A2–A5High/MedAvailable gating, invoice slug, payments/CN catalog, template filterShipped
A6MediumThin Pest template entitlementPest list filter + create-from-template 422
A7LowCompanion CatalogSeeder version lagAligned to 1.3.0 bump targets
A8MediumStale readiness smoke (Contact unwired)This page supersedes
A9LowTrigger↔dispatcher parityUnit parity test
A10InfoMarketing / branching / create_project deferredAccepted
A11InfoProject created + assigned dual fireDocumented in developer guide

Rollback

LayerAction
FrontendRedeploy previous SPA
Backend codeRedeploy previous release; catalog version may remain 1.3.0 (display-only)
SchemaNo new tables — bump-only migrations
Dual bridgeDo not reintroduce AutomationEventBridge

Accepted residual risk

ItemSeverityNotes
Marketing / branching / generate quote-invoice-order / create_project actionInfoExplicitly deferred
Mobile visual builderInfoMobile remains list/run focused
Project created + assigned dual fireInfoTwo triggers can match one create when assignee set — intentional

Sign-off

RoleNameDateDecision
Eng2026-09-08☐ Ready
QA☐ Ready
Ops☐ Ready

Release decision: Go — merge after CI green; production opt-in after Ops migrate + staging smoke.

Official documentation for the EloSync SaaS Platform.