diff --git a/.claude/skills/web-test/regress.md b/.claude/skills/web-test/regress.md
index 5f8e058e..806e14a7 100644
--- a/.claude/skills/web-test/regress.md
+++ b/.claude/skills/web-test/regress.md
@@ -5,9 +5,11 @@ Use this when the user asks to cover a 1C solution with automated regression tes
The runner is the same `run.mjs`. The mode is `test`:
```bash
-node $RUN test [url]
[flags]
+node $RUN test ... [flags]
```
+Positional args are test paths (files and/or dirs, multiple allowed). URL is NOT positional — it comes from `webtest.config.mjs`; override with `--url=`.
+
Tests live next to the project they cover (not inside the skill). Convention: `tests/` at the project root, with `_hooks.mjs` and `webtest.config.mjs` at the suite root. Tests are ES modules with `*.test.mjs` suffix.
## When to choose `test` over `exec`
@@ -362,6 +364,7 @@ Each `params` entry becomes its own test in the report. `{key}` placeholders in
node $RUN test tests// # full app suite
node $RUN test tests//03-goods-receipt/ # one feature folder
node $RUN test tests//02-counterparties/01-create.test.mjs # one file
+node $RUN test tests//02-x.test.mjs tests//05-y.test.mjs # several files
node $RUN test tests// --tags=smoke # by tag (intersection)
node $RUN test tests// --grep='накладн' # by name regex
node $RUN test tests// --bail --retry=1 # stop on first fail, allow 1 retry
diff --git a/docs/web-test-regression-spec.md b/docs/web-test-regression-spec.md
index 35a745a6..17494831 100644
--- a/docs/web-test-regression-spec.md
+++ b/docs/web-test-regression-spec.md
@@ -12,11 +12,14 @@
## 1. Командная строка
```
-node run.mjs test [url] [флаги]
+node run.mjs test ... [флаги]
```
+Позиционные аргументы — это пути к тестам (файлы `*.test.mjs` и/или каталоги), можно указать несколько: `node run.mjs test a.test.mjs b.test.mjs dir/`. Файлы из каталогов обходятся рекурсивно; итоговый набор дедуплицируется и сортируется (порядок по числовым префиксам `00-`, `01-`, … сохраняется независимо от порядка аргументов). Путь, которого нет на диске, → ранняя понятная ошибка (аргумент, похожий на URL, подскажет про `--url=`).
+
| Флаг | По умолчанию | Описание |
|------|-------------|----------|
+| `--url=URL` | (из конфига) | Переопределить базовый URL дефолтного контекста |
| `--tags=smoke,crud` | (все) | Фильтр тестов по тегам (пересечение) |
| `--grep=pattern` | (все) | Фильтр тестов по имени (регулярное выражение) |
| `--bail` | false | Остановиться при первом падении |
@@ -30,7 +33,7 @@ node run.mjs test [url] [флаги]
| `--record` | false | Записывать видео для каждого теста (mp4 в `--report-dir`) |
| `-- ` | — | Всё после `--` пробрасывается в `_hooks.mjs` как `hookArgs` (см. §6.1) |
-URL необязателен, если в каталоге тестов есть `webtest.config.mjs`. CLI URL переопределяет URL дефолтного контекста.
+URL не передаётся позиционно — он берётся из `webtest.config.mjs` в каталоге тестов, а флаг `--url=` переопределяет URL дефолтного контекста. `webtest.config.mjs` и `_hooks.mjs` резолвятся от каталога **первого** пути, поэтому перечисляемые файлы должны лежать в одной папке сьюта.
### Валидация CLI
@@ -876,6 +879,7 @@ tests/myapp/
|--------|-----------|
| Обход | Рекурсивный; файлы и каталоги, имя которых начинается на `_` или `.`, пропускаются |
| Шаблон имени | Только `*.test.mjs` |
+| Несколько путей | `node run.mjs test a.test.mjs b.test.mjs dir/` — наборы объединяются, дублируются и сортируются |
| Порядок | Сортировка по полному относительному пути (`sales/01` идёт до `warehouse/01`) |
| `file` в отчёте | `relative(testDir, file)` с разделителем `/`, например `sales/01-order-create.test.mjs` |
| Фильтр по пути с CLI | `node run.mjs test tests/myapp/sales/` запустит только подкаталог |
diff --git a/tests/web-test/README.md b/tests/web-test/README.md
index 3fc0226b..d0db42a9 100644
--- a/tests/web-test/README.md
+++ b/tests/web-test/README.md
@@ -11,6 +11,9 @@ node .claude/skills/web-test/scripts/run.mjs test tests/web-test/
# Один файл
node .claude/skills/web-test/scripts/run.mjs test tests/web-test/02-crud.test.mjs
+# Несколько файлов (позиционные = пути к тестам, можно сколько угодно)
+node .claude/skills/web-test/scripts/run.mjs test tests/web-test/04-selectvalue.test.mjs tests/web-test/11-report.test.mjs
+
# Несколько по фильтру тегов
node .claude/skills/web-test/scripts/run.mjs test tests/web-test/ --tags=table,smoke
@@ -18,7 +21,7 @@ node .claude/skills/web-test/scripts/run.mjs test tests/web-test/ --tags=table,s
node .claude/skills/web-test/scripts/run.mjs test tests/web-test/ --grep=multi
```
-URL не указываем — берётся из `webtest.config.mjs` (`contexts.a.url` = `http://localhost:9191/webtest-runner/ru_RU`).
+URL не передаём позиционно — берётся из `webtest.config.mjs` (`contexts.a.url` = `http://localhost:9191/webtest-runner/ru_RU`). Переопределить можно флагом `--url=`.
Exit code: 0 = все прошли, 1 = есть падения.
@@ -26,6 +29,7 @@ Exit code: 0 = все прошли, 1 = есть падения.
| Флаг | Описание |
|---|---|
+| `--url=URL` | Переопределить базовый URL (по умолчанию — из `webtest.config.mjs`) |
| `--tags=A,B` | Запустить только тесты с одним из тегов |
| `--grep=regex` | Фильтр по имени теста |
| `--bail` | Остановиться на первой ошибке |