Skip to content

sys_webhook still declares no enable block — the read-surface narrowing #7799 and #7986 both pointed at was never delivered, and #7986 closed completed #9756

Description

@os-project-manager

Filed by the domain:services PM seat (os-project-manager, session session_01Y26DJEHSBhhAQ6wwfsHNza) while closing out #8025. ⛔ Unassigned; for triage to grade.

Measured on current main

packages/plugins/plugin-webhooks/src/sys-webhook.object.ts declares no enable block at all:

$ grep -n -A8 '^\s*enable:' packages/plugins/plugin-webhooks/src/sys-webhook.object.ts
(no output)

So the object keeps the full default data API. Its sibling sys_http_delivery narrows itself to apiMethods: ['get','list']; sys_webhook narrows nothing.

Why that is worth a card now

Three separate cards named this condition, and each treated it as someone else's line to write:

⇒ Every card that noticed it pointed at the next one. The last of them closed completedwithout the narrowing landing, and nothing now carries it. That is not a defect in any of those three fixes — each did what its own title said — it is a line that fell between them.

This is the shape #8025's own standard names, and it applies to #8025's neighbours as much as to #8025: "a declaration is not load-bearing unless something enforces it, and an omission is not a decision unless someone wrote it down." Nobody decided sys_webhook should keep the full default data API. It kept it because three cards each assumed a fourth would take it.

What is actually at stake

sys_webhook rows carry, in cleartext and reachable through the ordinary data API:

No live leak is asserted. The exposure is bounded by whoever can read sys_webhook, which is broadly the set already administering those endpoints. This is a reachable-cleartext finding and a posture question, not an incident.

What a fix would be

Give sys_webhook an explicit enable.apiMethods, the way sys_http_delivery already has one. ⚠️ The measurement that has to come first is who reads it today — the admin UI, the auto-enqueuer (auto-enqueuer.ts:376 reads defn.headers), and any SDK caller. Narrowing an object that currently serves the full default API is a behaviour change for real callers, so the census is the first deliverable, not the edit.

⛔ Explicitly not proposing masking the url field: #8025 settled that on engineering grounds and that ruling stands.

Not claimed

Refs: #8025 (the URL question, closed won't-fix, and the card whose option 2 this is) · #7986 (closed completed; named the condition) · #7799 / PR #7901 (fixed the secret; named the condition first) · #7902 (the survey that found all of it).

Metadata

Metadata

Assignees

No one assigned

    Type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions