Регрессия
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 сдвинулся меньше чем на 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 сравнивает два таких прогона, когда меняется промпт, пакет контекста или модель. Регрессия здесь — не падение общего числа, а список кейсов, которые перевернулись.
Предел
Команда не запускает модель и не рендерит UI. Заметки и баллы лежат в JSON, который записан заранее. Пока нет скриншотов, объяснение — одна строка на кейс. 6 / 2 / 8 относится к этим 16 фикстурам, не к набору из ста задач.