Repository navigation
Commit 0715fac
liveness(webhook): a declared webhook's label and description are live on the Studio metadata list (#24972)
Closes #24900
Clause-②: no
## What this does
Re-grades a declared webhook's `label` and `description` from `dead` to
`live` in `packages/spec/liveness/webhook.json`. It records the reader
and producer the card asked for, and carries the re-grade to the one
test and the two prose sites that restated the old verdict.
The 2026-10-19 `dead` verdict measured only the Setup `sys_webhook`
list, which lost the declared webhook when the boot seeder retired
(ADR-0131 D2). A second surface reads the declared registry item itself
and was never cut.
- **Reader** (objectui, at the `.objectui-sha` pin `616df6598b42`):
`ResourceListPage.tsx#defaultColumns` (`webhook` registers no
`listColumns` and no `ListPage`, so `DefaultMetadataList` draws `label`
and `description` through `row.item[c.key]`), and
`QuickFind.tsx#MetadataQuickFind`. `webhook` has no registered preview
and no Setup catalog.
- **Producer** (measured by booting): `pnpm dev -- --fresh` on
`examples/app-showcase` at `223ae939bb`, with a probe `label` and
`description` authored on its declared webhook (reverted,
hash-verified), signed in as the dev admin. `GET /api/v1/meta/webhook`
answered 200, and its one item carried both probe values with
`_packageId: com.example.showcase`. `GET /api/v1/meta/types` lists
`webhook`, and that package has `scope: project`.
- **Not readers, checked:** in `plugin-webhooks`,
`auto-enqueuer.ts#projectDeclared` (delivery props only),
`redeliver-guard.ts#judgeDeclared` and `bindDeclaredWebhookNameGuard`
(name and switch only). In the runtime, `catalog-activation.ts`
`DECLARATION_LOOKUPS.webhook` (name, packageId). In the CLI, the
ownership port `declaredWebhooks.list` (name, packageId).
`organization-ownership-apply.ts#isSwitchOnlyEdit` compares a seeded row
with that row's own stored `definition_json`: a migration read of 18.0
data, not of the authored key.
This follows the `hook.label` and `email_template.label` rows, under the
designer-previews ruling (liveness README, "Designer previews count as
consumers"). For a display key, being shown to a human is the whole of
its claimed effect. No enforce-or-retire decision is owed.
## Files
- `packages/spec/liveness/webhook.json`: both rows are now `live`, with
`evidenceScope: cross-repo`, `evidence`, `producer` and `verifiedAt:
2026-10-20`. The `authorHint` is removed, the old note is kept as
HISTORY, and the file `_note` is corrected.
- `packages/spec/liveness/state-counts/webhook.md`: regenerated with
`gen:liveness-counts`; live/dead moves from 17/2 to 19/0.
- `packages/lint/src/lint-liveness-properties.test.ts`: the webhook case
reads the real ledger and now pins silence on a declared webhook that
authors every prop.
- `examples/app-showcase/src/automation/webhooks/index.ts` (comment
only) and `docs/qa/platform-checklist/areas/integration-system.json`
(source line): both now state the `live` grading and the Studio reader.
- `.changeset/24900-webhook-label-description-live.md`:
`@objectstack/spec` patch. The spec package ships `liveness/` in
`files[]`, and the advisory `os lint` reads it from there, so this
change publishes: the `liveness-dead-property` warning on these two keys
stops. That is why there is no `skip-changeset`.
## Verification (head `5848b7dd99`)
- `pnpm --filter @objectstack/spec check:liveness`: exit 0, all-clear
line printed.
- `pnpm check:platform-checklist`: exit 0.
- Lint test `src/lint-liveness-properties.test.ts`: against the
re-graded ledger before the test edit, 1 failed / 102 passed (`warns on
a declared webhook's label and description only`, expected an empty list
to equal two findings). After the edit, 103 passed.
- `node scripts/pm/dispatch-gates.mjs --commands`: 78 families derived.
76 exited 0 and `--ran` reconciles 78 of 78. The two non-zero results,
`check:dts-closure` and `check:dual-build-cjs-loads`, are NOT MEASURED.
Reason: the local dists were built with `OS_SKIP_DTS=1`, so they hold no
`.d.ts` (`@objectstack/types`, triggers, verify), and this diff touches
no package source. CI builds with declarations.
- Families 1 to 70 ran at `bf94c93377`. The 8 changeset families the
changeset commit added ran at `5848b7dd99`. Between those heads only
`.changeset/` changed.
## Acceptance notes
- The security issue measured on the same boot is filed separately as
#24966: `GET /api/v1/meta/webhook` serves a declared webhook's authored
`secret` verbatim, because `webhook` has no metadata-type redactor.
Nothing in this PR touches it.
- `origin/main` was merged once (no rebase). Nothing it brought adds a
reader of these keys.
---
_Generated by [Claude
Code](https://claude.ai/code/session_01D6F9axfoPzR7t8G1J7Ytzz)_
---------
Co-authored-by: Claude <noreply@anthropic.com>1 parent f32d795 commit 0715fac
6 files changed
Lines changed: 35 additions & 26 deletions
File tree
- .changeset
- docs/qa/platform-checklist/areas
- examples/app-showcase/src/automation/webhooks
- packages
- lint/src
- spec/liveness
- state-counts
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
642 | 642 | | |
643 | 643 | | |
644 | 644 | | |
645 | | - | |
| 645 | + | |
646 | 646 | | |
647 | 647 | | |
648 | 648 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
4 | 4 | | |
5 | 5 | | |
6 | 6 | | |
7 | | - | |
8 | | - | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
9 | 11 | | |
10 | 12 | | |
11 | 13 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
251 | 251 | | |
252 | 252 | | |
253 | 253 | | |
254 | | - | |
255 | | - | |
256 | | - | |
257 | | - | |
| 254 | + | |
| 255 | + | |
| 256 | + | |
| 257 | + | |
| 258 | + | |
258 | 259 | | |
259 | | - | |
| 260 | + | |
260 | 261 | | |
261 | 262 | | |
262 | 263 | | |
| |||
272 | 273 | | |
273 | 274 | | |
274 | 275 | | |
275 | | - | |
276 | | - | |
277 | | - | |
278 | | - | |
279 | | - | |
280 | | - | |
281 | | - | |
282 | | - | |
| 276 | + | |
283 | 277 | | |
284 | 278 | | |
285 | 279 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
12 | 12 | | |
13 | 13 | | |
14 | 14 | | |
15 | | - | |
| 15 | + | |
0 commit comments