- Shipped
- August 25, 2026 at 2:50 PM UTC
- Author
- kamo
- Commit
- c6efa1f
The create wizard is eleven steps long and the alias was only validated for FORMAT locally — whether anyone already held it was discovered when the form was submitted, at the end, on an organization that could not be created. Now the field says so while it is still on screen. Debounced at 400ms, so typing a word is one request. Each check carries a ticket and a stale reply is dropped: typing "acme" then "acme-2" must never settle on the verdict for "acme". The local rules — all digits, and the [a-z0-9-]{1,63} format — are checked before any request, and are deliberately the same rules SecurityService enforces on create. If they drift, the field says "available" for something create then refuses, which is the failure this removes. They are pure functions so a test can pin them, and the hook runs the tested ones. An unreachable check reads as "could not check" and lets the member carry on, rather than failing open to "available" and putting them back where they started. "Taken" names no organization: the wizard has no business telling one customer about another's. Both alias inputs are covered — the web-alias path and the plain one. 2943 tests and all 8 guards pass, i18n included. Copy landed in kamo-translation-dictionary first.