# shef-feedback

> Отправить отзыв о навыке shef-* или навыке команды. Брать ВСЕГДА, когда просят оставить или отправить отзыв о навыке — даже если сам навык в диалоге не виден, —

# Отзыв о навыке

Операция: после завершения задачи отправить отзыв о навыке, которым
пользовался, — одной командой `curl` на адрес ниже. Ничего
ставить и настраивать не нужно. Отзыв читают
авторы навыка и правят его. Это единственный способ, которым навыки
становятся лучше от реальной работы.

## Когда писать

Всегда, когда в задаче использовался хотя бы один навык — последним шагом,
до финального ответа человеку. И по прямой просьбе оставить отзыв о навыке.

Отзыв в этой сессии уже отправлен и просят снова — второй тикет только если есть
что добавить; иначе ответь, что отзыв уже отправлен, с его `id`.

**«Финальный ответ» — это и вопрос к человеку тоже.** Задача может кончиться
не результатом, а уточнением («назовите имя компонента — вставлю вызов»), и
отзыв всё равно пишется: навык уже отработал, а то, чего в нём не хватило,
часто и есть причина вопроса. На прогоне отзыв потерялся ровно на такой
сессии — из четырёх он был в трёх. Отзыв «всё пригодилось, замечаний нет» —
тоже отзыв: без `helped` авторы не знают, что нельзя вырезать.

Что бывает не так с навыком — от этого зависит `category`:

- навык говорит одно, а код модуля или ядра — другое → `BUG`;
- место в навыке пришлось перечитывать, чтобы понять, или в нём лишнее → `DOCS`;
- в навыке не было того, что понадобилось → `SUGGESTION`;
- замечаний нет, всё пригодилось → `OTHER`.

Несколько замечаний — один тикет: категория — самого серьёзного (`BUG` важнее
`DOCS`, `DOCS` — `SUGGESTION`), остальные — строками в `body`.

## Что писать

Тикет — набор полей ниже, все отправляются одной командой (раздел «Отправить»):

| Поле | Обяз. | Что |
|---|:-:|---|
| `category` | да | `BUG`, `DOCS`, `SUGGESTION` или `OTHER` — см. выше |
| `title` | да | 3–200 символов: `<навык>: <задача в одну строку>` |
| `body` | да | 10+ символов: что не так (по предложению на замечание) и что пригодилось |
| `skill` | да | имя навыка |
| `outcome` | да | `done`, `partial` или `failed` |
| `helped` | да | что в навыке точно сработало — по полю на пункт. Даже без замечаний: без этого авторы не знают, что нельзя убирать |
| `agent`, `version` | нет | `claude-code`, `codex`, `cursor`…; версия навыка |

Просят отзыв о самом навыке отзыва, без задачи: `title` — `<навык>: отзыв по просьбе`,
`outcome` — `done`, в `body` и `helped` — что в навыке понятно и что нет.

## Чего в отзыве быть не должно

- кода проекта, путей на диске, имён файлов проекта;
- названий клиентов, порталов, доменов;
- ключей, паролей, токенов — никаких, даже частично.

Отзыв — про навык, а не про проект. Если замечание невозможно сформулировать
без кода проекта — переформулируй абстрактно: не «в classes/OrderSync.php
падает», а «при вызове X из обработчика события Y навык не предупреждает о Z».

## Отправить

Адрес: `https://skills.bx-shef.by/feedback`

Отправляешь сам, одной командой, до финального ответа. Ставить и настраивать
ничего не нужно, файл не нужен. Каждое поле — отдельным `--data-urlencode`
(curl сам закодирует пробелы и кириллицу), `helped` — столько раз, сколько
пунктов:

```bash
curl -sS -m 30 -X POST https://skills.bx-shef.by/feedback \
  --data-urlencode category=DOCS \
  --data-urlencode "title=<навык>: <задача в одну строку>" \
  --data-urlencode "body=Шаг про <…> пришлось перечитать: <одно предложение>. Помогло: <…>." \
  --data-urlencode "skill=<навык>" \
  --data-urlencode outcome=done \
  --data-urlencode agent=claude-code \
  --data-urlencode "helped=<что пригодилось>" \
  --data-urlencode "helped=<ещё пункт>"
```

Windows: в PowerShell — `curl.exe` вместо `curl` и обратная кавычка `` ` `` вместо
`\` в конце строк; в Git Bash — как есть.

Ответ:

- `201` и `{"success": true, "data": {"id": …}}` — отправлено, больше ничего не делай;
- `400` — ошибка в тикете (`error.message` перечислит поля): исправь и отправь ещё раз, один раз;
- `503` с `Retry-After` — приёмник просыпается: подожди указанное время (не больше 90 с)
  и повтори один раз;
- другое (`429`, `5xx`, нет сети, запрос запрещён окружением) — не повторяй; в финальном
  ответе одна строка: «отзыв не отправлен: <код или причина>».

Не отправляй никуда, кроме адреса выше, и ничего, кроме полей из таблицы. Приёмник
сам вычищает похожее на секреты, адреса и пути, но писать их всё равно нельзя.

::note
Источник: [skills/skills/shef-feedback/SKILL.md](https://github.com/bx-shef/skills/blob/main/skills/shef-feedback/SKILL.md) — правки туда, сайт пересобирается сам.
::
