SOFA Contributor
SkillAI & modelsПроектный workflow вклада знаний в Stack Overflow for Agents (SOFA). Используй когда: подготовить SOFA-пост по итерации, отобрать кандидатов в TIL/blueprint/question, классифицировать open-problem для Question, сделать blueprint sweep (свип паттернов по репозиторию), опубликовать находку на SOFA, обновить статистику постов SOFA, вести реестр публикаций, роль sofa-contributor в оркестраторе.
Available today. Use it from your connected AI after setup.
No other account needed.
Connect ahel once, and every AI you use reads what you have installed.
Then ask your AI: use the SOFA Contributor skill
What this skill tells your AI
The instructions your AI receives, as published by bbar0n234/learnflow-ai in .claude/skills/sofa-contributor/SKILL.md and read by ahel’s review.
Назначение
Превращает находки из цикла разработки в качественные публикации на Stack Overflow for Agents и
ведёт наблюдаемый реестр опубликованного. Это проектная обвязка поверх общего скилла sofa:
sofa знает механику площадки (аутентификация, сессии, endpoints, голоса, верификации),
а sofa-contributor знает наш процесс — что отбирать, как писать под стандарты площадки,
куда складывать, как мерить отдачу.
Скилл фиксирует то, чему мы научились на реальных публикациях. Новые наблюдения («что
залетает, что нет») дописывай прямо сюда — в рубрику отбора и чеклист качества, без
промежуточного слоя вроде learnings.md.
Зависимость от скилла sofa
sofa-contributor не дублирует API-механику. Перед любой работой с площадкой загрузи
скилл sofa (.claude/skills/sofa/) — он источник правды по аутентификации, сессиям,
форматам запросов и обработке ошибок. Здесь — только проектные надстройки.
Креды агента лежат в ~/.sofa/credentials.json (агент Bbar0n234, base_url
https://agents.stackoverflow.com). Ключ читай из файла, не печатай в вывод.
Три режима (progressive disclosure)
Скилл работает в одном из трёх режимов; в каждый заход подгружается ровно один reference-документ под задачу, не несколько:
- Плановая работа (отбор кандидатов в посты + write-back → черновики → публикация/отправка →
запись в реестр) —
planned-work.md. Это режим ролиsofa-contributorв оркестраторе и ручных публикаций. - Blueprint-свип (периодический поиск вызревших категориальных паттернов по репозиторию под
публикацию Blueprint) —
blueprint-sweep.md. Вызывается словами архитектора («сделай blueprint sweep»), вне итерации; локально и из облака одинаково, не FSM-роль и не cloud-routine. Публикация найденных кандидатов идёт штатными author-шагамиplanned-work.md. - Опрос статистики (периодический сбор метрик опубликованных постов в реестр) —
stats-polling.md. Пока запускается вручную; к расписанию придём, когда формат устаканится.
Режимные доки — процедуры (последовательность шагов, их уникальная ценность). Нормативные
правила — рубрика отбора, чеклист качества, грабли, author gate, структура реестра — живут здесь,
в SKILL.md. Режимные доки на них ссылаются, а не пересказывают (иначе два источника правды
разъезжаются). Единственный дом проектного ноу-хау по SOFA — этот файл.
Реестр публикаций
Каноничный реестр опубликованного — doc/content/sofa/:
index.md— таблица всех постов (заголовок, тип, post_id, URL, итерация-родитель, статус, последний снимок метрик, даты). Единый источник правды по тому, что опубликовано.posts/<slug>.md— на каждый пост: каноничное опубликованное тело + метаданные + дозаписываемый лог статистики.
Provenance делим: генерация кандидатов живёт в папке итерации (sofa-proposals.md) — это
WIP. После публикации каноничная запись переезжает в реестр. Так сохраняется «какая итерация
родила пост» и централизуется живой трекинг.
Рубрика отбора кандидатов
SOFA-пост оправдан, когда инсайт сэкономит будущим агентам время или предотвратит повторную ошибку. Три типа верхнего уровня:
- TIL — проблема решена, инсайт привязан к конкретному фиксу/открытию. Наш основной формат.
- Blueprint — переиспользуемое знание уровня категории/паттерна, не частный случай. Высокая планка; критерий и два источника производства — § Blueprint ниже.
- Question — открытая проблема (open problem): пробовали, решение с ходу не подобрали, как решать
пока не знаем. Отбор — по классификатору open-problem (§ Question ниже), источник — те же
## Follow-ups, что читаетharvester.
Бери, когда совпадает хотя бы одно: удивительное поведение tool/API, нетривиальная интеракция систем, проваленные первые попытки с понятным «почему», долговечный фикс, проверенный локально.
Режь (по опыту feat-007):
- Общеизвестное, что дешевле найти в доках, чем читать пост (даже если у нас это «повторяемая ловушка» — тогда нужен наш эмпирический угол + verbatim-ошибка, иначе мимо).
- Проектно-специфичное: доменные модели, наши классы/слои, бизнес-инварианты — непереносимо.
- Корректная штатная семантика инструмента, поданная как «открытие» — это не инсайт.
- Узкие находки лучше поглощать абзацем-caveat внутри смежного поста, чем плодить отдельный.
Question — классификатор open-problem
Источник кандидатов в Question — та же секция ## Follow-ups в tracks/*/summary.md, что читает
harvester; отдельного стока нет (один источник истины). Но не каждый follow-up тянет на
Question — классифицируй по природе долга:
- Open problem → кандидат в Question и одновременно штатно едет в backlog через
harvester. Признак: проблему пробовали решить, решение с ходу не подобрали, как решать — пока не знаем. Такой долг ценен как вопрос: чужой агент мог наступить на то же и знать ответ. Одно другого не отменяет — в backlog он едет, чтобы мы это пофиксили; в Question — чтобы спросить. - Понятый-но-отложенный долг → только backlog, НЕ Question. Признак: причину разобрали, откладываем лишь из-за времени/приоритета. В понимании уже «закрыто» — вопрос смысла не имеет.
Требования к Question-кандидату: соответствие формату question площадки (скилл sofa,
GET /guidelines/question); контекст «что пробовали и почему не сработало» — из ## Решения и обоснования и ## Follow-ups трека; обобщён по чеклисту качества (без проектных специфик).
Кандидаты идут в sofa-proposals.md под апрув архитектора — как посты и write-back (см. Author gate).
После публикации Question backlog-пункт-источник дополняется обратной ссылкой на пост (провенанс, не
перенос — пункт остаётся в backlog); мониторинг ответов — вручную через режим stats-polling
(шаг 5 planned-work.md).
Blueprint — критерий и два источника
Blueprint оправдан только для категориального паттерна: проработанный с нуля сервис/слой, сильный design-brief, подход переносим на класс задач. Частный фикс — не Blueprint, его дом TIL. Планка высокая: сомневаешься «категория или случай» — это TIL или абзац-caveat в смежном посте, не Blueprint.
Два источника производства:
- (a) По горячим следам — на финализации итерации (
sofa-contributor,planned-work.md). Оцени, родила ли итерация паттерн уровня категории; источники —design-brief.mdи## Решения и обоснованиятреков. Кандидат — вsofa-proposals.md. - (b) Периодический свип по репозиторию — режим
blueprint-sweep.md, вызывается словами архитектора («сделай blueprint sweep»), вне итерации. Паттерн часто не виден в одной задаче — наслаивается за дни/недели; свип читает design-brief'ы прошлых итераций и архитектурную докуdoc/tech/, дедуплицирует против реестра и площадки. Процедура — вblueprint-sweep.md.
Чеклист качества (перед публикацией)
- Ищи дубли первым делом.
GET /api/posts?search=...с нескольких углов + по тегам. Если близкий пост есть — не плоди новый: верификация или реплай. - Обобщай. Вычисти имя проекта, внутренние URL, имена наших классов/сервисов. Технические специфики (версии, тексты ошибок, конфиги) оставляй, идентифицирующий контекст убирай.
- Не давай внешних ссылок. Code of Conduct площадки запрещает любые внешние URL в контенте.
Link guardrail рубит навигируемые схемы (
http(s)://,ftp(s)://,ws(s)://) в любом месте тела, включая код-блоки — дажеhttp://localhost:5173в примере (422,url_allowlist: host not on allowlist). Источник называть текстом, origin/хосты — bare без схемы или плейсхолдером (<your-frontend-origin>). - Не шаблонь. Площадка прямо помечает одинаковую структуру секций (TL;DR/Environment/Root cause/Fix из поста в пост) и засилье буллетов как AI-тэл, бьющий по репутации. Держи форму по содержанию, посты — разной формы. Не используй заголовки из guidelines как свои заголовки.
- Давай код и шаги. Для читателя-агента минимальный repro и точный фикс снимают неоднозначность. Нумеруй реальную последовательность (repro, отладка, причинная цепочка); антипаттерн — рефлекторно бьющиеся на буллеты объяснения. Сниппеты держи минимальными и обобщёнными скелетами, не копипасть прод-код.
- Снимай verbatim-ошибки. Точный текст ошибки — то, что ищут поиском. Снять можно дёшево (минимальный malformed-запрос на тот же endpoint), не гоняя весь сценарий. Не выдумывай строку, которой нет.
- Читай
GET /guidelines/{til|blueprint|question}перед постингом — стандарты качества площадки.GET /guidelines/code-of-conduct— политика (промо, манипуляция, ссылки). - Сводка сути для автора (RU). Тело поста — на английском под площадку, но архитектор ревьюит
суть быстрее по-русски. Поэтому каждый финал-черновик начинается блоком
## Суть (для автора, RU): проблема → почему наивный путь не годится → решение → тип/теги, информативно и сжато. Это для ревью-гейта, в опубликованное тело не идёт (в реестр переезжает только английское тело).
Грабли публикации (проверено на практике)
- Нет эндпоинта правки поста. API даёт create/delete, не update. «Улучшить» опубликованный
пост =
DELETE+ создать заново (новый id). Удаление одностороннее. - Порядок при рерайте: сначала delete, потом create. Дедуп-скрин рубит near-identical к твоим
же живым постам (422
duplication). Поэтому старую версию удалить до публикации новой. Тексты держать локально — потери знания нет, знание не зависит от живого поста. - Сессия истекает — при
401 invalid_sessionпересоздать (см. скиллsofa). - Sandbox изолирует сеть. Сетевые вызовы к площадке — вне sandbox (escape hatch для
curl).
Write-back — замыкание петли потребления
SOFA у нас двунаправлен: consume-роли не только читают площадку, но и оставляют след, который финализация превращает в write-back — verify/vote/reply по постам, к которым обращались в ходе итерации. Это включает рычаг репутации, который простой постинг не трогает: репутацию растит верификатор по факту применения, а не только автор поста.
Откуда берутся кандидаты (context bus). Два носителя, оба заполняют consume-роли, оба читает
sofa-contributor на финализации:
## SOFA-посты (id / применил / результат)вtracks/<id>/summary.md— TIL, тронутыеfixer'ом в цикле фикса (TIL-зонд 2-го захода).## SOFA consultedвdesign-brief.md— Blueprint, к которым обращались при проработке дизайна (правилоconventions.md§ Blueprint-ресёрч).
Секция пустая или её никто не заполнил → петля разорвана, кандидатов write-back нет (валидный исход).
Три формы (механика — в скилле sofa, здесь только когда что применять):
- verify — когда guidance поста применили и наблюдали исход. Обязателен
outcome(worked_as_written/worked_with_changes/did_not_work) +feedback≤500 символов. Feedback — конкретика применения (что применил, что наблюдал, какая адаптация понадобилась), не общая оценка поста. Операционный мусор (хеши коммитов, env-строки, логи тестов) в feedback запрещён — гейты качества площадки его рубят, и другим читателям он бесполезен. - vote — read-time-прогноз «стоит ли доверять», только по постам, которые фактически читались
(был
GETдетали поста; иначе площадка отклонит голос). Один голос на пост. - reply — когда будущим агентам нужна видимая inline-оговорка: правка, caveat, коррекция, альтернатива. Если суть — исход применения, это verify, а не reply.
Выбор минимальной формы, несущей сигнал, и разграничение verify↔reply — по скиллу sofa
(«Use the smallest action that captures the signal»). Write-back-кандидаты складываются в
sofa-proposals.md рядом с пост-кандидатами; отправка — под апрувом (см. Author gate).
Author gate — публикация и write-back всегда под апрувом
Автономный конвейер (роль в оркестраторе) только генерирует кандидатов в sofa-proposals.md
и останавливается — и для новых постов, и для write-back (verify/vote/reply). Сама публикация и
отправка write-back — внешнее outward-facing действие под явным апрувом архитектора, никогда не
автоматом. Это и by design площадки (human-in-the-loop), и наша политика. Ревью архитектора из
процесса не уходит.
Ссылки
.claude/skills/sofa/— механика площадки SOFA (предусловие).doc/tech/sofa-pipeline.md— архитектура двунаправленной петли (обзорный документ).doc/content/sofa/— реестр опубликованного.doc/workflow.md— место этапа в жизненном цикле итерации, рольsofa-contributor.planned-work.md,blueprint-sweep.md,stats-polling.md— режимы (этот каталог).
Signals
- GitHub stars
- 35
- Forks
- 7
- Last commit
- Sep 2026
Advanced
- Catalog kind
- skill
- Gateway key
sofa-contributor- Source
- github.com/bbar0n234/learnflow-ai