feat(db-repo): правила захвата, нулевой шаг цикла и диагностика по отчёту субагента

Проверка навыка субагентом на сквозном сценарии вскрыла фактическую ошибку
в инструкции: реквизиты и табличные части перечислялись наравне с формами как
захватываемые объекты. Платформа их объектами не считает — список объектов
получается пустым, причём без секции «отсутствующие в конфигурации». Правишь
реквизит, табличную часть, измерение, ресурс или модуль — захватывай владельца;
формы, макеты и команды захватываются отдельно.

Сообщение «объект не найден» имеет три разные причины: опечатка, отставание
базы от хранилища и попытка захватить то, что объектом не является. Теперь
перечислены все три.

В цикл добавлен нулевой шаг — получение актуального состояния перед началом
работы: правки должны опираться на актуальные версии в том числе тех объектов,
которые не меняются, но используются. Загрузка и обновление БД слиты в один
шаг через -UpdateDB, поэтому цикл не удлинился.

Захват корня конфигурации с -WithChildren отклоняется: это захват всей
конфигурации, а выглядит как захват корня. Для всей конфигурации есть
однозначная форма — вызов без -Objects.

Текстовый отчёт печатается, а не только сохраняется в файл.

Схема repository и extensions[] описана в docs/v8-project-guide.md,
цикл под хранилищем — в docs/db-guide.md.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
Nick Shirokov
2026-08-23 12:40:44 +03:00
co-authored by Claude Opus 5
parent 478e7489f9
commit 3e816d3e12
5 changed files with 172 additions and 26 deletions
+26
View File
@@ -15,6 +15,7 @@
| `/db-update` | — | Обновление конфигурации БД |
| `/db-run` | — | Запуск 1С:Предприятие |
| `/db-load-git` | `.ps1` | Загрузка изменений из Git в базу |
| `/db-repo` | `.ps1` | Хранилище конфигурации: захват, помещение, получение изменений |
## Рабочий цикл
@@ -35,6 +36,31 @@
7. **Обновление**`/db-update` применить
8. **Запуск**`/db-run` открыть предприятие
## Работа с хранилищем конфигурации
База, подключённая к хранилищу, живёт по другим правилам, и это меняет весь цикл:
- **полная загрузка XML в неё невозможна** — платформа отвечает «текущая конфигурация помещена в
хранилище». Работает только `-Mode Partial`;
- частичная загрузка проходит **только по захваченным** объектам, иначе отказ с именем объекта;
- **новый объект требует захвата корня конфигурации** — без него частичная загрузка не пройдёт;
- любой команде конфигуратора нужны реквизиты хранилища. Их берут из `repository` записи базы
(см. [справочник .v8-project.json](v8-project-guide.md)), передавать в каждом вызове не нужно.
Цикл разработки под хранилищем:
```
/db-repo update → /db-repo lock → /db-dump-xml -Mode Partial → правки
/db-repo commit ← /db-load-xml -Mode Partial -UpdateDB
```
Выгрузка после захвата обязательна: захват и обновление молча подтягивают из хранилища свежие
версии объектов, и загрузка исходников, снятых раньше, откатит чужие изменения без единой ошибки.
`/db-repo` печатает список полученных объектов и готовую команду выгрузки.
Подробности — в SKILL.md навыка `/db-repo`.
## Формат `.v8-project.json`
Полное описание формата — в [справочнике .v8-project.json](v8-project-guide.md).
+48 -1
View File
@@ -27,7 +27,25 @@
"aliases": ["dev", "разработка"], // альтернативные имена
"branches": ["dev", "feature/*"], // привязка к Git-веткам
"configSrc": "src\\cf", // каталог XML-выгрузки конфигурации (см. структуру ниже)
"webUrl": "http://localhost:8081/dev" // URL веб-клиента (для /web-test)
"webUrl": "http://localhost:8081/dev", // URL веб-клиента (для /web-test)
// Хранилище конфигурации (для /db-repo). Без него навыки группы db-* не смогут
// работать с базой, подключённой к хранилищу: платформа не примет от них ни одной
// операции конфигуратора.
"repository": {
"path": "\\\\srv01\\repo\\MyApp", // каталог или tcp://srv01/MyApp
"user": "Ivanov",
"password": ""
},
// Расширения конфигурации: каталог исходников и, если есть, СВОЁ хранилище
"extensions": [
{
"name": "МоёРасширение",
"src": "src\\cfe\\МоёРасширение",
"repository": { "path": "\\\\srv01\\repo\\MyApp_Ext", "user": "Ivanov", "password": "" }
}
]
},
{
"id": "test",
@@ -85,6 +103,35 @@
| `editingAllowedCheck` | `"deny"`/`"warn"`/`"off"` | нет | Override реакции support-guard для этой базы (см. ниже) | Руками |
| `skillSuggester` | `"on"`/`"off"` | нет | Override подсказок навыков для этой базы (см. ниже) | Руками |
| `webUrl` | string | нет | URL веб-клиента для `/web-test` | Руками |
| `repository` | object | нет | Хранилище конфигурации: `path`, `user`, `password` (см. ниже) | Руками |
| `extensions` | array | нет | Расширения конфигурации: `name`, `src`, необязательное `repository` (см. ниже) | Руками |
### Хранилище конфигурации (`repository`, `extensions[]`)
База, подключённая к хранилищу конфигурации, не принимает **ни одной** операции конфигуратора без
реквизитов доступа к хранилищу — это касается не только `/db-repo`, но и `/db-load-xml`,
`/db-dump-xml`, `/db-update`, `/db-load-git`. Реквизиты берутся из `repository` записи базы, поэтому
передавать их в каждом вызове не нужно.
| Поле | Тип | Обяз. | Описание |
|------|-----|:-----:|----------|
| `repository.path` | string | да | Каталог хранилища или `tcp://<сервер>/<имя>` |
| `repository.user` | string | нет | Пользователь хранилища. **Не наследуется** от `user` базы — задаётся явно |
| `repository.password` | string | нет | Пароль пользователя хранилища |
У **расширения своё хранилище** со своим путём — одного `repository` на запись базы недостаточно:
| Поле | Тип | Обяз. | Описание |
|------|-----|:-----:|----------|
| `extensions[].name` | string | да | Имя расширения, как в конфигурации |
| `extensions[].src` | string | нет | Каталог XML-исходников расширения (напр. `src/cfe/<Имя>`) |
| `extensions[].repository` | object | нет | Хранилище расширения. Расширение без хранилища — обычный случай |
Пароль хранилища — такой же секрет, как `password` базы; `.v8-project.json` в `.gitignore`.
`/db-repo update` отказывается работать, если у базы не объявлено `repository` и реквизиты не
переданы явно: на базе, **не** подключённой к хранилищу, эта команда молча заменяет всю
конфигурацию содержимым хранилища и рапортует успех.
### Support-guard и `editingAllowedCheck`