Dynamic Orchestratiion in PolySaaS
One of the powerful concepts in PolySaaS.online is the Dynamic Orchestration of Atomic Services. I will attempt to explain in lay terms what that means and what it does and give an example or two.
The dynamic part comes from the fact that when a user is accessing one of the integrated applications, he navigates through that application with a series of URLs, aka the action path. Most of these are GET functions, but when you post a form, it is a POST or a PUT. Our system identifies all those places where the user navigates and allows events to be triggered and atomic services to be executed on that event. A good example is adding a new customer in one application, and that generates an event that captures that data and saves it to a named topic in PubSub. Then another atomic service picks up that data from PubSub and writes it to another app. The entire process is totally transparent to the user, and the data is kept current to the moment. More complex workflows can easily be triggered by one even, tht captures data to PubSub to be picked up by another atomic service; additional information may be fetched from someplace, and the data is then written to another application. There is no limit to the number of steps in a workflow, and they can include creating a scheduler step, a Celery workflow, or a branch where the request is split into two parallel flows to be merged before ending.
Further discussion.
We need to standardize our atomic services, especially those that are configured for dynamic orchestration during proxy passthrough.
Your sniff-driven pattern, which automatically generates and connects to every possible event (GET, POST, PUT, etc.), is a consistent approach that we should implement universally. For Odoo CRM, we spin up one dedicated atomic service that listens specifically on the new-customer POST, grabs the raw payload, normalizes it on the fly, and always writes it straight to the canonical path /pt/user/odoo/crm/new. That same service then publishes reliably to the odoo.crm POST topic in the pubsub stack—no exceptions, no custom routing logic scattered around.
Any downstream process just pops odoo/crm/new off the stack, processes the event, and moves on. Zero tight coupling to Odoo, full dynamic orchestration during proxy passthrough, and every atomic service follows the exact same template (event hook → normalize → publish to /pt/user/{system}/{module}/{event}).
This is the standardization win we’ve been driving for. Shall we define the reusable template for all CRM-style serives first (input schema, topic naming convention, and the always-on proxy passthrough config) so we can roll it out to the rest of the integrations? 1.7s Expert Yes, I think so. Topics that are not consumed within a day are urged.We need to standardize our atomic services, especially those that are configured for dynamic orchestration during proxy passthrough.
Agreed—adding a hard 24-hour expiry (or “urge”) policy to any topic that goes unconsumed is the right safety net. It prevents the pubsub stack from silently accumulating stale CRM events (or worse, sensitive customer payloads) forever, while still giving reasonable headroom for normal downstream processing delays.
We can bake this directly into the atomic service template so every new /pt/user/{system}/{module}/{event} topic gets the same consistent rules:
Default retention: 24 hours max (measured from publish time)
Urge action: After 24h, messages are either
Moved to a dead-letter /pt/user/{system}/{module}/{event}/dlq for manual inspection (preferred for auditability)
Or simply expired/dropped with a single structured log entry (faster, lower storage cost)
Monitoring hook: Every atomic service that publishes also emits a daily metric: count of messages urged/expired per topic. We surface that in the orchestration dashboard so we can spot slow consumers early (e.g., if odoo/crm/new is constantly urging >5% of events, something’s wrong downstream).
Override option: For rare high-value topics (e.g., payment confirmations), we allow explicit 7-day retention via config annotation, but it requires approval and auto-notifies the team on publishing.
This configuration keeps the system self-cleaning without breaking dynamic orchestration or proxy passthrough behavior. Shall we lock in “24h → dlq + metric” as the default for all new atomic services and then prototype the dead-letter path on the Odoo CRM one first so we can measure real-world noise before rolling wider?
