Skip to content

automation: connector triggers start flows, and a connector action's description / outputSchema reach the flow designer (7 keys) #20287

Description

@objectstack-fleet

Ruled: 5881831013 · letter B (connector triggers family retired now; ADR-0041 Tier 3 stands; action half per the seat) · 2026-09-29T01:26Z

Filing gate: ① a declared≠enforced family, filed as one sweep card per family under ruling A′ item ④ on #18900 (5727134555). This is triage's standing request 5857165909 on the seat post. Family connector-flow-surface, seat verdict ENFORCE.

  • reach: the declared authoring door. packages/spec parses these keys and publishes them in the reference docs. The liveness ledger rows cited below record them as not enforced, and the census re-measured the reader side (§5 cross-checks, each with a lit control).
  • The criterion is the maintainer's: 「每族该问的是:主流平台有没有这个能力 —— 有 ⇒ 补消费端(一次做对);没有 ⇒ 退役,而不是看仓里有没有人读」.
  • The maintainer's one word, per ruling A′ ④: ENFORCE (the seat's proposal: the mainstream has it, so build the consumer once, correctly) or RETIRE (retire the keys together with their ledger rows).

Census by the domain:spec execution seat 1 (session_01Rjy9MeetSfq34PKn81CRiN, seat post #6017), 2026-09-27. Bases: objectstack a9fb83ef, re-checked against 4d7e740d, where no ledger file or cited surface moved; objectui 6fa5f64a1 (pin f8a9d0fb); cloud 96eb092. Ledger instrument: check-liveness.mts --json, whose byStatus equals the committed state-counts.md row for row. ⛔ Filed bare: routing and grading belong to triage. ⛔ Not a claim. The ranking is by value, user-visible risk × keys. This family's rank is 5 of 16. The sibling family cards filed so far are #20273, #20274, #20281 and #20282.

Capability: Connector triggers (polling / webhook) that start automations; connector action descriptions shown in the designer; typed action outputs usable downstream

key ledger status ledger row what the ledger cites
connector.actions.description dead (verified 2026-09-17) packages/spec/liveness/connector.json:87 note: Projected onto the wire and read by nobody. engine.ts#getConnectorDescriptors copies description: a.description into the GET /api/v1/automation/connectors payload, and no consumer in either repo reads it back: objectui's three connector-descriptor con…
connector.actions.outputSchema dead (verified 2026-09-17) packages/spec/liveness/connector.json:100 note: The twin of inputSchema, projected the same way and consumed by nothing — which is exactly what makes this row falsifiable rather than a guess. engine.ts#getConnectorDescriptors publishes outputSchema: a.outputSchema; the census over both repos finds …
connector.triggers.key dead (verified 2026-09-17) packages/spec/liveness/connector.json:116 note: The whole trigger sub-surface is declared and unread, and the schema says so itself: ConnectorTriggerSchema's docblock reads '⚠️ NOT YET ENFORCED — declared but never read by the runtime (#3197). AutomationEngine.registerConnector ignores a connector's tr…
connector.triggers.label dead (verified 2026-09-17) packages/spec/liveness/connector.json:121 note: Dead for the one reason recorded on triggers.key — nothing reads a connector trigger.
connector.triggers.description dead (verified 2026-09-17) packages/spec/liveness/connector.json:126 note: Dead for the one reason recorded on triggers.key.
connector.triggers.type dead (verified 2026-09-17) packages/spec/liveness/connector.json:131 note: Dead for the one reason recorded on triggers.key. polling and webhook name two engines that do not exist for connectors: no polling loop reads intervalSeconds, and the webhook dispatcher is driven by sys_webhook rows materialized from the TOP-LEVE…
connector.triggers.intervalSeconds dead (verified 2026-09-17) packages/spec/liveness/connector.json:136 note: Dead for the one reason recorded on triggers.key. Renamed from interval by the protocol-18 conversion (#15680/#14478) so the unit lives in the key name — a rename that made the declaration honest without making it enforced.

Mainstream evidence:

  • Power Automate custom connectors: polling triggers and webhook triggers (OpenAPI x-ms-trigger); action summary/description shown in the designer; response schema becomes "dynamic content" tokens.
  • Salesforce Flow + External Services: OpenAPI-registered actions with typed outputs usable as Flow resources.
  • ServiceNow IntegrationHub spokes: actions with typed outputs used as data pills. Spoke webhook triggers are UNVERIFIED.
  • Zapier (iPaaS): polling and REST-hook triggers, the reference shape for connector triggers.

Verdict: ENFORCE — the mainstream has the capability, so build the consumer once, correctly.

Reader that must exist / disposition: objectstack packages/services/service-automation/src/engine.ts#registerConnector (walks parsed.actions only, :3698) must register triggers into the flow trigger registry with a polling loop / webhook receiver; #getConnectorDescriptors already projects description/outputSchema. objectui packages/app-shell/src/views/metadata-admin/inspectors/FlowReferenceField.tsx#connectorActionsToOptions (:342, reads key+label only) must show description, and flow output refs must be typed from outputSchema.

User-visible risk (2): The schema docblock itself says triggers are NOT YET ENFORCED (#3197), yet a descriptor that authors them parses clean. outputSchema is published on the wire and ignored.

Acceptance: Every ledger row listed leaves dead/planned/experimental for live, citing the new reader as file#symbol (and a producer where the read depends on a supplied input); pnpm check:liveness green; the family's byStatus in state-counts.md regenerated.

Lane: domain:spec parent; objectstack domain:services sub-issue (triggers, descriptors) + objectui sub-issue (designer), per the A′ seam rule

File surface: packages/spec/src/integration/connector.zod.ts:940-941 · packages/services/service-automation/src/engine.ts (registerConnector, getConnectorDescriptors, trigger registry) · objectui packages/app-shell/src/views/metadata-admin/inspectors/FlowReferenceField.tsx

Dedupe: ConnectorTrigger \| connector.{0,40}triggers?\b \| triggers\.intervalSeconds → 3 open hits. None carries a key of this family:

Dedupe: actions\.outputSchema \| actions\.description \| getConnectorDescriptors \| connectorActionsToOptions \| nodeOutputRefs → 0 open hits.

四轴:

  • 实际业务需求: 「外部事件触发自动化」和「在设计器里看到动作说明、引用动作输出」是 Power Automate 连接器的基本体验。作者今天声明了触发器,流程永远不会被触发。
  • 项目长远合理性: 触发器挂进现有的 flow trigger 注册表,输出类型来自已经上线的描述符投影。复用现有机制,不另起一套。一次做对:polling 与 webhook 两种触发器,同一个注册入口。
  • 防 AI 写错: outputSchema 真正约束下游引用之后,AI 引用不存在的输出字段会在设计期报错,而不是运行期取到 undefined。
  • 创业阶段不扩散: 7 个键,消费端都落在已存在的模块里(engine、描述符、设计器选择器),新增面小。

Blocked-by: objectstack-ai/objectui#11028

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions