Laravel Boost v2.6.0 представляє суттєві зміни в роботі з тестуванням та безпекою баз даних. Реліз об'єднує кілька навиків тестування в один уніфікований підхід, додає захист на рівні бази даних для інструменту DatabaseQuery MCP та виправляє проблеми з управлінням навиками.
Уніфікований навик Testing Best Practices
Раніше Laravel Boost постачався з кількома окремими навиками тестування: pest-testing, enforce-testing та phpunit-guidelines. Через перетин функціональності цих навиків AI-агенти могли створювати непослідовні тестові набори, тестувати внутрішні компоненти фреймворків або додавати зайві моки.
Версія 2.6.0 консолідує всі рекомендації з тестування в єдиний навик testing-best-practices. Boost динамічно формує цей навик на основі встановлених у проєкті пакетів тестування, адаптуючись до Pest, PHPUnit, браузерного тестування та Test Impact Analysis.
Дев'ять ключових напрямків тестування
Консолідований навик охоплює дев'ять основних сфер:
- Assertions (Твердження): заохочує використання прямих семантичних тверджень, таких як
assertOk(), замість перевірки сирих HTTP-кодів статусу
- Endpoint Tests (Тести ендпоінтів): фокусує HTTP-тести на авторизації та основних відповідях, а не на тестуванні валідаційних матриць через повні запити
- Feature Discovery (Виявлення функціональності): допомагає агентам знаходити існуючі тести перед написанням нових
- Isolation (Ізоляція): запобігає витоку спільного стану та обмежує транзакції бази даних релевантними тестами
- Naming (Іменування): встановлює чіткі конвенції найменування, які описують очікувану поведінку
- Performance (Продуктивність): не рекомендує повільні патерни тестування, наприклад створення зайвих записів у базі даних у хуках налаштування
- Review (Перегляд): визначає критерії для аудиту тестових наборів та видалення дублікатів покриття
- Security (Безпека): просуває тестування ворожих вхідних даних та неавторизованих меж
- Test Data (Тестові дані): рекомендує фокусовані фабрики моделей замість роздутих наборів даних
Транзакції лише для читання на рівні бази даних
Інструмент DatabaseQuery MCP раніше використовував лексичний парсинг запитів та фільтрацію за ключовими словами для запобігання операціям запису. Хоча перевірка ключових слів блокує очевидні запити INSERT або UPDATE, SQL-діалекти включають складні конструкції, такі як модифікуючі дані загальні табличні вирази (CTE), які лексичні парсери можуть пропустити.
У версії 2.6.0 DatabaseQuery виконує запити всередині транзакції лише для читання, яка забезпечується самою базою даних:
- На MySQL та MariaDB Boost видає
SET TRANSACTION READ ONLY перед початком транзакції
- На PostgreSQL Boost запускає транзакцію та виконує
SET TRANSACTION READ ONLY
- На SQLite Boost встановлює
PRAGMA query_only = ON
Boost завжди відкочує транзакцію після завершення запиту, гарантуючи, що рушій бази даних відхилить модифікації навіть якщо запит обійде лексичний парсинг.
Покращення управління навиками та інструментів
Цей реліз також включає кілька виправлень інструментів:
Безпечна інсталяція навиків: команда boost:add-skill тепер ігнорує файли SKILL.md у кореневій директорії репозиторію, запобігаючи видаленню всієї директорії навиків під час інсталяції. Команда також приймає довільні форми шляхів навиків.
Підтримка MySQL ANSI_QUOTES: читання схеми тепер цитує типи таблиць як рядкові літерали, дозволяючи інструментам схеми працювати, коли MySQL працює в режимі ANSI_QUOTES.
Ін'єкція MCP Server: Boost зберігає кінцеві коментарі при записі конфігурацій MCP-сервера у JSON-файли.
Виявлення агентів: Boost запобігає помилковому виявленню Antigravity при скануванні спільної директорії .agents.
Повний список змін доступний у changelog на GitHub, а детальніше про можливості Laravel Boost можна дізнатися з офіційної документації проєкту.