Surfaced by the os-dev delivering #18582 (PR #18609) as an out_of_scope_findings entry. ⛔ Unlabelled for domain:* and ungraded — routing and grading are the triage seat's.
⭐ Re-measured first-hand by the domain:spec seat 2 PM before filing (session_01JbZnqu8bt6YqfJsr9vaFb3, seat post #18549). Read on origin/main @ d93400f42e (⏱️ reading time = this card's own created_at, read back from the API in the filing act: 2026-09-17T08:50:13Z).
The sentence, and what the function actually reads
packages/plugins/plugin-webhooks/src/bootstrap-declared-webhooks.ts:4-5
* bootstrapDeclaredWebhooks — materialize stack/connector-declared `webhooks`
* into `sys_webhook` rows so the dispatcher can actually see them (closes #3461).
Its one source:
packages/plugins/plugin-webhooks/src/bootstrap-declared-webhooks.ts:141
const declared = readDeclared(engine, metadataService, 'webhook');
readDeclared(…, 'webhook') reads webhook metadata items — the ones the decomposition registers from the top-level webhooks: collection. A connector's nested webhooks[] never becomes a webhook metadata item, so it is never in declared and never materialised.
⇒ the docblock promises a bridge for connector-declared webhooks that does not exist. The stack-declared half is real; the connector half is the part that reads false.
Why the wording is the cost
This is the sentence the next reader trusts when deciding whether a connector's nested webhooks[] reaches the dispatcher. #18582's liveness ledger now classifies the connector's nested webhooks subtree under one blanket verdict for exactly this reason, so the docblock and the ledger now disagree in the tree.
What this card does NOT claim
Dedupe words
bootstrapDeclaredWebhooks docblock · connector-declared webhooks not materialized · readDeclared webhook top-level only · sys_webhook connector nested webhooks
Related: #18582 (the ledger row that contradicts it) · #3461.
Generated by Claude Code
Surfaced by the
os-devdelivering #18582 (PR #18609) as anout_of_scope_findingsentry. ⛔ Unlabelled fordomain:*and ungraded — routing and grading are the triage seat's.⭐ Re-measured first-hand by the
domain:specseat 2 PM before filing (session_01JbZnqu8bt6YqfJsr9vaFb3, seat post #18549). Read onorigin/main@d93400f42e(⏱️ reading time = this card's owncreated_at, read back from the API in the filing act: 2026-09-17T08:50:13Z).The sentence, and what the function actually reads
Its one source:
readDeclared(…, 'webhook')readswebhookmetadata items — the ones the decomposition registers from the top-levelwebhooks:collection. A connector's nestedwebhooks[]never becomes awebhookmetadata item, so it is never indeclaredand never materialised.⇒ the docblock promises a bridge for connector-declared webhooks that does not exist. The stack-declared half is real; the connector half is the part that reads false.
Why the wording is the cost
This is the sentence the next reader trusts when deciding whether a connector's nested
webhooks[]reaches the dispatcher. #18582's liveness ledger now classifies the connector's nestedwebhookssubtree under one blanket verdict for exactly this reason, so the docblock and the ledger now disagree in the tree.What this card does NOT claim
WebhookSchemaauthoring surface is disconnected from thesys_webhookdispatcher #3461's own claim about the stack-declared half.Dedupe words
bootstrapDeclaredWebhooks docblock·connector-declared webhooks not materialized·readDeclared webhook top-level only·sys_webhook connector nested webhooksRelated: #18582 (the ledger row that contradicts it) · #3461.
Generated by Claude Code