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
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 request5857165909on the seat post. Familyconnector-flow-surface, seat verdict ENFORCE.reach:the declared authoring door.packages/specparses 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).Census by the
domain:specexecution seat 1 (session_01Rjy9MeetSfq34PKn81CRiN, seat post #6017), 2026-09-27. Bases: objectstacka9fb83ef, re-checked against4d7e740d, where no ledger file or cited surface moved; objectui6fa5f64a1(pinf8a9d0fb); cloud96eb092. Ledger instrument:check-liveness.mts --json, whosebyStatusequals the committedstate-counts.mdrow 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 is5of 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
connector.actions.descriptionpackages/spec/liveness/connector.json:87engine.ts#getConnectorDescriptorscopiesdescription: a.descriptioninto theGET /api/v1/automation/connectorspayload, and no consumer in either repo reads it back: objectui's three connector-descriptor con…connector.actions.outputSchemapackages/spec/liveness/connector.json:100inputSchema, projected the same way and consumed by nothing — which is exactly what makes this row falsifiable rather than a guess.engine.ts#getConnectorDescriptorspublishesoutputSchema: a.outputSchema; the census over both repos finds …connector.triggers.keypackages/spec/liveness/connector.json:116ConnectorTriggerSchema's docblock reads 'connector.triggers.labelpackages/spec/liveness/connector.json:121triggers.key— nothing reads a connector trigger.connector.triggers.descriptionpackages/spec/liveness/connector.json:126triggers.key.connector.triggers.typepackages/spec/liveness/connector.json:131triggers.key.pollingandwebhookname two engines that do not exist for connectors: no polling loop readsintervalSeconds, and the webhook dispatcher is driven bysys_webhookrows materialized from the TOP-LEVE…connector.triggers.intervalSecondspackages/spec/liveness/connector.json:136triggers.key. Renamed fromintervalby 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:
x-ms-trigger); actionsummary/descriptionshown in the designer; response schema becomes "dynamic content" tokens.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.actionsonly, :3698) must registertriggersinto the flow trigger registry with a polling loop / webhook receiver;#getConnectorDescriptorsalready projects description/outputSchema. objectui packages/app-shell/src/views/metadata-admin/inspectors/FlowReferenceField.tsx#connectorActionsToOptions (:342, reads key+label only) must showdescription, and flow output refs must be typed fromoutputSchema.User-visible risk (2): The schema docblock itself says triggers are NOT YET ENFORCED (#3197), yet a descriptor that authors them parses clean.
outputSchemais 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:triggers.interval,circuitBreaker.monitoringWindow, cube sub-day granularities); does not carry any open keyconnectors/triggersDedupe:
actions\.outputSchema \| actions\.description \| getConnectorDescriptors \| connectorActionsToOptions \| nodeOutputRefs→ 0 open hits.四轴:
Blocked-by: objectstack-ai/objectui#11028