Я подумал, что мне легче ориентироваться, если будут какие-то отсечки и ченджлоги, так что теперь у pcom есть и релизы лол. Когда-нибудь запишу скринкаст с изменениями за последние полтора года.
В эти выходные я почувствовал прилив вдохновения и поправил разное вокруг rss-лент.
- при добавлении новой ленты теперь не добавляются все посты с начала времен, а только последние пять. Здесь есть неконсистентность, т.к. если кто-то ленту сейчас уже читает, то вообще никаких постов в ленте не появится, но я думаю, что это нормально, т.к. rss читаю я один (да я вообще один здесь)
- при удалении рсс постов из ленты страница больше не перезагружается, удаляется только один блок с постом
- ошибки загрузки фида теперь удаляются при первой успешной загрузке
- был смешной баг, когда при любой ошибке в следующий раз фид грузился только через 2 месяца
В разработке несколько моментов поменялось
Во-первых, я добавил докер с постгресом в тесты. Теперь можно тестировать всякую логику, завязанную на базу, и это очень удобно. Не надо мокать, не надо использовать симулякры, любой тест может по запросу получить хэндл на базу со всеми миграциями и тестировать, что надо. Тесты изолированы, вообще никаких проблем.
В-вторых, про удаление rss-постов из фида. pcom, как известно, продукт странный, заточенный на минимальный фронтенд. Для динамики используется stimulus.js с небольшим набором контроллеров, который закрывает всю динамическую часть. Плюс такого подхода, конечно, в простоте. В отличие от современных SPA, я почти никогда не думаю про фронтенд при разработке, он просто незаметен. Из минусов, сложную динамику делать сложно, все, что не вписывается в стандартные паттерны, делать сложно. Т.к. в связке с stimulus.js я использую htmx, то приходится женить одно с другим. В stimulus.js у меня определен контроллер action, который позволяет в одну секунду прикрутить еще одну кнопку на сайт, но до сегодняшнего дня он был сильно ограничен - исключительно только обновление страницы в случае успеха. Такой подход работает на удивление бодро, но на тяжелых или длинных страницах уже не так хорошо. В htmx используется другой подход - можно любой элемент превратить в ajax ручку и заменить произвольный кусок страницы html-ем из ответа от сервера. Когда-то такой подход работает, но в каждом конкретном случае прописывать hx- аттрибуты не хотелось, как не хотелось везде возвращать html, но хотелось получить все остальные плюхи от htmx. Например, в возвращаемых хедерах можно послать эвент на страницу, изменить способ модификации разметки и много что еще. После нескольких итераций удалось поженить одно с другим, и теперь можно использовать контроллер, но управление ответом передавать htmx.
Я пока на сто процентов уверен, что был бы гораздо более несчастлив с любым фронтенд фреймворком и его тысячей зависимостей, и pcom никуда бы не уехал.
В третьих, я этот раз я активно использовал Windsurf + Claude Sonnet 4.5. Получилось, как обычно - многие задачи решались на ура, но в паре задач агент начинал закапываться, и незаметно жрал все сэкономленное время. В одном из случаев я в первый раз решил по экспериментировать с другими моделями, и GPT-5.2 Medium Reasoning смог не споткнуться и решить проблему, в которой буксовал Клод. Смешно, но почти сразу после этого оказалось, что можно было не изобретать велосипед и не городить хаков, а просто обновить проблемную зависимость, и проблема ушла.