Документация проекта

Проект «К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 create (runOnAutomation=true)

create_rows_from_source: источник 1629 (матч triggerKey.columnId=choir → target 1632), fieldMap: event←{{row.self}}, member←{{src.self}}, member_email←{{src.email}}, part←{{src.part}}

297

Ответ явки → регистрация

1632

event create,update, changedColumnIds=[response], условия: response isNotEmpty AND registered isFalse (runOnAutomation=true)

create_row в 1627 (event/member формулами, response/part токенами {{col.*}}, Источник=«Форма-задача») + set_fields registered=true (флаг от дублей)

298

Репетиция/концерт → напоминание за день

1626

schedule cron 0 18 * * * (Europe/Moscow), each_row, условие Начало dateEquals $tomorrow

send_message channel=email, тема «Завтра: {{col.title}}», получатель — колонка director_email

299

Концерт → создать

1626

manual (scope=row)

create_row в 1626: title=«Новый концерт», event_type=Концерт, director_email=delivered+anna@resend.dev, choir={choir} формулой

300

Дедлайн явки → итог хормейстеру

1626

schedule cron 0 9 * * * (Europe/Moscow), each_row, условие Дедлайн явки dateEquals $tomorrow

send_email с bodyHtml, получатель — колонка director_email

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 b5648bee-…, email-шаблон уведомления assignee. portalExposed=false, isPublished=false

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 (smb.farhome.ru/...)

Ожидалось

Факт

public/k3-choir/yavka (форма 1636)

307/404

404

public/k3-choir/vpechatleniya-s-kontserta (форма 1637)

307/404

404

public/k3-choir/kak-rabotaet-khor-k3 (док 1640)

307/404

404

public/k3-choir/sobytiya (дашборд 1630)

307/404

404

public/k3-choir/event (таблица 1626)

307/404

404

api/public/k3-choir/data-tables/1626/rows

307/404

404

public/k3-choir/no-such-page-xyz (контроль)

404

404

Закрытость подтверждена: все объекты isPublished=false, проект isPublished=false, редиректов нет. Открытие контура кейса НЕ делалось (по заданию контур остаётся закрытым).

8. Грабли проекта (из dev-report/error)

§59 (сборка К3): контракт-расхождения с планом-картой: install_modulesmoduleIds; 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. Открытые вопросы

1.

SMTP-доставка правил 298/300: runs рапортуют succeeded — требуется подтверждение фактической доставки на delivered+anna@resend.dev (из инструкций в доке 1640).

2.

Учётки участникам для форм-задач (form_assign / «Явка») — не выданы (админ-действие).

3.

Закрытие явки — только ручной переход статуса события (осознанный дизайн, кнопка автозакрытия не заведена).

4.

Кнопка «Напомнить о репетиции» — отложена в Wave 2.

5.

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-proektapublicUrlBlocked: 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), разрешений токенов нет.