/share-fix — 🌍 починил у себя → сразу раздай миру
Канон: Библия reglament-pochinil-u-sebya-srazu-razday-miru + память fixed-it-share-it-with-the-world + CLAUDE.md §4.7. Логика Антона: в момент починки у нас в руках лучший поисковый ключ на свете — дословный симптом; никакой «робот-сканер всего GitHub» не сравнится с реверс-поиском того, кто только что дебажил. Поэтому раздача = ритуал в момент фикса, не фоновый сканер.
Шаг 0-бис — источник кандидатов: очередь (anton 01.09)
Кроме «только что починил в руках», кандидаты приходят из очереди $OBSIDIAN_VAULT/_outreach/share_fix_queue.jsonl — её наполняет /retro Step 4🌍 (судья), а раздаёт ночная рутина share-fix-daily (хаб, ≤3 pending за прогон, полный ритуал ниже на каждого; после раздачи строка кандидата дополняется status:done+threads). Формат строки: added·from·artifact·queries[дословные симптом-запросы]·numbers·status.
⛔ ТЕРМИНАЛЬНЫХ СТАТУСОВ ЧЕТЫРЕ, НЕ ОДИН (08.09.2026, 3-й датированный случай share-fix-selector-drift-task-vs-engine): раздача закрывает строку не только как done — ⚪ пусто кладётся как dry, ⛔ непереносимо как skip (VALID_STATUS движка). Селектор «status != done» поэтому поднимает УЖЕ отработанные строки: замер 08.09 — 40 «не-done», из них 17 закрыты вердиктом, и первые три FIFO были ровно такими. Открытая строка = статус НЕ в {done, dry, skip} И без даты done (строка вовсе без поля status, как писал casebook-drip, тоже открытая — наивный == pending её теряет).
⛔ ПРИПАРКОВАННУЮ СТРОКУ НЕ БЕРЁМ (замер 07.09, 1-й датированный случай ochered-ne-uvazhaet-pole-parkovki-revisit): строка может нести revisit: <дата> — это парковка до урожая, а не обычный pending, и ни текст рутины, ни share_fix_queue.py её не отличают. Перед взятием кандидата: revisit в будущем ⇒ пропустить, статус не трогать, взять следующий FIFO. Иначе в мир уезжают недоказанные числа (07.09 так чуть не ушёл A/B с n=1 за сутки до урожая). Популяцию очереди читай прибором (share_fix_queue.py status), а не числом из текста задачи — оно стареет молча (класс share-fix-selector-drift-task-vs-engine, 2 случая).
Шаг 0 — порог (2 булевых, оба ДА, иначе честный ⛔)
- Переносимость: чужой человек может воспроизвести наш симптом БЕЗ наших внутренностей (наших скриптов, нашей инфры, наших аккаунтов)? Одноразовый глюк самоделки миру не нужен.
- Чистота: в раздаваемом нет секретов/приватного/внутренних имён (аккаунты, задачи, пути с личным)? Скрипт для мира = НОВЫЙ чистый файл на английском, не внутренняя кнопка. Леак-скан глазами обязателен.
Шаг 0-бис — САМОЕ ПЕРВОЕ: СВОЙ СОБСТВЕННЫЙ ТИКЕТ, в котором мы уже заявили дефект (замер 23.09.2026)
Раньше, чем своя сеть репо, и намного раньше чужих тредов, стоит вопрос: мы сами где-то публично утверждали этот дефект? Если да, то там уже сидят люди с ровно этой болью, они пришли по своей воле, и наш артефакт обязан лежать ПОД нашим же утверждением. Утверждение о дефекте без своего детерминированного repro недоделано.
Это НЕ раздача по чужим тредам (та измерена мёртвой: 3 коммента, 19 суток, 0 переходов) — это завершение своей собственной заявки, и оно бесплатно и постоянно.
gh api repos/<owner>/<repo>/issues/<N> --jq '.body' | grep -c <artifact-slug>
gh api repos/<owner>/<repo>/issues/<N>/comments --paginate --jq '[.[]|select(.body|test("<artifact-slug>"))]|length'
⚠️ --paginate ОБЯЗАТЕЛЕН: без него gh отдаёт первые 30 комментов и печатает уверенный 0 на длинном треде. 23.09 именно так проверка «стоит ли наша ссылка» соврала на треде с 51 комментом.
ЗАМЕР, ПОРОДИВШИЙ ШАГ (23.09.2026, casebook-drip-daily): у публичного касбука были 48/48 внутренних ссылок, строка в витрине, посадочная страница с запускаемой командой и два поста в FB — а шесть наших собственных upstream-заявок за 19 суток не ссылались на него ни разу, ни в теле, ни в комментах. Среди них наш же тикет про ту самую поломку, у которой в касбуке лежит готовый repro, и чужой тред с 51 комментом, где мы стояли с 24.08. Сначала закрой это, потом трать время на поиск незнакомцев. Границы: закрытый тикет и мелкие треды (<7 комментов, 0 реакций) не трогаем — там аудитории нет, и это повторение мёртвой тактики.
Шаг 0-тер — ПОТОМ СВОЯ СЕТЬ РЕПО, и только затем чужие треды (замер 14.09.2026)
Раздача наружу стоит времени и живёт один день; ссылка внутри нашей же сети бесплатна и стоит вечно. Поэтому до реверс-поиска проверь, ссылаются ли на артефакт НАШИ репо:
python ~/.claude/scripts/ecosystem_footer.py # сухой прогон: у кого нет блока карты
Блок «🧩 One piece of a working system» с соседями по слою пишет ecosystem_footer.py по карте LAYERS. Репо, которого в карте НЕТ, невидимо внутри собственной сети: ни футера у него, ни упоминания у остальных. Нет в карте → допиши слой (governance · memory · gates · fleet · connectors · in public) и прогони --apply, прогнав перед этим _test_ecosystem_footer.py.
⛔ ТЕСТ КРАСНЫЙ → --apply НЕ ЗВАТЬ (замер 21.09.2026, share-fix-daily): сухой прогон просил блок в 25 публичных README, а _test_ecosystem_footer.py был красным на 2 проверках (5d безымянных 3, 5e касбука нет в карте). Раскатка 25 публичных репо с красного движка = отказ по общей причине (§7.3-бис канарейка), и починка 14.09 класс не закрыла. На красном: строка в журнал классов (selfheal.py journal --class ecosystem-footer-map-leaves-repos-unnamed), вердикт ⚪ по шагу 0-тер, дальше по своему классу. Разовая проверка одного репо — --repo NAME, она канарейка и разрешена.
⭐ СПЕРВА ОЦЕНИ СТОИМОСТЬ ПОЧИНКИ ДВИЖКА, ПОТОМ ЖУРНАЛЬ (замер 23.09.2026, [машина флота]): строка в журнал — это про класс, который дорого чинить сейчас; она не индульгенция на то, чтобы обходить красный тест бесконечно. 23.09 движок стоял красным ТРЕТИЙ прогон подряд (21.09, 23.09 хаб, 23.09 [машина флота]), а починка заняла две правки: круговой выбор соседей вместо плоского [:3] + касбук в карту LAYERS. Правило: красный тест → посмотри, что именно он краснит; починка в пределах одной функции и одного словаря делается В ТОМ ЖЕ заходе (канарейка на одном репо → verify чтением README с GitHub → остальные), и только если корень дороже — журналь и ставь ⚪.
ПОЧЕМУ ЭТО ПЕРВЫМ. Касбук agent-control-plane-casebook раздавался наружу с 04.09: 3 коммента в живых чужих тредах, два тизера в наши TG-каналы. Через 10 суток — views_14d=3, uniques=2, referrers = только l.facebook.com, с github.com РОВНО НОЛЬ. Причина оказалась не в тредах и не в текстах: касбука не было в карте LAYERS, и ни один из 47 наших репо на него не ссылался — переходить было неоткуда. Побочно прибор назвал ещё 6 репо, которых не называл никто (agent-runtime-integrity-bench, always-loaded-diet, claw-retro, cofounder, oss-publish, verified-ops-starter): соседи брались плоским срезом [:3] по порядку словаря. Починено 14.09 круговым выбором.
Витрина tonydzi/tonydzi у генератора в SKIP — её правь отдельно через Contents API с трейлерами §4.9; раздел «🔨 What I'm building right now» и есть парадный вход.
Шаг 1 — реверс-поиск по ДОСЛОВНОМУ симптому (2 минуты)
gh api -X GET search/issues -f q='<ключевые слова> in:title updated:>ГГГГ-ММ-ДД' -f per_page=10 \
--jq '.items[] | "\(.state[:1]) \(.updated_at[:10]) c\(.comments) \(.html_url) | \(.title[:90])"'
⛔ gh search issues "<много слов>" ОДНИМ аргументом = ЛОЖНЫЙ НОЛЬ (замер 14.09.2026, [машина флота]): gh оборачивает всю строку в кавычки как фразу (в URL %5C%22), 13 запросов подряд дали пусто, те же слова через gh api search/issues — живые треды. Сортировка updated топит релевантное в бот-шуме — без --sort (по релевантности) + in:title. Между запросами sleep 8, иначе secondary rate limit 403.
Пробуй 2-3 формулировки (код ошибки 0x…, статус Modified, NeedsRemediation, фраза из диалога). Пусто везде → вердикт ⚪ с названным запросом, конец.
⛔ state:open В КАЖДЫЙ ЗАПРОС (замер 19.09.2026, [машина флота]): без него выдача уходит в архив — первый круг из 9 запросов дал 13 попаданий, из которых ЖИВОЕ было ровно одно, остальные closed за 2025-2026. Шаг 2 требует ЖИВЫХ тредов, значит фильтр ставится на Шаге 1, а не глазами постфактум; цена промаха — лишний круг поиска и съеденная квота search (30/мин). Строка: -f q='<слова> state:open'.
⛔ ГОЛОЕ ЧИСЛО В ЗАПРОСЕ = ЛОЖНЫЙ НОЛЬ (замер 08.09.2026, 1-й датированный случай gh-search-golye-chisla-chitayutsya-kak-nomer-issue): gh search issues "gemini cli valid license 3501" возвращает issue с номером 3501 из случайных репо (BusinessCentral, WordPress/Learn…), а не текстовый матч — выдача выглядит как честный поиск и читается как «фронт пуст». Так строка очереди 03.09 получила вердикт «пусто, 3 формулировки», а поиск ТОЧНОЙ ФРАЗОЙ '"valid license of this product"' в тот же вечер дал 4 живых треда, крупнейший на 45 комментов.
Правило: ищи фразой в кавычках без чисел, номер ошибки добавляй словами («error 3501» отдельным прогоном); длинная фраза из 6+ слов тоже отдаёт пусто — GitHub ANDит токены, дели на 1-3 ключевых слова + --repo.
✅ ДОМЕН-ГЕЙТ: дверь жива. (20.09.2026) ~/.claude/registry/github-universe/targets.json на месте, github_targets.py --top/--check работают — цели берём из них, domain_why пишем в вердикт. Если прибор всё же выйдет exit 2 — применяй domain.json руками и НАЗОВИ это в вердикте; тихо считать «гейта нет» ⛔. Статус двери — сам по себе claim: проверяй --top 5, а не пересказывай чужой вердикт.
⛔ domain=off ПО ПУСТОМУ ИЛИ МАРКЕТИНГОВОМУ ОПИСАНИЮ — НЕ ПРИГОВОР, НО ТРЕБУЕТ НАЗВАННОЙ ПРИЧИНЫ (замер 21.09.2026, share-fix-daily, 1-й датированный случай domain-gate-judges-repo-by-one-line-description): --check судит по ОДНОСТРОЧНОМУ description репо, а у агентских рантаймов там пусто или маркетинг — в тот прогон гейт отбил code-yeongyu/oh-my-openagent (тред = дублирование spawn-сессий, ровно наш класс), openclaw/openclaw и [человек]-lin/notebooklm-py (19.4k★, гоняем в проде), оставив core только у stripe/ai, claude-code, codex.
Брать такую цель можно ТОЛЬКО когда сходятся три условия: описание пустое/маркетинговое · САМ ТРЕД лежит в одной из 12 ниш github-niche-focus-block.md · отвечаем ПРОГОНОМ из своей боевой практики, а не мнением. Причина пишется словами в вердикт очереди и в отчёт — «взято по названной причине: <ниша треда>». Лазерный фокус 07.09 этим НЕ ослабляется: мимо идут репо, где ниши нет и в самом треде.
Шаг 2 — отобрать 3-5 ЛУЧШИХ живых тредов (anton капсом: «ТРИ - ПЯТЬ, не 1-2»)
Критерии лучшего: живой (человеческая активность, не бот-бампы) · наш симптом там воспроизведён (не однословная коллизия) · есть кому помочь (страдальцы без решения). Дедуп: проверь, нет ли нас (tonydzi) уже в треде. Перекрёстно-связанные треды одного класса сверх 5 — НЕ слать: 7-й одинаковый коммент = веер. Ужимание до 1-2 «чтобы не отсвечивать» — нарушение §1.5 точно так же.
Шаг 3 — раздать: каждый коммент ЗАТОЧЕН под тред
⭐ ЧЕМ ПОДАВАТЬ (замер 05.09): тред — PR и касание ПЕРВОЕ → только gh pr review <N> -R <owner/repo> --comment --body-file <файл>. gh pr comment не создаёт объект Review, работа не видна ни в графе вкладов, ни в фильтре reviewed-by:tonydzi, которым нас ищут (в чужих PR за 30 дн: 127 комментов против 7 ревью = 5.2% видимых). ⛔ ГРАНИЦА: у ISSUE ревью НЕ СУЩЕСТВУЕТ — там gh issue comment, и это большинство раздач; реплика в идущем PR-диалоге — тоже коммент. В вердикте называть, чем подано. Канон: Библия reglament-v-chuzhom-pr-pishem-revyu-a-ne-kommentariy + файл-константа $OBSIDIAN_VAULT/08-Templates/github-review-not-comment.md.
- ⭐ ПЕРЕД созданием gist/repo — прогони
/pack (декрет 24.08: наружу выходит ПРОДУКТ, не сниппет: README по скелету, --selftest, дружелюбные комментарии, гейт публикации). Вердикт /pack «не дотянул» = сперва дотянуть, потом раздавать.
- Раскрытие Майкрофта первой строкой (§3.3), дальше — по существу ИХ улик: что у них в треде уже есть и как наша находка это дополняет/объясняет. Копипаста-веер ⛔.
- ⭐ ПОДПИСЬ-CTA ПОСЛЕДНЕЙ СТРОКОЙ — ОБЯЗАТЕЛЬНА (anton 10.09, голосом; замер: 94% комментов без ссылки на нас → «ответившие × звёзды» = 0). Одна строка со ссылкой
github.com/tonydzi, формулировку варьировать; gist/README = полный блок. Единый источник: $OBSIDIAN_VAULT/08-Templates/github-touch-signature.md. Проверка перед отправкой: последняя строка тела несёт github.com/tonydzi? Нет → не отправляем. Канон: память cta-signature-every-github-touch; сторож cta_signature_watch.py.
- ⚠️ ТЕЛО КОММЕНТА БЕЗ BOM: файл под
-F body=@file пиши только UTF-8 без BOM (python open(...,encoding='utf-8') / Set-Content -Encoding utf8NoBOM); PowerShell Out-File/> на этой машине ставит BOM по умолчанию, и U+FEFF уезжает ПЕРВЫМ символом публичного коммента — прямо перед раскрытием Майкрофта. Замер 01.09.2026: так ушли все 7 тредов ночной раздачи, чинено правкой постфактум. Перед постом: head -c 3 <файл> | xxd → efbbbf = стоп.
- Скрипт-лечилка → публичный gist (после Шага 0.2) → ссылка. Ссылку в уже отправленные комменты дописывай ПРАВКОЙ своих сообщений, не новыми постами:
gh api -X PATCH repos/<r>/issues/comments/<id> -F body=@file.
- Кросс-вендор: тот же класс болезни у codex/gemini-cli — тоже дверь (прецедент openai/codex#35347).
Шаг 4 — вахта + вердикт (молчание запрещено)
python "$USERPROFILE/.claude/scripts/pr_watch.py" --add <url каждого треда>
Вердикт в отчёт, один из трёх: 🟢 раздал (ссылки) · ⚪ искал-пусто (запрос назван) · ⛔ непереносимо/приватно (причина). Треды дальше веду САМ (реглумент reglament-github-kommunikaciya-vsegda-sam), показ в утреннем отчёте из pr_watch --digest; ответ живого инженера → /pr-reply Шаг 5-бис (контент-воронка).
Границы
- Юридическое (CLA/DCO), деньги, секреты, масс-действия = Tier-2 → пауза+спрос.
- Правда в цифрах: раздаём только доказанное нашим /tt; гипотезы помечаем 🤔 прямо в комменте.
- Скилл ничего не решает про НАШ контент-каскад — только GitHub-треды + gist.
⭐⭐ ДОМЕН-ГЕЙТ (07.09) — ЛАЗЕРНЫЙ ФОКУС (приказ Антона 07.09.2026: «мусорные PR нам не нужны, нанимающий инженер должен за минуту понять: этот человек живёт в агентских рантаймах»).
Цели ТОЛЬКО из нашего круга: агентские фреймворки · LLM SDK · MCP · память для LLM · evals · observability для LLM.
Дверь: python3 ~/.claude/scripts/github_targets.py --top 20 — по умолчанию отдаёт только domain=core; первыми идут ⭐ own_pain (репо, обо что споткнулись САМИ во флоте — правило первого приоритета), дальше остальной круг.
Репо не из выдачи → --check owner/repo: domain=off или adjacent = НЕ ТРОГАТЬ, даже если issue красивая и хозяин живой. Исключение только по прямому слову Антона.
⚠️ «нет в списке целей» ≠ off (поправка 23.09, пережито в прогоне): так дверь говорит «этот репо не сканировали», и сама печатает, чего ей не хватает — домен не посчитан: подай --ecosystem и/или --desc. Досыпь описание репо и пересчитай: gh api repos/<o>/<r> --jq '[.description,(.topics|join(","))]|@tsv' → python github_targets.py --check <o>/<r> --desc "<описание> <топики>". Только ПОСЛЕ этого вердикт core/off настоящий. Замер 23.09: 8 несканированных репо, буквальное «нет в списке = не трогать» выбросило бы 5 целей домена=core (agent-fleet, TangleClaw, recall, pi-cursor-sdk, roost) вместе с 3 настоящими off. Это ровно тот шаг, который описан в ~/.claude/scripts/github-niche-focus-block.md v2 — строка выше ему противоречила.
Правила и own_pain: ~/.claude/registry/github-universe/domain.json (0 LLM; тест _test_github_targets_domain.py).
Метод (репро · красный тест · мутации · ревью объектом Review) не меняется — сужены только мишени.
⭐ Чёрный юмор обязателен (anton 10.09.2026, голосом)
Любой текст, который этот скилл отправляет ЖИВОМУ человеку наружу, несёт чёрную самоиронию — ровный служебный тон = дефект, объяснять надо не шутку, а её отсутствие. Строку берёшь через /mycroft-joke (полка (д) банка + строки 56-62 под холодное касание), приёмка — /taste-check P36. ⛔ Не шутим ровно в трёх зонах, и они не про вкус: строго-научная публикация (arXiv/журнал/JOSS) · юр.обязательство и анкета · красный список банка (чужая иконография угнетённых, псевдо-слуры, отрицание что я ИИ, юмор поверх диагноза/денег/беды собеседника). Одна шутка на тред. Канон: CLAUDE.md §3.3 §Поправка 10.09 + [[dark-humor-default-everywhere-external]].
⭐ Полнота списка потребителей (anton 10.09.2026)
Первый найденный потребитель почти никогда не единственный — он просто лежал на поверхности. Поиск закончен не когда кто-то найден, а когда две оси подряд дали ноль новых имён; внутренний потребитель (узел флота, робот, наш же скилл с костылём) ищется ПЕРВЫМ. Девять осей перебора и обязательный вердикт с числом («осей N/9 · адресов M · насыщение да/нет») — /consumer-hunt §Шаг 1-бис. ⚠️ Исчерпывающим обязан быть ПОИСК, адресация идёт по правилам двери: найденный адрес не выбрасывается, а получает статус и дату (🟢 постучались · ⏸ глухая очередь по замеру · 🪦 непереносимо). Канон: reglament-vypustil-funkcional-naydi-potrebiteley-i-pridi-k-nim §Поправка 10.09 + [[consumers-are-a-set-not-the-first-one]].
<!--kit-footer-->
Like this skill? It is one of 100 in 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.
Flagships worth a look on their own: secondop-panel (a second opinion from a panel of external models), claude-memory-tidy (stop your agent's memory from rotting), telegram-mcp-kit (your own Telegram over MCP in about 15 minutes).
Author: Anton Dziatkovskii, Palo Alto AI Research Lab. Telegram @tonydzi - WhatsApp +1 341 222 9178 - X @Tony_Stef_
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.