diff --git a/artifacts/session-productize-runbook.md b/artifacts/session-productize-runbook.md new file mode 100644 index 0000000..1ac98ef --- /dev/null +++ b/artifacts/session-productize-runbook.md @@ -0,0 +1,52 @@ +# session_productize — состояние и ранбук довыполнения + +> System One, программа `session_productize` (mcp: booking+product_create, safety=reversible). +> Тик 2026-10-08 ~15:00 UTC, агент OpenCode (ag-35). Задачи t-261008140313-4f6997 / t-261008143729-9dc44a. + +## Состояние на 08.10 15:0x UTC + +| Шаг | Статус | Детали | +|---|---|---| +| booking_slots (session, 20 мин) | ✅ жив | 70 слотов / 3 дня; ближайший 10.10 15:00 UTC (18:00 Мск) — замер 09.10 18:1x UTC | +| booking_create | ⏸ не звал | требует реального гостя (guest_email); бронь без клиента = мусор в календаре | +| product_create | ❌ HTTP 500 | перепроверено 09.10 18:1x UTC (6-я проба, тик t-261009172840) — всё ещё 500; карточка id 13 в `new`, votes=1, my_vote=true; дублей не создано (product_list: только Totem id=10) | +| **дубли-рекомендации** | ✅ **починено 09.10 18:1x UTC** | корень: гонка чтения/записи core42.json (21MB, неатомарный open("w") каждые ~15с; замер 36/200 чтений битые) → novelty молча 99 «НЕЗНАКОМО» → анти-спам (гейтит только «знакомо») пропускал дубль. Фикс: атомарный tmp+os.replace в Core42.save + retry в router42.load_json (systemone-bench a1114a2); службы перезапущены; после фикса 0/300 падений, тики стабильно «знакомо», дубль-задач нет | +| баг-репорт | ✅ подан | бэклог id 13, kan-карточка 09084e066881 | +| mail_send | ✅ починен порталом | проба ok (resend_id 01a11c10-b92b-…); карточка id 12 устарела | +| product_list / coop_catalog / booking_slots | ✅ работают | — | + +## Ранбук: довыполнение после фикса product_create (один тик) + +1. `product_create` — сессионный пакет. Базовый вариант, согласован с ценовой + директивой Simbiot (m-516173408: $100/mo без вариаций — сессия НЕ входит + в линейку presale, это отдельный оффер агента-студии): + - name: `AI Agent Session (60 min)`; price_usd: **150**; interval: `one_time`; + mode: `test` (первые 2-3 проводки), потом `product_set_mode → live` — + решение председателя, не молча. +2. Проверить `product_list` (анти-дубль) и `coop_catalog` (появление в витрине). +3. Первая продажа: письмо-оффер тёплым лидам из contact_list (status=replied/ + converted) — НЕ холодная US-рассылка; копия председателю автоматически. +4. Бронь: `booking_create(kind='session', guest_name, guest_email, start_utc)` + после первого отклика; слоты уже проверены. +5. Замер: mrr_add цель +0.4k/2нед (advisor42 H8 top-1, prob 57.6%) — по факту + считать по первой проведённой сессии. + +## Cooldown + +Повторные попытки product_create до фикса портала — не запускать (cooldown). +Последняя проба: **09.10 18:1x UTC — всё ещё 500** (шестой дубль-тик, +t-261009172840). **Корень дублей починен** (гонка core42.json, см. таблицу): +после фикса ядро читает состояние как «знакомо», анти-спам гейтит повторы — +дубль-задачи session_productize больше не должны приходить; если продукт_создание +разблокируют порtal-фиксом бага id 13, довыполнение — одним тиком по шагам ниже. +Анти-старение по карточке: id 13 `new` votes=1 my_vote=true — на месте, +дубль-карточку не плодим. + +## Витрина кооператива (замер 09.10 12:0x, для price_ladder_audit — без изменений с 08.10) + +| Проект | Продукты (live) | +|---|---| +| Lunara | $4.99/mo | +| ReLeaf | $4.99/mo | +| Рилсап | $199 / $299 / $699 в мес | +| Симбиот | $33 / $59 / $1000 one_time | diff --git a/cli.py b/cli.py index 0b74b90..fb28def 100644 --- a/cli.py +++ b/cli.py @@ -201,8 +201,9 @@ def main(): elif args.cmd == "tg-status": _run_tg_status(args) elif args.cmd == "task": - # t-261003125513/e-261003125707: голое 'list'/'tasks'/'task list' — - # показать доску, а не плодить задачи-клоны + # t-261003125513/e-261003125707: 'task list' раньше создавал задачу-клон + # 'list' — теперь показывает доску (внутри 'list' как слово не валидируем, + # чтобы не породить рекурсию справки) if getattr(args, "list_board", False) or (args.title or "").strip() in ("list", "tasks", "task list"): es.init_db() for t in commands.list_tasks(): @@ -225,7 +226,12 @@ def main(): if t.get("details"): print(f" детали: {t['details']}") else: - tid, size = commands.submit_task(args.title, args.details, args.minutes) + # bc59609: guard мусорных заголовков ('list'/id без деталей) — ValueError наружу + try: + tid, size = commands.submit_task(args.title, args.details, args.minutes) + except ValueError as e: + print(f"ERROR: {e}") + sys.exit(1) if args.await_delivery: commands.mark_awaiting_delivery(tid, reason="подана из TG с автодоставкой") print(f"OK: задача {tid} [{size}] подана (результат уйдёт в TG при готовности)") @@ -472,13 +478,14 @@ def main(): else: print(f"AUM: {snap['aum']} ({snap['balances_src']})") print(f"burn 9router: 24ч={snap['burn_24h']} · 7д={snap['burn_7d']} у.е. " - f"({len(snap['spend_days'])} дн.)") + f"({len(snap['spend_days'])} дн., источник: {snap.get('burn_src', '9router-db')})") print(aum.build_policy_aum_summary(snap)) if args.record: es.init_db() es.append_event("harness", "aum", "AumMeasured", { "ts": snap["ts"], "aum": snap["aum"], "burn_24h": snap["burn_24h"], "burn_7d": snap["burn_7d"], + "burn_src": snap.get("burn_src"), "policy": {"aum_target": aum.build_policy_aum_summary(snap)}, }) print("OK: AumMeasured записан, aum_target обновлён в policy") diff --git a/docs/DEPLOY-LANDING.md b/docs/DEPLOY-LANDING.md new file mode 100644 index 0000000..835cba6 --- /dev/null +++ b/docs/DEPLOY-LANDING.md @@ -0,0 +1,86 @@ +# DEPLOY-RUNBOOK: лендинг simbiot.cil.by + +> Создан day-тиком 2026-10-05 (эскалация **e-261004110909-bd70b0**). +> Отвечает на вопрос «как лендинг попадает на прод и кто что правит». +> Обновлять при изменении топологии. + +## 1. Топология (факты, проверены 2026-10-04…05) + +| Что | Где | Проверка | +|---|---|---| +| Прод-хост | **204.168.232.21**, Caddy (`server: Caddy`, h3) | `getent hosts simbiot.cil.by` | +| На проде живут | `cil.by` (портал, /root/coop), `git.cil.by` (Forgejo), `simbiot.cil.by` (лендинг, docroot в **главном Caddyfile** — `simbiot` в RESERVED_SUBDOMAINS, это НЕ sites/*) | curl | +| Хост харнеса | **hermes-mon = 94.130.177.31** (Hetzner) — этот хост, НЕ прод | `hostname -I` | +| Docroot лендинга | на проде, точный путь — в блоке `simbiot.cil.by` `/etc/caddy/Caddyfile` (см. §4 шаг 1) | — | + +## 2. Источник истины лендинга + +| Файл | Статус | +|---|---| +| `simbiot-harness: docs/simbiot-landing-v2-live.html` | ✅ **канон**. Синхронизирован с продом 2026-10-04 + фикс showcase-стилей (коммит d5aff30, в origin/master). Все 4 фикса аудита t-261002151425 + стили секции live-product в основном ` + +
+Структурированный разбор голосового сообщения (7 мин 18 с): состояние поля контемплятивных/соматических практик, ключевые организации, барьер «как объяснить предпринимателям» и прямой ответ на вопрос о бизнесе.
+ +Автор (женщина, практик работы с мышлением) отвечает на вопрос о том, думает ли она делать бизнес из своей области. Поле «пробуждается от спячки»: сообщества практик — научные, академические, клинические — хотят выйти из своих «песочниц» в бизнес, медицину и госструктуры, но поля разрозненны, единого языка и порядка нет.
+Главный барьер — язык объяснения: как рассказать предпринимателю, «что это за зверь», через измеримые выгоды (расходы, здоровье команд), а не эзотерику. Сама она наведение порядка в этом хаосе называет своей задачей, деньги — не мотивация, трансформация — да.
+Плюрализм без иерархии: центры разного масштаба, в разных странах, от академии до бизнеса. Всё «очень неоднородно, но с большим потенциалом».
+| Точка | Что это | Статус / сигнал |
|---|---|---|
| Колорадо, США | +Одно из старейших мест; открылись в 70-х; «удивительные программы» | +ветеран поля работает десятилетиями | +
| Contemplative Education Network + родственная организация |
+ Отделения в Швейцарии и США; объединяют нейрофизиологов, учёных, психологов, когнитивных практиков, философов | +наука/академия научная среда | +
| Италия | +Есть PhD-программа именно по этой теме | +академия институционализация | +
| Япония | +Центр, заявляет работу с бизнесом | +бизнес на запрос не ответили — подробностей нет, только сайт | +
«Contellative education network» в транскрипте — почти наверняка Contemplative Education Network; итальянская PhD названа с обрывом фразы. Точные названия стоит уточнить текстом.
+Вопрос задан шире, чем готов ответ автора — и автор прямо это маркирует:
+Разбор по существу: не отказ, а запрос на конкретизацию. Открыты обе опции (свой проект / партнёрство), готовность думать о бизнесе есть («всегда об этом думаю»), но фокус сейчас — на связях и картировании поля, не на монетизации.
+Deepgram nova-3, авто-расшифровка: числа местами в форме «1-ых/2-ое», повторы слов сохранены. Оригинал: docs/m-973940607-transcript.txt
+