CrewsForge — Журнал решений архитектурной сессии
Дата сессии: 2026-08-21 · Статус: решения подтверждены Stark’ом Формат: сводный индекс в стиле ADR. Детали — в step-документах 2–9.
Ключевые решения (все подтверждены)
Заголовок раздела «Ключевые решения (все подтверждены)»| # | Решение | Обоснование (кратко) | Документ |
|---|---|---|---|
| 01 | Канон статусов этапа: 10 значений + CLOSED (итого 11); VERIFIED, не MODERATED | Исходы 5.5/5.6 не покрывались десятью | шаг 0, 3.9.1 |
| 02 | Двухуровневая машина проекта: 10 статусов + отдельная contractingStage (5) | KYC_PENDING жил на двух уровнях; изоляция суб-машины | шаг 0.2 |
| 03 | Проектный DISPUTED — производный, переходы автоматические | Точечная заморозка 7.5; guard’ы читают Dispute, не статус | шаг 0.2, 3.1.3 |
| 04 | Separate charges & transfers (поправка к D-3) | destination charges несовместимы с моделью холда | шаг 0.3, 5 |
| 05 | Деньги — BigInt минорные единицы; комиссия — снапшот commissionRateBps на проект | D-1; тиражная сетка комиссий | шаг 0.4 |
| 06 | Мягкий бюджет-гейт (задача администратору), не жёсткий reject | Защита warm pipeline | шаг 0.5 |
| 07 | Журнал переходов + доменные события через outbox — универсальный механизм | L-2/L-5/S-2/X-6/Q-4 одним механизмом; атомарность публикации | шаг 0.6, 3 |
| 08 | Карта сервисов: +billing-api, +platform-worker; team — либы в user-api (выделение после беты); admin-api → 3 рабочих места | Изоляция O-1; минимум деплойментов | шаг 1 |
| 09 | Деньги администратора — напрямую в billing-api (бэк-офис на два бэкенда) | Изоляция важнее одного base-URL | шаг 1 |
| 10 | Трекер — внешний bounded context за контрактом: своя БД, порт+вебхук+маппинг на стороне CF; ни один инвариант CF от него не зависит | Продаётся отдельно; обратимость вопроса репозитория | шаг 1 (доп.) |
| 11 | PlanVersion — снапшот; Milestone материализуются при ACTIVE | Юр-природа плана-приложения; F-1 проще | шаг 2 |
| 12 | Политика удаления: RESTRICT на всей сделочной цепочке; удаление аккаунта = анонимизация | L-1; GDPR-вопрос юристу | шаг 2 |
| 13 | Settlement: CHECK через денормализацию hold_amount_minor | Инвариант сумм на уровне БД | шаг 2 |
| 14 | Party — снапшот на проект (@@unique projectId+side) | C-5: юрданные фиксируются под договор | шаг 2 |
| 15 | Механика машин: CAS-захват → guards → effects → журнал → outbox в одной транзакции; idempotentTarget для вебхуков | Конкурентность и идемпотентность 7.3 | шаг 3 |
| 16 | Hold: +технический статус VOID | Неуспешный платёж ≠ REFUNDED | шаг 3.9.2 |
| 17 | Отмена до ACTIVE: свободно до договоров; в CONTRACTING — через администратора | Дыра ФТ закрыта | шаг 3.9.3 |
| 18 | Пауза при TERMINATION_REQUESTED: блок фондирования/сдач/приёмок; работа на риск команды; дедлайны замирают | Уточнение 5.6 | шаг 3.9.4 |
| 19 | Одна платформенная роль на пользователя; ActorSpec — единая точка прав; журнал недоступен клиентам | O-1 не декоративен; L-4 радикально | шаг 4 |
| 20 | Администратор не вводит суммы: расчёт системный по основанию, двухфазное подтверждение | Усиление A-2/X-2/D-6 | шаг 4.6, 5.3 |
| 21 | O-1 трёхслойно: границы Nx + отдельные Operator-DTO + денежный линтер в CI | Механика вместо дисциплины | шаг 4.3 |
| 22 | Stripe: Express-аккаунты; hosted Checkout; ACH-дефолт + карты, издержки из комиссии; USD-only бета | Экономика чеков; скорость беты | шаг 5 |
| 23 | Строгий RELEASED = payout.paid (деньги на банке команды); transfer c source_transaction | 7.3 честно; инвариант «не больше холда» | шаг 5.3 |
| 24 | Карточный chargeback = ExternalPaymentDispute (вне арбитражной модели), приоритетная задача + evidence-пакет | Коллизия имён опасна; экспозиция после RELEASED | шаг 5.6 |
| 25 | Подписание: BoldSign (Enterprise API $30/мес, embedded, Free Sandbox); PDF генерим сами, шаблоны в репо, templateVersion+hash | 10x дешевле Dropbox Sign; доказательная цепочка | шаг 6 (обновл.) |
| 26 | Каждая сторона видит только свой договор (фаундер — B, команда — A) | Следствие K-1 | шаг 6.4 |
| 27 | Доп-этапы после старта — акцепт внутри продукта (расширение K-3), без перевыпуска конвертов | R-2 как штатная операция роста GMV | шаг 6.5 |
| 28 | Q-4 = декларативный маппинг «переход → задача» + тест полноты в CI; дедуп открытых задач частичным индексом | Проверяемое свойство вместо обещания | шаг 7.2 |
| 29 | Консьерж: тред, оператор первой линией (SLA 8ч), эскалация — третья операторская операция | Закрыт вопрос 10.3.8 | шаг 7.5 |
| 30 | Таймеры без автосанкций; календарь платформы UTC 10–18 пн–пт; напоминания 50%/80% | 8.3: молчание не стоит денег автоматически | шаг 7.3 |
| 31 | Миграция: чистый baseline — данные тестовые, старое дропается, схема создаётся сразу целевой; squash Prisma-миграций + сиды | Решение Stark 2026-08-21; expand/backfill-цикл избыточен без боевых данных | шаг 8 (упрощён) |
| 32 | Публичная карточка команды по слагу; состав показывается, если команда не скрыла его настройкой (флаг на Team, дефолт — показывать); полномочия canSign/canSubmit наружу не отдаются | Решение Stark 2026-08-31: витрина команд нужна продукту, но публикация прав подписи — цель для социальной инженерии | шаг 4 §7 (правка), единица T4 |
Параметры (конфиг, не код)
Заголовок раздела «Параметры (конфиг, не код)»Окно молчания фаундера — 5 раб. дней · окно позиции в споре — 5 кал. дней · окно возражений при расторжении — 5 кал. дней · конверт подписания — 14 дней · порог бюджета — $15k (мягкий) · порог LCIA — TBD · комиссия-дефолт — 1500 bps · SLA — таблица 8.2 ФТ.
Пакет юристу (накоплен за сессию)
Заголовок раздела «Пакет юристу (накоплен за сессию)»- Separate charges & transfers: позиционирование платформы, лицензионная экспозиция (из шага 0).
- KYC фаундера при новой Stripe-модели (вопрос 10.3.1) — флаг в конфиге ждёт ответа.
- Анонимизация при удалении аккаунта: GDPR erasure vs хранение доказательств (шаг 2.12).
- Анти-chargeback пункт договора B: обязанность решать претензии через платформенный арбитраж (шаг 5.6).
- Click-through-акцепт дополнительных этапов к рамочному договору: US ESIGN / eIDAS SES; отдельно Сингапур и ОАЭ (шаг 6.5).
- Конструкции выплат в страны вне Stripe Connect-регионов (география команд, вкл. Украину): заключение по трём вариантам — (а) только Connect-регионы, (б) Stripe Global Payouts, (в) сторонний payout-провайдер (Payoneer/Wise) — с оценкой MTL-экспозиции каждого при нашей договорной топологии K-1 (платформа платит собственное обязательство по договору A). См. шаг 5a.
Открытые проверки (не юрист)
Заголовок раздела «Открытые проверки (не юрист)»- Точные квоты BoldSign Enterprise API при подключении (данные источников слегка расходятся).
- DocuSign Starter: входит ли embedded (актуально только для плана Б).
- Праздники в календаре платформы — сознательное упрощение беты.
Что дальше
Заголовок раздела «Что дальше»Порядок исполнения — шаг 9 (волны F → A/B/C → G, критический путь F3→A1→A2→B2→B3→C4→G3→G4). Проектирование трекера — отдельная сессия. Спека HTTP-эндпоинтов рождается в эпиках реализации из машин и матрицы доступа.