episode · diff

git:20260908.2ec1bf8 to v1.0.0

39 added, 56 removed. Audit A to A.

---
name: episode
- description: >-
- Split one source post into tier-sized drafts (teaser, main social post, longread, technical
- dev-log) with cross-links downward and a canonical link back to the repository. Draft-first:
- publishes nothing itself. Triggers: "/episode", "/adapt", "adapt this post", "make an
- episode".
- license: MIT
+ description: "Адаптеры публикации по ТИРАМ (контент-фабрика v2, S5) — контракт §7.2 решения reality-show 1:1: взять один пост-материал и разложить его на черновики teaser(240–370, @ClawRus RU / X EN) · medium(FB RU, ссылка в 1-м комменте) · longread(4000+,… Триггеры: /episode, /adapt, «собери эпизод <тема>», «разложи пост по тирам/площадкам», «сделай тизеры и лонгрид», «adapt this post», «make an episode»"
+ version: 1.0.0
---
- EPISODE_ADAPTER (stage S5 of content factory v2 — the contract [[decision-content-pipeline-reality-show]] §7.2)
+ EPISODE_ADAPTER (S5 контент-фабрики v2 — контракт [[decision-content-pipeline-reality-show]] §7.2)
- GOAL: ONE source post → an "episode" = one draft PER (tier × platform) from §7.2, with cross-links downward and canonical→GitHub baked in. Draft-first: we write drafts and publish NOTHING.
+ ЦЕЛЬ: ОДИН пост-материал → «эпизод» = по одному черновику НА (тир × площадку) из §7.2, кросс-ссылки вниз + canonical→GitHub зашиты. Draft-first: пишем черновики, НИЧЕГО не публикуем.
- THE §7.2 CONTRACT (implemented 1:1):
+ КОНТРАКТ §7.2 (реализован 1:1):
```
- tier length platforms (phase 1) language voice/model
- teaser 240-370 (HARD) RU channel · X (EN) RU TG/EN X authorial · Opus
- medium 800-2500 Facebook (RU) RU authorial diary · Opus · LINK IN THE 1ST COMMENT (not in the body) + a question
- longread 4000+ narrative RU channel·VC.ru·Habr(RU) · GitHub(EN) RU and EN authorial reality-show · Opus
- dev-log a dry log GitHub (EN, canonical) EN technical, impersonal · Sonnet scaffold + Opus for cohesion
+ тир длина площадки (фаза 1) язык голос/модель
+ teaser 240–370 (HARD) @ClawRus(RU) · X(EN) RU TG/EN X авторский · Opus
+ medium 800–2500 FB(RU) RU авторский дневник · Opus · ССЫЛКА В 1-М КОММЕНТЕ (не в теле) + вопрос
+ longread 4000+ нарратив @ClawRus·VC.ru·Хабр(RU) · GitHub(EN) RU и EN авторский reality-show · Opus
+ dev-log сухой лог GitHub(EN, канон) EN технический безличный · Sonnet-скаффолд + Opus-связность
```
- - The owner's voice (`authorial`) = **Opus ONLY**. The dev-log is not authorial — Sonnet assembles it, Opus stitches it together.
- - **canonical = the GitHub markdown** on every platform (a single source of truth for AI). Repo: `github.com/tonydzi/clawrush`.
- - **NO copy-paste** — every file is a NATIVE rewrite for its platform.
- - Cross-links downward: teaser→longread; medium→longread (in the 1st comment); longread ←teaser →dev-log; dev-log→longread + an anchor to our Deep Research.
- - THE PLATFORM DECIDES THE LANGUAGE (there is no bilingual pair on every tier).
- - The S3 narrative ([[style-reality-show]]) by tier: teaser=cold open+cliffhanger; medium=a full episode arc; longread=an extended episode+recap; dev-log=raw material, no drama.
- - The cofounder CTA (medium+longread, the owner's rule, memory [[cofounder-cta-public-contact]]): WhatsApp **+1 341 222 9178** = an authorized PUBLIC contact (a privacy carve-out), never strip it.
- - **VC.ru + Habr (the RU geo longread)** = phase 1 since 2026-07-04 (the style files `_STYLE-vcru.md`/`_STYLE-habr.md` are written and live in `content-factory\`; the writer loads them by the pointer in the placeholder). **PHASE 2** (deferred): only `Reddit` (the EN geo dev-log) — scaffolded with the `--with-phase2` flag.
-
- PATHS:
- - ⭐ FACTS AND CONTINUITY (v2, 2026-07-10) = THE SINGLE CANON `$OBSIDIAN_VAULT/04-Projects\show-canon\`: before assembling an episode, read the anchor beat (`beats\`) plus its arcs/loops — "previously on the show", the cliffhanger and the season question come FROM THERE (not from memory, not from SHOW-STATE, which is frozen). Respect the beat's `reveal` axis: don't burn live_hold/spoiler_until. Pick the next move with `/reality-show next`. After publishing — write the consequences back into the beat + run `canon_render.py`.
- - Source material: `$IMPORTS_ROOT/content-factory/triage/posts.md` (📝) — or a topic the owner names.
- - The scaffolder (deterministic, 0 tokens): `$IMPORTS_ROOT/content-factory/episode_adapter.py`.
- - Bundles: `episodes\<slug>\` (8 .md files in phase 1 / 9 with `--with-phase2` + meta.json; every §7.2 field is baked into the placeholders).
- - Style: [[style-reality-show]] (`08-Templates\style-reality-show.md`) + `04-Projects\personal\facebook-diary-auto\_STYLE.md` + [[style-Mei-influence]] + the golden corpus up to 2023.
-
- STEPS:
- 1. PICK the topic: if the owner named one, use it; otherwise show the 📝 items from `posts.md` and take the strongest thread. Run `list` before `new`.
- 2. SCAFFOLD: `python episode_adapter.py new --slug <kebab> --title "<title>" --source "hub:<id>"` (+`--with-phase2` for VC.ru/Habr/Reddit) → a bundle of empty drafts + meta.json.
- 3. WRITE (the model is named in each placeholder): teaser-ru/en, medium-fb (the body WITHOUT the link + a "1ST COMMENT" block), longread-ru/en, devlog. Replace the stubs, leave the hint comments in place. Privacy is strict (the only carve-out is the cofounder's WhatsApp).
- 4. CHECK (the visibility layer): `python episode_adapter.py check --slug <slug>` — lengths (a teaser outside 240-370 = HARD FAIL; medium/longread = WARN), CTA present, empty files. Only FAIL=0 → step 5 (a WARN on an unfinished longread is acceptable until it is written out).
- 5. REVIEW (draft-first): `set-status --slug <slug> --status review`; into Telegram Saved (chat_id `<YOUR_CHAT_ID>`, account "work_acct_a", no parse_mode): "🎬 Episode '<title>' — the per-tier drafts are ready (check ✅). episodes\<slug>\. Say 'publish' and I'll lay them out." NOTHING goes outward.
- 6. EXPORT TO PUBLISHING — only on the owner's explicit "publish"/"+" (Tier-2): `python episode_adapter.py export --slug <slug>` → `drafts\episode-<slug>.md` (format `type: content-factory-draft` + the registers `## -> TG/X/FB`). From there the EXISTING path: `content_approve.py --serve` → `content_publish.py` (→ Saved; the real channels are Phase 2b/Tier-2). GitHub/Reddit/VC.ru/Habr are published MANUALLY (gh / natively), not through content_publish. We do NOT breed a second publisher.
-
- LIMITS:
- - Draft-first OUTWARD: channels/X/GitHub are untouched without an explicit "publish".
- - MODEL: the authorial voice = Opus ONLY; dev-log = Sonnet+Opus; scaffold/check/export = deterministic, 0 tokens.
- - One post = one episode. Windows cp1252: the script forces UTF-8 stdout itself.
- - Don't invent facts — write from the real source material.
- - Old bundles (4-file / interim) are still read by `list/show/check/export` through meta (backward compatibility).
-
- ---
-
-
- <!--kit-footer-->
-
- ---
-
- **Like this skill?** It is one of 100 in [second-brain-starter-kit](https://github.com/tonydzi/second-brain-starter-kit): the second brain we built for ourselves and run every day at Palo Alto AI Research Lab. Install the whole set with `npx skills add tonydzi/second-brain-starter-kit`. Everything is open source and free, so take what you need.
+ - Голос Антона (`авторский`) = **ТОЛЬКО Opus**. dev-log НЕ авторский — Sonnet собирает, Opus сшивает.
+ - **canonical = GitHub-markdown** на каждой площадке (один источник истины для AI). Репо: `github.com/tonydzi/clawrush`.
+ - **НИКАКОГО copy-paste** — каждый файл = НАТИВНЫЙ рерайт под площадку. ⛔ **Рерайт = ФОРМА (длина, структура, язык площадки), НЕ смысл и НЕ острота** (Антон, голосовая 05.08.2026 hub:5155): его формулировки переносятся дословно, смягчать / «улучшать» / подшлифовывать / подправлять политкорректность / убирать резкость запрещено — «таким образом убирается эмоциональная сила этого поста». Обобщать разрешено ТОЛЬКО приватное (чужие имена, суммы, лиды, ключи), не резкость. Канон: [[voice-verbatim-no-sanitizing]], `/taste-check` P31, блок `ANTICENSOR` в `episode_adapter.py`.
+ - Кросс-ссылки вниз: teaser→longread; medium→longread (в 1-м комменте); longread ←teaser →dev-log; dev-log→longread + anchor на наши Deep Research.
+ - ⭐ **ИСТОРИЯ, НЕ ТЕЗИС** (anton 02.09.2026, голосом hub:6094; канон `reglament-vsegda-rasskazyvay-istoriyu-storytelling`, память [[storytelling-always-package-as-story]]): каждый черновик тира собирается как ИСТОРИЯ — герой (Антон/лаборатория) · реальная ситуация · что пошло не так или что открылось · вывод. Голая мысль вслух («заметил, что X») без контекста = переписать. Планка читателя — НЕ-инженер: «чтобы даже домохозяйке было интересно читать <…> like I'm five»; жаргон («упавшие рутины», «протухший Python») только через бытовую аналогию, инженеры аллегорию считают. ⛔ Не отменяет ANTICENSOR (упаковка ≠ право менять слова Антона) и §9.4 (контекст из РЕАЛЬНЫХ событий, драму не выдумываем). dev-log вне юрисдикции — он для роботов. Проверка на шаге 4: прогнать текст через `/taste-check` P34 — с 03.09 это чек-лист 10 вопросов + выбор структуры (ABT/Spine/SCQA/кольцо/in medias res), единственный источник = раздел «Чек-лист приёмки» в `$OBSIDIAN_VAULT\03-Insights\Operations\reglament-vsegda-rasskazyvay-istoriyu-storytelling.md`; черновик СОБИРАЕТСЯ по каркасу «норма → удар → ставка → ход → новая норма», а не проверяется задним числом. ⭐ Пре-тест (anton 03.09): сюжет = живой человек и его эмоции (неудачи·страдания·деньги·камбэк), не инфраструктура — «про сервер» переписывается через человека.
+ - ЯЗЫК РЕШАЕТ ПЛОЩАДКА (нет билингва на каждом тире).
+ - Нарратив S3 ([[style-reality-show]]) по тирам: teaser=cold open+клиффхэнгер; medium=полный эпизод-дуга; longread=расширенная серия+recap; dev-log=сырьё, без драмы.
+ - CTA co-founder (medium+longread, правило Антона, память [[cofounder-cta-public-contact]]): WhatsApp **+1 341 222 9178** = авторизованный ПУБЛИЧНЫЙ контакт (карв-аут приватности), не вырезать.
+ - **VC.ru + Хабр (RU GEO longread)** = фаза 1 с 2026-07-04 (style-файлы `_STYLE-vcru.md`/`_STYLE-habr.md` собраны, лежат в `content-factory\`; писатель подгружает по пойнтеру в плейсхолдере). **ФАЗА 2** (отложено): только `Reddit` (EN GEO дев-лог) — скаффолдится флагом `--with-phase2`.
- Flagships worth a look on their own: [secondop-panel](https://github.com/tonydzi/secondop-panel) (a second opinion from a panel of external models), [claude-memory-tidy](https://github.com/tonydzi/claude-memory-tidy) (stop your agent's memory from rotting), [telegram-mcp-kit](https://github.com/tonydzi/telegram-mcp-kit) (your own Telegram over MCP in about 15 minutes).
+ ПУТИ:
+ - ⭐ ФАКТЫ И НЕПРЕРЫВНОСТЬ (v2, 2026-07-10) = ЕДИНЫЙ КАНОН `$OBSIDIAN_VAULT/04-Projects\show-canon\`: перед сборкой эпизода прочитать бит-опору (`beats\`) + его арки/петли — «ранее в сериале», клиффхэнгер и вопрос сезона берутся ОТТУДА (не из памяти, не из SHOW-STATE — тот заморожен). Ось `reveal` бита уважать: live_hold/spoiler_until не палить. Выбор хода = `/reality-show next`. После публикации — последствия в бит (consequences) + `canon_render.py`.
+ - Источник пост-материала: `$IMPORTS_ROOT/content-factory/triage/posts.md` (📝) — или тема Антона.
+ - Скаффолдер (детерминированный, 0 токенов): `$IMPORTS_ROOT/content-factory/episode_adapter.py`.
+ - Бандлы: `episodes\<slug>\` (8 .md фаза-1 / 9 с `--with-phase2` + meta.json; все поля §7.2 зашиты в плейсхолдеры).
+ - Стиль: [[style-reality-show]] (`08-Templates\style-reality-show.md`) + `04-Projects\personal\facebook-diary-auto\_STYLE.md` + [[style-gershuni-influence]] + золотой корпус ≤2023.
- Author: **Anton Dziatkovskii**, Palo Alto AI Research Lab. Telegram [@tonydzi](https://t.me/tonydzi) - WhatsApp [+1 341 222 9178](https://wa.me/13412229178) - X [@Tony_Stef_](https://x.com/Tony_Stef_)
+ ШАГИ:
+ 1. ВЫБОР темы: назвал Антон — её; иначе покажи 📝 из `posts.md`, возьми сильнейшую связку. `list` перед `new`.
+ 2. СКАФФОЛД: `python episode_adapter.py new --slug <kebab> --title "<title>" --source "hub:<id>"` (+`--with-phase2` для VC.ru/Хабр/Reddit) → бандл с пустыми черновиками + meta.json.
+ 3. НАПИСАНИЕ (модель по полю в плейсхолдере): teaser-ru/en, medium-fb (тело БЕЗ ссылки + блок «1-Й КОММЕНТАРИЙ»), longread-ru/en, devlog. Замени стабы, комментарии-подсказки оставь. Приватность жёстко (карв-аут — только WhatsApp co-founder).
+ 4. ПРОВЕРКА (слой видимости): `python episode_adapter.py check --slug <slug>` — длины (тизер 240–370 = HARD-FAIL вне диапазона; medium/longread = WARN), наличие CTA, пустые. ТОЛЬКО FAIL=0 → шаг 5 (WARN на неполных лонгридах допустим до дописывания).
+ 5. ⭐ УКЛАДКА В ЧАСЫ (правило Антона 04.08, supersedes «ждём „публикуем“» для обычного контента): каждый прошедший гейты черновик — `python approval_clock.py place --file episodes\<slug>\<файл>.md --tier <teaser|medium|tg-post> --channel <fb|@ClawRus|x>`. Часы стартуют от УКЛАДКИ, никого не пингуем; окно = машинная истина `approval_clock.WINDOW_HOURS_DEFAULT` (замер 23.08.2026: **0ч** — приказ Антона 05.08 «без ожидания», supersedes прежние «24ч»), то есть уложенный черновик выходит СРАЗУ. Файл, не уложенный в очередь, для конвейера не существует и не выйдет НИКОГДА. Уходит без вычитки ⇒ голос Майкрофта с раскрытием (§3.3). ⛔ Не по этому пути: Tier-2 и FAIL slop_gate — их таймаут не снимает. Затем `set-status --slug <slug> --status review` + строка в Telegram Saved (chat_id [id], account "[рабочий аккаунт]", без parse_mode): «🎬 Эпизод „<title>“ уложен в часы, дедлайн <ISO>» — это уведомление, а не запрос разрешения.
+ 6. ЭКСПОРТ В ПУБЛИКАЦИЮ — по явному «публикуем/+» Антона (Tier-2): `python episode_adapter.py export --slug <slug>` → `drafts\episode-<slug>.md` (формат `type: content-factory-draft` + регистры `## -> TG/X/FB`). Дальше СУЩЕСТВУЮЩИЙ путь: `content_approve.py --serve` → `content_publish.py` (→ Saved; реальные каналы = Phase 2b/Tier-2). GitHub/Reddit/VC.ru/Хабр — публикуются ВРУЧНУЮ (gh/нативно), не через content_publish. Второй публикатор НЕ плодим.
- **Engineers: want to test-drive this setup?** Message me. I hand out free starter seeds to engineers who test and report back, and custom skill requests are welcome.
+ ОГРАНИЧЕНИЯ:
+ - Часы и их границы = память `content-approval-24h-timeout` + `reglament-chelovek-ne-stop-faktor-24h-avtoapruv-kontenta` §Поправка 04.08. Сюда не дублировать.
+ - Руками наружу не публикуем НИЧЕГО: постит дистрибьютор из копилки, куда пост попадает по часам (шаг 5). GitHub/Reddit/VC.ru/Хабр — по-прежнему вручную.
+ - МОДЕЛЬ: авторский голос = ТОЛЬКО Opus; dev-log = Sonnet+Opus; скаффолд/check/export = детерминированно, 0 токенов.
+ - Один пост = один эпизод. Windows cp1252: скрипт сам форсит UTF-8 stdout.
+ - Не выдумывай факты — пиши из реального пост-материала.
+ - Старые бандлы (4-файловые / интерим) читаются `list/show/check/export` через meta (обратная совместимость).