vanessa-authoring

$npx mdskill add SteelMorgan/1c-agent-based-dev-framework/vanessa-authoring

Creates and updates Vanessa Automation feature scenarios from project requirements, focusing on authoring rather than execution.

  • Helps write or refine scenario tests based on real project specifications and business cases.
  • Integrates with Vanessa Automation libraries and project scenarios, using vanessa-scenario-policy for requirements.
  • Follows a structured algorithm to define user context, find steps, and draft smoke scenarios.
  • Presents results as Gherkin-formatted feature files with context, steps, and tags for clarity.
SKILL.md
.github/skills/vanessa-authoringView on GitHub ↗
---
name: vanessa-authoring
description: Создание и доработка feature-сценариев Vanessa Automation по реальным требованиям проекта. Используй, когда нужно написать или обновить сценарный тест, а не просто запустить его.
---

# Авторинг сценариев Vanessa Automation

## Алгоритм написания

1. Определи источник требования — спецификация или бизнес-кейс (`vanessa-scenario-policy`).
2. Определи **под каким пользователем** выполняется сценарий (см. «Пользовательский контекст»).
3. Найди подходящие шаги: сначала в библиотеке Vanessa, затем в сценариях проекта.
4. Напиши один smoke-сценарий: открыть → одно действие → одно наблюдаемое следствие.
5. Если шага нет — пометь `# unknown_step_candidate`, не изобретай BSL-шаг.
6. Передай сценарий в `vanessa-run` для прогона.

---

## Анатомия feature-файла

```gherkin
# language: ru
# encoding: utf-8

@тег-фичи
Функциональность: Краткое название

Как <роль пользователя>
Я хочу <что сделать>
Чтобы <бизнес-польза>

Контекст:
    Дано Я запускаю тест-клиент для пользователя "Логин" с паролем "Пароль" или подключаю уже существующий

Сценарий: Название сценария
    Когда <действие>
    И    <следующее действие>
    Тогда <ожидаемый результат>
```

- `Контекст:` выполняется **перед каждым** сценарием файла.
- Ключевые слова шагов: `Дано`, `Когда`, `Тогда`, `И`, `Затем` — взаимозаменяемы синтаксически.
- Строки — в апострофах или кавычках; спецсимволы: `\'`, `\"`, `\\`.
- `Структура сценария:` + `Примеры:` — запускает сценарий по каждой строке таблицы параметров.
- `@tree` в заголовке — включает Turbo Gherkin: отступы Tab задают дерево шагов (пробелы недопустимы!).
- `@exportscenarios` — делает сценарий доступным как подсценарий из другого feature-файла.

---

## Пользовательский контекст

**MUST:** каждый сценарий выполняется под конкретным бизнес-пользователем, а не под admin/AgentAI.
Исключение — только если проверяемая функция доступна исключительно администратору.

**Как определить пользователя:**
1. Указан в описании задачи → использовать его.
2. Не указан → **спросить у человека** до написания сценария.

**Один пользователь** (в секции `Контекст:`):
```gherkin
Дано Я запускаю тест-клиент для пользователя "SalesManager" с паролем "123" или подключаю уже существующий
```

**Несколько пользователей** (в теле сценария — именованные TestClient):
```gherkin
И я подключаю TestClient "Менеджер" логин "SalesManager" пароль "123"
И я подключаю TestClient "Руководитель" логин "Director" пароль "456"

И я активизирую TestClient "Менеджер"
# ... шаги от имени менеджера ...

И я активизирую TestClient "Руководитель"
# ... шаги от имени руководителя ...

И я закрываю TestClient "Менеджер"
И я закрываю TestClient "Руководитель"
```

> Пароль — plain text в feature-файле. Тестовые пользователи должны иметь простой или пустой пароль (`пароль ""`).

---

## Поиск шагов

Библиотека: `/opt/onescript/2.0.0/lib/add/features/libraries/`

| Категория | Файл библиотеки |
|-----------|-----------------|
| Интерфейс, поля, кнопки, закладки | `UITestRunner/РаботаСИнтерфейсом.feature` |
| Таблицы (ТЧ) | `UITestRunner/РаботаСТаблицами.feature` |
| Состояние элементов формы | `UITestRunner/СостояниеЭлементаФормы.feature` |
| Флаги / переключатели | `UITestRunner/РаботаСФлагами.feature` |
| Сообщения пользователю | `UITestRunner/РаботаСОкномСообщений.feature` |
| Данные в БД, справочники | `Данные/ЗапросыКБД.feature` |
| Один / несколько TestClient | `UITestRunner/ОткрытьTestClient.feature`, `UITestRunner/ПодключениеНесколькихКлиентовТестирования.feature` |
| Условия, переменные | `Условие/Условие.feature` |
| Пауза | `Пауза/СделатьПаузу.feature` |

Шпаргалка частых шагов с синтаксисом → `references/steps-cheatsheet.md`.

**Полная библиотека:** `references/steps.json` (1116 шагов). **Не читай целиком** — используй `grep` для поиска по ключевым словам из задачи. Структура каждой записи:
- `ИмяШага` — пример вызова с параметрами
- `ОписаниеШага` — что делает шаг
- `ПолныйТипШага` — категория (UI, Прочее, Файлы, Переменные и т.д.)

---

## Теги

| Тег | Смысл |
|-----|-------|
| `@draft` / `@Draft@` | Исключить из прогона при запуске каталога |
| `@manual-data` | Сценарий зависит от данных, созданных вручную |
| `@regression` | Регрессионный тест |
| `@ui` | UI-тест через TestClient |
| `@tree` | Turbo Gherkin: отступы Tab = вложенность (пробелы запрещены) |
| `@exportscenarios` | Сценарий вызывается как подсценарий из другого файла |
| `@IgnoreOnXxx` | Системный: пропустить в указанном окружении |

---

## Антипаттерны

| Антипаттерн | Последствие |
|-------------|-------------|
| Сценарий под admin без обоснования | Не проверяет реальные права пользователя |
| Шаг проверяет внутреннюю деталь (вызов метода, прямой запрос в БД) | Хрупкий: нет наблюдаемого UI-поведения |
| Изобретённый шаг вместо поиска в библиотеке | Не резолвится при запуске |
| Длинный сценарий (7+ действий) | Сложно локализовать падение |
| Подготовка данных смешана с проверкой | Нарушает Given/Then разделение |

---
depends_on:
  - framework/rules/vanessa-scenario-policy.mdc
  - framework/rules/vanessa-test-isolation-policy.mdc
  - framework/rules/vanessa-tests-location.mdc
  - framework/rules/vanessa-run-loop.mdc
  - framework/skills/tool-usage/vanessa/vanessa-run/SKILL.md
  - framework/skills/tool-usage/vanessa/vanessa-diagnostics/SKILL.md
  - framework/skills/tool-usage/forms/form-element-mapping/SKILL.md
requires:
  - tools
---
More from SteelMorgan/1c-agent-based-dev-framework