# AI-пилот: эксплуатация и пределы

1 октября 2026 года · протокол `ai.chat.v1`.

## Реализовано

Сайт принимает короткие вопросы вошедших пользователей, сохраняет их в отдельной постоянной очереди и показывает ответ. Одобренный нативный агент сам устанавливает HTTPS-соединения к сайту; входящий порт на компьютере не публикуется. Модельный API остаётся на `127.0.0.1:8788`. Агент не скачивает и не исполняет код из задания.

Таблицы `compute_nodes`, `compute_jobs`, `compute_usage` независимы от старых временных групп и истории сообщества. Секреты узлов хранятся на сервере в виде SHA-256. Управляющий ключ не передаётся в браузер. Протокол фиксирует базовую Qwen3-32B-MLX-4bit, revision `ceb4c4aad0164033af0c8dd37a0641693d0d6321`, без исследовательского адаптера.

Аренда 60 секунд, продление каждые 15 секунд, максимум 3 попытки, deadline 10 минут. Пользователь — до 5 задач за UTC-сутки и до 2 одновременно ожидающих; вся очередь — до 1 000 незавершённых задач; реестр — до 300 узлов. Один узел выполняет одно задание. Эти числа — ограничения, не измеренная производительность.

Успешное повторное `complete` с тем же результатом не создаёт вторую запись учёта. Истёкшая аренда, отменённое задание и старый результат после переназначения отклоняются. `compute_usage` отражает принятые сообщения одобренных операторов, **не проверенную аппаратную работу и не денежный баланс**.

## Запуск известного оператора

Оператор запускает уже проверенный локальный модельный сервер в его исходном проекте:

```
PYTHONDONTWRITEBYTECODE=1 .local/ai-venv/bin/python -u -m ai.server
```

Нельзя одновременно запускать training на той же GPU: существующий lock сохранён. Сеть не устанавливает модель автоматически. На другом Mac сначала подготовить поддерживаемый MLX-runtime, закреплённые веса и локальный сервер. Для CUDA/Windows нужен отдельный протестированный backend и преобразование/совместимые веса; текущий агент не заявляет такую поддержку.

В checkout нового сайта:

```
python3 native/worker.py enroll \
  --site https://triad-fabric-lab.arthurfaingold.chatgpt.site \
  --name 'Known GPU operator' --consent \
  --config .local/worker.json \
  --local-token-file '/absolute/path/to/triad-mesh/.local/ai/api-token'

python3 native/worker.py run --config .local/worker.json --minutes 30
```

`enroll` запрашивает управляющий ключ скрытым вводом и не сохраняет его. `worker.json` создаётся с режимом 600 и не коммитится. Модельный токен тоже должен быть файлом режима 600. Для рабочего сеанса владелец явно задаёт время, максимум 480 минут; автоматического старта/службы нет. Ctrl-C останавливает получение задач и отдаёт аренду. Уже начатая локальная генерация может завершиться: отмена сети не прерывает GPU-kernel. Её результат не принимается при отмене/истёкшей аренде.

## Настройки и управление

На сервере `TRIAD_COMPUTE_OPERATOR_KEY` — секрет не короче 40 символов; `TRIAD_COMPUTE_ENABLED=1` разрешает pilot admission и claim. Изменение на `0` прекращает новые задания и выдачу, существующие leases могут завершиться.

Управление по `Authorization: Bearer <operator key>`:

- `POST /api/compute/operator/nodes`: `{name, consent:true}`; выдаёт токен однократно, новый узел paused.
- `POST /api/compute/operator/revoke`: `{id}`; отзывает токен и возвращает текущую задачу в очередь.
- `POST /api/compute/operator/metrics`: `{}`; статусы узлов, количество задач по состоянию, принятые единицы. Текст запросов не выводится.

Узел по собственному токену: `node/heartbeat`, `node/claim`, `node/renew`, `node/complete`, `node/fail`. Нельзя менять вид задания, модель и revision. Для пользовательских операций требуется доверенная идентичность Sites; прямой клиентский `userId` не принимается. Локальный preview использует фиксированного тестового пользователя и не включается в production Worker.

## Приватность, срок хранения и журнал

Узел видит запрос в открытом виде. TLS не скрывает данные от владельца оборудования. В пилоте допускаются только известные операторы и запросы без конфиденциальных данных. Запросы не добавляются в training; API не имеет shell-tools.

После успешного ответа payload удаляется. При отмене payload и сохранённый ответ очищаются. Строки задания доступны не более 24 часов; физическое удаление выполняется ограниченными пачками при работе очереди/просмотре аккаунта/операторской проверке. При простое сервиса физическое удаление может ждать следующего обращения. Агрегаты учёта без текста хранятся до 30 дней с тем же механизмом очистки. Резервные копии базы и копии у оператора требуют отдельной политики; отмена не возвращает уже раскрытые данные.

В ошибке возвращается случайный trace; сервер пишет только тип ошибки и trace, без текста, bearer-токенов и содержимого ответа. Для production нужны централизованные метрики/алерты, автоматическое обслуживание retention, backup/recovery и обучение операторов.

## Верификация и масштаб

Проверка результата — pinned model, schema, токен и действующая аренда. Она не подтверждает правильность ответа и не доказывает фактический запуск модели злоумышленником. Поэтому оплаты выключены. Недоверенные операторы требуют отдельного протокола проверки и предметной оценки угроз.

Запросы к очереди атомарны, индексированы и не хранят всю сеть одним blob. D1-пилот надо нагрузочно проверить на облаке. Локальный SQLite-тест с фиктивными исполнителями проверяет протокол, а не GPU-throughput. При переходе за пределы пилота нужны региональные shards, брокер событий, отдельные артефакты в object storage, API для заказчиков и финансовый ledger. Не менять лимит 300 на 40 000 000 как способ масштабирования.

Сценарии приёмки: конкурирующие claim, утрата lease, повторный complete, конфликт результата, отмена во время генерации, отзыв оператора, переполнение квоты, отсутствие GPU, рестарт gateway и базы. После этих проверок на нескольких физических машинах — пилот 7–30 дней и один оплачиваемый workload с заранее согласованными условиями.
