Skip to content

Latest commit

 

History

History
376 lines (303 loc) · 25 KB

File metadata and controls

376 lines (303 loc) · 25 KB

Задача: «Навести красоту»

Перестройка LARD в структуру «исходники отдельно, готовые продукты отдельно».

Отмечать выполненное прямо здесь: [ ] → [x].

Резервная копия перед началом: E:\Project Programming\VS CODE\lard-2026-08-19_22-13.rar (50.1 МБ) Комментарий архива: «Исходник который работал. До маштабной перестройки». Внутри всё, кроме node_modules — они восстанавливаются через npm install.


Целевая структура

LARD/
├─ task.md                     ← этот файл
├─ README.md
├─ docs/                       ← документация проекта
│  ├─ install.md               ← как запускать в разных IDE
│  └─ LARD.md                  ← чем форк отличается от signal
├─ source_dev/                 ← всё для разработки
│  ├─ core/                    ← ядро и всё основополагающее
│  │  ├─ src/                  ← сам пакет @lard/core
│  │  ├─ electron/             ← оболочка окна программы
│  │  ├─ tools_shell/          ← оболочка окна редакторов
│  │  ├─ scripts/              ← служебные скрипты, в том числе сборка
│  │  ├─ cloud_functions/      ← облачные функции
│  │  └─ packages/             ← библиотеки signal
│  ├─ app/                     ← основное приложение (пианоролл)
│  │  ├─ src/
│  │  └─ src_Tools/
│  │     ├─ src_Theme/         ← редактор тем
│  │     ├─ src_Workspace/     ← редактор рабочих областей
│  │     ├─ src_Language/      ← редактор переводов
│  │     └─ src_VSTHostManager/← пока пустая папка
│  └─ Tools_presets/           ← заготовки пресетов, не собираются
│     ├─ Theme/  Workspace/  Language/
│     └─ VSTHostManager/
└─ app_r/
   └─ 0.1.0/
      ├─ Windows_Standalone/
      │  ├─ LARD.exe
      │  ├─ core_app/
      │  ├─ Tools/
      │  │  ├─ [LARD] Theme Editor.exe
      │  │  ├─ [LARD] Workspace Editor.exe
      │  │  ├─ [LARD] Language Editor.exe
      │  │  └─ [LARD] VST Host Manager.exe
      │  └─ Data/
      │     └─ Theme/  Workspace/  Language/
      ├─ VST/     ← пустая
      ├─ VST3/    ← пустая
      └─ CLAP/    ← пустая

Про имена exe. В схеме от 20.08.2026 они были записаны как LARD:ed - Theme.exe. Двоеточие Windows в именах файлов запрещает — такой файл не создать, — поэтому имя выбрано [LARD] Theme Editor.exe.

Принятые решения

Спорные места, где формулировка задачи допускала несколько прочтений. Если решение не устраивает — скажи, переделаю.

  1. Пресеты живут в source_dev/Tools_presets/. Сначала они лежали в корне репозитория; 20.08.2026 по указанию автора переехали в source_dev/Tools_presets/. Это заготовки: в сборку они не компилируются, а копируются в Data/ рядом с готовой программой.

  2. Что считаем «ядром» (source_dev/core/). Не «все библиотеки подряд», а то, что нужно и основному приложению, и трём редакторам из Tools: формат и загрузка пресетов (темы, языки, рабочие области) плюс общий разбор папок пресетов. Это и есть настоящая причина выносить ядро — иначе каждый редактор переписывал бы формат заново и они бы разъехались.

  3. Что такое Workspace. В задаче не определено. Беру по аналогии с темами и языками: рабочая область — это пресет раскладки интерфейса (какие панели видны, их размеры и порядок), JSON-файл в папке Workspace/. Формат и поведение — по мануалу FL Studio.

  4. Версия первой сборки — 0.1.0. В package.json сейчас 0.0.1 (унаследовано от signal), у Electron 0.4.0. Для app_r завожу собственную нумерацию LARD с 0.1.0.


Этап 1. Резервная копия ✅

  • Архив lard-2026-08-19_22-13.rar с комментарием
  • Проверена целостность архива
  • Проверено, что комментарий читается дословно
  • Этот файл task.md

Этап 2. Переезд исходников в source_dev/ ✅

Механическая, но рискованная часть: почти все конфиги ссылаются на пути.

  • Создать source_dev/
  • Перенести app/, packages/, electron/, scripts/, functions/
  • Перенести служебные конфиги сборки (turbo.json, biome.json, package.json, package-lock.json, .env.example) и облачные (firebase*, vercel.json, Dockerfile, compose.yaml)
  • workspaces править не пришлось: package.json переехал целиком, а пути внутри него относительные
  • envDir и алиас react — тоже относительные, остались верными
  • Починить server.fs.allow (папки пресетов теперь на два уровня выше)
  • Починить пути глобов тем и языков в Theme.ts и localization.ts
  • Починить include в app/tsconfig.json
  • Пути в конфигах Electron оказались внутренними, правки не требовали
  • Починить working-directory в .github/workflows/node.js.yml
  • Обновить пути в docs/LARD.md и README.md
  • Проверить: npm install проходит
  • Проверить: tsc --noEmit без ошибок
  • Проверить: тесты зелёные (55/55)
  • Проверить: сборка проходит (4/4 задачи)
  • Проверить: окно LARD запускается, пианоролл рисуется, инструменты переключаются, тема грузится из корневой Theme/

Заметка про замки Windows. VS Code держал дескрипторы каталогов packages/* и electron, и обычное переименование не проходило. Помогло копирование с последующим удалением: удалять файлы система разрешает, а переименовывать каталог — нет. Осталась запертая пустышка LARD/electron/ с одним файлом внутри; она исчезнет после перезапуска VS Code и ни на что не влияет.


Этап 3. Ядро source_dev/core/ ✅

Пакет: source_dev/core — @lard/core. Описание: source_dev/core/README.md.

  • Завести пакет @lard/core в workspaces
  • Перенести в него схему и загрузку тем
  • Перенести в него схему и загрузку языков
  • Завести схему и загрузку рабочих областей
  • Общий поиск файлов пресетов в папке (один код на три вида пресетов)
  • Переключить основное приложение на @lard/core
  • Тесты на ядро (34 теста, зелёные)
  • Проверить, что приложение работает как раньше: tsc --noEmit чист, turbo test 5/5 задач (89 тестов), сборка 4/4, dev-сервер разворачивает обе папки пресетов и резолвит @lard/core

Что попало в ядро, а что нет. В ядре — формат пресетов и правила их слияния. Чтения файлов там нет намеренно: в приложении папку разворачивает сборщик (import.meta.glob), в редакторах это будет файловая система Electron. Ядру передают уже прочитанное, и оно годится обоим.

В приложении от прежних Theme.ts и localization.ts остались короткие переходники: они разворачивают папку и отдают её ядру. Все места, которые раньше импортировали оттуда темы и переводы, менять не пришлось.

Заметка про Biome. Настройки biome.json переехали в source_dev, а .gitignore остался в корне репозитория — Biome искал его рядом с собой и падал, то есть проверка стиля не работала с самого переезда. Указать другую папку нельзя: с vcs.root Biome перестаёт находить сам конфиг. Поэтому исключения перечислены в конфиге явно, а файл переименован в biome.jsonc — комментарии (а весь конфиг здесь с пояснениями) обычный biome.json не разрешает и молча откатывается на настройки по умолчанию.


Этап 4. install.md ✅

Файл: docs/install.md

  • Как запускать в VS Code (основной и рекомендуемый способ)
  • Как запускать в JetBrains IntelliJ IDEA / WebStorm
  • Как запускать в Visual Studio 2026
  • Как запускать вообще без IDE, из терминала
  • Требования: Node, npm, Git, что ставить на чистой машине
  • Частые ошибки и что с ними делать
  • Таблица «куда что положено»

Этап 5. Рабочие области (Workspace) ✅

Сначала сама возможность, потом редактор к ней — иначе редактировать нечего.

  • Изучить раскладку окон в офлайн-мануале FL Studio (M:\Program Files\Image-Line\FL Studio 2026\Help, страницы «Main Windows» и меню «View»). Взято оттуда: раскладка — это именованный набор окон, каждое показывается или прячется, готовые раскладки идут списком (Desktop, Alternate, Tablet, Custom), любую можно сохранить своей. Панели инструментов переключаются отдельно от окон.
  • Формат файла рабочей области (JSON, как у тем) — source_dev/core/src/workspace/Workspace.ts, описание для пользователя в Tools_presets/Workspace/README.md
  • Загрузка рабочих областей из папки Workspace/
  • Применение раскладки в интерфейсе
  • Встроенные пресеты: раскладка LARD и раскладка в стиле FL Studio
  • Выбор рабочей области в настройках (Settings → Рабочая область)
  • Тесты (7 на применение раскладки в приложении, 7 на загрузку в ядре)

Как это устроено. Раскладка стала единственным местом, где записано состояние панелей. Раньше у каждой панели был свой отдельный флаг, а ширина жила прямо в разметке — сменить раскладку целиком было нечем. Теперь панель берёт и видимость, и размер из рабочей области, а переключатели в тулбаре и перетаскивание разделителей пишут туда же. Поэтому размеры задаются через size, а не defaultSize: иначе пресет применялся бы только при первой отрисовке.

Выбранная раскладка запоминается между запусками. Всё, что подвинуто руками, живёт до конца сеанса — в FL Studio так же: изменённую раскладку нужно сохранять отдельным действием. Этим и займётся редактор из Tools/Workspace.

Проверено: окно LARD запускается, панели встают по пресету — паттерны слева, стойка инструментов справа, полоса автоматизации снизу.


Этап 6. Редакторы в source_dev/app/src_Tools/

Крупный самостоятельный кусок: это четыре отдельных приложения, которых сейчас нет ни в каком виде. Делаю по одному, каждый — на общем ядре.

  • Создан каркас папок с пояснениями, что куда ляжет

6.1. Редактор тем — app/src_Tools/src_Theme/ ✅

Приложение: source_dev/app/src_Tools/src_Theme — @lard/theme-editor, запуск npm run dev -w @lard/theme-editor, порт 3100. Описание — в README редактора.

  • Каркас приложения на @lard/core
  • Список тем из папки Theme/ и открытие любой из них
  • Правка цветов с наглядным превью
  • Сохранение в JSON
  • Создание темы из копии существующей (открыть → править → сохранить под своим именем)
  • Мини-макет: слева настройки, справа окно LARD в миниатюре
  • Редактор носит ту тему, которую правят
  • Кнопка Full / Prototyping со значками (точка с полукругами / точка): Full — тема применяется ко всему редактору, Prototyping — только к макету
  • Вкладки макета: «Окно» (миниатюра LARD) и «Элементы» (интерфейс по частям с контрастом у каждой пары)
  • Макет — рабочая копия редактора: те же панели, что в формате рабочей области, любую можно спрятать, боковые тянутся за разделитель
  • Макет собирается: кнопки, паттерны и инструменты добавляются и убираются, «Сбросить макет» возвращает раскладку LARD
  • Поправки поверх правил (Adjustments): Saturation, Brightness, Contrast, Text — ручками, с сохранением порогов WCAG
  • Основа темы (тёмная / светлая) — отдельным переключателем, а не по яркости выбранного цвета
  • Режим Fast Designed: базовый цвет, правило сочетания, окрашенный фон, больше акцентов — остальное считается
  • Восемь правил сочетания, палитра из пяти цветов, жёсткая раздача ролей
  • Контраст по WCAG держится сам: текст, надпись на кнопке, основной цвет на фоне
  • Режим Advanced: ручные правки поверх правил, сообщения о поломанной читаемости под изменённой настройкой
  • Проверка на дальтонизм (протанопия, дейтеранопия, тританопия)
  • Режим Dev-Designed с предупреждением о необратимости и выбором «сохранить текущие / начать с нуля»
  • Тесты: 148 в ядре (цвет, правила, сборка темы, проверки), 36 в редакторе

Что попало в ядро. Вся цветовая математика: перевод записей цвета, смешивание, контраст по WCAG, ΔE, дальтонизм, правила сочетания, сборка темы и её проверка. Редактор из этого только рисует интерфейс. Так же будет и с остальными редакторами: считает ядро, показывает редактор.

Формат темы дополнен. Появились cornerRadius и controlCornerRadius — скругления, которые до этого были рассыпаны по разметке приложения числами, — и необязательный блок generator с настройками, которыми тему собрали. Приложение его не читает; нужен он редактору, чтобы открыть сохранённую тему в том же режиме.

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

6.2. Редактор языков — app/src_Tools/src_Language/

  • Каркас приложения на @lard/core
  • Список языков из папки Language/
  • Таблица «ключ — английский оригинал — перевод»
  • Подсветка непереведённых строк
  • Сохранение

6.3. Редактор рабочих областей — app/src_Tools/src_Workspace/

  • Каркас приложения на @lard/core
  • Наглядная сборка раскладки
  • Сохранение в JSON
  • Оформление по стандарту FL Studio

6.4. VST Host Manager — app/src_Tools/src_VSTHostManager/

  • Создать папку-заглушку (назначение будет описано позже)

Этап 7. Сборка app_r/

  • Структура app_r/0.1.0/
  • Папки VST/, VST3/, CLAP/ — плагинов пока нет
  • В каждой пока пустой папке лежит null-time.txt с текстом «Временное». Он нужен только затем, чтобы git видел саму папку: пустые каталоги система контроля версий не отслеживает, и без файла структура не сохранилась бы в репозитории. Удалять по мере наполнения папок содержимым.
  • Сборка LARD.exe в Windows_Standalone/
  • Выделение общей части в core_app/
  • Копирование пресетов Theme/, Workspace/, Language/ в сборку
  • Сборка [LARD] Theme Editor.exe
  • Сборка [LARD] Language Editor.exe
  • Сборка [LARD] Workspace Editor.exe
  • Заглушка [LARD] VST Host Manager.exe
  • Одна команда, собирающая всё это целиком

Перестройка структуры (20.08.2026) ✅

Автор уточнил целевую структуру, папки переехали:

  • Theme/, Language/, Workspace/ → source_dev/Tools_presets/
  • electron/, packages/, scripts/, functions/ → внутрь core/ (functions → cloud_functions), оболочка окон редакторов → core/tools_shell/
  • Tools/Theme → app/src_Tools/src_Theme, рядом заготовки папок для трёх остальных редакторов
  • install.md → docs/install.md
  • Пути в конфигах, импортах, сборке и документации
  • Имена продуктов: LARD.exe и [LARD] Theme Editor.exe
  • Заголовок окна программы — «LARD», а не «signal»
  • Проверено: тесты 6/6 задач, типы чисты, оба exe собираются и запускаются

Открытый вопрос. vercel.json ждёт собранный сайт в source_dev/dist — его клал скрипт build:app, которого больше нет: LARD теперь программа с окном, а не сайт. Если выкладка на Vercel ещё нужна, скажите — верну сборку веб-версии отдельной командой.

Заметка про замки Windows. От source_dev/electron и source_dev/Tools остались пустые папки: их каталожные дескрипторы держит VS Code, и удалить их можно только после его перезапуска. Содержимого в них нет, ни на что не влияют.


Этап 8. Переименование главной папки

Делается последним: после переименования ломаются пути открытого проекта в VS Code и рабочий каталог запущенных процессов.

  • Остановить dev-сервер и окно LARD
  • Закрыть папку в VS Code (иначе Windows не отдаст её — уже упирались в это при переносе Language)
  • Переименовать LARD → LARD-master
  • Открыть заново и проверить, что всё запускается

Что здесь самое трудоёмкое

Этапы 2–4 — это аккуратный перенос, за день реально.

Этап 6 — не перестановка папок, а разработка четырёх приложений с нуля. Каждый редактор это отдельное окно Electron со своим интерфейсом. Этап 7 поверх этого добавляет упаковку: каждый .exe тянет свою копию движка, сборка всех четырёх — десятки минут и около гигабайта на диске.

Разумный порядок: сначала 2–5 (структура и рабочие области), затем редакторы по одному, начиная с тем — он самый простой и на нём проверится вся схема «ядро + редактор + пресеты».