You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Follow-up from #3461 / #3489 (bridge merged). Supersedes this issue's original framing — I opened it before finding that #3462 / #3485 already enrolled webhook in the liveness GOVERNED set. Corrected scope below.
packages/spec/liveness/webhook.json classifies all 16 authorable props as dead (+ authentication experimental), from the author's vantage point — correct when the bridge did not exist. Its _note pre-scripted the next step: "When the bridge lands, the mapped props flip to live (cite the materializer)."
webhook rides the SPEC_ONLY_SCHEMAS gate path, which only walks the schema for presence — it does not verify each prop's dead/live claim against runtime reality. So #3489's CI Spec property liveness check passed green while the ledger silently went stale. This must be updated by hand.
Scope
Flip mapped props dead → live in webhook.json, citing the materializer (packages/plugins/plugin-webhooks/src/bootstrap-declared-webhooks.ts): name, label, object, triggers, url, method, description, isActive, and the definition_json-carried secret / headers / timeoutMs the enqueuer reads. Drop the urlauthorWarn/authorHint (no longer a no-op).
ADR-0054 prove-it-runs: live props with proof must point at a packages/qa/dogfood/** test carrying a matching @proof: tag. The bridge's unit tests live in plugin-webhooks (bootstrap-declared-webhooks.test.ts) — a qa/dogfood webhook-materialization proof test is needed to satisfy the gate.
Reassess (optional, not required): whether to move webhook out of SPEC_ONLY_SCHEMAS and register it as a first-class metadata type now that the surface is live. Weigh the Studio-CRUD + create-seeds cost the [P2] Enroll dashboard / webhook / report in the spec liveness GOVERNED set #3462 note flagged; may still be worth deferring.
Follow-up from #3461 / #3489 (bridge merged). Supersedes this issue's original framing — I opened it before finding that #3462 / #3485 already enrolled
webhookin the livenessGOVERNEDset. Corrected scope below.Current state (verified on main)
webhookis already inGOVERNED(packages/spec/scripts/liveness/check-liveness.mts:57), enrolled by [P2] Enrolldashboard/webhook/reportin the spec liveness GOVERNED set #3462 / chore(spec,cli): enroll webhook in the liveness GOVERNED set (#3462) #3485 via aSPEC_ONLY_SCHEMASoverride — it is deliberately not a registered metadata type (registering turns on Studio CRUD +saveMetaItemoverlay + create-seeds, punted while the surface was disconnected).packages/spec/liveness/webhook.jsonclassifies all 16 authorable props asdead(+authenticationexperimental), from the author's vantage point — correct when the bridge did not exist. Its_notepre-scripted the next step: "When the bridge lands, the mapped props flip to live (cite the materializer)."WebhookSchemaauthoring surface is disconnected from thesys_webhookdispatcher #3461 option A landed in fix(webhooks): materialize stack-declared webhooks into the dispatcher (#3461) #3489:bootstrapDeclaredWebhooksmaterializes stack/connector-declared webhooks intosys_webhookrows (object → object_name,isActive → active, envelope →definition_json), dispatched byAutoEnqueuer. So the mapped props are now live.Why the liveness gate didn't catch the drift
webhookrides theSPEC_ONLY_SCHEMASgate path, which only walks the schema for presence — it does not verify each prop'sdead/liveclaim against runtime reality. So #3489's CISpec property livenesscheck passed green while the ledger silently went stale. This must be updated by hand.Scope
dead → liveinwebhook.json, citing the materializer (packages/plugins/plugin-webhooks/src/bootstrap-declared-webhooks.ts):name,label,object,triggers,url,method,description,isActive, and thedefinition_json-carriedsecret/headers/timeoutMsthe enqueuer reads. Drop theurlauthorWarn/authorHint(no longer a no-op).dead/experimental the props with no runtime sink —body,payloadFields,includeSession,retryPolicy,tags,authentication(delivery-layer, not executed; the [P0] Metadata property liveness audit: ~half of all spec properties are dead; a cluster of security props is parsed-but-unenforced #1878 domain). Record that boundary in the notes: fix(webhooks): materialize stack-declared webhooks into the dispatcher (#3461) #3489 fixed "the definition reaches the dispatcher", not "every field is executed".liveprops with proof must point at apackages/qa/dogfood/**test carrying a matching@proof:tag. The bridge's unit tests live inplugin-webhooks(bootstrap-declared-webhooks.test.ts) — a qa/dogfood webhook-materialization proof test is needed to satisfy the gate.check-liveness.mts:65-69("enforce-or-remove pending, [P2] Webhook: the specWebhookSchemaauthoring surface is disconnected from thesys_webhookdispatcher #3461") andwebhook.json_note(the whole "THE DISCONNECT / THE TRAP … all 16 props DEAD" narrative) — the disconnect is now closed by fix(webhooks): materialize stack-declared webhooks into the dispatcher (#3461) #3489.webhookout ofSPEC_ONLY_SCHEMASand register it as a first-class metadata type now that the surface is live. Weigh the Studio-CRUD + create-seeds cost the [P2] Enrolldashboard/webhook/reportin the spec liveness GOVERNED set #3462 note flagged; may still be worth deferring.Related
WebhookSchemaauthoring surface is disconnected from thesys_webhookdispatcher #3461 (parent)dashboard/webhook/reportin the spec liveness GOVERNED set #3462 (liveness enrollment via SPEC_ONLY)