---
name: onec-epf-no-1c-runtime
description: 1С .epf — деливерабл = собранный файл; что можно и нельзя проверить на dev-машине
metadata: 
  node_type: memory
  type: feedback
  originSessionId: f0fbb151-b1d8-434f-a308-af0c79f9f02a
  modified: 2026-08-14T19:20:50.456Z
---

При работе с внешними обработками 1С (.epf) деливерабл = **собранный .epf-файл** (юзер требует именно файл, а не «модуль + инструкция собрать вручную в Конфигураторе»).

Что МОЖНО проверять на dev-машине:
- **Структурно** (быстрый цикл): `epf.sh roundtrip` (pack→unpack→diff), semantic diff JSON-секций, `form_inspect`/`obj_edit attrs`/`form_cmd list`, сверка имён полей/типов с XML-конфигурацией `НоваяКонфа/`.
- **Сборкой настоящей платформой**: 1С 8.3.27 с лицензией УСТАНОВЛЕНА, есть **onec-build-agent** (launchd, порт 8788, batch-Конфигуратор) — собирает .epf из XML-выгрузки и отдаёт лог Конфигуратора = ground truth. См. скилл [[onec_epf_skill]] §6.

**ОБНОВЛЕНО 2026-07-30:** синтаксическую проверку МОЖНО делать платформой —
внешняя обработка оформляется объектом расширения и проверяется
`/CheckModules -Extension`. См. [[onec-testbench-skill]]. HTTP 200 от `/build`
по-прежнему ничего не доказывает.

**РЕШЕНО, 2026-08-14 поздний вечер — лицензия на mini активирована, полный конвейер работает.**
Владелец поставил официальный клиентский дистрибутив 8.3.27.2130 (`.pkg` с
releases.1c.ru, НЕ ARM64 — обычный x86_64 под Rosetta) и активировал лицензию
интерактивно: `1cv8 ENTERPRISE /F <инфобаза>` запущен по SSH (процесс виден
на удалённой машине), окно активации появилось на физическом/Screen Sharing
экране mini, владелец сам ввёл лицензию в диалоге. После этого `onec-build-agent`
(использует более старую платформу 8.3.27.1859) тоже сразу заработал —
активация лицензии на mini не привязана к конкретной patch-версии 8.3.27.x,
действует на все копии платформы сразу. `run_corpus.py`: **13/13** после этого
(один найденный по пути баг самого `mxl_check.py` — см. [[onec-testbench-skill]]
NFC/NFD — исправлен на обоих хостах). Инфобаза `ib_u1005954706` для интерактива
использовалась настоящая (с бизнес-конфигурацией), не пустая build-инфобаза.

**Устаревшая запись ниже (2026-08-14 вечер, ДО активации) — оставлено для истории причины.**
Сам `agent.py` (шапка файла, строка 4) прямо говорит: «Работает на MacBook (тут
лицензия 1С)» — лицензия привязана именно к этому MacBook. На mini `DESIGNER
/DumpExternalDataProcessorOrReportToFiles` (нужен `tb.py`/`run_corpus.py` для
выгрузки .epf/.erf в XML) падает: `"Не найдена лицензия. Не обнаружен ключ
защиты программы или полученная программная лицензия!"`. Т.е. РАБОТАЕТ на mini
только то, что не требует полной лицензии — подтверждено: `CREATEINFOBASE`
(пустая инфобаза уже создана), `/health`. НЕ работает: `/dump-epf`, вероятно и
`/CheckModules` (L1-компиляция в testbench) — не проверялось после находки,
дальше тестировать бессмысленно без решения вопроса лицензии. Тип лицензии
(программная/HASP/сетевая) не выяснялся — решение (переактивировать на mini,
получить вторую лицензию, или отказаться от идеи полного стенда на mini) — за
пользователем, я не пытаюсь и не должен пытаться обходить лицензионную защиту.

**ОБНОВЛЕНО 2026-08-14 днём (частично устарело выводом выше) — сборщик на mini ОЖИВЛЁН, но НЕ полностью РАБОТАЕТ.**
Пользователь сам поставил 1С на mini и попросил «подкинуть остальные инструменты» для
сборки 1С-разработок с телефона (Android-desktop, Termux/proot-distro/XFCE, без root).
Симлинк `/opt/1cv8 -> ~/opt/1cv8` (владелец создал сам, sudo). Платформа
`~/opt/1cv8/8.3.27.1859`. Агент `com.cebers.onec-build-agent` (launchd, `KeepAlive=true`,
env `ONEC_AGENT_DATA=/Volumes/Ext/Services/onec-build-agent`, `ONEC_AGENT_PORT=8789`,
`ONEC_V8_DIR=/opt/1cv8/8.3.27.1859`) снова включён, слушает **127.0.0.1:8789 только**
(снаружи недоступен даже по Tailscale — вызывать по SSH и выполнять локально на mini).
Инфобаза `/Volumes/Ext/Services/onec-build-agent/ib/1Cv8.1CD` создана и валидна. Скиллы
`1c-testbench`/`1c-epf` синхронизированы на mini в `~/.claude/skills/` (rsync с MacBook —
если правишь инструменты на MacBook, повтори rsync, иначе на mini останется старая копия).
Подробный workflow вызова с устройств без платформы (например с телефона) — см.
`~/.gemini/GEMINI.md` §5.1b. Известный пробел: на mini не подтверждён Java 21 по пути
`/opt/homebrew/opt/openjdk@21/bin/java` (нужен для BSL LS слоя [[onec-testbench-skill]]) —
слой платформенной компиляции работает, слой BSL LS линта может не работать до проверки.

**Историческая справка (устарело, оставлено для контекста порта/причины сбоя 2026-08-08):**
До 2026-08-14 сборщик на mini был выключен («1с вообще на mini нет и пока не нужно») —
до 05.08 он бился в петле, **227+ перезапусков каждые 10 секунд**, лог распух до 24 МБ.
Причина: дистрибутив 1С под macOS не переносим — в Mach-O бинаря `1cv8` зашит абсолютный
путь `/opt/1cv8/<версия>/wbase.dylib`, и dyld ищет только его; `DYLD_LIBRARY_PATH`/
`DYLD_FALLBACK_LIBRARY_PATH` не помогают. Решилось именно симлинком `/opt/1cv8`, который
владелец в итоге создал 2026-08-14. Отдельная ловушка при диагностике: `run_designer` в
`agent.py` зовёт платформу с `capture_output=True` и выбрасывает вывод при таймауте —
227 падений тогда не объяснили причину ни разу; также `ensure_ib()` имеет захардкоженный
120с `subprocess.run(timeout=...)`, который может истечь раньше, чем реально завершится
`CREATEINFOBASE` — не паниковать, дождаться и проверить файлы на диске, прежде чем считать
сборку сломанной.

Что НЕЛЬЗЯ:
- **Функционально протестировать** (отработает ли запрос, какие документы вернёт) — в базе только КОНФИГУРАЦИЯ, без производственных данных. Юзер прямо сказал: «1с запускать не надо для тестов, в ней нет все равно информации, только конфигурация».
- **GUI 1С** на macOS не работает (только batch).

**Why:** Ранее я ошибочно записал «1С на macOS не стартует / проверять только структурно» — неверно: платформа есть, batch-сборка/валидация возможна. «Не запускать» относится к функциональному тесту (нет данных) и к GUI, а не к компиляции/сборке.

**How to apply:** Правки v8unpack (ретайп ТЧ, кнопки) — структурный цикл достаточен. Где возможно (XML-источник) — финально валидируй сборкой через agent (лог = истина). Известный безобидный шум round-trip: распаковщик пере-выводит поле `name` реквизита формы из raw (напр. «Новое Юр.Лицо»→«Контрагент») — raw идентичен, .epf чист. Имя/синоним обработки правь в `header` (поля name/name2 — производные, не пакуются).
