Формат id
Один формат для всіх первинних id в Agentfy, Bonsite, Securify, Shiffty і Store Deputy (рішення власника 2026-10-15). Ця сторінка — еталон: решта чотири продукти копіюють звідси модуль, тест-вектор і таблицю. Повний опис — в англійській версії.
<prefix>-<adjective>-<noun>-<suffix>
user-calm-rivers-k8m4p2d7n9x3Нові id видаються лише в канонічному вигляді. Попередній формат кожного продукту приймається для вже виданих id (LEGACY_ID_FORMATS), але ніколи не генерується. Дані не переписуються.
| Частина | Правило |
|---|---|
prefix | Повне ім'я моделі в kebab-case, до 32 символів, може містити -. |
adjective | Слово з adjectives human-id 4.1.3 (200). |
noun | Слово з nouns human-id 4.1.3 (300). Без verb/adverb. |
suffix | Рівно 12 символів Crockford base32: 0123456789abcdefghjkmnpqrstvwxyz. 60 біт. |
| випадковість | crypto.randomBytes; слова — відбраковка за маскою, суфікс — customRandom з nanoid 3.3.11. |
| унікальність | Первинний ключ; при конфлікті — повтор до 5 разів. |
Порядок: adjective index(200) (1 байт, маска 255, < 200), noun index(300) (2 байти big-endian, маска 511, < 300), потім суфікс — nanoid customRandom (один запит 19 байт, читається з кінця, byte & 31, 12 символів).
Контрольний тест-вектор
Джерело віддає байти 0, 1, 2, … по черзі:
formatId('user', counter) === 'user-afraid-swans-nmkjhgfedcba'Попередні формати за продуктами
| Продукт | LEGACY_ID_FORMATS |
|---|---|
| Agentfy | <prefix>-<adjective>-<noun>-<verb>-<20 Crockford>; голий UUID у нижньому регістрі |
| Bonsite | 3 слова + 20 Crockford |
| Securify | 2 слова + 12 hex |
| Shiffty | 2 слова з власного словника + 6 Crockford |
| Store Deputy | 2 слова + 12 [a-z0-9] |