prompt-regress

Промпт v13 может починить селект и сломать подтверждение удаления. prompt-regress сравнивает два записанных прогона одного набора: какие кейсы выросли, какие упали, и что сказано в заметке проверки. Опубликованный дифф — 16 фикстурных кейсов, не живой вызов модели.

Зачем

Новая версия системного промпта редко бывает целиком лучше. Она поднимает одни UI-задачи и роняет другие: модель начинает брать Select и одновременно забывает danger-вариант у удаления. Смотреть на средний балл здесь вредно.

prompt-regress версионирует промпт и показывает дифф по кейсам. Данные для диффа — записанный прогон, того же рода, что фикстуры в ds-eval.

Промпты

prompts/v12.md просит скорость и разрешает нативный контрол, если компонент системы неясен.

You build the screen from the design system.
Prefer speed. If a system component is unclear, use a native control.

prompts/v13.md называет компоненты и запрещает сырой button, hex и самодельную модалку. Если кейс спорит с системой, промпт велит следовать системе.

You build the screen from the design system.
Use Button, Input, Select, and Dialog. Never emit a raw button, a hardcoded hex color, or a custom modal.
If a case conflicts with the system, follow the system and say so.

Запуск

python3 prompt-regress/prompt_regress.py diff \
  prompt-regress/prompts/v12.md \
  prompt-regress/prompts/v13.md

Имя файла промпта находит парный JSON: prompts/v12.md читает runs/v12.json. В кейсе лежат pass, балл DS, токены и заметка. Скриншота в этой фикстуре нет: поле можно добавить, когда прогон его сохранит.

Дифф

Кейс improved или regressed, если pass/fail перевернулся или балл DS сдвинулся на 10 пунктов и больше. Иначе он unchanged.

УсловиеМетка
pass перевернулся в fail, или DS упал на 10+regressed
fail перевернулся в pass, или DS вырос на 10+improved
pass тот же и DS сдвинулся меньше чем на 10unchanged

На 16 записанных кейсах команда печатает:

v12 → v13
6 improved / 2 regressed / 8 unchanged
tokens  26270 → 26230

Колонка токенов — сумма из записанного прогона, не счёт из API.

Все кейсы

Заметки скопированы из runs/v13.json. Восемь кейсов не сдвинулись достаточно, чтобы попасть в дифф. Средний балл это спрятал бы.

КейсPassDSИтогЗаметка
select-001нет → да38 → 91выросSelect with a label.
settings-002нет → да44 → 93выросButton and color token.
dialog-003нет → да41 → 90выросDialog instead of a div.
empty-004да86 → 87без сдвигаStill the empty-state pattern.
table-005да80 → 82без сдвигаTable unchanged in substance.
form-006нет → да52 → 89выросEvery field has a label.
delete-007да → нет84 → 61упалConfirm button lost its danger variant.
tabs-008да79 → 80без сдвигаTabs still from the system.
toast-009нет → да47 → 85выросToast uses the system component.
billing-010да83 → 84без сдвигаBilling stays on tokens.
permissions-011нет → да55 → 86выросCheckbox group from the system.
profile-012да → нет88 → 58упалAvatar control became a raw button.
bulk-013да76 → 78без сдвигаBulk bar still acceptable.
filters-014нет49 → 51без сдвигаChips still hardcoded.
search-015да81 → 83без сдвигаSearch field still labeled.
nav-016да77 → 79без сдвигаSide nav unchanged.

Запись

Один кейс в двух прогонах. Форма записи одинаковая: id, pass, ds, tokens, note.

{
  "v12": {
    "id": "select-001",
    "pass": false,
    "ds": 38,
    "tokens": 1640,
    "note": "Native select, no label."
  },
  "v13": {
    "id": "select-001",
    "pass": true,
    "ds": 91,
    "tokens": 1720,
    "note": "Select with a label."
  }
}

Куда встаёт

ds-context фиксирует, какой контекст видела модель. ds-eval считает кейс. prompt-regress сравнивает два таких прогона, когда меняется промпт, пакет контекста или модель. Регрессия здесь — не падение общего числа, а список кейсов, которые перевернулись.

Предел

Команда не запускает модель и не рендерит UI. Заметки и баллы лежат в JSON, который записан заранее. Пока нет скриншотов, объяснение — одна строка на кейс. 6 / 2 / 8 относится к этим 16 фикстурам, не к набору из ста задач.