Документация проекта
Проект «К3 Хор» (k3-choir) — документация
Проект: id 46, slug k3-choir, name k3-choir-oc, features: agents, portal_agent
Охват: полная структура (doc_tree), 10 таблиц (схемы + счётчики, 91 строка), 5 правил автоматизации (296–300), 2 формы, 3 дашборда, документ-шаблон 1640 (проверка токенов), публичный контур (curl), грабли (§59, E96, E97, E84)
Сборка живьём: 2026-09-04, прогон oc2 (TaskCard doc-k3)
Статус контура: ЗАКРЫТЫЙ по карте кейса (см. § «Публичный контур»)
1. Дерево объектов (doc_tree, 16 узлов)
id | Имя | Тип | Slug | Published |
|---|---|---|---|---|
1625 | Клиенты (техническая) | dataTable | customer | false |
1626 | События хора | dataTable | event | false |
1627 | Регистрации (явка) | dataTable | registration | false |
1628 | Залы | dataTable | location | false |
1629 | Участники хора | dataTable | directory-aux | false |
1630 | События (модульный дашборд) | dashboard | sobytiya | false |
1631 | Группы (ключ аудитории) | dataTable | gruppy-klyuch-auditorii | false |
1632 | Ответы явки | dataTable | otvety-yavki | false |
1633 | Дежурства | dataTable | dezhurstva | false |
1634 | Сборы на нужды | dataTable | sbory-na-nuzhdy | false |
1635 | Отзывы | dataTable | otzyvy | false |
1636 | Явка | form | yavka | false |
1637 | Впечатления с концерта | form | vpechatleniya-s-kontserta | false |
1638 | Явка по партиям | dashboard | yavka-po-partiyam | false |
1639 | Сборы: баланс | dashboard | sbory-balans | false |
1640 | Как работает: Хор К3 | document | kak-rabotaet-khor-k3 | false (stateId=draft) |
Все 16 узлов плоские (parentId=null), portalExposed=false, accessRestricted=false.
2. Таблицы (схемы + счётчики)
Итого: 10 таблиц, 91 строка (постраничное чтение с лимитом, полная выгрузка строк не делалась).
1625 · Клиенты (техническая) — 10 колонок, 0 строк
Техническая таблица-заготовка модуля «клиенты»: Имя(text), Email(email), Телефон(phone), Адрес(multilineText), Личный кабинет(externalPerson), Источник(select), Бонусные баллы(number), Согласие на рассылки(boolean), Ответственный(person), Заметки(multilineText).
1626 · События хора — 16 колонок, 14 строк, 4 правила
Ядро кейса. Колонки: Название(text), Площадка(reference→1628), Начало/Конец(datetime), Вместимость(number), Цена билета(currency), Регистраций(rollup count backlink→1627), Свободно мест(formula {capacity} - {registered_count}), Статус(status), Заметки(multilineText), Тип события(select), Дедлайн явки(date), Партитура(files), Программа(multilineText), Email хормейстера(email), Хор (ключ)(reference→1631).
Поведение: exclusive_scheduling активно (роль-теги колонок venue/start/end; пересечения отклоняются — см. §59.2).
1627 · Регистрации (явка) — 10 колонок, 15 строк
Событие(ref→1626), Участник(ref→1629), Количество(number), Тип билета(select), Сумма(currency), Статус(status), Дата регистрации(datetime), Ответ(select), Партия(text), Источник(select).
1628 · Залы — 8 колонок, 3 строки
Код, Название, Часовой пояс(select), Адрес, Широта/Долгота(number), Родительская локация(reference), Геозона(geofence).
1629 · Участники хора — 12 колонок, 7 строк
Сотрудник(person), Имя/Отчество/Фамилия(text), Полное имя(formula), Руководитель(reference), ФИО, Email, Телефон, Партия(select), Роль в хоре(select), Хор (ключ)(reference→1631).
1631 · Группы (ключ аудитории) — 1 колонка, 1 строка
Название(text). Master-строка «ключа аудитории» для backlink-матчинга (триггер triggerKey:{columnId:"choir"}, §59.3).
1632 · Ответы явки — 10 колонок, 28 строк, 1 правило
Событие(ref→1626), Участник(ref→1629), Email участника(email), Партия(text), Ответ(select), Комментарий(multilineText), Зарегистрирован(boolean), + служебные колонки form_assign с uuid-id: Due date(b5648bee-…), Assignment status(2cc8facf-…), Assignee(person).
1633 · Дежурства — 4 колонки, 8 строк
Событие(ref), Слот(text), Дежурный(ref→1629), Статус(select). Ручная таблица.
1634 · Сборы на нужды — 5 колонок, 10 строк
Участник(ref), Назначение(select), Сумма ₽(number), Дата оплаты(date), Пометка(text).
1635 · Отзывы — 5 колонок, 5 строк
Событие(ref), Участник(ref), Отзыв(multilineText), Фото(files), Дата(date).
3. Автоматизации (5 правил, id 296–300, все enabled=true)
automation_get_meta принимает documentId таблицы; правила висят на двух таблицах: 1626 (4 шт.) и 1632 (1 шт.).
id | Название | Таблица | Триггер | Действия |
|---|---|---|---|---|
296 | Событие → раздать форму Явка | 1626 | event |
|
297 | Ответ явки → регистрация | 1632 | event |
|
298 | Репетиция/концерт → напоминание за день | 1626 | schedule cron |
|
299 | Концерт → создать | 1626 | manual (scope=row) |
|
300 | Дедлайн явки → итог хормейстеру | 1626 | schedule cron |
|
onError=stop у всех. Цепочка 296→297 реализует раздачу формы-задач и перенос ответов; 298/300 — почтовые напоминания по расписанию.
4. Формы (2)
id | Название | Slug | Цель (targetDocumentId) | Поля | Особенности |
|---|---|---|---|---|---|
1636 | Явка | yavka | 1632 Ответы явки | event, member, response, comment (4) | Назначаемая (form_enable_assignment): assignment.enabled=true, dueColumnId |
1637 | Впечатления с концерта | vpechatleniya-s-kontserta | 1635 Отзывы | event, member, text, photos (4) | Без assignment. portalExposed=false, isPublished=false |
Слаг-адреса (публичные): отсутствуют — контур закрыт (см. §6).
5. Дашборды (3)
id | Название | Slug | Панели |
|---|---|---|---|
1630 | События (модульный дашборд) | sobytiya | 4: метрика «Всего событий», чарт «По статусу», чарт «Регистраций по событиям», метрика «Выручка с билетов» (gridCols) |
1638 | Явка по партиям | yavka-po-partiyam | 3: метрика «Ответов», pivot «Явка: партия × ответ», таблица «Ответы явки (лента)» (slicers) |
1639 | Сборы: баланс | sbory-balans | 2: метрика «Собрано, ₽», чарт «Собрано по назначениям» (slicers) |
6. Документы-шаблоны + проверка токенов
Единственный document-узел: 1640 «Как работает: Хор К3» (slug kak-rabotaet-khor-k3, stateId=draft, isPublished=false, publicUrl=null, publicUrlBlocked=document_not_published, has.content=true).
Проверка на литеральные токены {{col.*}} в теле (doc_get_content, ключ markdown): ПРОЙДЕНА — 0 токенов. Тело (1160 символов) — фиксированная проза: роли (хормейстер Анна Петрова, староста Мария Сидорова), 9-шаговый цикл репетиции/концерта, инструкции администратору. Известный дефект генератора (токены остаются литералами, ср. §61.4 про чипы) на К3 не воспроизведён: шаблон сгенерирован без неразрешённых {{col.*}}. (Токены {{col.*}} присутствуют только в конфигурациях правил 297–300 — там это штатные рантайм-шаблоны, а не текст документа.)
7. Публичный контур — ЗАКРЫТЫЙ (проверено curl 2026-09-04)
По карте кейса контур К3 закрытый; проверены 7 адресов (формы, документ, дашборд, таблица, rows-API, контроль-несуществующая):
URL ( | Ожидалось | Факт |
|---|---|---|
| 307/404 | 404 |
| 307/404 | 404 |
| 307/404 | 404 |
| 307/404 | 404 |
| 307/404 | 404 |
| 307/404 | 404 |
| 404 | 404 |
Закрытость подтверждена: все объекты isPublished=false, проект isPublished=false, редиректов нет. Открытие контура кейса НЕ делалось (по заданию контур остаётся закрытым).
8. Грабли проекта (из dev-report/error)
§59 (сборка К3): контракт-расхождения с планом-картой: install_modules→moduleIds; exclusive_scheduling через теги scheduleRole, а не config; triggerKey:{columnId} для общей master-строки (иначе «тихий ноль» 0 строк); fieldMap {columnId}+source|scaled|template; create_row/set_fields fields:[{columnId,value|picked|formula}]; send_message требует bodyText; дашбордный fn:"count" невалиден; формы document-first; doc_upsert enum document; automation_get_meta отдаёт все правила таблицы.
E96 (К3): automation_set_meta без ruleId создаёт НОВОЕ правило; с чужим ruleId перезаписывает его. Дисциплина: перед правкой — get_meta и сверка ruleId↔имя.
E97 (К3): параллельные exec зависимых шагов → двойные срабатывания automation_run (дубль «Новый концерт», был вычищен). Записывающие шаги — строго последовательно (E90).
E84: E-ссылки карты K3-oc2 (E23/E28/E38/E62) не сверены с dev-report — рекомендация к следующему гейту, не блокер.
9. Открытые вопросы
SMTP-доставка правил 298/300: runs рапортуют succeeded — требуется подтверждение фактической доставки на delivered+anna@resend.dev (из инструкций в доке 1640).
Учётки участникам для форм-задач (form_assign / «Явка») — не выданы (админ-действие).
Закрытие явки — только ручной переход статуса события (осознанный дизайн, кнопка автозакрытия не заведена).
Кнопка «Напомнить о репетиции» — отложена в Wave 2.
channels: [] в настройках проекта: доставка email идёт через серверный send_email; при переходе на send_message-канал убедиться, что пустой channels не ломает отправку (прецедент §62.8 на К6).
Чистка (2026-09-04)
Указание владельца платформы: архивация всех пустых и неиспользуемых таблиц. Живая сверка по всем 10 таблицам (datatable_get_rows, limit=1) + полный граф использования (схемы всех таблиц, automation_get_meta по всем 10 таблицам, form_get_meta 1636/1637, dashboard_get_meta 1630/1638/1639).
Архивировано (doc_archive, мягкое удаление):
1625 «Клиенты (техническая)» — пустая (0 строк, живая проверка) + 0 использований (формы/правила/дашборды/ссылки из других таблиц/публичный контур — всё ноль; isPublished=false, portalExposed=false). archivedIds=[1625], каскада нет (плоский узел).
1633 «Дежурства» — НЕ пустая (8 строк, реальная ручная таблица), но 0 использований на уровне объектов платформы → архивирована по шагу 4 задания, пометка: «архив с данными» (soft-delete, восстановима). archivedIds=[1633].
Сохранены (используются; причина):
1626 События хора — 14 строк; правила 296/298/299/300, дашборд 1630, reference-колонки из 1627/1632/1633(была)/1635.
1627 Регистрации — 15 строк; rollup backlink в 1626, цель create_row правила 297, дашборды 1630/1638.
1628 Залы — 3 строки; referenceDocumentId из 1626 (площадка).
1629 Участники хора — 7 строк; reference из 1627/1632/1634/1635, источник правила 296.
1631 Группы (ключ аудитории) — 1 строка; reference из 1626/1629, триггер-ключ 296.
1632 Ответы явки — 28 строк; цель формы 1636, правило 297, дашборд 1638.
1634 Сборы на нужды — 10 строк; дашборд 1639, reference участника из 1629.
1635 Отзывы — 5 строк; цель формы 1637.
Счётчики doc_tree: до — 17 узлов; после — 15 (архивированы 2 таблицы; каскадных подузлов не было). Соседние проекты не затронуты. Формы/правила/дашборды/документы не удалялись (граница задания). Примечание: после архивации 1633 в схеме 1626/1629/1632/1634 reference-колонки на «Дежурства» отсутствуют (обратных ссылок на 1633 не было — только исходящие из 1633).
Публичный доступ (документации — этого прогона; кейс остаётся закрытым)
Документ: «Документация проекта», documentId 1748, slug dokumentatsiya-proekta, isPublished:true.
publicUrl: https://smb.farhome.ru/public/k3-choir/dokumentatsiya-proekta — publicUrlBlocked: null, анонимный curl → 200 (проверено 2026-09-04; тело страницы содержит заголовок «К3 Хор»).
Публикация проекта: project_settings_get дал isPublished=false; project_settings_patch({isPublished:true}) отклонён платформой (patch принимает только channels/origins/externalDirectory) → применён задокументированный обход (dev-report строка 16 / E32): project_settings_set({isPublished:true, portalAllowedOrigins:[], channels:[], baseCurrency:null}) — остальные ключи сохранены (timezone Europe/Moscow, externalDirectory []).
Контур кейса НЕ открыт: после публикации проекта контрольные пробы остались закрытыми — public/k3-choir/yavka → 404, public/k3-choir/kak-rabotaet-khor-k3 → 404, api/public/k3-choir/data-tables/1626/rows → 404. Утечек нет: публичен только документ 1748.
Фидельность тела: после doc_upsert контроль doc_get_content — 10499 симв.; расхождения с локалом только косметические (переформатирование таблиц/жирного, авто-линковка email). Литеральные {{col.*}} в тексте метаконтролей сохранены платформой полностью (5/5), разрешений токенов нет.