Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 7 additions & 0 deletions ARCHITECTURE.md
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,10 @@ This result grammar is governed by [ADR-0016](spec/decisions/0016-edinyy-executi
`v8project.yaml`, loaded into `AppConfig` and accepted by `config::validate`, is the main project configuration contract.
`source-set.name` is a stable identity for runtime state, generated directories, diagnostics, and source-set selection.
The supported `source-set[].type` contract and validation boundary are governed by [ADR-0017](spec/decisions/0017-v8project-yaml-source-set-kak-glavnyy-konfiguratsionnyy-kontrakt.md).
`source-set[].dependsOn` declares immediate graph edges by stable name. Config validation rejects
unknown/self/duplicate/unsupported edges, cycles, and extension graphs without exactly one
configuration root. Build orchestration resolves a stable topological order and expands scoped
selection to its transitive dependency closure according to [ADR-0023](spec/decisions/0023-zavisimosti-source-set-i-stabilnyy-poryadok-build.md).
`config init` must autodetect source-set types only from marker content: Designer `CONFIGURATION` / `EXTENSION` come from `Configuration.xml`, ordinary EDT `CONFIGURATION` / `EXTENSION` come from `.project` natures plus `DT-INF/PROJECT.PMF` (`EXTENSION` also requires `Base-Project`) and `src/Configuration/Configuration.mdo`, while EDT external `.epf`/`.erf` sources are discovered only through homogeneous aggregate roots of valid child projects classified by canonical `src/root.xml`, never through recursive descriptor scans, per-artifact fallback, or phantom source-set generation.

The typed config model now splits MCP knobs into active HTTP/session settings and shared execution guardrails:
Expand Down Expand Up @@ -113,6 +117,9 @@ Important staging note:

- `builder=DESIGNER` uses the existing `DesignerDsl`.
- `builder=IBCMD` uses `IbcmdDsl` with `config import/apply` for build and `config export` for dump; for EDT build the EDT export step still produces Designer-format files first, and for EDT dump the reverse path first updates an internal Designer snapshot before EDT import/publication.
- Dependency resolution happens above backend dispatch, so Designer, IBCMD and EDT-export build
paths consume the same ordered selection. A failed node prevents later selected nodes from
reaching platform DSL while preserving skipped steps in the existing result contract.
- Builder backends are expected to stay interchangeable for implemented builder scenarios. Functionality added for the Designer builder should also be available through the IBCMD builder, or the gap must be documented explicitly. Future Designer agent mode should be added behind the same use-case contract.
- Server infobase support is a target contract for all tools; file-only behavior must be documented as a current gap rather than treated as the permanent architecture.

Expand Down
6 changes: 4 additions & 2 deletions SKILL/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -70,10 +70,12 @@ v8-runner init
## Default Use-Case Routing

- Source files changed and infobase may be stale: run `v8-runner build`.
- Only one source-set changed: use commands that accept `--source-set <NAME>` instead of rebuilding or materializing everything.
- Only one source-set changed: use commands that accept `--source-set <NAME>`; for `build`, its
transitive `dependsOn` prerequisites are included automatically.
- Branch switch, rebase, large object moves, stale source-backed tool extension state, or suspicious incremental state: run `v8-runner build --full-rebuild`.
- Syntax check: inspect `format` and `builder`, then choose `syntax designer-modules`, `syntax designer-config`, or `syntax edt`.
- Behavior validation: run the relevant `v8-runner test ...` command; tests build first.
- Behavior validation: run the relevant `v8-runner test ...` command; tests build the full
dependency graph first and start the runner only after successful build completion.
- Missing local YAxUnit, Vanessa Automation, or onec-client-mcp-devkit setup: run
`v8-runner tools download yaxunit --sources`, `v8-runner tools download vanessa`, and
`v8-runner tools download client-mcp --sources` for source-backed setup. Omit
Expand Down
2 changes: 2 additions & 0 deletions SKILL/references/command-selection.md
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,8 @@ Limit build to one configured source-set:
v8-runner build --source-set <NAME>
```

This scoped build includes the selected source-set's transitive `dependsOn` prerequisites.

Recover after branch switches, rebases, large object moves, or suspicious incremental state:

```bash
Expand Down
5 changes: 5 additions & 0 deletions SKILL/references/config-and-backends.md
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,11 @@ settings before CLI overrides.

`source-set.name` is the stable identity for ordering, diagnostics, runtime contexts, generated directories, and command selection.
Relative `source-set.path` values are resolved from the directory containing the primary `v8project.yaml`.
Optional `source-set.dependsOn` lists immediate dependencies by name. A scoped
`build --source-set <NAME>` includes the transitive dependency closure and orders dependencies
before dependents. When any dependency is declared, every extension must resolve transitively to
exactly one configuration root; unknown, self, duplicate, external source-set targets and cycles are
validation errors.

Supported `source-set.type` values:

Expand Down
4 changes: 4 additions & 0 deletions SKILL/references/project-workflows.md
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,10 @@ v8-runner build --full-rebuild

`build` is a common workflow. For EDT projects it may export EDT sources to Designer files before applying them through the configured backend. For Designer projects it applies Designer sources directly through the configured backend.

When `source-set[].dependsOn` is configured, `build` runs dependencies before dependents.
`build --source-set <NAME>` includes the selected source-set's transitive prerequisites, so do not
manually issue separate builds for them. A failed prerequisite prevents dependent platform calls.

If `tools.client_mcp.extension` is configured, `build` also prepares that tool extension after the project source-set stage, including scoped `--source-set` builds. Source-backed tool extensions use their own change-detection state and are skipped when unchanged; use `build --full-rebuild` to force refresh. Do not add a tool extension as a project `source-set` or select it with `--source-set`.

## Syntax
Expand Down
4 changes: 3 additions & 1 deletion SKILL/references/testing.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
# Testing

Use tests when behavior matters. Test commands build first, so do not run a separate `build` unless the user specifically asked for a build-only diagnosis.
Use tests when behavior matters. Test commands build the full configured source-set graph first,
including `dependsOn` ordering, so do not run a separate `build` unless the user specifically
asked for a build-only diagnosis. A failed prerequisite prevents the test runner from starting.

## YaXUnit

Expand Down
14 changes: 9 additions & 5 deletions docs/CAPABILITIES.md
Original file line number Diff line number Diff line change
Expand Up @@ -170,9 +170,11 @@ v8-runner extensions [--name <SOURCE_SET>...]
v8-runner build [--source-set <NAME>] [--full-rebuild]
```

- Без `--source-set` обрабатывает все configured `source-set` в canonical order.
- С `--source-set` project stage анализирует и строит только указанный `source-set`; неизвестное
имя отклоняется как validation error.
- Без `--source-set` обрабатывает все configured `source-set`: при наличии `dependsOn` в stable
topological order, иначе в прежнем canonical order.
- С `--source-set` project stage строит выбранный `source-set` и транзитивное замыкание его
`dependsOn`; каждая зависимость выполняется один раз раньше dependent. Неизвестное имя
отклоняется как validation error.
- Для `DESIGNER` выбирает incremental, partial или full path по изменённым файлам выбранного scope.
- Для `EDT` сначала анализирует и экспортирует выбранные EDT `source-set`, затем грузит generated
Designer files выбранным backend.
Expand All @@ -186,7 +188,8 @@ v8-runner build [--source-set <NAME>] [--full-rebuild]
- `tools.client_mcp.extension` не является project `source-set`; `--source-set` выбирает только
project source-set.
- Не является атомарной multi-source-set операцией: ранние успешные шаги не откатываются, если
поздний шаг падает.
поздний шаг падает. После failure оставшиеся selected source-set отмечаются `skipped` и не
запускаются.

## Проверка и валидация

Expand All @@ -199,7 +202,8 @@ v8-runner test va
v8-runner test va --feature login --filter-tag @smoke
```

- Всегда сначала запускает `build`.
- Всегда сначала запускает полный `build`; при `dependsOn` prerequisite source-set загружаются
раньше dependent, а test runner запускается только после успешного завершения всего build graph.
- `test yaxunit module <NAME>` требует непустое имя модуля.
- `test va` использует профиль из `tests.va.profile`; `--feature`, `--filter-tag`,
`--ignore-tag` и `--scenario-filter` переопределяют соответствующие списки выбранного профиля
Expand Down
15 changes: 13 additions & 2 deletions docs/CONFIGURATION.md
Original file line number Diff line number Diff line change
Expand Up @@ -104,6 +104,7 @@ artifact без привязки к release tag.

- top-level app keys: `workPath`, `execution_timeout`, `format`, `builder`, `infobase`,
`source-set`, `build`, `tools`, `mcp`, `tests`;
- `source-set[]` использует camelCase key `dependsOn`;
- `build` использует `partialLoadThreshold`;
- `mcp.*` и `tests.*` используют `snake_case`;
- canonical key для EDT tool section: `tools.edt_cli`;
Expand Down Expand Up @@ -135,6 +136,8 @@ source-set:
- name: ext
type: EXTENSION
path: ext
dependsOn:
- main

build:
partialLoadThreshold: 20
Expand Down Expand Up @@ -339,6 +342,7 @@ Credentials самой информационной базы.
- `name`
- `type`
- `path`
- опциональный `dependsOn` — список имён непосредственных зависимостей

`path` задаётся относительно каталога primary `v8project.yaml`, если он не абсолютный.

Expand All @@ -353,6 +357,11 @@ Validation rules:

- `name` должен быть уникальным и безопасным path segment;
- `EXTENSION` требует хотя бы один `CONFIGURATION`, но external-only config допустим;
- `dependsOn` не может содержать неизвестное имя, текущий `source-set` или дубликат;
- dependency target должен иметь `type=CONFIGURATION` или `type=EXTENSION`;
- граф не может содержать циклы;
- если хотя бы один `dependsOn` задан, каждое `EXTENSION` должно транзитивно разрешаться ровно
в один `CONFIGURATION`; отсутствие или несколько configuration roots отклоняются;
- для `format=DESIGNER` ordinary source-set должен указывать на корректный Designer root;
- для `format=DESIGNER` external source-set должен быть aggregate root с top-level XML
descriptors matching declared `type`;
Expand All @@ -374,8 +383,10 @@ Validation rules:
Порог между partial и full load.

CLI selector `v8-runner build --source-set <name>` использует `source-set[].name` как stable
runtime identity и не добавляет отдельное поле конфигурации. Если selector не задан, `build`
обрабатывает все `source-set`.
runtime identity и не добавляет отдельное поле конфигурации. Если выбранный `source-set` имеет
`dependsOn`, `build` также включает его транзитивные зависимости и выполняет каждую ровно один
раз до dependent. Если selector не задан, `build` обрабатывает весь граф в stable topological
order; для конфигов без `dependsOn` сохраняется прежний canonical order.

### `tests`

Expand Down
14 changes: 11 additions & 3 deletions docs/DEEP_DIVE.md
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,11 @@ MCP DTO в одном слое.

Change detection выполняется on-demand во время build/export/load decision и не требует
background watcher. `build --source-set <NAME>` ограничивает анализ, export/load decision и
runtime snapshot commit только указанным source-set.
runtime snapshot commit выбранным source-set и транзитивным замыканием его `dependsOn`.

`dependsOn` задаёт directed acyclic graph по stable `source-set.name`. Resolver выполняет
dependencies раньше dependent, выбирая одновременно готовые nodes в прежнем canonical order.
Если `dependsOn` нигде не задан, старый порядок и single-source scoped build сохраняются.

## Пайплайн `build`

Expand All @@ -59,14 +63,18 @@ runtime snapshot commit только указанным source-set.
4. Load/apply generated files через `DESIGNER` или `IBCMD`.

Пайплайн намеренно не является атомарным across many `source-set`: поздний failure не откатывает
уже успешные ранние шаги.
уже успешные ранние шаги. `build` использует fail-fast policy: failure любого source-set (в том
числе dependency) останавливает platform execution для всех оставшихся selected nodes, включая
независимые. Они остаются в structured result как `skipped` с причиной
`aborted after previous failure`.

## Проверка и тесты

`test` и `syntax` проектируются как часть того же локального цикла, а не как отдельная
эксплуатационная подсистема.

- `test` всегда сначала делает `build`, затем запускает YaXUnit или Vanessa Automation.
- `test` всегда сначала делает полный dependency-aware `build`, затем запускает YaXUnit или
Vanessa Automation. Test runner не стартует, если prerequisite build graph завершился ошибкой.
- `syntax designer-*` работает только для `DESIGNER` source format.
- `syntax edt` использует EDT `validate` и привязан к `format=EDT`.
- Таймауты и interruption metadata должны проходить через общий command-level contract, а не
Expand Down
7 changes: 7 additions & 0 deletions docs/schemas/v8project.schema.json
Original file line number Diff line number Diff line change
Expand Up @@ -322,6 +322,13 @@
"SourceSetSchema": {
"additionalProperties": false,
"properties": {
"dependsOn": {
"description": "Names of immediate source-set dependencies.",
"items": {
"type": "string"
},
"type": "array"
},
"name": {
"description": "Source-set name used by CLI filters and diagnostics.",
"type": "string"
Expand Down
2 changes: 2 additions & 0 deletions examples/v8project.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,8 @@ source-set:
# - name: my-extension
# type: EXTENSION
# path: extensions/my-extension
# dependsOn:
# - main

# Build pipeline settings (optional)
build:
Expand Down
10 changes: 8 additions & 2 deletions spec/architecture/invariants.md
Original file line number Diff line number Diff line change
Expand Up @@ -41,8 +41,14 @@
14. `v8project.local.yaml` является optional local overlay рядом с primary config, применяется после `v8project.yaml` и до CLI overrides, не является самостоятельным `--config` entrypoint и не должен менять `source-set`, `format` или `builder`.
15. `basePath` не является public key в `v8project.yaml`; внутренний project base path считается равным каталогу primary config.
16. Tool extensions, включая `tools.client_mcp.extension`, не являются project `source-set`; их подготовка выполняется через общий механизм подготовки расширений на стадии `build`, а не на стадии `launch`.

См. [ADR-0017](../decisions/0017-v8project-yaml-source-set-kak-glavnyy-konfiguratsionnyy-kontrakt.md), [ADR-0018](../decisions/0018-perenesti-kontrakt-informatsionnoy-bazy-v-infobase.md), [ADR-0019](../decisions/0019-sozdavat-servernuyu-infobazu-cherez-ibcmd-pri-init-pri-otsutstvii.md), [ADR-0021](../decisions/0021-lokalnyy-overlay-config.md) и [ADR-0022](../decisions/0022-universalnyy-mehanizm-podgotovki-rasshireniy-i-client-mcp-extension.md).
17. `source-set[].dependsOn` задаёт immediate dependency edges по stable name; graph validation
выполняется до platform DSL, а build использует единый stable topological resolver для всех
backend paths.
18. Scoped `build --source-set <NAME>` включает transitive dependency closure; failure dependency
не допускает platform execution dependent, а result сохраняет оставшиеся nodes как skipped без
добавления отдельной requested/expanded metadata.

См. [ADR-0017](../decisions/0017-v8project-yaml-source-set-kak-glavnyy-konfiguratsionnyy-kontrakt.md), [ADR-0018](../decisions/0018-perenesti-kontrakt-informatsionnoy-bazy-v-infobase.md), [ADR-0019](../decisions/0019-sozdavat-servernuyu-infobazu-cherez-ibcmd-pri-init-pri-otsutstvii.md), [ADR-0021](../decisions/0021-lokalnyy-overlay-config.md), [ADR-0022](../decisions/0022-universalnyy-mehanizm-podgotovki-rasshireniy-i-client-mcp-extension.md) и [ADR-0023](../decisions/0023-zavisimosti-source-set-i-stabilnyy-poryadok-build.md).

## Workspace Lock

Expand Down
Loading