prompt-regress
Промпт v13 может починить селект и сломать подтверждение удаления. prompt-regress сравнивает два сохранённых прогона одних и тех же UI-кейсов. Он показывает, какие стали лучше, какие сломались и что написано в заметке. Опубликованный дифф — 16 сохранённых кейсов, а не вызов модели.
Зачем
Новая версия системного промпта редко бывает целиком лучше. Одним задачам становится лучше, другим хуже. Модель начинает использовать 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, если он начал или перестал проходить, или если балл DS сдвинулся на 10 пунктов и больше. Иначе метка unchanged.
| Условие | Метка |
|---|---|
| перестал проходить, или балл DS упал на 10 пунктов и больше | regressed |
| начал проходить, или балл DS вырос на 10 пунктов и больше | improved |
| pass не изменился, и балл DS сдвинулся меньше чем на 10 пунктов | unchanged |
На 16 сохранённых кейсах команда печатает:
v12 → v13
6 improved / 2 regressed / 8 unchanged
tokens 26270 → 26230Колонка токенов — сумма из сохранённого прогона, а не счёт из API.
Все кейсы
Заметки скопированы из runs/v13.json. Восемь кейсов не сдвинулись достаточно, чтобы попасть в дифф. Средний балл спрятал бы это.
| Кейс | Pass | DS | Итог | Заметка |
|---|---|---|---|---|
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 сравнивает два таких прогона, когда меняется промпт, пакет контекста или модель. Регрессия здесь — не падение общего числа, а список кейсов, которые изменились.
Предел
Команда не запускает модель и не рисует интерфейс. Заметки и баллы лежат в JSON, который записан заранее. Пока нет скриншотов, объяснение — одна строка на кейс. 6 / 2 / 8 относится к этим 16 сохранённым кейсам, а не к набору из ста задач.