# Acceptance Criteria: Маркетплейс готовых ИИ-агентов

> **Дата:** 2026-08-26 | **Источник:** PRD + User Stories
> **Ревизия:** 2026-08-27 | **Основание:** `product/00-research-evidence-base.md` (27.08.2026, ~70 источников, ~60 карточек T1/T2) | **Версия:** 1.1

> **Ревизия 2026-08-27 — что изменилось и почему:**
> - Добавлен блок Guardrails (AC-32…AC-37): hard-limits, dry-run, локальное хранение токенов, readback — killer-фича безопасности (Находка 5, H: $80k штрафы, удаление писем, Волков «запреты в коде транспорта»; USTINOV «за что брать деньги?»).
> - Добавлен блок Installer + Doctor (AC-38…AC-44): npx-first + веб-фолбэк, `doctor --check`, зелёная галочка, time-to-first-task — барьер установки №1 (Находка 3, H/T1; ZIP 2.1.243 SIGSEGV).
> - Добавлен блок Версионирование (AC-45…AC-52): semver + pinned model + канал обновлений + rollback, запрет silent autoupdate — статика гниёт (Находка 9, H: Масленников 3000ч, Polza DeepSeek V4).
> - Связанные правки PRD: `product/13-deliver-prd.md` Rev 2026-08-27; Stories: `product/14-deliver-user-stories.md` Rev 2026-08-27 (US-13…US-15).

---

## Главная страница

| # | Критерий | Тип | Статус |
|---|---|---|---|
| AC-1 | Сайт загружается за <3 сек на мобильном (320px+) и десктопе | Performance | Assumed |
| AC-2 | Заголовок и подзаголовок отображаются корректно | Visual | Assumed |
| AC-3 | Блок «Как это работает» содержит≥3 шага | Content | Assumed |
| AC-4 | Блок «Популярные агенты» отображает≥3 карточки | Content | Assumed |
| AC-5 | Кнопка «Перейти в каталог» кликабельна и ведёт на каталог | Navigation | Assumed |
| AC-6 | Способ связи (Telegram/email) отображается | Content | Assumed |
| AC-7 | FAQ содержит≥5 вопросов | Content | Assumed |

---

## Каталог

| # | Критерий | Тип | Статус |
|---|---|---|---|
| AC-8 | Каталог отображает≥5 агентов | Content | Assumed |
| AC-9 | Каждая карточка содержит: название, описание, категорию, цену, платформы | Content | Assumed |
| AC-10 | Фильтр по задаче работает (результат обновляется) | Functional | Assumed |
| AC-11 | Фильтр по цене работает | Functional | Assumed |
| AC-12 | Фильтр по платформе работает | Functional | Assumed |
| AC-13 | Карточки кликабельны → переход на страницу агента | Navigation | Assumed |

---

## Карточка агента

| # | Критерий | Тип | Статус |
|---|---|---|---|
| AC-14 | Содержит: название, описание, возможности, ограничения, требования, цену, версию, дату обновления, автора | Content | Assumed |
| AC-15 | Ограничения описаны явно (не мелким шрифтом) | Content | Assumed |
| AC-16 | Выбор платформы (Codex/Claude Code/OpenCode) отображается | Functional | Assumed |
| AC-17 | Кнопка «Купить» видна и кликабельна | Functional | Assumed |
| AC-18 | После нажатия «Купить» происходит переход в Telegram с параметрами | Functional | Assumed |
| AC-19 | Для бесплатных агентов кнопка «Получить бесплатно» | Functional | Assumed |

---

## Telegram-бот

| # | Критерий | Тип | Статус |
|---|---|---|---|
| AC-20 | Бот получает ID агента и платформы из ссылки | Functional | Assumed |
| AC-21 | Бот показывает название, версию, цену | Functional | Assumed |
| AC-22 | Бот фиксирует заявку (пользователь, пакет, платформа, дата, статус) | Functional | Assumed |
| AC-23 | Администратор получает уведомление о заявке | Functional | Assumed |
| AC-24 | После подтверждения оплаты бот отправляет ZIP-архив | Functional | Assumed |
| AC-25 | Бесплатные архивы отправляются автоматически | Functional | Assumed |
| AC-26 | Бот принимает сообщения о проблемах | Functional | Assumed |
| AC-27 | Бот запрашивает: пакет, версию, платформу, ОС, шаг, ошибку | Functional | Assumed |

---

## Негативные критерии

| # | Критерий | Тип | Статус |
|---|---|---|---|
| AC-28 | Платные архивы НЕ доступны по публичным ссылкам | Security | Assumed |
| AC-29 | Бот НЕ отправляет архив до подтверждения оплаты | Security | Assumed |
| AC-30 | Сайт корректно отображается на≥320px | Responsive | Assumed |
| AC-31 | При ошибке установки пользователь получает описание + рекомендацию + ссылку на поддержку | UX | Assumed |

---

## Guardrails — безопасность внешних действий (US-13, FR-20…FR-22, NFR-6)

> Эвидэнс: Находка 5 (H, ≥4 источника T1/T2) — 34 штрафа ~$80k, массовое удаление писем, «тесты проходят» без запуска; Волков «запреты в коде транспорта»; No-code «что агент НЕ делает, human-in-the-loop».

| # | Критерий | Тип | Статус |
|---|---|---|---|
| AC-32 | Каждая команда, меняющая внешнюю систему (Директ, почта, CRM, платежи), по умолчанию выполняется как `dry-run`: вывод — список изменений, количество платных вызовов/сообщений, оценка стоимости в рублях, без фактической отправки | Functional / Negative | New (Находка 5) |
| AC-33 | Фактическое применение требует явного подтверждения: флаг `--apply` + интерактивный промпт «Подтвердите: да/нет» (в т.ч. при запуске из агента); без флага — только dry-run | Functional / Negative | New (Находка 5) |
| AC-34 | Hard-limits заданы в коде транспорта (не в промпте): `max_paid_calls`, `max_messages`, `max_cost_rub` на один прогон; превышение любого лимита → стоп с кодом `E_GUARDRAIL_LIMIT` и предложением повысить лимит; лимиты видны в `doctor --check` и в карточке агента | Functional / Negative | New (Находка 5: «запреты в коде транспорта») |
| AC-35 | Токены/ключи внешних систем хранятся локально (`~/.agent-kit/credentials`), не попадают в промпт, логи агента, вывод `doctor --check` и скриншоты; проверка — `doctor --check` показывает `tokens: ok/missing`, но не значения | Security | New (Находка 5) |
| AC-36 | Readback-проверка: перед отправкой кампании/удалением/списанием агент выводит diff («будет отправлено N сообщений / будет удалено N писем / будет потрачено N₽») и требует подтверждения; аудит-лог каждого внешнего вызова пишется в `~/.agent-kit/audit.log` | Functional | New (Находка 5) |
| AC-37 | Карточка агента честно раскрывает guardrails: отдельный блок «Что агент НЕ делает / Что меняет / Какие доступы запрашивает / Сколько стоит типовой прогон»; отсутствие блока → карточка не публикуется (гейт релиза) | Content / Negative | New (Находка 5, P0-3) |

---

## Installer + Doctor — поставка Agent Kit (US-14, FR-18…FR-19, NFR-4, NFR-7)

> Эвидэнс: Находка 3 (H, T1 ≥4) — терминал барьер №1, но не-программисты способны с installer+doctor (Кузнецов 13 агентов, Xcom-shop, Масленников 3000ч); PR anthropics/devcontainer-features#37; ZIP 2.1.243 SIGSEGV — npx-first + веб-фолбэк.

| # | Критерий | Тип | Статус |
|---|---|---|---|
| AC-38 | Установка выполняется одной командой `npx @smarket/agent-kit install <package>@<version>` без предварительного `npm install -g` / `pip install` / `git clone`; команда разворачивает Kit в `~/.claude/skills/` (или `~/.codex/...` / `~/.opencode/...`) | Functional | New (Находка 3; PR #37) |
| AC-39 | `npx @smarket/agent-kit doctor --check` проверяет Node/зависимости, наличие токенов, права записи, сеть/VPN и выводит «зелёную галочку: агент готов» или код ошибки `E_NODE`/`E_TOKEN`/`E_PERM`/`E_NETWORK` с текстом «что делать» и ссылкой на поддержку в боте | Functional | New (Находка 3) |
| AC-40 | При недоступности/падении npx (SIGSEGV, registry down, Node отсутствует) бот выдаёт веб-фолбэк — прямую ссылку на ZIP той же версии с инструкцией «распаковать + `doctor --check`» (npx-first + веб-фолбэк) | Functional / Negative | New (ZIP 2.1.243) |
| AC-41 | Вывод `doctor --check` можно отправить в Telegram-бота (`/doctor <вставка>` или форвард текста) — бот распознаёт код ошибки и отвечает шаблоном помощи; без кода — просит прислать скриншот | Functional | New (Находка 3: «пришли скриншот — подскажем») |
| AC-42 | Метрика поставки — `time-to-first-successful-task <15 мин` на чистой среде (не «скачал ZIP»); измеряется как время от `npx install` до первого успешного `dry-run` агента | Performance | New (Находка 3) |
| AC-43 | Все 15 сборок (5 пакетов × 3 платформы) зелёные на чистой среде (fresh VM/container без предустановок) до релиза; артефакт — `install_result` + `doctor_result.passed=true` по каждой сборке | Verification | New (Находка 3; ZIP 2.1.243) |
| AC-44 | Инструкция «Как установить» на сайте содержит только `npx …` + `doctor --check` + скрин зелёной галочки; упоминание `npm install -g` на первом шаге — считается дефектом инструкции | Content | New (Находка 3) |

---

## Версионирование и обновления (US-15, FR-23…FR-24, NFR-8)

> Эвидэнс: Находка 9 (H, T1/T2) — Масленников «экосистема быстрее человека» (3000ч), Polza DeepSeek V4 «встали сценарии, вырос счёт»; anticipation «обновления навсегда» (SkillPacks 1990₽); Устинов «за что брать деньги» → ответ «за канал обновлений»; WTP 1990₽ разово (Находка 4).

| # | Критерий | Тип | Статус |
|---|---|---|---|
| AC-45 | Каждая поставка помечена `kit_version` (semver) + `pinned_model` + `prompt_version` + `channel` (`stable`/`beta`); смена модели — только через новую версию Kit'а, silent-подмена запрещена | Functional | New (Находка 9) |
| AC-46 | `npx @smarket/agent-kit upgrade <package>` тянет последнюю `stable`; `upgrade <package>@<ver>` — точную версию; `beta` — только с флагом `--channel beta`; без флага beta не ставится | Functional | New (Находка 9) |
| AC-47 | Telegram-бот уведомляет покупателя о доступном обновлении: «Доступно <kit_version> для <package>: что изменилось, кнопка Обновить/Отложить» — не более 1 уведомления на версию; отложенное не спамит | Functional | New (Находка 9; SkillPacks «обновления навсегда») |
| AC-48 | Откат: `npx @smarket/agent-kit rollback <package>` возвращает `previous_version` + предыдущий `pinned_model`; поля `delivered_version`/`previous_version`/`available_version` хранятся в заявке (см. PRD Data Model) | Functional | New (ZIP 2.1.243) |
| AC-49 | Запрет silent autoupdate без явной команды пользователя — урок ZIP 2.1.243 (autoupdate без отката → SIGSEGV); обновление только по `upgrade`/`rollback` с подтверждением | Negative | New (ZIP 2.1.243) |
| AC-50 | Карточка агента на сайте показывает `kit_version`, `pinned_model`, дату обновления и ссылку «Что нового» (changelog) | Content | New (Находка 9) |
| AC-51 | Регресс-тест при смене модели перед публикацией: 15 сборок прогоняют smoke `dry-run` на новой `pinned_model`; при красном — публикация блокируется, покупатели получают «оставайтесь на <prev_ver>» (кейс Polza V4) | Verification / Negative | New (Находка 9) |
| AC-52 | Покупатель, купивший по WTP 1990₽ разово, получает фиксы и адаптации под новые модели без доплаты в рамках канала `stable`; платными могут быть только новые пакеты/фичи, не фиксы (ожидание «купил раз — получай фиксы») | Business | New (Находка 4; Находка 9; Устинов) |
