T27.AI

Блог

Пересобирать только изменившееся: t27 повторно использует вердикт спеки, пока не сдвинулось то, от чего он зависит

2026-10-11 · 4 мин чтения

[только программные вердикты; 570 спек из 1811 ещё требуют собственных исправлений] t27c теперь хранит печать рядом с каждой проверенной спекой и повторно использует её вердикт, пока не изменились сама спека, её импорты, сгенерированный код, инструменты тестов и конфигурация. На master t27c frontier повторно использует 1241 спеку из 1811 — 9 октября было 2; аудит за раунд перепроверяет одну такую спеку из 16, и четыре раунда расхождений не нашли.

Титульная карточка статьи, иллюстрации пока нет: Пересобирать только изменившееся: t27 повторно использует вердикт спеки, пока не сдвинулось то, от чего он зависит
Открыть титульную карточку в исходном размере
#t27#Verification#Build

В t27 около 1800 спек, и проверить одну — значит скомпилировать её и прогнать её тесты. Большинство спек между двумя коммитами не меняется, но каждая проверка начиналась с нуля. С 9 октября t27c хранит рядом с каждой проверенной спекой печать (seal) и использует её вердикт повторно, если ничего, от чего он зависит, не изменилось. Сейчас на master так повторно используются 1241 спека из 1811; два дня назад — 2.

Что записано в печати

Вердикт — это факт о спеке, о спеках, которые она импортирует, о коде, который t27c для неё сгенерировал, об инструментах, прогнавших тесты, и о конфигурации. Печать v2 записывает каждую из этих частей, а t27c frontier обходит граф импортов и для каждой спеки отвечает: REUSE или первая часть, которая отличается. Инструменты судятся по результату, а не по версии: если изменение компилятора оставило сгенерированный код спеки байт в байт прежним, её вердикт остаётся в силе.

Спеки, которые не перепроверяются заново06001200180029 окт4249 окт 20:1811159 окт 21:4211639 окт 23:00114410 окт 12:05117310 окт 12:30119710 окт 15:50124110 окт 17:20другие правки 86 спек
Спеки, чей вердикт t27c frontier повторно использует на master, измеренные на каждом шаге цикла (журнал t27#8314). Провал в 12:05 10 октября — чужая работа: 86 спек изменили и не запечатали заново. Время — UTC.

Что сдвинуло число

ШагПовторноPR
Печать v2 и t27c frontier2 из 1712t27#8110
Две спеки-узла, которые импортируют все остальные (types, constants)424 из 1743t27#8177, t27#8209
Новая печать для каждой спеки, чьи тесты проходят1115 из 1751t27#8372
frontier правильно читает use a::b::Item и спеки без module1151t27#8385
t27c frontier --reseal: перепечатка одной командой1173t27#8392, t27#8554
Спеки, которые проходили, но их просто ни разу не запечатали1241 из 1811t27#8700

Шесть исправлений перевода t27 в Zig (t27#8415, t27#8418, t27#8566, t27#8617, t27#8636, t27#8667) провели каждое от 2 до 9 спек мимо одной ошибки компиляции. Каждое измерено по всем .t27 в репозитории, и каждое в том же pull request заново запечатало спеки, которые сдвинуло. Один #8667 изменил сгенерированный код 173 спек; 74 из них, которые уже проходили, прогнаны до и после — с одинаковым результатом.

Что держит повторный вердикт честным

На плате

Та же идея работает на кремнии. Агент рядом с каждой платой (t27#8155) заменяет управление платой по сети: кристалл C, прогнанный для R3-3 через USB/IP, занял около 2,5 часа, а первый прогон агента, на кристалле A, — 42 секунды. Кэш битстрима (t27#8296) сокращает повторную сборку с 39 секунд до 4–5, причём каждое десятое попадание пересобирается и сравнивается байт в байт. Плата по-прежнему работает каждый раз; повторно используется только сборка.

Чего это не показывает

Повторный вердикт хорош ровно настолько, насколько полно его печать записывает входы: вход, которого она не называет, или тест, проходящий случайно, останутся незамеченными — поэтому аудит постоянно перепроверяет выборку. 570 спек из 1811 всё ещё не используются повторно, и большинству нужны собственные исправления, а не новые инструменты. Дважды за эту работу pull request слился с красной проверкой, которую сам и вызвал (t27#8415, t27#8667); оба раза её исправили следующими PR (t27#8418, t27#8672).

Чего это не решает

Пруфы

Поработаем вместе

Хотите так же проверить собственный дизайн?

Я аудирую RTL и строю независимые побитово точные модели, затем провожу результат через синтез и, когда это полезно, проверяю на плате Artix-7. Первый модуль проверки — бесплатно.