The live connector registry behind GET /connectors and the connector_action flow node is populated only by plugins calling automationService.registerConnector(def, handlers) (packages/services/service-automation/src/engine.ts — registration requires a handler per action). Declarative connectors: entries in an app stack are registered as metadata but never reach that registry, so they cannot be dispatched: a declared connector with no plugin behind it is a descriptor with no behavior.
Found while upgrading the showcase to a registry-driven coverage manifest. The showcase demonstrates live connectors the delivered way — ConnectorRestPlugin / ConnectorSlackPlugin instances in objectstack.config.ts plugins:, exercised by the connector flows. Per Prime Directive #10 the declarative connectors: collection is recorded as an explicit waiver in STACK_COLLECTION_COVERAGE (examples/app-showcase/src/coverage.ts) pointing here. (app-crm ships declarative connector examples — examples/app-crm/src/connectors/crm-connectors.ts — which today are declared-but-inert.)
Resolution options:
- Bridge: at boot, resolve declarative connector entries against installed connector plugins/handlers and register them (declared connector without a matching handler ⇒ loud validation error, not a silent no-op), or
- Document as descriptor-only: make the schema's contract explicit (catalog/marketplace descriptor, not runtime wiring) and keep runtime registration plugin-only.
Once either lands, flip the showcase waiver to demonstrated.
The live connector registry behind
GET /connectorsand theconnector_actionflow node is populated only by plugins callingautomationService.registerConnector(def, handlers)(packages/services/service-automation/src/engine.ts— registration requires a handler per action). Declarativeconnectors:entries in an app stack are registered as metadata but never reach that registry, so they cannot be dispatched: a declared connector with no plugin behind it is a descriptor with no behavior.Found while upgrading the showcase to a registry-driven coverage manifest. The showcase demonstrates live connectors the delivered way —
ConnectorRestPlugin/ConnectorSlackPlugininstances inobjectstack.config.tsplugins:, exercised by the connector flows. Per Prime Directive #10 the declarativeconnectors:collection is recorded as an explicit waiver inSTACK_COLLECTION_COVERAGE(examples/app-showcase/src/coverage.ts) pointing here. (app-crm ships declarative connector examples —examples/app-crm/src/connectors/crm-connectors.ts— which today are declared-but-inert.)Resolution options:
Once either lands, flip the showcase waiver to
demonstrated.