issue-match · git:20260814.06fa906 · 2026-08-14 · sha256 3731f1fc8c6338bc
issue-match git:20260814.06fa906A
Immutable. This exact content is served forever at /api/v1/blob/3731f1fc8c6338bc.
--- name: issue-match description: > Measure a TARGET repository's queue + find a LIVE door (an open issue matching our artifact) BEFORE pushing a PR there. Trigger on "/issue-match", "is this repo worth a PR", "measure the queue", "find a live issue". Answers "knock here or skip": how many open PRs, how many of the last N closed ones were actually merged, and which open issue our contribution would close. A cold PR into a dead queue is a wasted artifact. license: MIT --- # /issue-match — стучаться сюда или мимо? > 🧒 В конце отчёта Антону — блок «Простыми словами» ([[eli5-always]]). Правило Антона от 25.07.2026 ([[cold-pr-into-silent-queue]]): **холодный PR в глухую очередь = не вклад, а шум.** Замер очереди — первый шаг, ДО написания кода. Этот скилл делает замер кнопкой вместо ручного дёрганья `gh` в каждой сессии. Замерено 25.07 в `anthropics/claude-cookbooks`: 220 открытых PR, медиана возраста 47 дней, 51% без единого комментария, 67% мержей — в сутки после подачи (значит договорённость была ДО PR). Наших там 6 открытых, 5 холодных, **смержено 0**. Единственный, на который отреагировал человек, — тот, что вошёл через чужое открытое issue. ## Как гонять ```bash python "$USERPROFILE/.claude/scripts/issue_match.py" anthropics/claude-cookbooks --artifact "search agent, adversarial verify" ``` | Команда | Что делает | |---|---| | `<owner/repo>` | замер одного репо | | `--artifact "kw1, kw2"` | **главный параметр** — ключевые слова нашего артефакта, по ним ищется дверь | | `--all` | веер по всем репо из конфига (~5 с на репо; 14 репо ≈ 70 с) | | `--init` | собрать конфиг из НАШЕЙ истории PR (`gh` сам находит, куда мы подавали) | | `--live-days N` | issue считается живым, если обновлялся за N дней (дефолт 30) | | `--json` | машинный вывод | | `--no-draft` | без черновика входа | Конфиг: `~/.claude/issue_match.json`. Exit: `0` замер сделан · `2` кривые аргументы · `4` `gh` недоступен или все заборы упали. ## Что читать в выводе 1. **ОЧЕРЕДЬ** — открытых PR (точный счёт, не обрезанный лимитом), медиана возраста (при выборке — это **оценка снизу**, настоящая выше), доля без комментариев, паттерн мержей. Если «в день подачи» ≥60% — это не «быстро мёржат», это **преддоговорённость**; холодный PR такой ритм не повторит. Смотри **«разовых авторов»**: если среди мержей нет ни одного разового, репо мержит только своих и здоровая медиана чужаку ничего не обещает. 2. **МЫ ТАМ** — сколько наших PR лежит и сколько из них без реакции. Много холодных = сперва греть их, а не плодить новые. 3. **ДВЕРИ** — живые чужие issue с совпадением по ключевым словам. Наши собственные issue считаются отдельно: **своя дверь не приглашение**. 4. **ВЕРДИКТ** — 🟢 входим через issue · 🟡 открываем своё issue и ждём · 🔴 не пушим · ⚪ **не замерено** (забор issue упал или дверь могла остаться за выборкой) — на таких данных решение не принимаем, гоним замер заново. Молчание забора — не ответ. ⚠️ Без `--artifact` вердикт 🟢 **не выдаётся намеренно**: совпадение не проверялось, а свежее issue само по себе ещё не наша дверь. Широкие слова («agent», «memory») дают 🟢 почти везде — это честный шум, а не находка; сужай до сути артефакта и смотри строку `← совпало:`. ## Границы - **READ-ONLY.** Скилл ничего не отправляет. Комментарий в чужой тред и PR = исходящее наружу → отправляет человек (или я по мандату [[ship-github-no-plus-wait]], но с подписью и после гейта качества). - Матчинг — по словам в заголовке, метках и теле issue. Это грубый фильтр, а не понимание; финальное «наш это тред или нет» решает человек, глядя на список. - Медиана возраста при >100 открытых PR считается по новейшим → занижена. В отчёте помечено. - **Живость issue** = человеческая активность (последний комментарий ЖИВОГО человека либо открытие issue человеком), а не `updatedAt`: тот дёргают лейблы и боты, и «bump» от Dependabot/stale выглядел бы как живая дверь. Комментарии ботов считаются отдельно и в живость не идут. - **Где совпало — важно.** Совпадение в заголовке или метке = по теме; одно общее слово в теле (`auth`, `fix`, `token`) = скорее коллизия, и 🟢 за него не даётся (нужно либо попадание в заголовок/метку, либо ≥2 слова в теле). Строка `← совпало` показывает, где именно. - **Медиана мержей глобальная** по репо: она смешивает все типы PR (правка опечатки и новый рецепт) и не показывает очередь конкретного направления. Ориентир, не приговор — если наш артефакт узкой темы, смотри руками, как двигались PR именно этой темы. (Замечание внешнего ревьюера Codex, 27.07; чинить фильтром по путям = усложнение, пока не берём.) - Подпись коммитов/PR проверяй ДО отправки ([[signature-is-part-of-the-work]]) — 16 из 20 PR ушли подписанные пустым аккаунтом. ## Дальше по конвейеру 🟢 → комментарий в тред → ответ мейнтейнера → PR со ссылкой на issue → `pr_watch.py` сторожит реакцию → бамп по расписанию. 🔴 → в этот репо не пушим; уже лежащие холодные PR **греем** (привязать каждый к issue, которому он отвечает), а не добавляем девятый. --- <!-- CONTACT-FOOTER --> ## About & contact Built and battle-tested at **Palo Alto AI Research Lab** — a fleet of Claude Code machines running 24/7 as a second brain and synthetic cofounder. Every skill here survived real production use before publication. - 📦 All 101 skills: https://github.com/tonydzi/second-brain-starter-kit - 👤 Author: **Anton Dziatkovskii** — Telegram [@tonydzi](https://t.me/tonydzi) · WhatsApp [+1 341 222 9178](https://wa.me/13412229178) · X [@Tony_Stef_](https://x.com/Tony_Stef_) - 🧪 **Engineers: want to test-drive this setup?** Message me — I hand out free starter seeds to engineers who test and report back. Custom skill requests welcome.