Две параллельные сессии: протокол работы
Действует с 2026-10-04. Цель — выполнить фазу 0 плана (
docs/08-roadmap.md, раздел 3.0) и первые шаги отчётаdocs/11-open-source-reuse.mdдвумя сессиями Claude Code одновременно так, чтобы они не мешали друг другу. Правообладатель — Орос Алексей Михайлович (ИП Орос А.М.); весь код — под лицензией правообладателя (файлLICENSE). Владелец разрешил улучшать и дорабатывать всё по ходу работы без отдельного согласования (библия, раздел 12, п. 37).
1. Кто что делает
| Сессия A «Ядро» | Сессия B «Платформа» | |
|---|---|---|
| Бриф | docs/sessions/A-kernel.md |
docs/sessions/B-platform.md |
| Ветка | phase0/kernel |
phase0/platform |
| Суть | модели документов, раскладка и рендер, кодеки, формулы (форк IronCalc), корпус тестов, контракт FFI | оболочка Qt/QML, CI и сборка, лицензии и шифрование, серверы ID/лицензий, юридические документы, сайт документации |
| Стенд на sagr | meridian-lab.24oros.ru →
192.168.1.90:18301,
/opt/projects/meridian-lab |
сайт moffice.24oros.ru → 18300 (существующий); API
moffice-api.24oros.ru → 192.168.1.90:18302,
/opt/projects/meridian-api |
| Локальный порт предпросмотра | 8781 | 8782 |
2. Карта владения файлами
Править файл может только его владелец. Нужна правка в чужой зоне — запрос в журнал другой сессии (раздел 4) или сообщение ей напрямую.
| Путь | Владелец |
|---|---|
kernel/crates/* — все крейты, кроме
перечисленных у B |
A |
kernel/crates/meridian-ffi/ и
include/meridian.h (контракт FFI) |
A |
kernel/crates/meridian-license/,
meridian-id/, meridian-crypto/,
meridian-update/, meridian-raster/ (свой
растеризатор для ядра и оболочки, шаг 6 плана «весь код свой») |
B |
tests/corpus/, tools/corpus-tool/,
scripts/corpus-test.sh, scripts/gx10_llm.py,
kernel/spikes/ |
A |
docs/algorithms/, docs/04-file-formats.md,
docs/apps/{write,sheets,slides,draw,paint,pdf,math}.md |
A |
docs/research/spikes/A-*.md |
A |
ui/ (своя оболочка без Qt, решение № 39),
shell/ (Qt-прототип — эталон до паритета),
services/, tools/keygen/,
mockups/, deploy/,
scripts/build_site.py,
scripts/check_mockups.py,
scripts/oss_verify.py |
B |
.github/, justfile,
Cargo.toml (корень), deny.toml,
rust-toolchain.toml, .gitignore,
README.md, LICENSE,
third_party.toml, scripts/third_party.py |
B |
THIRD_PARTY.md, NOTICE,
sbom.cdx.json — генерируются
scripts/third_party.py из Cargo.lock и
third_party.toml |
общие: руками не править; любая сессия перегенерирует их, если её
зависимость изменила Cargo.lock; при конфликте —
перегенерировать |
docs/00-foundation.md (библия),
docs/05-design-system.md, docs/08-roadmap.md,
docs/10-licensing-accounts.md, docs/11–13,
docs/legal/,
docs/apps/{hub,notes,mail,base,forms}.md,
spec/ |
B |
ui/meridian-sheets/,
docs/sessions/C-log.md, plan/ (дорожка C —
окно Sheets, отчёт и прототип; запросы к
meridian-ui/meridian-platform — во «Входящие»
B-log) |
C |
docs/sessions/A-log.md |
A (B только дописывает запросы в раздел «Входящие») |
docs/sessions/B-log.md |
B (A только дописывает запросы в раздел «Входящие») |
docs/sessions/CONTRACTS.md |
оба: каждый правит только свой раздел |
docs/03-architecture.md |
оба: разделы о ядре (крейты ядра, модель документа, раскладка, рендер, кодеки, формулы) — A; оболочка, сервисы, процессы, CI, платформы, безопасность — B |
Cargo.lock |
общий: при конфликте взять версию из origin/main и
выполнить cargo check --workspace |
Предложения в библию сессия A пишет в свой журнал (раздел «Предложения в библию»); сессия B переносит их в библию при ближайшей синхронизации и отмечает это в журнале A.
3. Git: как сливать работу
- Каждая сессия работает только в своей ветке (или в worktree, который
создало приложение, — тогда ветку переименовать в
phase0/kernel/phase0/platform). - Обновление от main: в worktree приложения — инструмент
sync_with_base_branch; иначеgit fetch origin && git rebase origin/main. - Слияние в main — не реже раза в день и после каждой
завершённой задачи, только быстрой перемоткой:
git fetch origin && git rebase origin/main just ci # = fmt, clippy, test, cargo deny, third_party --check, check_mockups, сборка сайта # без just: cargo fmt --all --check && cargo clippy --workspace --all-targets -- -D warnings && # cargo test --workspace && cargo deny check && python3 scripts/third_party.py --check && # python3 scripts/check_mockups.py && python3 scripts/build_site.py target/site git push origin HEAD:main # только fast-forward; push --force в main запрещён git push origin HEAD:phase0/<ветка> - Если push в main отклонён (другая сессия успела раньше) — повторить
с шага
rebase. - Сообщения коммитов — по-русски с префиксом (
kernel:,calc:,shell:,services:,docs:,ci:); в конце строкаCo-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>. Подпись автора:git config user.name "Alexey Oros",git config user.email "amoros@mail.ru". - Удалённый репозиторий:
ssh://git@repobase.ru:2222/forge/MeridianOffice.git(Forgejo, CLItea, логинrepobase). Зеркала открытых проектов — организацияmeridian-oss(только чтение; форки в наш код — копией вkernel/с файлом NOTICE, не правкой зеркала).
4. Связь между сессиями
- Журналы:
docs/sessions/A-log.mdиB-log.md. Запись после каждой задачи: дата, что сделано, коммит, что дальше, блокеры. Раздел «Входящие» — запросы другой сессии; отвечать отметкой «сделано <коммит>». - Контракты:
docs/sessions/CONTRACTS.md— интерфейсы между зонами (FFI, токены дизайна, API лицензий, форматы). Ломающее изменение контракта — только с новой версией и записью во «Входящие» другой сессии. - Прямые сообщения: если обе сессии запущены, их
видно через
ListAgents; короткий запрос можно отправитьSendMessage. Всё важное всё равно дублируется в журнал.
5. Сервер sagr: стенды не пересекаются
- Каждая сессия трогает только свои папки, контейнеры, compose-проекты
и yaml-маршруты: A —
meridian-lab; B —meridian-docsиmeridian-api. Чужие контейнеры не перезапускать. - Новый поддомен: маршрут
/data/coolify/proxy/dynamic/sagr-<имя>-direct.yaml+ строка в/etc/haproxy/sagr-domains.lstна VPStimeweb-vps(с бэкапом иhaproxy -cперед reload) — схема в памяти проекта и вdeploy/sagr-meridian-direct.yaml. - После каждой выкладки — проверка снаружи (HTTP 200, браузер 1440 и
375 px) и запись в
/opt/CHANGELOG.md. - GX10 не используем, кроме repoBase (Forgejo). Диск GX10 заполнен на 96 % — ничего крупного туда не класть.
6. Общие правила
- Политика лицензий (
docs/12-license-policy.md,deny.toml): только классы 0–1; MPL/LGPL/EPL не используем; GPL/AGPL — запрет и «чистая комната». Крейты Rust попадают вTHIRD_PARTY.md/NOTICE/SBOM автоматически изCargo.lock(python3 scripts/third_party.py); всё, чего cargo не видит (копии и порты чужого кода, C/C++, шрифты, данные), — запись вthird_party.toml(ведёт B; A пишет запрос во «Входящие» B с путём копии и текстом NOTICE). - Секреты не печатать и не коммитить; sudo не использовать; Docker-демон, sshd, firewall, Traefik не трогать.
- Комментарии в коде двуязычные (RU/EN), документы — по-русски, идентификаторы — по-английски.
- Определение готовности задачи: тесты и проверки зелёные, документы обновлены, запись в журнале, для задач с онлайн-частью — выложено и проверено на стенде.