Quality Attribution
Прод сломался — какая именно сессия (или цепочка) написала эту строку. LinearB / Faros / GetDX видят git + ticketing; мы видим какая команда / какой prompt / какая версия AGENTS.md написала тот код.
Зачем#
Research dossier рекомендовал session-grain quality attribution как #1 strategic bet — никто из competitor'ов этого не делает, потому что у них нет данных уровня “что harness делал внутри session”. У нас есть.
Источники incident'ов#
- Daemon revert detection — daemon следит за
git logв репо с активными сессиями. При появлении revert-commit'а эмиттитquality_eventWS-сообщение с файлами, которые он откатил. (Daemon-side detector — work-in-progress; вручную можно репортить через REST.) - External webhook — PagerDuty / Sentry / GitHub security advisory → POST на
/plugins/quality-attribution/incidents. Bearer auth, тот же что для остальных API. - Manual entry — оператор может зарегистрировать incident руками через UI (полезно когда не настроен webhook).
Алгоритм attribution#
Для каждого incident'а: ищем сессии user'а за lookback_days (default 30), у которых хотя бы в одном events.payload присутствует substring любого из file_paths. Возвращаем уникальные session_id'ы, сортируем по recency, ограничиваем max_sessions (default 25).
Dispute (manual unlink)#
Когда attribution ошибся — на странице incident'а нажимаешь «dispute» рядом с конкретной сессией. POST /incidents/{id}/unlink просто делает array_remove(attributed_session_ids, $1). raw_payload не трогается — audit trail сохраняется. По частоте disputes можем потом тюнить substring-heuristic.
Endpoints#
POST /plugins/quality-attribution/incidents— UPSERT по (user_id, kind, ref) с пересчётом attributionGET /plugins/quality-attribution/incidents— список (filter: kind, limit)GET /plugins/quality-attribution/incidents/{id}— детальPOST /plugins/quality-attribution/incidents/{id}/unlink— отвязать сессиюGET /plugins/quality-attribution/sessions/{id}/incidents— reverse view: «эту сессию упрекают в N инцидентах»
Kind#
revert— обнаруженный или вручную записанный git revert.ref= SHA revert-коммитаincident— внешний инцидент (PagerDuty, Sentry advisory).ref= ID того тулаrollback— production rollback (по сути revert'а в deploy).ref= деплой-ID
Config#
lookback_days— как далеко в прошлое сканировать events (default 30)max_sessions— потолок результата attribution (default 25)