Skip to content

feat(app-create): seed placement size from the slot's registry default [BEX-461] - #92

Merged
piyushsarin-sib merged 4 commits into
mainfrom
feat/bex-461-seed-default-size-main
Sep 2, 2026
Merged

feat(app-create): seed placement size from the slot's registry default [BEX-461]#92
piyushsarin-sib merged 4 commits into
mainfrom
feat/bex-461-seed-default-size-main

Conversation

@piyushsarin-sib

Copy link
Copy Markdown
Collaborator

Jira: BEX-461 · Epic: BEX-211

What

The registry's per-slot default card size becomes a create-time seed, the same mechanism context already uses: brevo app create reads default_size off the picked registry row (GET /v3/app-store/surface-points) and writes it into the authored entry's size — explicit in app-config.json, editable, and the entry's own value is what upload validates and the platform serves. No manifest change, no kit fallback read, no cacheSchemaVersion bump.

  • SurfacePointRow.default_size (typed, nullable) — flows through the existing row normalization untouched.
  • buildSurfacePointList gains sizeFor (per-row, exactly like contextFor); a slot with no default writes no size key, so behavior is unchanged wherever the registry declares nothing.
  • sanitizeSeededSize: a server predating the field, or echoing a blank/malformed shape, degrades to "no seed" rather than authoring a value validateUiApp refuses in the very flow that wrote it.
  • Still no size prompt (D2) — the registry default is the platform's answer to the question the flow deliberately doesn't ask.
  • Docs (SKILL.md/AGENTS.md) + patch changeset. 1414 tests green.

Based directly on main

This ships independently of the iframe-extension-authoring work (PR #87) — that feature is being deferred, not dropped, so this PR is cherry-picked cleanly off main rather than stacked on it. Superseded PR #91 (which was stacked on #87) is closed in favor of this one.

🤖 Generated with Claude Code

…t [BEX-461]

The registry default card size (extension_points metadata.default_size,
served as default_size on GET /cli/surface-points) becomes a CREATE-TIME
seed, the same mechanism as context/default_context_field: written
explicitly into the entry's size, where the partner can see and edit it.
The entry's own value is what upload validates and the platform serves —
no manifest change, no kit fallback, no cacheSchemaVersion bump.

- SurfacePointRow gains default_size (typed, nullable).
- buildSurfacePointList takes sizeFor (per-row, like contextFor);
  sanitizeSeededSize degrades a blank/malformed served default to no
  seed rather than authoring a value validateUiApp then refuses.
- No size prompt, unchanged (D2).
- Tests: seeded from the picked row, absent when the row declares none,
  malformed default dropped. Docs (SKILL.md/AGENTS.md) + changeset.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Tribhuvan14
Tribhuvan14 previously approved these changes Sep 2, 2026

@Tribhuvan14 Tribhuvan14 left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM

Adds a "UI apps" section explaining what brevo app create's interactive
prompt supports today (actionLink placements) and the fields each entry
carries, so users know what's actually available before reading the
full CLI reference.
@sonarqubecloud

sonarqubecloud Bot commented Sep 2, 2026

Copy link
Copy Markdown

@piyushsarin-sib
piyushsarin-sib merged commit 6a840d0 into main Sep 2, 2026
5 checks passed
@piyushsarin-sib
piyushsarin-sib deleted the feat/bex-461-seed-default-size-main branch September 2, 2026 09:48
piyushsarin-sib added a commit that referenced this pull request Sep 3, 2026
…and size seeding

Rebase fallout from #92 (registry default_size seeding) and #97
(non-interactive actionLink UI creation) landing on main first:

- resolveUiAppOrRedirectUris threads the distribution answer through to
  resolveUiApp, which gates the Iframe choice (private-only). The
  non-interactive path deliberately doesn't take it — that route is
  actionLink-only by design, so its buildSurfacePointList call pins
  urlField: 'redirect_link'.
- buildSurfacePointList carries both #92's sizeFor and this branch's
  urlField/url; its unit tests updated to the merged signature.
- Agent docs merged: the non-interactive flags (#97) and the Iframe
  choice documented side by side, both noting the non-interactive routes
  stay actionLink-only.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants