cea21ff576
Worker fixes: - registry.initialize uses get_migration_engine() for DDL (not worker_engine) - Worker session uses get_worker_session_factory() (crm_worker, not crm_api) - Event handlers only registered for active plugins (is_active check) - Outbox processing per-tenant with set_config(app.current_tenant_id) - process_outbox_job uses get_worker_session_factory() and loads tenant_ids - Removed unused get_engine import Outbox fixes: - process_outbox_batch iterates over tenants, sets RLS context per tenant - _process_single_outbox_event extracted for clarity - Events claimed per-tenant (RLS-compatible, no BYPASSRLS needed) - Commit after each tenant to release locks Gate 5 requirements met: - Plugin event handlers registered for active plugins only - No plugin routers registered in worker - Outbox events without handlers marked as no_handlers - Failed consumers trigger retry with exponential backoff - Processing is idempotent (consumer_inbox check) - Every worker DB access sets app.current_tenant_id - Worker cannot read/write other tenant data (RLS enforced)