Skip to content

docs(provenance): own issue #355 as a Unica defect - #502

Merged
zeegin merged 2 commits into
mainfrom
claude/issue-355-investigation-fix-1f1a9a
Aug 16, 2026
Merged

docs(provenance): own issue #355 as a Unica defect#502
zeegin merged 2 commits into
mainfrom
claude/issue-355-investigation-fix-1f1a9a

Conversation

@zeegin

@zeegin zeegin commented Aug 14, 2026

Copy link
Copy Markdown
Contributor

Разбор первопричины #355 и маршрут поставки. Дефект принадлежит Unica.

Unica поставляет v8-runner в составе плагина, поэтому для пользователя нет «дефекта раннера» — есть Unica, которая падает на первичной загрузке расширения. Задача закрывается поставкой исправленных байтов, а не ожиданием стороннего мейнтейнера.

Первопричина

v8-runner 0.5.1, коммит 7ce1b06 — тот же, что закреплён в plugins/unica/third-party/tools.lock.json. Файл src/use_cases/load_artifact.rs.

load перед применением артефакта всегда выполняет probe_compatibility. Для .cfe проба сравнивает ExtensionConfiguration <ИМЯ> с ExtensionDBConfiguration <ИМЯ>. Когда <ИМЯ> в информационной базе ещё нет, Конфигуратор завершается ненулевым кодом и пишет Конфигурация 'Расширение конфигурации' недоступна; classify_probe_failure возвращает Unknown, и Unknown превращается в AppError::Validation — отсюда код 2 и artifact_load_failed.

Складываются два независимых дефекта, и для воспроизведения нужны оба:

  1. to_ascii_lowercase() не понижает регистр кириллицы. Отображается только A-Z, поэтому "Расширение" не совпадает с литералом "расширен", и все русские ветки классификатора недостижимы, как только платформа пишет слово с заглавной буквы. Этот дефект шире задачи: он же гасит не поддерж на ветке расширения и поддерж/поставщик на ветке конфигурации.
  2. В словаре классификатора нет формулировки «недоступна». Он знает только не найден и не поддерж с английскими эквивалентами.

Если классифицировать состояние как NotSupported, то validate_probe_mode_compatibility(LoadMode::Load, NotSupported) возвращает None и загрузка идёт дальше — ровно ожидаемое поведение из задачи.

Почему правка кода Unica сценарий не снимает

  • Прямого пути к Конфигуратору или ibcmd у Unica нет: весь runtime идёт через v8-runner.
  • Отображение операции load в internal_adapters.rs — чистая трансляция path, mode, settings, extension в argv.
  • Проба безусловна, а LoadRequest в v8-runner не имеет флага, который её отключает.

Это ограничение маршрута поставки, а не основание передать задачу наружу.

Маршрут поставки

  1. unica-toolchain несёт патч поверх закреплённого коммита и поднимает buildRevision до 3; байты получают собственную идентичность v8-runner-nightly-master-build.3. sourceCommit не двигается — validate-source проверяет контрольную сумму патча и его применимость поверх него.
  2. Unica обновляет assetTag и контрольные суммы в tools.lock.json, добавляет раскрытие модификации в NOTICE.md и закрывает bug: первичная загрузка расширения блокируется проверкой совместимости #355.
  3. Патч удаляется из тулчейна, когда апстрим примет alkoleft/v8-runner-rust#54. Апстрим-PR — путь возврата к общей ветке, а не условие поставки.

Границы этого PR

Здесь только запись происхождения; поведение не меняется. Перезакрепление tools.lock.json и раскрытие модификации в NOTICE.md относятся к шагу 2 и лягут одним коммитом с ним: до публикации build.3 они описывали бы байты, которых ещё нет.

Доказательство исправления

Тест написан до правки и падал на закреплённом коммите (left: Unknown, right: NotSupported). Прогон cargo test --bin v8-runner на 7ce1b06: без правки 699 passed / 44 failed, с правкой 702 passed / 44 failed. Сорок четыре падения существовали до правки и относятся к окружению — на машине разбора нет платформы 1С; отсортированные списки имён упавших тестов до и после совпадают, регрессий нет. cargo fmt --check проходит, cargo clippy не добавляет предупреждений в изменённой области.

Живой сценарий на платформе не выполнялся: рабочей установки 1С на машине разбора нет.

Проверка

python -m unittest discover -s tests/ci — 713 тестов, OK (3 skipped).

Refs #355

- name the first cause of the blocked first extension load: v8-runner's
  probe classifier returns Unknown for Designer's "Конфигурация
  'Расширение конфигурации' недоступна"
- record the two combining defects: to_ascii_lowercase leaves Cyrillic
  untouched, and the classifier has no vocabulary for "недоступна"
- record why the Unica side is exhausted: argv pass-through only, the probe
  is unconditional, and the CLI has no flag to skip it
- link the upstream fix and state the re-pin condition for tools.lock.json
@coderabbitai

coderabbitai Bot commented Aug 14, 2026

Copy link
Copy Markdown

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: fe470df6-819f-4009-8e20-87fdfa5de20e

📥 Commits

Reviewing files that changed from the base of the PR and between dacb7ea and 831874f.

📒 Files selected for processing (1)
  • docs/provenance/reviews/2026-08-14-issue-355-extension-first-load-root-cause.md

📝 Walkthrough

Walkthrough

Добавлен документ с разбором причины сбоя первичной загрузки .cfe. Он связывает сбой с классификатором v8-runner, описывает роль Unica, результаты проверки и дальнейшее обновление бинаря.

Changes

Разбор первичной загрузки расширения

Layer / File(s) Summary
Путь сбоя загрузки
docs/provenance/reviews/2026-08-14-issue-355-extension-first-load-root-cause.md
Описаны compatibility probe для .cfe, вызов Конфигуратора и преобразование результата Unknown в AppError::Validation.
Дефекты классификатора и границы Unica
docs/provenance/reviews/2026-08-14-issue-355-extension-first-load-root-cause.md
Зафиксированы проблемы to_ascii_lowercase(), словаря ошибок и роль Unica как передатчика параметров load.
Проверка исправления и обновление ассетов
docs/provenance/reviews/2026-08-14-issue-355-extension-first-load-root-cause.md
Добавлены результаты тестов и шаги для обновления бинаря, commit, tag и контрольных сумм в tools.lock.json.

Estimated code review effort: 1 (Trivial) | ~5 minutes

Merge Risk: ⚪ Minimal · up to 83187

This PR records the issue root cause without changing product behavior or runtime code. It is merge-ready after normal review; the remaining documentation clarifications are non-blocking.

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Title check ⚠️ Warning The title misattributes issue #355 to Unica, while the document identifies a v8-runner defect and states that Unica has no blocking logic. Rename the title to identify the v8-runner root cause and clarify that the PR documents Unica's non-involvement.
✅ Passed checks (4 passed)
Check name Status Explanation
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch claude/issue-355-investigation-fix-1f1a9a

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@zeegin zeegin added this to the v0.12 milestone Aug 14, 2026
- state that Unica ships v8-runner, so a runner defect is a Unica defect for
  the user; the задача closes by shipping fixed bytes, not by waiting on a
  third-party maintainer
- keep the mechanical finding: a Unica code change cannot unblock the load,
  which is why delivery goes through a patched build
- record the delivery route: patch over the pinned commit in unica-toolchain,
  buildRevision 3, then re-pin tools.lock.json
- record the AGPL-3.0-only obligation the patched bytes carry and where the
  modified source is published
@zeegin zeegin changed the title docs(provenance): record issue #355 root cause in v8-runner docs(provenance): own issue #355 as a Unica defect Aug 14, 2026
@zeegin zeegin modified the milestones: v0.12, v0.13 Aug 14, 2026
@zeegin
zeegin merged commit 0005104 into main Aug 16, 2026
18 checks passed
@zeegin
zeegin deleted the claude/issue-355-investigation-fix-1f1a9a branch August 16, 2026 21:21
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant