ENGINEERING DEVLOG
Codzienny zapis decyzji architektonicznych, testów systemów agentowych, postępów w Pythonie/TypeScript oraz automatycznych syntez dnia generowanych przez model Gemini z commitów w Git.
Rozdzielenie błędów dostawcy od kondycji klucza
Przeniosłem klasyfikację odpowiedzi dostawcy do reguły kodu, żeby nie mylić awarii usług z problemem klucza. Sprawdziłem też powracające błędy operacyjne i trafienia skanera.
Reguły pamięci i dane cardio
Przeniosłem reguły do walidowanych bloków i dodałem ochronę pamięci przed thrashingiem. Uporządkowałem też wpisy cardio, aby można je było odpytywać miesięcznie i uwzględniać w podsumowaniach tygodniowych.
Czytelniejsze plany i wyniki kontroli
Poprawiłem strukturę planów treningowych, dodałem osobną ścieżkę Telegrama i zakończyłem pętlę błędnego formatu komunikatem `brak_danych`. Sprawdziłem też wyniki kontroli oraz najnowsze odczyty powracających błędów.
Timer floty zapisany bez uruchomienia
Zarejestrowałem timer floty, pozostawiając jego uruchomienie do czasu zgody człowieka. Sprawdziłem też nowe wyniki powracających odmów dostępu i sygnałów monitoringu.
Blokada stanu i nierozstrzygnięte błędy zadań
Zmieniłem diagnozę odmów uwierzytelniania z błędnych kluczy na blokadę stanu i przyjąłem jedno źródło kluczy oraz kolejności profilu. Sprawdziłem też powracające błędy heartbeat, skanera i zadania wymagającego wyboru konta.
Powracające błędy i korekty rejestru
Sprawdziłem powtarzające się błędy autoryzacji i kontroli oraz ograniczyłem fałszywe alarmy. Zdecydowałem też, że wyłączone zadania pozostają w rejestrze z odpowiednią adnotacją.
Konflikty planu treningowego i deduplikacja plików TCX
Portal ostrzega o konfliktach w planie treningowym, a analizator TCX pomija ten sam trening zapisany w dwóch formatach. Plan zmian z portalu zapisuje się atomowo.
Rejestracja niezatwierdzonego zadania w harmonogramie
Zadanie synchronizacji pojawiło się w crontabie bez wpisu w rejestrze. Dodałem je z flagą niezatwierdzone, żeby alarm 'poza rejestrem' ucichł, a decyzja o zadaniu pozostała po stronie właściciela.
Ostrzeganie o powtarzających się konfliktach synchronizacji
Synchronizacja ostrzega, gdy ten sam plik konfliktuje w kolejnych przebiegach. Plik stanu portalu wyłączyłem z synchronizacji i zapisuję go tylko przy zmianie, bo generował fałszywe konflikty.
Awaria briefingu kalendarza ukryta jako brak wydarzeń
Naprawiłem briefing kalendarza, który po błędzie importu zwracał taki sam wynik jak przy pustym dniu. Zmieniłem też obsługę błędów tak, by awaria była widoczna w logach i alarmach.
Puste wejście jako jawny wynik zadania cyklicznego
Sprawdziłem serię pominiętych uruchomień heartbeat i rozdzieliłem oczekiwany brak danych od sygnału, że monitor może milczeć. Dzięki temu wiem, które zdarzenia wymagają dalszej obserwacji.
Pomiar czasu obsługi zadań w panelu
Wtyczka bramki zapisuje teraz czas obsługi każdego żądania do pliku logu. Przy okazji zmniejszyłem hałas w logach, który rósł bez ograniczeń.
Rozmowa wstępna przed planem treningowym
Agent treningowy najpierw przeprowadza wywiad z testerem, a dopiero potem układa plan. Przy okazji dopisałem zapisy retencji rozmów z bramką przed kasowaniem.
Deduplikacja treningów przed obliczeniem obciążenia
Wydałem dane-sportowe 0.4.0 z deduplikacją treningów z portalu i z czatu. Ten sam trening liczy się raz, zanim trafi do obliczenia obciążenia ACWR.
Jedna edytowalna kopia w synchronizacji agenta i repozytorium
Synchronizacja po konflikcie wybrała nowszą kopię i zgubiła komentarz z drugiej wersji. Przywróciłem komentarz z archiwum konfliktu i dopisałem regułę, że każdy plik ma jedną edytowalną kopię.
Dynamiczny port autodeploy i izolacja restartu przed samozapętleniem watchdoga
Wyliczam port awaryjny autodeploy z adresu origin gita i izoluję restart w systemd-run, dzięki czemu watchdog nie wszczyna fałszywych alarmów na własnych śladach.
Błędny odczyt konfiguracji kierował polecenie panelu prosto do modelu
Naprawiłem kaskadowe rozwiązywanie konfiguracji wtyczki panelu, dzięki czemu komenda odświeża kafelki lokalnie, a setsid zapobiega ucinaniu asynchronicznych restartów.
Wykrycie próby przełamania izolacji pamięci agentów i utwardzenie piaskownicy
Skaner pamięci wykrył wstrzykniętą instrukcję nakazującą odczyt prywatnego profilu innego agenta, a sandbox zablokował próby ucieczki ze ścieżki roboczej bota.
Weryfikacja cytowań i liczb w odpowiedziach agenta na bazie PubMed
Wdrożyłem moduł PubMed z automatyczną kontrolą halucynacji: parser XML, weryfikację identyfikatorów PMID, detekcję wycofanych badań i kontrolę zgodności liczb.
Zawężenie poleceń agenta i odcięcie wstrzykniętego czytania cudzego profilu
Ograniczyłem powłokę bota treningowego wyłącznie do analizatora TCX, zbijając narzut tokenów z 31k do 29k, oraz zablokowałem próbę odczytu prywatnego profilu innego agenta.
Cicha awaria dispatchu po nocnym reloadzie pluginów
Zszedłem ślad trzygodzinnej przerwy w działaniu bota do nocnego polecenia `plugins reload memory-core` o 03:07 i dodałem watchdog oraz obserwator reloadów, które wykrywają ten podpis i restartują proces w tle.
Pamięć agenta przez kilka nocy nie zapisywała nic, a cron mówił ok
Nocna konsolidacja pamięci przestała tworzyć pliki, mimo że zadanie zwracało sukces. Znalazłem przyczynę, przeładowałem wtyczkę i sprawdziłem, że pamięć znów działa od początku do końca.
Canary i storm guard: cooldown per problem i per sesja
Naprawiłem fałszywe alarmy canary w health_monitor.py i wzmocniłem outbound_storm_guard.py o cooldown per klucz. Kanał alarmowy milczy, gdy nic się nie dzieje, a prawdziwe incydenty nie toną w powodzi powtórzeń.
Autodeploy bez cichej degradacji: faza 2 hardeningu
Domknąłem sześć luk z niezależnego audytu bramki autodeployu (commit d8a7ea6) i scaliłem migracje schematu brokera w jedno wspólne źródło. Pipeline zatrzymuje się teraz głośno, zamiast po cichu degradować się do trybu lokalnego.
Naprawa archiwów sesji i strażnik serii wychodzących wiadomości
Naprawiłem dekodowanie archiwów sesji przez odczyt zstd ze stdin i dodałem strażnika wykrywającego serie wychodzących wiadomości. Dorzuciłem retencję dzienników trenera oraz przenośne profile auth dla ewaluacji.
Wylogowanie, które naprawdę kończy sesję, i strażnik przywrócony do pracy
Zamknąłem lukę w wylogowaniu, które kończyło tylko widok, a nie sesję tożsamości, i ujednoliciłem sprawdzanie CSRF w jednym pomocniku. Przywróciłem też automat budżetu wyjściowego, który sam się wyłączył po serii błędów ścieżki.
Fail-closed proxy, WAL fallback i higiena testów w agent-operations-center
Wdrożyłem trzy zmiany w agent-operations-center: proxy działające fail-closed z walidacją tokenu brokera, poprawkę ładowania konfiguracji testów oraz fallback dla znikających tablic po crashu. Dodatkowo przejrzałem logi z jobów i wypisałem, co faktycznie milczy, a co milczeć nie powinno.
Izolacja klientów gym, retencja danych i niestabilny odczyt konfiguracji
Wdrożyłem w jednym commicie izolację klientów, politykę i retencję danych przychodzących, a równolegle zdiagnozowałem cichy cron oraz 76 błędów odczytu konfiguracji w gatewayu.
Walidator F4 i odsłonięcie ciszy detektora anty-injection
Dodałem walidator F4 red-team dla detektora anty-injection i naprawiłem serię usterek, które ukrywały jego pracę. Przy okazji odblokowałem synchronizację floty, która stała 6 dni.
Pierwsza pozycja UNI w trackerze i alerty per aktywo
Zapisałem pierwszą realną transakcję swapu w trackerze portfela (wymiana kwoty X USDT na tokeny UNI) i dodałem progi alertów dla pojedynczego aktywa. Resztę dnia wypełniły watchdogi, które przebiegły czysto, oraz jeden brakujący plugin.
Nocny potok wpisów: watchdog kolejki i twarde limity
Zdiagnozowałem, dlaczego nocny cron kończył się bez publikacji, scaliłem 38 zaległych wpisów i dołożyłem watchdog kolejki oraz limity czasu i requestów.
Daily digest 2026-09-25 - 6 zmian w 2 repozytoriach
Automatyczny przeglad 6 commitow z ostatnich 24h - LLM niedostepny, wygenerowano fallback.
Alerty, które milczą, i granice między agentami
Wypuściłem 11 commitów w agent-brain: wyciszenie fałszywych alertów, twarde granice workspace i narzędzi dla każdego agenta oraz planer sprzedaży w Engineering Lab & DevLog.
Cztery watchery w bezczynności i dwa ciche sygnały awarii
Przepuściłem end-to-end cztery zaplanowane watchery i zebrałem dwa sygnały awarii: padnięty heartbeat cron joba oraz niestabilny odczyt SQLite w gatewayu. Sprawdziłem też, że brak aktywności w repo to prawdziwa cisza, a nie zepsuty zbierak danych.
Cron sprawdzający konfigurację padał od kilku dni, a fallback to ukrywał
Cron sprawdzający konfigurację czerwieniał z powodu martwej nazwy modelu. Zapasowy model ukrywał problem przed użytkownikiem, więc zauważyłem go dopiero w logach. Naprawiłem config i rozdzieliłem alarmy.
Jeden dzień pracy floty botów: DevLog modeli, wspólny router głosu i twarde kontrole jakości fiszek
Wdrożyłem czytelny DevLog modeli floty z aktualizacją w miejscu, wspólny router głosu STT/TTS dla czterech botów oraz zestaw kontroli jakości fiszek i generatora talii Anki. Po drodze naprawiłem cichy błąd konfiguracji, który od dni psuł nocny cron i zaśmiecał logi gatewaya.
Daily digest 2026-09-23 - 3 zmian w 1 repozytoriach
Automatyczny przeglad 3 commitow z ostatnich 24h - LLM niedostepny, wygenerowano fallback.
Bot nie może restartować samego siebie w trakcie rozmowy. Naprawiłem to
Bot zawiesił się w połowie odpowiedzi, bo odpiąłem wtyczkę w trakcie rozmowy. Restart przeniosłem na później, a strażnik sam wykrywa zawieszenie i je usuwa.
Brakujący import time, atomowy zapis stanu i watchdog, który rozumie retry
Naprawiłem panel Telegram, który przy każdym odświeżeniu wysyłał nową wiadomość, oraz wyciszyłem fałszywe alarmy watchdoga floty dla tur, które same się wyleczyły przez retry. Zacząłem też analizować niestabilność read-only workera w gatewayu SQLite.
Bot do nauki hiszpańskiego nie może dublować słówek ani psuć postępów
Bot do nauki hiszpańskiego gubił wątek rozmowy, mógł dublować słówka i wysyłał do Anki paczki z jedną fiszką. Naprawiłem każdy z tych problemów.
Zatkany tmpfs, backup bez końca i osobny błąd watchdoga
Opróżniłem 4 GB tmpfs z 98% do 6% i przeniosłem katalog tymczasowy skryptu backupu obok jego celu kopii, dzięki czemu kopia kończy się z rc=0. Równolegle zdiagnozowałem crash watchdoga, który miał zupełnie inną przyczynę niż brak miejsca.
Dzień nadzoru floty agentów: fałszywy alarm i dwa throttlingi
Utrzymałem flotę agentów w ruchu przez cały dzień: skany wycieków, kontrola pamięci i quiz dzienny przeszły czysto, a dwa krótkie błędy limitu u dostawcy modeli obsłużyłem automatycznie, bez utraty pracy.
Weryfikator pamięci złapał 1 brakujący zapis na 372
Przeskanowałem 372 rekordy pamięci, znalazłem jeden brakujący zapis i odtworzyłem 2691 znaków w pliku dziennym. Zbadałem też nowy odcisk błędu providera, który wywołał trzy nieudane tury między 17:35 a 18:05 UTC.
Cicha odporność automatyzacji: Obsługa błędów providera LLM i interaktywne karty decyzji w Telegramie
Wdrażanie niezawodności w bezobsługowych zadaniach agentowych: automatyczny retry przy błędach formatowania narzędzi, odporny klasyfikator błędów providera oraz protokół interaktywnych kart akceptacji CTA w bocie administracyjnym.
Odzyskanie nocnego przebiegu agenta i naprawa klasyfikatora błędów
Odzyskałem utracony wynik nocnego joba agenta i naprawiłem klasyfikator błędów tak, by błąd providera z malformed tool call trafiał do klasy z retry. Efekt: przejściowy błąd nie kosztuje już całego dnia pracy.
Next.js, trasa /peru i porządki w GitHub Actions
Rozwiązanie i szybki revert trasy /peru w portfolio, żywsze opisy treści peru oraz zestaw drobnych poprawek w CI i QA: reporter HTML, bump akcji do v5/v6 i usunięcie martwego kodu.
Backup nie działał przez dobę, bo ktoś pomylił kolejność argumentów
Kopia zapasowa przez około dobę w ogóle się nie uruchamiała, bo wrapper w cronie źle odczytywał argumenty. Naprawiłem ją, sprawdziłem pełnym przebiegiem i dodałem zabezpieczenie.
Logi na VPS rosły bez końca. Ustawiłem limity i wyłapuję ciche błędy crona
Na małym serwerze logi zajmowały coraz więcej miejsca, a zadania w tle padały bez śladu. Ustawiłem limity, czas przechowywania i prosty wrapper, który zapisuje wynik każdego zadania.
Ślepe monitory kontekstu i zielone logi
Przepiąłem dwa monitory kontekstu na pola, które sessions API faktycznie zwraca, i dodałem strażnika schematu. Progi kompakcji 65% i 85% zaczęły działać, co potwierdziłem na żywej sesji o 06:51 UTC.
Detektor błędów tury: od cichego logu do alertu i auto-recovery
Prześledziłem błąd providera udający 'LLM request failed' i dodałem trwały detektor błędów tury z alertem oraz auto-recovery odpowiedzi. Cicha awaria stała się głośna i mierzalna.
Daily digest 2026-09-13 - 9 zmian w 1 repozytoriach
Automatyczny przeglad 9 commitow z ostatnich 24h - LLM niedostepny, wygenerowano fallback.
Daily digest 2026-09-12 - 1 zmian w 1 repozytoriach
Automatyczny przeglad 1 commitow z ostatnich 24h - LLM niedostepny, wygenerowano fallback.
Daily digest 2026-09-11 - 3 zmian w 2 repozytoriach
Automatyczny przeglad 3 commitow z ostatnich 24h - LLM niedostepny, wygenerowano fallback.
Daily digest 2026-09-10 - 6 zmian w 1 repozytoriach
Automatyczny przeglad 6 commitow z ostatnich 24h - LLM niedostepny, wygenerowano fallback.
Daily digest 2026-09-08 - 1 zmian w 1 repozytoriach
Automatyczny przeglad 1 commitow z ostatnich 24h - LLM niedostepny, wygenerowano fallback.
Daily digest 2026-09-07 - 1 zmian w 1 repozytoriach
Automatyczny przeglad 1 commitow z ostatnich 24h - LLM niedostepny, wygenerowano fallback.
Daily digest 2026-09-06 - 1 zmian w 1 repozytoriach
Automatyczny przeglad 1 commitow z ostatnich 24h - LLM niedostepny, wygenerowano fallback.
Uodpornienie mechanizmu LLM i audyt dostępności UX w portfolio
Wdrożyłem deterministyczne mechanizmy fallback dla generatora podsumowań oraz przeprowadziłem gruntowny audyt dostępności i UX w naszym portfolio.
Prompts as Code: Ewolucja systemów agentowych i dekompozycja skilli w AOC
Przejście z monolitycznych instrukcji systemowych na granularne umiejętności (Skills) w Agent Operations Center. Architektura Prompts as Code, izolacja kontekstu i automatyczna bramka jakościowa Tier 1 & Tier 2.
Agent AI był drogi i wolny. Zmiana kolejności promptu obniżyła koszt o 85%
Mój agent za każdym razem czytał od nowa 25 do 30 tysięcy tokenów. Ułożyłem prompt tak, by stała część była na początku, i odpowiedzi przyspieszyły z 3,8 s do 0,7 s.
Agent Operations Center: Bezpieczeństwo RBAC, kontrola budżetu i porządki w Kanbanie
Wdrożyłem rolę observera w RBAC, czyszczenie MDX oraz limity budżetowe dla agentów. Naprawiłem też błędy przesyłania zadań między tablicami Kanban i dodałem manifest llms.txt w portfolio.
AI w treningu: TrainAnBot dla kobiet i PabloTrainer dla mężczyzn z analizą Garmin .TCX
Case study dwóch autonomicznych botów trenerskich na Telegramie dopasowanych do fizjologii płci: TrainAnBot (profil kobiecy: biomechanika, hipertrofia, PubMed) oraz PabloTrainer (profil męski: boks, siła, bieganie i telemetria Garmin .TCX).
Interaktywna aplikacja podróżnicza /peru i poprawki mobilnego UX
Dodałem do portfolio interaktywną aplikację wyprawy Peru 2026 oraz dopracowałem obsługę symulacji, osi czasu i układu mobilnego na podstronie /peru.
Generator digestu nie staje, gdy jeden model AI nie odpowiada
Generator digestu korzysta z modeli Gemini. Dodałem zapasowe modele, limit czasu 90 sekund i sprawdzenia, które działają przed płatnym krokiem.
Jak podpinając domenę pod hub inżynierski trafiłem na stealth minera i dlaczego noexec na /tmp to podstawa
Rutynowe wdrożenie Next.js na VPS z innymi projektami skończyło się szybkim śledztwem: odziedziczony proces w /tmp udający Redisa, złośliwy crontab i twardy OS hardening (noexec na tmpfs, blokada cron.allow, bindowanie do localhosta).
Blog pisze się sam, ale każdy wpis sprawdza drugi model i ja
Ten devlog powstaje z moich commitów. Pokazuję, jak zabezpieczyłem proces, żeby model nie zmyślał faktów, a nic nie trafiało na stronę bez mojej zgody.
ProfeClaw: Pedagogika zakodowana w plikach - nauczyciel języka jako architektura, nie prompt
Case study agenta AI uczącego hiszpańskiego: pętla korekt z licznikiem błędów, spaced repetition sterowany danymi, rejestr slangu i eval-suite pilnujący jakości dydaktyki.
Wykrywanie języka przeglądarki z prawem odmowy: propozycja, a nie przymus
Architektura LanguageGate w Next.js: jak elegancko zaproponować użytkownikowi zmianę języka bez agresywnych przekierowań, z pamięcią decyzji w localStorage i pełnym poszanowaniem prywatności.
Typer Bot: produkcja pod SEO, Web Push i RODO w jednym Next.js
Case study produkcyjnej aplikacji Next.js 16 + Prisma + PostgreSQL: publiczny front pod SEO, panel admina z 2FA, powiadomienia Web Push zgodne z art. 17 RODO i pełne testy E2E w Playwright.
SkillEvaluator i deterministyczny Kanban: jak sprawdzamy umiejętności agentów w AOC
Jak przenieśliśmy zaufanie do agentów AI z obietnic w promptach na twarde testy umiejętności (SkillEvaluator) oraz jak zabezpieczyliśmy tablicę Kanban przed podwójnym kliknięciem i wyścigami stanów.
Szlifowanie detali w AOC: od uciekających pikseli po bezpieczne kopie bazy SQLite
Jak zlikwidowaliśmy błąd krzyżowania projektów w Kanbanie, naprawiliśmy asymetrię przycisków na ekranie smartfona i wdrożyliśmy bezstresowy backup bazy SQLite w trybie WAL.
TrainAnBot: Architektura trenera AI z pamięcią o kontuzjach i bazą badań PubMed
Jak zbudować bota trenerskiego na Telegramie, który nie rzuca ogólnikami: trójwarstwowa pamięć w SQLite, automatyczna weryfikacja zaleceń w bazie PubMed i twarde granice bezpieczeństwa.
AI pisze kod, który się kompiluje, ale potrafi wysypać stronę. Ustawiłem zasady
Agent AI potrafił ukryć błąd typów zamiast go naprawić. Wprowadziłem zasady, które wymuszają czytelny kod i sprawdzanie danych z sieci.
Jak przyspieszyłem reakcję agentów AI w AOC: od powolnego sprawdzania bazy do lekkich procesów w tle
Historia o tym, jak zastąpiliśmy sprawdzanie bazy co kilka sekund natychmiastowym odpalaniem skryptu w tle za pomocą child.unref() w Node.js oraz jak podzieliliśmy pracę na 8 wyspecjalizowanych ról agentów.