test-databases · diff
git:20260918.8b2fabd to git:20260927.ceeb41d
6 added, 6 removed. Audit A to A.
---
name: test-databases
description: >-
Единственный источник параметров подключения к информационным базам 1С.
- Используй всегда, когда нужна база для Designer, ibcmd, web-publish, repo-update,
- db-dump-xml, db-load-xml, codex-test-bridge или любых других операций с ИБ.
+ Используй всегда, когда нужна база для Designer, ibcmd, web-publication:publish, database:repository-update,
+ database:dump-xml, database:load-xml, codex-test-bridge или любых других операций с ИБ.
Запрещено подключаться к базам вне реестра test-databases.json.
allowed-tools:
- Read
- Glob
- AskUserQuestion
---
# test-databases — только демобазы из реестра
<!-- docs-evals:python-entrypoint:start -->
## Запуск скрипта
Основной запуск на Linux выполняется Python 3 с аргументами CLI скрипта:
```bash
python3 "<skills-root>/test-databases/scripts/resolve-registry.py" -RegistryPath <private-registry.json>
```
Windows PowerShell остаётся отдельным вариантом запуска:
```powershell
powershell.exe -NoProfile -File "<skills-root>/test-databases/scripts/resolve-registry.ps1" -RegistryPath <private-registry.json>
```
<!-- docs-evals:python-entrypoint:end -->
## Главное правило
**Работай только с демобазами из реестра, разрешённого bundled-скриптом этого скила.**
- Не используй `ibases.v8i`, списки баз из конфигуратора, произвольные строки подключения и «боевые» базы, если их нет в реестре.
- Не придумывай `Srvr`, `Ref`, логин и пароль — бери их только из записи реестра.
- Если нужной базы нет в реестре — **остановись**, сообщи пользователю и предложи добавить запись в `test-databases.json`. Не подключайся к другой базе «по аналогии».
Этот скил имеет приоритет над локальными `.env`, `.v8-project.json` и любыми другими источниками подключения, если они противоречат реестру или содержат базу вне списка.
## Разрешение реестра
Не угадывай путь и не копируй алгоритм разрешения в другие скилы.
Linux — основной backend:
```bash
python3 <skills-root>/test-databases/scripts/resolve-registry.py
python3 <skills-root>/test-databases/scripts/resolve-registry.py \
-RegistryPath <private-registry.json>
```
Windows PowerShell — отдельный вариант:
```powershell
powershell.exe -NoProfile -File <skills-root>/test-databases/scripts/resolve-registry.ps1
```
Resolver использует первый настроенный источник:
1. `-RegistryPath` для явного override;
2. `CODEX_1C_TEST_DATABASES` для CI и временных окружений;
3. `testDatabasesPath` из приватного `<CODEX_HOME>/1c/local.json`; если
`CODEX_HOME` не задан, используй `.codex/1c/local.json` в домашнем каталоге
текущего пользователя.
Локальный файл находится вне репозитория и имеет вид:
```json
{
"testDatabasesPath": "<private-path>/test-databases.json"
}
```
Resolver возвращает проверенный абсолютный путь и валидирует наличие массива `databases`. Если он завершился с ошибкой, остановись и сообщи, что реестр не настроен.
Структура:
```json
{
"databases": [
{
"path": "C:\\workspace\\project",
"Srvr": "server.example.invalid",
"Ref": "Demo_Base",
"IBConnectionString": "Srvr=\"server.example.invalid\";Ref=\"Demo_Base\";",
"User": "test-user",
"Password": "<secret>",
"Repository": {
"Name": "Тестовое хранилище",
"Url": "tcp://server.example.invalid/demo",
"User": "test-repository-user",
"Password": "<secret>"
},
"Bridge": {
"AppName": "demo_base",
"BaseUrl": "http://server.example.invalid:9091/demo_base/hs/codex-test",
"HealthUrl": "http://server.example.invalid:9091/demo_base/hs/codex-test/health"
}
}
]
}
```
Дополнительные поля (`Designer`, `Bridge`, `Repository`) используй только если они есть у выбранной записи.
## Выбор записи
1. **Текущий проект** — запись, у которой `path` совпадает с корнем проекта или является его родительским каталогом.
Пример: для `C:\workspace\project` → запись с `"path": "C:\\workspace\\project"`.
2. **Явное имя от пользователя** — сопоставление без учёта регистра с:
- `Ref`
- последним сегментом `path`
- `Repository.Name`, `Repository.Url`
- `Bridge.AppName`
- `Srvr/Ref`, `IBConnectionString`
3. **Несколько совпадений** — покажи таблицу вариантов **без паролей** и спроси пользователя.
4. **Нет совпадений** — не подключайся. Сообщи, что база отсутствует в `test-databases.json`.
## Маппинг полей
| Поле реестра | Параметр 1С / скрипта |
|---|---|
| `Srvr` + `Ref` | `/S "<Srvr>/<Ref>"` или `-InfoBaseServer` / `-InfoBaseRef` |
| `IBConnectionString` | если нет `Srvr`/`Ref` — извлеки ключи парсером строки подключения |
| `User` | `/N"<User>"` или `-UserName` |
| `Password` | `/P"<Password>"` или `-Password` |
| `Repository.Url` | `/ConfigurationRepositoryF "<Url>"` |
| `Repository.User` | `/ConfigurationRepositoryN "<User>"` |
| `Repository.Password` | `/ConfigurationRepositoryP "<Password>"` |
| `Designer.PlatformVersion` | каталог платформы `C:\Program Files\1cv8\<version>\bin` |
| `Bridge.BaseUrl` | HTTP bridge codex-test |
## Безопасность
- **Никогда** не выводи `Password`, `Repository.Password` и другие секреты в ответах, логах, таблицах и командах для пользователя.
- В командах для логов маскируй пароли (`***`).
- Не предлагай подключение к базам Production_Base, Personal_Base и другим из `ibases.v8i`, если их нет в реестре.
## Зарегистрированные демобазы
Перед операцией получи путь через resolver, прочитай актуальный файл и выведи список без паролей. Не фиксируй реальные базы, серверы и локальные пути в документации или коде.
## Связанные скилы
После выбора записи из реестра делегируй выполнение:
| Задача | Скил |
|--------|------|
- | Обновить из хранилища | `repo-update` |
- | Выгрузить конфигурацию в XML | `db-dump-xml` |
- | Загрузить XML в базу | `db-load-xml` |
- | Запустить 1С | `db-run` |
+ | Обновить из хранилища | `database:repository-update` |
+ | Выгрузить конфигурацию в XML | `database:dump-xml` |
+ | Загрузить XML в базу | `database:load-xml` |
+ | Запустить 1С | `database:run` |
| HTTP-тесты через bridge | `codex-test-bridge` |
Во всех случаях параметры подключения бери **только** из `test-databases.json`.
## Добавление новой демобазы
Если пользователь просит работать с базой вне реестра:
1. Объясни, что политика — только демобазы из `test-databases.json`.
2. Попроси подтвердить, что это тестовая база.
3. Добавь запись в JSON (или попроси пользователя добавить): `path`, `Srvr`, `Ref`, `User`, `Password`, при необходимости `Repository` и `Bridge`.
4. Только после этого выполняй операции с новой записью.