feat(mcp): customer_number on create_customer + Beta tags on webshop surfaces (#1677)
* feat(mcp): accept customer_number on gnubok_create_customer Parity with gnubok_update_customer: a customer number no longer needs a create-then-update two-step with two approvals. The staged params carry the trimmed number, commitCreateCustomer inserts it, and the payload-size ceiling is bumped 59.7K to 59.75K with a documented entry (the property has no description; name + maxLength are the whole contract). Requested by a user on Discord 2026-08-16. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * feat(ui): mark webshop integrations and orders tab as Beta WooCommerce and Shopify rows on the import page get a quiet Beta chip next to the title, and the webshop /orders sidebar item sets the existing betaBadge flag. Chip recipe matches the nav beta badge so Beta reads identically everywhere. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * fix(mcp): enforce customer_number invariants and show it on the approval card Consolidated resolution pass for PR #1677: - skeptic (correctness): maxLength 32 was advertisement-only on the create path; now enforced with a runtime guard in gnubok_create_customer execute (clean errors for non-string and >32) and a 400 guard in commitCreateCustomer, matching the web/v1 routes and commitUpdateCustomer. - skeptic (correctness): CustomerPreview never rendered the staged customer_number, leaving the approver blind to the new field; added a conditional Kundnr row. - CodeRabbit: reset the event bus in create-customer.test.ts beforeEach. - Tests cover both new guards at the tool and executor layers. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> --------- Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Fable 5
parent
387e1fb7f1
commit
cfdddb2d7e
@@ -2464,6 +2464,7 @@ export default function ImportPage() {
|
||||
<ImportRow
|
||||
title={t('woocommerce_title')}
|
||||
sub={t('woocommerce_description')}
|
||||
chip={<BetaChip label={t('badge_beta')} />}
|
||||
chips={<LogoChip src="/logos/woocommerce.svg" name="WooCommerce" />}
|
||||
disabled={woocommerceDisabled}
|
||||
onClick={() => setMode('woocommerce')}
|
||||
@@ -2473,6 +2474,7 @@ export default function ImportPage() {
|
||||
<ImportRow
|
||||
title={t('shopify_title')}
|
||||
sub={t('shopify_description')}
|
||||
chip={<BetaChip label={t('badge_beta')} />}
|
||||
chips={<LogoChip src="/logos/shopify.svg" name="Shopify" />}
|
||||
disabled={shopifyDisabled}
|
||||
onClick={() => setMode('shopify')}
|
||||
@@ -2776,6 +2778,16 @@ function ImportRow({
|
||||
)
|
||||
}
|
||||
|
||||
// Same quiet beta-badge recipe as the sidebar nav (DashboardNav renderBadge),
|
||||
// so "Beta" reads identically wherever it appears.
|
||||
function BetaChip({ label }: { label: string }) {
|
||||
return (
|
||||
<span className="rounded-full bg-muted/60 px-1.5 py-0.5 text-[9px] font-medium uppercase tracking-wider text-muted-foreground/70">
|
||||
{label}
|
||||
</span>
|
||||
)
|
||||
}
|
||||
|
||||
// Provider mark chip (same recipe as the pre-migration live page): tiny logo
|
||||
// on a quiet bordered chip, so integrations read as first-class brands.
|
||||
// `mono` is for light-on-transparent marks (Enable Banking): the marketing
|
||||
|
||||
Reference in New Issue
Block a user