Public entry. De-dups the known create-time double-invocation: the connection's IsActive
false→true Save fires the entity-server hook (which runs this pipeline WITH LLM PK inference),
and the create resolver then calls it again. Both converge here, so we run the pipeline ONCE
per CompanyIntegration and hand both callers the same result — no double introspect/persist/
classify, no double live API calls, and the resolver still gets a real summary. A legitimate
re-refresh later (outside the window) runs fresh.
The unified pipeline that drives connector creation / refresh end-to-end:
Every stage emits structured events through IntegrationProgressEmitter so the stream is identical regardless of vendor. Stages also emit checkpoint events carrying enough resumableState that the orchestrator can pick up from a kill or container restart without re-running prior stages.
The pipeline does NOT generate MJ entities itself — that gate (D7) lives in the CodeGen metadata layer: rows without a PK are simply not promoted to
__mj.Entity. The pipeline emitsentity.skipped-no-pkevents for visibility.