Skip to content

Commit 93e4d69

Browse files
committed
Merge remote-tracking branch 'origin/main' into claude/issue-20594-rest-dead-citations
2 parents 8b1475c + 542670d commit 93e4d69

55 files changed

Lines changed: 1376 additions & 509 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.
Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,79 @@
1+
---
2+
'@objectstack/spec': minor
3+
---
4+
5+
feat(spec)!: retire the connector `triggers` array — the `ConnectorTrigger` shape nothing ever registered, polled or received (#20287)
6+
7+
**BREAKING** — `connector.triggers` (the `ConnectorTrigger` array: `key`, `label`,
8+
`description`, `type: 'polling' | 'webhook'`, `intervalSeconds`) is removed from
9+
`ConnectorSchema` and `DeclarativeConnectorEntrySchema` — so from `defineConnector`,
10+
`stack.connectors[]`, the `PUT /api/v1/meta/connector/:name` door and
11+
`AutomationEngine.registerConnector` — and the `ConnectorTriggerSchema` /
12+
`ConnectorTrigger` exports leave `@objectstack/spec/integration` with it. ADR-0049
13+
enforce-or-remove, ruled RETIRE on the maintainer's criterion for a
14+
declared-but-unenforced family; ADR-0041 is unchanged: connector-event triggers stay
15+
in its third tier, as their own trigger package, promoted when real projects ask for
16+
them — and then in the mainstream shape (subscribe / unsubscribe lifecycle,
17+
signature verification, a dedupe cursor), which these five keys could not carry.
18+
19+
Measured before removal: `registerConnector` walks a connector's `actions` only and
20+
stores the rest of the def unread; the engine's trigger registry holds FLOW trigger
21+
kinds (`record_change`, `time_relative`, `schedule`, `api`) and no connector trigger
22+
ever entered it; no polling loop read `intervalSeconds`; no receiver was driven by a
23+
`webhook` trigger; and no connector package, provider or example declared one. A
24+
declared trigger parsed clean and never started a flow.
25+
26+
### FROM → TO
27+
28+
| removed | what to write instead |
29+
| --- | --- |
30+
| `connector.triggers` with a `type: 'polling'` trigger (`intervalSeconds`, or the pre-rename `interval`) | delete the key, and write a `schedule` flow whose `connector_action` node calls the connector's action — at the cadence you meant, in seconds. |
31+
| `connector.triggers` with a `type: 'webhook'` trigger | delete the key, and write an `api` flow that the external sender calls, with a `connector_action` node calling the connector's action. It opens an inbound endpoint that never existed before: an `api` flow is refused without a per-flow secret and every call must carry its signature, so the sender must be able to sign. |
32+
| `ConnectorTriggerSchema`, `ConnectorTrigger` | no replacement — nothing parsed or constructed a connector trigger. |
33+
34+
**The one-line fix: delete `triggers:` from every connector.**
35+
`os migrate meta --from 17` lists the mechanical edits for existing sources.
36+
37+
⚠️ Runtime behaviour is deliberately **unchanged**: no connector trigger ever started
38+
anything. What changes is the answer an author gets — the key is refused at parse
39+
with a prescription naming the two shapes that work, and in `tsc` (its input type is
40+
`never`), instead of being saved with no effect.
41+
42+
### The retirement kit
43+
44+
- **Tombstone.** `triggers` is a `retiredKey()` tombstone on the private
45+
`ConnectorBaseSchema` both published carriers wrap (the schema is not `.strict()`,
46+
so a bare deletion would be a silent strip, ADR-0104).
47+
`RETIRED_KEYS_BY_MAJOR[18]`: `integration/Connector:triggers` and
48+
`integration/DeclarativeConnectorEntry:triggers`. The key had no default, so no
49+
retired-default residue is owed.
50+
- **The provider-bound refusal is gone.** `DeclarativeConnectorEntrySchema` used to
51+
refuse `triggers` on a provider-bound instance, reasoned "the provider derives them
52+
from the upstream at boot" — untrue, since no provider ever derived a trigger. The
53+
tombstone refuses every value on every carrier, so that rule became unreachable and
54+
was deleted rather than re-reasoned; a provider-bound instance now meets the
55+
retirement prescription.
56+
- **The def leaves whole** (`RETIRED_DEFS_BY_MAJOR[18]`: `integration/ConnectorTrigger`).
57+
- **D2 conversion `connector-triggers-removed`** (step 18, retired from the load path):
58+
strips the array from `connectors[]` and from stored `sys_metadata` connector rows
59+
(the rehydration seam replays it), one notice per connector, as a lossless delete.
60+
A trigger is stripped, never turned into a flow.
61+
- **The chain.** In the same step, `connector-health-and-trigger-durations-unit-in-key`
62+
renamed `triggers[].interval` to `intervalSeconds`. That trigger half is absorbed by
63+
this removal, as its breaker half already was by the `health` removal, so with neither
64+
half left the rename conversion is gone from the table and from step 18; an author
65+
holding either spelling ends with no `triggers` at all. The retired-key row
66+
`integration/ConnectorTrigger:interval` stays as the record.
67+
- **D3 entry `connector-triggers-retired`** carries the family's judgement: which
68+
triggers should exist now as flows, the cadence in seconds, and whether an external
69+
sender can sign the calls a signed `api` flow requires. The absorbed rename's own D3 entry
70+
(`connector-resilience-durations-unit-in-key`) is gone with its
71+
conversion.
72+
- **No deprecation window**, per the project's startup-stage posture.
73+
74+
⚠️ **The out-of-repo consumer population is NOT MEASURED.** `@objectstack/spec` is
75+
published, so this is breaking for consumers no telemetry was consulted for.
76+
77+
Clause-②: no (narrowing)
78+
79+
<!-- adr-0087: registered connector-triggers-removed, connector-triggers-retired -->
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
---
2+
'@objectstack/plugin-sharing': patch
3+
---
4+
5+
Provenance comments in `plugin-sharing` were re-anchored
6+
7+
Comment and docblock lines under `src/` that cited tracker numbers which no
8+
longer resolve on GitHub now cite the commit in this repository's history that
9+
decided the matter, and say in their own words what was decided. Comments
10+
only: no type, schema, export, log or refusal text, or runtime behaviour changes.

‎content/docs/references/index.mdx‎

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
---
22
title: Protocol reference — every schema by module
33
navTitle: Protocol Reference
4-
description: Every schema published by @objectstack/spec — 1522 schemas across 14 protocol modules
4+
description: Every schema published by @objectstack/spec — 1521 schemas across 14 protocol modules
55
---
66

77
{/* ⚠️ AUTO-GENERATED — DO NOT EDIT. Run build-docs.ts to regenerate. Hand-written docs live in the module folders under content/docs/. */}
@@ -25,7 +25,7 @@ counts are sums of the rows they head. Regenerate with
2525
| [Automation Protocol](/docs/references/automation) | 14 | 75 | Flows and their nodes, approvals, ETL pipelines, webhooks, state machines, execution records. |
2626
| [Data Protocol](/docs/references/data) | 29 | 175 | Objects, fields, queries, filters, datasources and drivers — the ObjectQL layer. |
2727
| [Identity Protocol](/docs/references/identity) | 5 | 27 | Users and accounts, organizations, positions, SCIM provisioning. |
28-
| [Integration Protocol](/docs/references/integration) | 1 | 17 | The single connector protocol (ADR-0097) — catalog descriptors and provider-bound instances. |
28+
| [Integration Protocol](/docs/references/integration) | 1 | 16 | The single connector protocol (ADR-0097) — catalog descriptors and provider-bound instances. |
2929
| [Kernel Protocol](/docs/references/kernel) | 30 | 157 | Plugin lifecycle and manifests, capabilities and security, metadata loading, service registry. |
3030
| [Marketplace Protocol](/docs/references/marketplace) | 4 | 30 | The package & marketplace format — package identity and versions, listing, publish, review, search, install, template manifests. |
3131
| [QA Protocol](/docs/references/qa) | 1 | 8 | Declarative test suites — scenarios, steps, actions and assertions. |
@@ -34,7 +34,7 @@ counts are sums of the rows they head. Regenerate with
3434
| [Studio Protocol](/docs/references/studio) | 3 | 35 | Studio designer metadata — the authoring surfaces for the protocols above. |
3535
| [System Protocol](/docs/references/system) | 34 | 275 | The runtime environment — logging, jobs, cache, metrics, notifications, i18n and compliance. |
3636
| [UI Protocol](/docs/references/ui) | 16 | 165 | Apps, pages, views, dashboards, reports, actions and themes — the ObjectUI layer. |
37-
| **Total** | **196** | **1522** | 14 protocol modules |
37+
| **Total** | **196** | **1521** | 14 protocol modules |
3838

3939
---
4040

@@ -187,13 +187,13 @@ Users and accounts, organizations, positions, SCIM provisioning.
187187

188188
## Integration Protocol
189189

190-
**Source:** `packages/spec/src/integration/` · **Import:** `@objectstack/spec/integration` · **1 page, 17 schemas**
190+
**Source:** `packages/spec/src/integration/` · **Import:** `@objectstack/spec/integration` · **1 page, 16 schemas**
191191

192192
The single connector protocol (ADR-0097) — catalog descriptors and provider-bound instances.
193193

194194
| File | Schemas |
195195
| :--- | :--- |
196-
| [`connector.zod.ts`](/docs/references/integration/connector) | `Connector`, `ConnectorAction`, `ConnectorActionEffect`, `ConnectorConflictResolution`, `ConnectorFieldMapping`, `ConnectorInstanceAPIKeyAuth`, `ConnectorInstanceAuth`, `ConnectorInstanceBasicAuth`, `ConnectorInstanceBearerAuth`, `ConnectorInstanceNoAuth`, `ConnectorRetryStrategy`, `ConnectorTrigger`, `ConnectorType`, `DataSyncConfig`, `DeclarativeConnectorEntry`, `RetryConfig`, `SyncStrategy` |
196+
| [`connector.zod.ts`](/docs/references/integration/connector) | `Connector`, `ConnectorAction`, `ConnectorActionEffect`, `ConnectorConflictResolution`, `ConnectorFieldMapping`, `ConnectorInstanceAPIKeyAuth`, `ConnectorInstanceAuth`, `ConnectorInstanceBasicAuth`, `ConnectorInstanceBearerAuth`, `ConnectorInstanceNoAuth`, `ConnectorRetryStrategy`, `ConnectorType`, `DataSyncConfig`, `DeclarativeConnectorEntry`, `RetryConfig`, `SyncStrategy` |
197197

198198
---
199199

0 commit comments

Comments
 (0)