diff --git a/.changeset/27607-sys-webhook-text.md b/.changeset/27607-sys-webhook-text.md new file mode 100644 index 00000000000..8453eed148d --- /dev/null +++ b/.changeset/27607-sys-webhook-text.md @@ -0,0 +1,12 @@ +--- +'@objectstack/plugin-webhooks': patch +--- + +docs(plugin-webhooks): the `sys_webhook` object says a row is a webhook an organization authors, and that a declared webhook is not a row + +Clause-②: no +Metadata-protocol: none + +The `sys_webhook` object description shown in Setup and Studio said a webhook declared in code with `defineStack({ webhooks })` / `defineWebhook()` was "materialized into rows on boot". That boot seeder is retired: a declared webhook is read from the metadata registry and writes no `sys_webhook` row. The description now says a row is a subscription authored in the Studio editor or through the API, and that a declared webhook is read from the registry. + +The help text of two system fields is corrected the same way. `managed_by`: `package` names a copy the retired 18.0 boot seeder wrote, which nothing writes now, and `platform` is reserved. `customized`: it is read by the ownership ceremony (an edited copy under a declared name is kept as a clone, a pristine one deleted), not by a boot seeder. The English bundle is regenerated, and the zh-CN, ja-JP and es-ES strings for these three texts are re-translated. No behaviour, field or option changes. diff --git a/packages/plugins/plugin-webhooks/src/sys-webhook.object.ts b/packages/plugins/plugin-webhooks/src/sys-webhook.object.ts index 0cd912c9a1c..f5154907f51 100644 --- a/packages/plugins/plugin-webhooks/src/sys-webhook.object.ts +++ b/packages/plugins/plugin-webhooks/src/sys-webhook.object.ts @@ -53,7 +53,10 @@ export const SysWebhook = ObjectSchema.create({ // create/edit/delete so admins can at least toggle `active` and edit // simple URL/method fields without round-tripping through code. userActions: { create: true, edit: true, delete: true, import: false }, - description: 'Outbound HTTP webhook subscription. Declared in code via defineStack({ webhooks }) / defineWebhook() (materialized into rows on boot) or authored directly in the Studio editor; dispatched by the webhook auto-enqueuer onto the shared HTTP outbox.', + // [ADR-0131 D2] A row is an organization's own subscription; a declared + // webhook is read from the metadata registry (`declared-webhooks.ts`) and + // writes no row. The description says so to every Setup/Studio reader. + description: 'Outbound HTTP webhook subscription authored by an organization in the Studio editor or through the API. A webhook declared in code via defineStack({ webhooks }) / defineWebhook() is read from the metadata registry and writes no row here. Both are dispatched by the webhook auto-enqueuer onto the shared HTTP outbox.', displayNameField: 'name', nameField: 'name', // [ADR-0079] canonical primary-title pointer (mirrors deprecated displayNameField) titleFormat: '{label}', @@ -283,8 +286,9 @@ export const SysWebhook = ObjectSchema.create({ readonly: true, defaultValue: 'admin', description: - 'Record provenance: platform = framework built-in / package = app/package-declared ' + - '(boot-seeded from defineStack webhooks) / admin = created in Setup.', + 'Record provenance: admin = created in Setup or through the API / package = a copy of a ' + + 'code-declared webhook that the retired 18.0 boot seeder wrote (nothing writes one now: a ' + + 'declared webhook is read from the metadata registry and is not a row) / platform = reserved.', group: 'System', }, ), @@ -295,8 +299,9 @@ export const SysWebhook = ObjectSchema.create({ readonly: true, defaultValue: false, description: - 'Set when an admin edits a package-declared webhook; boot seeding will no longer ' + - 'overwrite the row (a deactivated noisy webhook survives redeploys). Meaningless on admin rows.', + 'Set when an admin edits a package row (a copy the retired 18.0 boot seeder wrote). The ' + + 'ownership ceremony reads it: an edited copy under a declared name is kept as a clone, a ' + + 'pristine one is deleted. Meaningless on admin rows.', group: 'System', }), diff --git a/packages/plugins/plugin-webhooks/src/translations/en.objects.generated.ts b/packages/plugins/plugin-webhooks/src/translations/en.objects.generated.ts index 1ea53337dd1..a529e7c4d47 100644 --- a/packages/plugins/plugin-webhooks/src/translations/en.objects.generated.ts +++ b/packages/plugins/plugin-webhooks/src/translations/en.objects.generated.ts @@ -18,7 +18,7 @@ export const enObjects: NonNullable = { sys_webhook: { label: "Webhook", pluralLabel: "Webhooks", - description: "Outbound HTTP webhook subscription. Declared in code via defineStack({ webhooks }) / defineWebhook() (materialized into rows on boot) or authored directly in the Studio editor; dispatched by the webhook auto-enqueuer onto the shared HTTP outbox.", + description: "Outbound HTTP webhook subscription authored by an organization in the Studio editor or through the API. A webhook declared in code via defineStack({ webhooks }) / defineWebhook() is read from the metadata registry and writes no row here. Both are dispatched by the webhook auto-enqueuer onto the shared HTTP outbox.", fields: { id: { label: "Webhook ID" @@ -81,7 +81,7 @@ export const enObjects: NonNullable = { }, managed_by: { label: "Managed By", - help: "Record provenance: platform = framework built-in / package = app/package-declared (boot-seeded from defineStack webhooks) / admin = created in Setup.", + help: "Record provenance: admin = created in Setup or through the API / package = a copy of a code-declared webhook that the retired 18.0 boot seeder wrote (nothing writes one now: a declared webhook is read from the metadata registry and is not a row) / platform = reserved.", options: { platform: "platform", package: "package", @@ -90,7 +90,7 @@ export const enObjects: NonNullable = { }, customized: { label: "Customized", - help: "Set when an admin edits a package-declared webhook; boot seeding will no longer overwrite the row (a deactivated noisy webhook survives redeploys). Meaningless on admin rows." + help: "Set when an admin edits a package row (a copy the retired 18.0 boot seeder wrote). The ownership ceremony reads it: an edited copy under a declared name is kept as a clone, a pristine one is deleted. Meaningless on admin rows." }, created_at: { label: "Created At" diff --git a/packages/plugins/plugin-webhooks/src/translations/es-ES.objects.generated.ts b/packages/plugins/plugin-webhooks/src/translations/es-ES.objects.generated.ts index 8cb6ef6a3c3..6e8cf6b8aa0 100644 --- a/packages/plugins/plugin-webhooks/src/translations/es-ES.objects.generated.ts +++ b/packages/plugins/plugin-webhooks/src/translations/es-ES.objects.generated.ts @@ -18,7 +18,7 @@ export const esESObjects: NonNullable = { sys_webhook: { label: "Webhook", pluralLabel: "Webhooks", - description: "Suscripción saliente de Webhook HTTP. Se declara en código mediante defineStack({ webhooks }) / defineWebhook() (materializada en filas al arrancar) o se crea directamente con el editor de Studio; el encolador automático de webhooks la despacha al outbox HTTP compartido.", + description: "Suscripción saliente de Webhook HTTP creada por una organización con el editor de Studio o mediante la API. Un webhook declarado en código mediante defineStack({ webhooks }) / defineWebhook() se lee del registro de metadatos y no escribe ninguna fila aquí. Ambos los despacha el encolador automático de webhooks al outbox HTTP compartido.", fields: { id: { label: "ID de webhook" @@ -81,7 +81,7 @@ export const esESObjects: NonNullable = { }, managed_by: { label: "Gestionado por", - help: "Procedencia del registro: platform = integrado en el framework / package = declarado por app o paquete (sembrado al arrancar desde los webhooks de defineStack) / admin = creado en Setup.", + help: "Procedencia del registro: admin = creado en Setup o mediante la API / package = una copia de un webhook declarado en código que escribió el sembrador de arranque retirado de la 18.0 (ya nada la escribe: un webhook declarado se lee del registro de metadatos y no es una fila) / platform = reservado.", options: { platform: "Plataforma", package: "Paquete", @@ -90,7 +90,7 @@ export const esESObjects: NonNullable = { }, customized: { label: "Personalizado", - help: "Se establece cuando un administrador edita un webhook declarado por un paquete; a partir de entonces el sembrado de arranque deja de sobrescribir la fila (un webhook ruidoso desactivado sobrevive a los redespliegues). Sin sentido en filas admin." + help: "Se establece cuando un administrador edita una fila package (una copia que escribió el sembrador de arranque retirado de la 18.0). La lee la ceremonia de propiedad: una copia editada bajo un nombre declarado se conserva como clon y una intacta se elimina. Sin sentido en filas admin." }, created_at: { label: "Creado el" diff --git a/packages/plugins/plugin-webhooks/src/translations/ja-JP.objects.generated.ts b/packages/plugins/plugin-webhooks/src/translations/ja-JP.objects.generated.ts index 88583c2ea5f..33841a10296 100644 --- a/packages/plugins/plugin-webhooks/src/translations/ja-JP.objects.generated.ts +++ b/packages/plugins/plugin-webhooks/src/translations/ja-JP.objects.generated.ts @@ -18,7 +18,7 @@ export const jaJPObjects: NonNullable = { sys_webhook: { label: "ウェブフック", pluralLabel: "ウェブフック", - description: "送信 HTTP Webhook サブスクリプション。コードでは defineStack({ webhooks }) / defineWebhook() で宣言する(起動時に行として実体化)か、スタジオエディタで直接作成します。Webhook 自動エンキューアが共有 HTTP アウトボックスへディスパッチします。", + description: "送信 HTTP Webhook サブスクリプション。組織がスタジオエディタまたは API で作成します。コードで defineStack({ webhooks }) / defineWebhook() により宣言した Webhook はメタデータレジストリから読み取られ、ここに行を書き込みません。どちらも Webhook 自動エンキューアが共有 HTTP アウトボックスへディスパッチします。", fields: { id: { label: "Webhook ID" @@ -81,7 +81,7 @@ export const jaJPObjects: NonNullable = { }, managed_by: { label: "管理元", - help: "レコードの出所: platform = フレームワーク組み込み / package = アプリ・パッケージ宣言(defineStack の webhooks から起動時シード)/ admin = Setup で作成。", + help: "レコードの出所: admin = Setup または API で作成 / package = 廃止された 18.0 の起動時シーダーが書き込んだ、コード宣言 webhook のコピー(現在は何も書き込みません。宣言された webhook はメタデータレジストリから読み取られ、行ではありません)/ platform = 予約済み。", options: { platform: "プラットフォーム", package: "パッケージ", @@ -90,7 +90,7 @@ export const jaJPObjects: NonNullable = { }, customized: { label: "カスタマイズ済み", - help: "管理者がパッケージ宣言の webhook を編集すると設定されます。以後、起動時シードはこの行を上書きしません(無効化したノイジーな webhook は再デプロイ後も保持)。admin 行では意味を持ちません。" + help: "管理者が package 行(廃止された 18.0 の起動時シーダーが書き込んだコピー)を編集すると設定されます。所有権セレモニーがこれを読み取り、宣言名の下で編集されたコピーはクローンとして保持し、未編集のコピーは削除します。admin 行では意味を持ちません。" }, created_at: { label: "作成日時" diff --git a/packages/plugins/plugin-webhooks/src/translations/zh-CN.objects.generated.ts b/packages/plugins/plugin-webhooks/src/translations/zh-CN.objects.generated.ts index e7dd6576d2b..75881722425 100644 --- a/packages/plugins/plugin-webhooks/src/translations/zh-CN.objects.generated.ts +++ b/packages/plugins/plugin-webhooks/src/translations/zh-CN.objects.generated.ts @@ -18,7 +18,7 @@ export const zhCNObjects: NonNullable = { sys_webhook: { label: "Webhook", pluralLabel: "Webhook", - description: "外发 HTTP Webhook 订阅。可在代码中通过 defineStack({ webhooks }) / defineWebhook() 声明(启动时物化为数据行),或直接在 Studio 编辑器中编写;由 Webhook 自动入队器分发到共享的 HTTP 发件箱。", + description: "外发 HTTP Webhook 订阅,由组织在 Studio 编辑器中或通过 API 编写。在代码中通过 defineStack({ webhooks }) / defineWebhook() 声明的 Webhook 从元数据注册表读取,不会在此写入数据行。两者均由 Webhook 自动入队器分发到共享的 HTTP 发件箱。", fields: { id: { label: "Webhook ID" @@ -81,7 +81,7 @@ export const zhCNObjects: NonNullable = { }, managed_by: { label: "管理来源", - help: "记录来源:platform = 框架内置 / package = 应用包声明(由 defineStack 的 webhooks 在启动时种入)/ admin = 在 Setup 中创建。", + help: "记录来源:admin = 在 Setup 中或通过 API 创建 / package = 已退役的 18.0 启动种入器写入的代码声明 Webhook 副本(如今不再写入:声明的 Webhook 从元数据注册表读取,不是数据行)/ platform = 保留。", options: { platform: "平台", package: "包", @@ -90,7 +90,7 @@ export const zhCNObjects: NonNullable = { }, customized: { label: "已定制", - help: "当管理员编辑应用包声明的 webhook 时置位;此后启动种入不再覆盖该行(被停用的嘈杂 webhook 可跨重新部署保留)。对 admin 来源的记录无意义。" + help: "当管理员编辑 package 行(已退役的 18.0 启动种入器写入的副本)时置位。所有权仪式读取它:声明名称下被编辑过的副本保留为克隆,未改动的副本被删除。对 admin 来源的记录无意义。" }, created_at: { label: "创建时间"