Генерація моделей верифікації TLA+ для розподілених систем за допомогою AI-агентів
Команда Depot використала AI-агентів для перекладу транзакцій Go та викликів S3 API безпосередньо у формальні специфікації TLA+. Засіб перевірки TLC дослідив понад 14 мільйонів станів і виявив баг паралелізму під час збирання сміття.

Вплив: Високий
Чому це важливо
Тепер ви можете доручити рутинне написання синтаксису TLA+ AI-агентам, зосередившись лише на визначенні критичних інваріантів системи.
TL;DR
- 01Використовуйте AI-агентів для трансляції бекенд-логіки у модулі автоматів станів TLA+.
- 02Поєднуйте перевірку моделей із рев'ю коду, зосередженим на інваріантах безпеки, а не на синтаксисі.
- 03Впроваджуйте версіонування об'єктів у S3 як бар'єр видалення для запобігання гонитві станів під час GC.
Ключові факти
- Досліджено станів
- 14 290 224 унікальних станів
- Час роботи TLC
- ~21 хвилина
- Перевірено властивостей
- 10 інваріантів безпеки, 2 властивості живості
- Формат ключів сховища
- blobs/sha256/<digest>
Подолання високої вартості створення специфікацій TLA+
Формальна верифікація за допомогою Temporal Logic of Actions (TLA+) та інструменту TLC забезпечує математичне доведення коректності системи, але ручне написання специфікацій завжди вимагало забагато часу. Команда Depot обійшла цю перешкоду, використавши AI-агентів для автоматичного перекладу Go-коду, SQL-запитів та S3-транзакцій у TLA+. Розробники зосереджуються виключно на формулюванні інваріантів безпеки.
Виявлення гонитви станів під час збирання сміття
Під час переписання збирача сміття для Depot Registry засіб TLC проаналізував 14 290 224 унікальних станів за 21 хвилину, виявивши критичний стан гонитви. Збирач сміття фіксував відсутність посилань і запускав видалення за шляхом blobs/sha256/<digest>, коли клієнт паралельно повторно завантажував той самий блоб і створював новий маніфест.
Версіонування S3 як безпечний бар'єр видалення
Оскільки посилання в MySQL та блоби в S3 неможливо оновити в межах єдиної атомарної транзакції, звичайна повторна перевірка не працює. Depot вирішила проблему за допомогою версіонування бакетів S3. Збирач сміття фіксує конкретний ID версії v1 і видаляє тільки його. Якщо паралельно відбувається нове завантаження, воно отримує версію v2, зберігаючи цілісність даних без застосування блокувань.
Спробуй за 2 хвилини
ManifestNeedsData == \A p \in PusherIDs: manifestExists[p] => s3Versions /= {}tla
✓ Коли використовувати
- Верифікація неатомарних розподілених транзакцій між реляційними БД та об'єктним сховищем.
- Проєктування асинхронних збирачів сміття або фонових процесів узгодження.
- Автоматизація написання синтаксису формальних специфікацій за допомогою AI-агентів.
Що зробити сьогодні
- Використайте AI-агента для витягування кроків транзакцій БД та перетворення їх у переходи станів TLA+.
- Перевіряйте граничні випадки розподілених систем за допомогою інструменту перевірки моделей TLC.
- Увімкніть версіонування S3 для контентно-адресованих сховищ, щоб обмежити видалення конкретними ID версій.
Джерела