feat(showcase): fill missing designer examples — hooks + AI tools (+ hook designer coverage)#1863
Merged
Conversation
The showcase had zero `hook` examples, so the Studio hook designer had
nothing to render. Add three hooks under src/hooks that together exercise the
hook surface and give Studio real metadata to display:
• showcase_normalize_task_title — beforeInsert/beforeUpdate, L2 JS body that
trims the task title (multi-event, mutate ctx.input).
• showcase_audit_task_completion — afterUpdate gated by a CEL condition,
async fire-and-forget with a retryPolicy, onError=log, capabilities=[log].
• showcase_warn_over_budget — afterUpdate on showcase_project, condition +
async log.
Wired via `defineStack({ hooks })`. Bodies read ctx.result/ctx.input (the real
After-hook context shape — there is no ctx.record) and are guarded so a fresh
seed runs them without throwing.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
The hook form's Execution section exposed async / onError / condition but not
`retryPolicy` ({ maxRetries, backoffMs }) or the top-level `timeout`, both of
which are real HookSchema properties — so the designer could not show or edit
them. Add a `retryPolicy` composite and a `timeout` number to the Execution
section so the hook designer covers the full schema.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
A persisted-DB restart re-fired the afterUpdate hooks during rollup recompute and `ctx.log(...)` threw "not a function" — the `log` capability binding is not reliably callable in the sandbox. Guard with `typeof ctx.log === 'function'` so the audit / over-budget hooks are no-ops when logging is unavailable instead of throwing. Verified: fresh seed and warm restart both boot with 0 hook errors. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…bound tool)
`FindProjectTool` was defined via defineTool but never imported into the config
or passed to defineStack, so the Studio tool designer showed zero instances and
the ProjectOps skill's `tools: ['showcase_find_project']` reference dangled.
Wire the tools via `defineStack({ tools })` and add a second, object-bound tool
(`showcase_summarize_project_tasks`, objectName + requiresConfirmation) so the
tool designer covers both the plain and object-scoped shapes. The skill now
references both.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
xuyushun441-sys
added a commit
that referenced
this pull request
Jun 21, 2026
…2128) Exposes the opt-in inline quick-create the objectui record picker supports: when no match exists, the user creates a record from the typed text via an optimistic dataSource.create with the display field. Best for simple objects whose only required field is the display field. - spec: add `allowCreate` to FieldSchema (flows through Field.lookup via FieldInput); classify it live in the liveness ledger (objectui consumer). - showcase: enable it on showcase_category.parent (Category requires only `name`, so quick-create succeeds) to demonstrate the flow end-to-end. - test: assert allowCreate survives FieldSchema.parse. Pairs with objectui #1863 (renderer quick-create reads allowCreate || allow_create). Co-authored-by: Jack Zhuang <277994282+os-zhuang@users.noreply.github.com> Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Found while testing the showcase package's metadata designers in Studio against an isolated showcase backend. Two designers had zero instances (nothing to render), plus a real designer coverage gap.
1.
hookexamples (0 → 3)examples/app-showcase/src/hooks/wired viadefineStack({ hooks }):showcase_normalize_task_title— beforeInsert/beforeUpdate, L2 JS body trimming the title (multi-event, mutatesctx.input).showcase_audit_task_completion— afterUpdate gated by a CELcondition,asyncwith aretryPolicy,onError: log,capabilities: [log].showcase_warn_over_budget— afterUpdate onshowcase_project.Bodies use the real After-hook context (
ctx.result/ctx.input— there is noctx.record) and are guarded withtypeof ctx.log === 'function'so both a fresh seed and a warm restart boot with 0 hook errors.2. AI
toolexamples (0 → 2)FindProjectToolwas defined viadefineToolbut never imported into the config or passed todefineStack, so the tool designer was empty and the ProjectOps skill'stools: ['showcase_find_project']reference dangled. Wired viadefineStack({ tools })and added a second object-bound tool (showcase_summarize_project_tasks—objectName+requiresConfirmation) so the designer covers both shapes; the skill now references both.3.
fix(spec)— complete hook designer coverageThe hook form's Execution section exposed
async/onError/conditionbut omittedretryPolicyand the top-leveltimeout(both realHookSchemaprops). Added aretryPolicycomposite +timeoutfield.Verification (browser, isolated showcase backend)
0 → 3; tool list0 → 2.[object Object]) and Execution: async / onError / Timeout / condition / Retry Policy → Max Retries / Backoff Ms.Note (out of scope, pre-existing)
The showcase's own
pnpm typecheckis already red onmain(not in the CI gate): theField.*builders type predicate params with the output type (z.infer), so the documented string shorthand forrequiredWhen/visibleWhen/readonlyWhenfails tsc even though it's valid at runtime. That's a spec type-ergonomics fix (usez.input), best done separately.🤖 Generated with Claude Code