Доступ
Выдачи и приглашения на сайте.
Доступ
Доступ — рабочее пространство после входа для приглашений и выдач мажорных линий, которыми вы владеете. Выдача покрывает одну мажорную линию одного объекта. Следующий мажор сам не открывается.
Локальные копии на машине получателя могут остаться после отзыва. Отзыв действует только вперёд.
URL и кто их видит
| Проекция | URL | Кому видно |
|---|---|---|
| Human | /{locale}/access | вошедшему владельцу |
| Machine | /{locale}/ai/access | та же сессия |
| Accept | /{locale}/invitations/{invitation_id} | вошедшему приглашённому |
Нет сессии → login (принятие приглашения сохраняет id приглашения в
returnTo). Нет CSRF на Доступ → панель «сессия истекла». Доступ
в шапке и пункт меню аккаунта открывают одно и то же пространство.
Токен приглашения не в видимом URL. Он остаётся во вкладке (компонент принятия читает его оттуда). Если вкладка его потеряла, снова откройте ссылку из письма.
Зачем этот экран
На Доступе можно:
- пригласить по подтверждённому email на одну точную мажорную линию;
- выдать напрямую GitHub-имени или user id;
- увидеть ожидающие приглашения и активные выдачи;
- отозвать ожидающее приглашение или активную выдачу.
CLI нужен, когда требуются конверты --confirm, токены из переменных
окружения или автоматизация. На сайте те же решения, но формой.
Доступ не:
- выдаёт «все мои объекты»;
- продлевает выдачу на
major+1при релизе; - удаляет байты с диска получателя;
- заменяет
author_verified; - принимает приглашение на этой странице (это
/invitations/…).
Что на экране
Создать приглашение / прямую выдачу
| Поле | Подпись | Значения |
|---|---|---|
| Идентификатор получателя | Email получателя / Имя пользователя GitHub / ID пользователя | выбор kind |
| Значение | та же подпись, что выбранный kind | обязательно |
| Вид объекта | компонент / сетап | component или setup |
| Stable id | Stable id | ULID объекта |
| Major-линия | Major-линия | целое, по умолчанию 1 |
| Submit | Создать приглашение | неактивна, пока нет получателя и stable id |
Получатель-email создаёт приглашение. GitHub username и user id создают прямую выдачу.
Списки
Приглашения, пусто: Нет приглашений. Строка: id приглашения,
kind, stable_id, major, state, expires. Отозвать спрашивает:
Отзыв необратим вперёд. Локальные копии на устройствах могут остаться. Продолжить?
Grants, пусто: Нет grants. Строка: id выдачи, kind, stable_id,
major, id аккаунта получателя, revoked at. Отзыв — то же предупреждение
плюс необязательная Причина.
После успешного POST показывается mutation reference id, чтобы сверить логи. Это не секрет.
Принять приглашение
/{locale}/invitations/{invitation_id}:
| Элемент | Текст |
|---|---|
| Title | Принять приглашение |
| Subtitle | Токен виден только в этой вкладке, в обычной ссылке его нет. |
| Button | Принять приглашение |
| Missing token | В этой вкладке нет токена приглашения. Откройте ссылку из письма ещё раз. |
| Need sign-in | Войдите, прежде чем принимать приглашение. |
Human / Machine: machine Access перечисляет приглашения и выдачи
полями (invitation_id, object_kind, stable_id, major,
grantee_account_id). Machine accept печатает id приглашения.
Совпадающие команды CLI
ai-stp grant list --json
ai-stp grant invite --json
ai-stp grant direct --json
ai-stp grant accept --json
ai-stp grant invitation revoke --confirm --json
ai-stp grant revoke --confirm --json
ai-stp owner objects --json
grant list — близнец этой страницы. grant invite — email.
grant direct — явный идентификатор аккаунта. grant accept читает
токен из именованной переменной окружения — не ставьте токен в
командную строку и не вставляйте его в паспорт. Команды отзыва —
destructive и требуют --confirm.
Тупики
| Что видно | Что это значит | Что делать |
|---|---|---|
| Редирект на login | нет сессии | войти; returnTo сохранён |
| Session expired on Access | нет CSRF | войти снова |
| Создать приглашение неактивна | нет получателя или id | вставьте stable_id из Objects |
| Отзыв отменён | вы закрыли подтверждение | ничего не изменилось |
| Missing token on accept | вкладка потеряла секрет | снова откройте ссылку из письма |
| Could not accept | истекло, отозвано или чужой пользователь | попросите владельца пригласить снова |
| У получателя ещё есть файлы | отзыв только вперёд | ожидаемо; локальные байты остаются |
| Следующий мажор всё ещё закрыт | выдачи сами не продвигаются | пригласите major 2 явно |
| Kind typo 404 | только component/setup | исправьте kind объекта |
Не кладите токены приглашений, чужие email и причины доступа с секретами в текст каталога.
Email-приглашение против прямой выдачи
| Вид получателя | Действие сервера | Следующий шаг приглашённого |
|---|---|---|
| подтверждённый email | приглашение | открыть ссылку из письма → /invitations/{id} |
| GitHub username | прямая выдача | уже выдано; токена нет |
| user id | прямая выдача | уже выдано; токена нет |
Принятие в CLI читает токен из именованной переменной окружения. На сайте токен остаётся во вкладке. Оба отказывают токену в query string.
Major — целочисленная линия, не X.Y. Выдача 1 покрывает 1.0 и
1.4; 2.0 не покрывает. Копируйте stable_id из Objects; имя
отображения не сработает.
Machine Access — списки. Создание и отзыв остаются human POST с CSRF.
Связанные страницы
- Мои объекты — скопировать
stable_idи kind. - Вход — нужен до принятия.
- Жалобы — другая форма после входа.
- Выдачи CLI — флаги и
--confirm. - Владелец — какими мажорами вы реально владеете.
- Доверие и безопасность — доступ ≠ verified.
!!! warning "Мажорные линии"
Выдача на 1.x не становится выдачей на 2.x. Релиз нового
мажора — новое решение о доступе.