MOffice

Сессия B «Платформа»: бриф

Прочитать перед началом: docs/sessions/README.md (протокол — обязательно), docs/00-foundation.md (разделы 4, 5, 9–12), docs/05-design-system.md, docs/10-licensing-accounts.md, docs/12-license-policy.md, docs/13-owner-decisions.md, docs/research/oss-platform-apps-strategy.md, план фазы 0 — docs/08-roadmap.md раздел 3.0 (эпики E0.4–E0.8). Ветка phase0/platform. Журнал — docs/sessions/B-log.md. Стенды — сайт moffice.24oros.ru (порт 18300, уже работает) и API moffice-api.24oros.ru (порт 18302).

Цель

К концу фазы 0: зелёный CI с проверкой лицензий, окно MOffice на Qt/QML в стиле MDS, которое показывает страницу документа из ядра (через FFI сессии A), работающие на sagr сервисы лицензий и аккаунтов, шифрование документов на основе собственного кода PasswordSafe и юридические документы от имени ИП Орос А.М.

Задачи по порядку

№ Задача Результат и критерий готовности
B1 CI и сборка (E0.5): .github/workflows/ci.yml для Forgejo Actions/GitHub (fmt, clippy, test, cargo deny check, scripts/check_mockups.py, сборка сайта); justfile; генератор THIRD_PARTY.md + NOTICE + SBOM CycloneDX из Cargo.lock и docs/research/oss-verified.json (скрипт scripts/third_party.py) cargo deny check зелёный; THIRD_PARTY.md и NOTICE в корне; страница «Лицензии открытого ПО» на сайте генерируется из них
B2 Шифрование meridian-crypto: перенос конверта из собственного кода PasswordSafe (~/Mac1amoros/PasswordSafe/passwordsafe-core/src/crypto.rs, vault/envelope.rs — код владельца; брать из ветки wip/snapshot-2026-10-04 на GitHub Linx72/PasswordSafe) с исправлениями: ключи через HKDF, MAC на весь файл, потоковое AES-256-GCM по чанкам; Argon2id по RFC 9106; формат — docs/04-file-formats.md (раздел о шифровании MOP) тесты векторов, фаззинг расшифровки; запись в журнал
B3 Оболочка Qt (E0.4, часть E0.2): поставить Qt 6.8 LTS на Mac без sudo (Homebrew brew install qt или aqtinstall в ~/Qt); shell/ — CMake + QML; токены spec/design-tokens.json → генерация QML-синглтона Mds.qml; каркас окна по библии 5.3 (заголовок, лента, холст, строка состояния), лента — своя на QML по алгоритмам SARibbon (зеркало можно смотреть на GitHub, MIT; виджеты не переносить), вкладки документов; модули Qt только из LGPL-набора, без GPL-only (до покупки коммерческой Qt — ничего не распространять, только локальные сборки и скриншоты) окно запускается на macOS; скриншоты светлой и тёмной темы на сайте (страница «Живая оболочка»); веха M0.5
B4 Связь с ядром: вызов meridian_doc_render_page из FFI сессии A (docs/sessions/CONTRACTS.md), показ страницы docx в холсте через QQuickImageProvider/текстуру; пока A не готов — заглушка того же контракта при готовности A — страница реального docx в окне; запись в журналы A и B
B5 Сервисы лицензий и аккаунтов (E0.7): services/license-service и services/id-service на Rust/axum + PostgreSQL по spec/license/api-license-service.md и spec/license/db-schema.sql; активация ключа MOFC-… через meridian-license, выпуск .mlic (Ed25519, только тестовые ключи, tools/keygen с ключами вне git); id-service — по образцу сервера аккаунтов FlyType (~/Mac1amoros/FlyType/backend, код владельца, Go → Rust); выкладка на sagr в /opt/projects/meridian-api (docker compose, порт 18302, поддомен moffice-api.24oros.ru: маршрут Traefik + строка в HAProxy на VPS) GET /healthz и POST /v1/activate с тестовым ключом работают снаружи; запись в /opt/CHANGELOG.md
B6 Юридические документы (E0.8, черновики): EULA MOffice от ИП Орос А.М. (docs/legal/eula.md), политика конфиденциальности (152-ФЗ), публичная оферта для продаж, NOTICE-раздел; проверка товарного знака «MOffice»/«MOffice» по открытым базам (Роспатент, WIPO) — заметка с результатами черновики на сайте, помечены «требует проверки юристом»
B7 Запрос коммерческой Qt (решение владельца 36): подготовить текст запроса в Qt Sales (лицензии только на команду оболочки, ядро на Rust без Qt, desktop Windows/macOS/Linux, без устройств) в docs/legal/qt-quote-request.md — отправляет владелец файл готов, владелец уведомлён в итоговом сообщении
B8 Сайт документации: поддерживать moffice.24oros.ru — новые страницы (журналы сессий, «Живая оболочка», лицензии), перенос предложений A в библию при синхронизациях сайт пересобран и проверен после каждого изменения

Чего не делать

Как проверять

cargo deny check, cargo test --workspace, python3 scripts/check_mockups.py, сборка сайта; для стендов — curl снаружи, браузер 1440 и 375 px; запись в B-log.md и /opt/CHANGELOG.md; слияние в main по протоколу.