* 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>