Skip to content

docs(plugin-webhooks): sys_webhook text says a row is an authored subscription and a declared webhook is not a row - #27787

Merged
objectstack-fleet[bot] merged 3 commits into
mainfrom
claude/issue-27607-sys-webhook-text
Oct 30, 2026
Merged

objectstack-fleet[bot] merged 3 commits into
mainfrom
claude/issue-27607-sys-webhook-text

Conversation

@objectstack-fleet

@objectstack-fleet objectstack-fleet Bot commented Oct 29, 2026 •

Copy link
Copy Markdown
Contributor

domain:server#2 · os-sales · session_01L6bhgUCizoYWQVJWjhdR6F

Requested by Sales · project thread

Fixes #27607

Clause-②: no
Metadata-protocol: none
Skills-docs: none — text-only description change; no authorable key, value or meaning moves

domain:server#2 · os-sales · session_01L6bhgUCizoYWQVJWjhdR6F

维护者速读

  • 改了什么:sys_webhook 对象说明、managed_by 与 customized 两个字段的帮助文字改写为现行模型:数据行是组织在 Studio 或 API 中编写的订阅;代码中声明的 webhook 从元数据注册表读取,不写入任何行。英文翻译由生成器重写,zh-CN / ja-JP / es-ES 三条译文同步重译。
  • 为什么改:旧文字仍说声明的 webhook「启动时物化为数据行」,而 ADR-0131 D2 已退役该启动种入器,Setup/Studio 用户读到的是错误说明。
  • 风险与回滚:仅文字,无行为、字段或选项变化;回滚即 revert 本 PR。
  • 先看:packages/plugins/plugin-webhooks/src/sys-webhook.object.ts(对象 description 与两个字段 description)、packages/plugins/plugin-webhooks/src/translations/zh-CN.objects.generated.ts(重译三条)、.changeset/27607-sys-webhook-text.md。
  • 两分钟验证:node scripts/check-i18n-bundles.mjs --filter=webhooks(需先 build CLI),预期 in sync;git grep -n "materialized into rows on boot" 在源码与翻译中零命中。
  • 需要你做的:无,席位落地。

What changes

  • sys_webhook.description: a row is an outbound subscription an organization authors in the Studio editor or through the API; a webhook declared with defineStack({ webhooks }) / defineWebhook() is read from the metadata registry and writes no row here (ADR-0131 D2, anchored in a code comment beside the text). The file's top docblock was already correct and is unchanged.
  • managed_by field description: admin = created in Setup or through the API; package = a copy the retired 18.0 boot seeder wrote, which nothing writes now; platform = reserved. The enum values are unchanged. Measured: no writer sets managed_by: 'package' or 'platform' on a sys_webhook row on this tree (the seeder bootstrapDeclaredWebhooks is retired; isSeededProvenance only reads the values).
  • customized field description (bounded in-place fix, same file, same defect class): it said "boot seeding will no longer overwrite the row", the same retired model. It now says the ownership ceremony reads it (an edited copy under a declared name is kept as a clone, a pristine one deleted), matching webhook-provenance.ts.
  • Translations: en.objects.generated.ts regenerated by node scripts/check-i18n-bundles.mjs --write --filter=webhooks (no other package's bundle was written). The generator's merge keeps an existing translated value even when its source changes, so the zh-CN, ja-JP and es-ES strings for these three texts were re-translated by hand (AGENTS.md allows editing translated-locale values; no key added or dropped), then the generator was re-run and kept them. No source-hash entry covers these leaves.
  • Changeset: @objectstack/plugin-webhooks patch.

Tests

Text-only: no new behaviour test; no existing test or snapshot pins the old sentences.

plugin-webhooks test + typecheck (head 2b0c160)
Test Files  24 passed (24)
     Tests  252 passed (252)
TEST=0 TC=0

Acceptance notes

  • No other copy of the retired sentence in content/docs/** or other packages; packages/plugins/plugin-webhooks/CHANGELOG.md mentions managed_by: 'package' rows in released entries, which describe their own release and are release-owned.
  • No open PR touches packages/plugins/plugin-webhooks/** (read across the 34 open PRs), so no merge-tree probe applies.

Verification

Gates (head 2b0c160)
  • node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstack: 55 commands, all run; 54 exit 0.
  • pnpm check:dual-build-cjs-loads exit 3, PREREQUISITE NOT MET (needs a full workspace build; only the CLI and plugin closures were built) — NOT MEASURED locally, CI runs it.
  • --ran reconciliation: 55 derived, 54 run, 1 NOT-MEASURED, 0 UNRUN.
  • node scripts/check-i18n-bundles.mjs exit 0: all bundles in sync, 10 packages.
  • eslint --no-inline-config packages/plugins/plugin-webhooks exit 0.

Generated by Claude Code

🤖 Generated with Claude Code

https://claude.ai/code/session_01L6bhgUCizoYWQVJWjhdR6F

…scription, not a declared copy

A declared webhook is read from the metadata registry and writes no
sys_webhook row (ADR-0131 D2). The object description, the managed_by
field description and the customized field description still described
the retired 18.0 boot seeder.

Claude-Session: https://claude.ai/code/session_01L6bhgUCizoYWQVJWjhdR6F
Co-authored-by: Claude <noreply@anthropic.com>
…e corrected text

en is rewritten by check-i18n-bundles --write; the zh-CN, ja-JP and
es-ES strings for the three texts are re-translated (the generator's
merge keeps a stale translated value, so it cannot refresh them).

Claude-Session: https://claude.ai/code/session_01L6bhgUCizoYWQVJWjhdR6F
Co-authored-by: Claude <noreply@anthropic.com>
@github-actions github-actions Bot added size/s documentation Improvements or additions to documentation tooling labels Oct 29, 2026
@github-actions

Copy link
Copy Markdown
Contributor

📓 Docs Drift Check

This PR changes 1 package(s): @objectstack/plugin-webhooks, touching 2 documentable anchor(s).

3 hand-written doc(s) NAME something this change touched and may need an implementation-accuracy re-verification:

  • content/docs/automation/webhooks.mdx (via SysWebhook (symbol, a top-level const object), sys_webhook (symbol, a field of const object enObjects; a field of const object esESObjects; a field of const object jaJPObjects; a field of const object zhCNObjects))
  • content/docs/permissions/system-context.mdx (via sys_webhook (symbol, a field of const object enObjects; a field of const object esESObjects; a field of const object jaJPObjects; a field of const object zhCNObjects))
  • content/docs/ui/apps.mdx (via sys_webhook (symbol, a field of const object enObjects; a field of const object esESObjects; a field of const object jaJPObjects; a field of const object zhCNObjects))

⛔ 3 release-owned page(s) also name something this change touched. These are read-only:

  • content/docs/releases/v16.mdx (via sys_webhook (symbol, a field of const object enObjects; a field of const object esESObjects; a field of const object jaJPObjects; a field of const object zhCNObjects))
  • content/docs/releases/v17/17-5.mdx (via sys_webhook (symbol, a field of const object enObjects; a field of const object esESObjects; a field of const object jaJPObjects; a field of const object zhCNObjects))
  • content/docs/releases/v18/18-0.mdx (via sys_webhook (symbol, a field of const object enObjects; a field of const object esESObjects; a field of const object jaJPObjects; a field of const object zhCNObjects))

content/docs/releases/ is RELEASE-OWNED (AGENTS.md "Documentation Guardrails"): release
notes are written centrally at release time, and a code PR that edits them is the exact PR
that guardrail exists to stop. They are still audited — read-only. If one of them is actually
wrong, file an issue or open a dedicated docs-only PR; do not edit it here.

What this run could not see
  • 1 name(s) were too generic to anchor anything (single lowercase words)
  • the SDK route bridge reached 58 of 210 client-bound route-ledger rows — the other 152 have no registrar path: tail to select them, so pages documenting THEIR client methods cannot appear above, on this or any run. Of those 152: 0 are remediable by widening that discovery convention (an in-repo file declares the path; the convention did not scan it); 55 are structural — on a ledger where NOT ONE row is declared in-repo, so no discovery change reaches them at any price; 97 are undecided (no in-repo declaration, on a ledger that has other in-repo registrars — absence and an unreadable spelling are not distinguishable here). The rows themselves: node scripts/docs-audit/affected-docs.mjs --bridge-coverage
  • a page that states a rule by its inputs shares no identifier with the emitter that implements the rule, so an emitter-only diff cannot list it — not on this run and not on any run. Measured on fix(driver-sql): emit varchar(maxLength) for a text field a declared index keys on #11430: content/docs/protocol/objectql/types.mdx documents the text-family column mapping by the ObjectQL type names it maps FROM (text / textarea / html) while the diff changed createColumn; it went unlisted, and it was the page that diff falsified, in four places. No shared token exists to detect this on, so a rule your change carries has to be re-read by hand in the pages that restate it.
  • a key NAME is not a key, so the hand re-read the line above prescribes can land on the wrong schema. The same spelling is authorable on one governed type and a [REMOVED] tombstone on another for each of active, aria, joins, objects, template, tools and version (censused on [finding] tools is a key on BOTH AgentSchema (tombstoned, dead) and SkillSchema (live, cloud-attested), so a name-based search attributes skill examples to the agent key — it produced a false stop-the-line alarm on PR #19059 #19093 over the liveness ledger's governed types, top-level keys); nothing in a search result distinguishes the two, so a grep hit on a LIVE example reads as evidence about the DEAD key. Measured on fix(spec): the agent.tools liveness row says dead — it claimed live on a key the schema tombstoned #19059: content/docs/ai/agents.mdx was reported as contradicting the agent.tools tombstone over its tools: example at :161, which is inside the defineSkill({ block opened at :155 — the page was already correct. Settle ownership by PARSING the value against both schemas, never by the name: that literal PASSES SkillSchema, and as an AgentSchema it FAILS at tools with the tombstone prescription. ⛔ These names are not the whole class — a key retired through a .strict() guidance map leaves no tombstone in the walked shape and none of them here (tool.category, live as AIToolDefinition.category).

Coarse fallback — 5 page(s) merely mention a changed package (the pre-#9192 predicate, kept for the deliberately-wide backstop): node scripts/docs-audit/affected-docs.mjs --json a7af1c19bd275d0d673c237324a66a08cc8ca13e → packageMentionDocs.

Which tree this was computed on

This run read content/docs from f51a99389028cd089986aa705e5cdee2bb4d8c0d — the merge of head 2b0c16069600eb46dc4a836017627878e827d981 into base a7af1c19bd275d0d673c237324a66a08cc8ca13e, which is what actions/checkout gives a pull_request run. Not the PR head.

A worktree cut from an older main holds a different content/docs, so re-deriving there can legitimately return a different list — that is a different tree, not a wrong row. To answer on the same tree:

# while this PR is open — GitHub drops the merge commit once it closes
git fetch origin f51a99389028cd089986aa705e5cdee2bb4d8c0d && git checkout f51a99389028cd089986aa705e5cdee2bb4d8c0d
# afterwards, rebuild it from the two parents, which stay fetchable
git fetch origin a7af1c19bd275d0d673c237324a66a08cc8ca13e 2b0c16069600eb46dc4a836017627878e827d981 && git checkout -B drift-repro a7af1c19bd275d0d673c237324a66a08cc8ca13e && git merge --no-ff 2b0c16069600eb46dc4a836017627878e827d981

node scripts/docs-audit/affected-docs.mjs --json a7af1c19bd275d0d673c237324a66a08cc8ca13e

⚠️ That checkout carried uncommitted changes, so the commit above does not fully identify what was read.

Advisory only, and a precision-first one (#9192): a page is listed because it names a
symbol, wire route or SDK method this diff touched — not because it mentions a changed
package. Each row says which anchor put it there, so a wrong row is reportable rather than
merely annoying. To re-verify, run the docs-accuracy-audit workflow scoped to these files:
node scripts/docs-audit/affected-docs.mjs a7af1c19bd275d0d673c237324a66a08cc8ca13e → pass the list as
args.docs, on the commit named under Which tree this was computed on.

@objectstack-fleet

Copy link
Copy Markdown
Contributor Author

domain:server#2 · os-sales · session_01L6bhgUCizoYWQVJWjhdR6F

维护者速读(席位终稿)

  • 改了什么:sys_webhook 对象的说明文字改为:一行是组织在 Studio 或经 API 编写的订阅;用 defineStack({ webhooks }) / defineWebhook() 声明的 webhook 从元数据注册表读取,不写行(ADR-0131 D2)。managed_by 的帮助文字同步改正(package 是已退役的 18.0 启动播种写下的旧副本,现在没有写入方;platform 为保留值)。四种语言的生成翻译一并更新。
  • 为什么改:旧文字仍写着「启动时物化成行」,这是已退役的模型,会误导 Setup 和 Studio 的读者。
  • 风险与回滚:纯文字,不改行为、不改枚举。回滚 = revert 本 PR。
  • 先看:packages/plugins/plugin-webhooks/src/sys-webhook.object.ts 的 description 和 managed_by。
  • 两分钟验证:node scripts/check-i18n-bundles.mjs(10 个包同步)。
  • 需要你做的:无。席位落地。

席位意见: ACCEPT。文字与 ADR-0131 D2 一致;英文由生成器写出,其余三种语言因生成器合并模式不覆盖已有译文而手工改正,再跑一次生成器保持不变。

席位核对

ACCEPT · head 2b0c16069600eb46dc4a836017627878e827d981 · 2026-10-29T23:38Z

  • 形态: 6 files, +34/−17: the object's description and managed_by help (and its customized help), the four generated translation bundles, one changeset. No packages/spec, no governed path; Tier S.
  • Clause-②: no, Metadata-protocol: none, patch. Text only; the managed_by enum is unchanged.
  • 前提实测: the retired sentences were on main at 34dc09b6; nothing writes managed_by: 'package' or 'platform' today (measured by the dev).
  • 抽查读数: the seat read the diff: no key added or dropped in any bundle; the file's top docblock was already correct and is unchanged.
  • 门禁 check-runs: 52 on this head: 37 success, 15 skipped, 0 other (read 2026-10-29T23:38Z); mergeable_state: clean. Derived gates 55 (54 exit 0, check:dual-build-cjs-loads carried by CI); check-i18n-bundles exit 0; plugin-webhooks 252/252.
  • 接受的偏差: the zh-CN, ja-JP and es-ES values were edited by hand because the generator's merge mode never replaces an existing translation (en was regenerated; a second generator run kept the edits); the customized field help in the same file was fixed too; the report signature line.
  • 范围外去向: none (no other copy of the retired sentence outside released CHANGELOG entries).
  • 散文面: the three texts checked against ADR-0131 D2 by the seat.
  • 落地条款: relay pr_ready + automerge_enable through the merge queue.

@objectstack-fleet
objectstack-fleet Bot marked this pull request as ready for review October 29, 2026 23:39
@objectstack-fleet
objectstack-fleet Bot added this pull request to the merge queue Oct 29, 2026
Merged via the queue into main with commit 2efd903 Oct 30, 2026
53 checks passed
@objectstack-fleet
objectstack-fleet Bot deleted the claude/issue-27607-sys-webhook-text branch October 30, 2026 00:16
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentation Improvements or additions to documentation size/s tooling

Projects

None yet

Development

Successfully merging this pull request may close these issues.

plugin-webhooks: the sys_webhook object still says declared webhooks are "materialized into rows on boot", which ADR-0131 D2 retired

1 participant