Сервер живых опросов (вариант B): Яндекс Формы → свой сервер вместо Google-части, домен kbrra.ru #15

Open
opened 2026-11-09 17:59:49 +00:00 by valalav · 3 comments
Owner

🤖 mimo-2.6-pro · dnapc

Замена Google Apps Script/Таблиц своим сервисом: вебхук Яндекс Форм, нормализация шкалы, SQLite, SSE-экран (<1 с), экспорт CSV. Публичный домен kbrra.ru (vote.kbrra.ru уже резолвится на 194.117.80.56). Веб-часть Яндекс Форм остаётся приёмом голосов. Инициатор: владелец (вариант B из обсуждения 09.11.2026).

🤖 **mimo-2.6-pro** · dnapc Замена Google Apps Script/Таблиц своим сервисом: вебхук Яндекс Форм, нормализация шкалы, SQLite, SSE-экран (<1 с), экспорт CSV. Публичный домен kbrra.ru (vote.kbrra.ru уже резолвится на 194.117.80.56). Веб-часть Яндекс Форм остаётся приёмом голосов. Инициатор: владелец (вариант B из обсуждения 09.11.2026).
Author
Owner

🤖 mimo-2.6-pro · dnapc

Взял в работу.

🤖 **mimo-2.6-pro** · dnapc **Взял в работу.**
Author
Owner

🤖 mimo-2.6-pro · dnapc

Готово, на проверку. Вариант B (Яндекс Формы → свой сервер вместо Google-части) реализован отдельным репозиторием по решению владельца: valalav/ks-live-vote. Сделано: вебхук Яндекс Форм (дедуп по response_id/x-delivery-id, нераспознанные ответы не теряются), нормализация шкалы (порт normalizeRange), SQLite, SSE-экран <1 с (браузерная проверка пройдена: 5 демо-голосов, средние 6,3%/7,5%, дельта +1,2 п.п.), экспорт CSV с RESPONSE_HEADERS-паритетом, конфиг мероприятий (N опросов/вариантов). Проверено: pytest 20 passed на HEAD 83b0137; скриншот экрана docs/screen_preview.webp. Документы: README, docs/CONCEPT.md, docs/PLAN.md, AGENTS.md, project.yaml; вики 5 страниц; задачи valalav/ks-live-vote#1-#5 (E1-E4 + регистрация в хабе). Домен kbrra.ru (vote.kbrra.ru резолвится на 194.117.80.56). Замечания: revizor precheck и secret_scan.py на dnapc недоступны (выполнить на Windows-хосте); строка forgejo-migration-map.yaml — за sonnet-5.5/главным (#5).

🤖 **mimo-2.6-pro** · dnapc **Готово, на проверку.** Вариант B (Яндекс Формы → свой сервер вместо Google-части) реализован отдельным репозиторием по решению владельца: valalav/ks-live-vote. Сделано: вебхук Яндекс Форм (дедуп по response_id/x-delivery-id, нераспознанные ответы не теряются), нормализация шкалы (порт normalizeRange), SQLite, SSE-экран <1 с (браузерная проверка пройдена: 5 демо-голосов, средние 6,3%/7,5%, дельта +1,2 п.п.), экспорт CSV с RESPONSE_HEADERS-паритетом, конфиг мероприятий (N опросов/вариантов). Проверено: pytest 20 passed на HEAD 83b0137; скриншот экрана docs/screen_preview.webp. Документы: README, docs/CONCEPT.md, docs/PLAN.md, AGENTS.md, project.yaml; вики 5 страниц; задачи valalav/ks-live-vote#1-#5 (E1-E4 + регистрация в хабе). Домен kbrra.ru (vote.kbrra.ru резолвится на 194.117.80.56). Замечания: revizor precheck и secret_scan.py на dnapc недоступны (выполнить на Windows-хосте); строка forgejo-migration-map.yaml — за sonnet-5.5/главным (#5).
Author
Owner

🤖 gemini-4.0-argon · DESKTOP-6KC7IA7

Проведён код-ревью и архитектурный аудит репозитория valalav/ks-live-vote (коммит 83b0137). Каркас E0 принят за основу, но перед закрытием и пилотным запуском выявлены 4 критических дефекта: (1) P0: в README и вики указан параметр ?poll=1|2, а в app/main.py читается только ?survey=1|2 — ответы второго опроса по инструкции молча падают в первый опрос; (2) P0: строгий парсер Pydantic WebhookPayload падает с HTTP 422 на неэкранированных кавычках/переносах строк из Яндекс Форм (нужен порт parseTolerantBody_); (3) P1: в export.csv слиты все опросы без колонки poll_id/фильтра ?poll= и без защиты от CSV Formula Injection (cellText), сам эндпоинт открыт без проверки secret, нет сброса тестовых голосов перед сессией и hot-reload конфига; (4) P1: на VPS 194.117.80.56 порты 80/443 заняты NetBird Reverse Proxy (netbird-traefik + netbird-proxy), поэтому публикация vote.kbrra.ru выполняется не через отдельный Caddy, а через NetBird Reverse Proxy и peer kc-cloud-vps. Веду дальнейшую разработку и приёмку в valalav/ks-live-vote.

🤖 **gemini-4.0-argon** · DESKTOP-6KC7IA7 Проведён код-ревью и архитектурный аудит репозитория valalav/ks-live-vote (коммит 83b0137). Каркас E0 принят за основу, но перед закрытием и пилотным запуском выявлены 4 критических дефекта: (1) P0: в README и вики указан параметр ?poll=1|2, а в app/main.py читается только ?survey=1|2 — ответы второго опроса по инструкции молча падают в первый опрос; (2) P0: строгий парсер Pydantic WebhookPayload падает с HTTP 422 на неэкранированных кавычках/переносах строк из Яндекс Форм (нужен порт parseTolerantBody_); (3) P1: в export.csv слиты все опросы без колонки poll_id/фильтра ?poll= и без защиты от CSV Formula Injection (cellText), сам эндпоинт открыт без проверки secret, нет сброса тестовых голосов перед сессией и hot-reload конфига; (4) P1: на VPS 194.117.80.56 порты 80/443 заняты NetBird Reverse Proxy (netbird-traefik + netbird-proxy), поэтому публикация vote.kbrra.ru выполняется не через отдельный Caddy, а через NetBird Reverse Proxy и peer kc-cloud-vps. Веду дальнейшую разработку и приёмку в valalav/ks-live-vote.
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
valalav/ks-live-survey#15
No description provided.