Архитектура настроек в PHP: почему константы — тупик, и почему JSON?

Рано или поздно любой модульный проект на PHP обрастает десятками настроек и превращается в минное поле из «магических строк» или гигантских классов-помоек с сотнями констант. В эт…

Cursor под капотом: куда пропал Reindex, как устроен Instant Grep и работа с AI-скиллами

Разработчики, открывающие настройки свежих версий Cursor в поисках кнопки «Resync» или статуса переиндексации проекта, обнаруживают, что привычных тумблеров больше нет ни в меню ID…

Cursor под капотом: изоляция чатов, ловушки кастомных моделей и удаление соавтора из Git

При ежедневной разработке в Cursor с использованием чатов и фоновых агентов разработчик неизбежно упирается в неочевидную механику самого редактора: контекст переполняется старыми…

Pest 5: разбираем breaking changes, параллельные кэши и почему старые костыли отправляются в архив

При запуске параллельных тестов и проверки покрытия типов в крупных PHP-проектах на связке Pest + PHPStan разработчики часто сталкиваются со странными падениями. Самый яркий пример…

Баг в пайплайне: почему постоянный PR dev → main удваивает запуски GitHub Actions и как это исправить

Разбираем частый баг GitHub Actions: почему постоянный PR dev → main при каждом пуше запускает два одинаковых воркфлоу параллельно, почему не спасает стандартный concurrency и как…

Gitea как замена GitHub: почему для пет-проектов и коммерческой разработки я выбрал свой Git-сервер

Честный опыт переезда на Gitea с раннером act_runner: почему бесплатные минуты GitHub Actions мгновенно сгорают в эпоху AI-агентов, чем не подошел монструозный GitLab и как разверн…