Dowody
Każdy może twierdzić, że błąd został naprawiony. Ta strona pokazuje poprawkę, test, który jej pilnuje, i dowód, że test nie przechodzi, gdy błąd wraca.
Wygenerowano 2026-10-03 z tools/prove_regressions.py · 4 z 4 testów regresji z wykazaną niepustością.
Jak powstaje każdy dowód
- Uruchom test regresyjny na poprawionym kodzie: musi przejść.
- Zmodyfikuj kod źródłowy, żeby przywrócić pierwotny błąd.
- Uruchom ten sam test ponownie: musi nie przejść, z prawdziwym błędem asercji. Błąd kolekcji się nie liczy: oznacza, że test w ogóle się nie wykonał.
- Przywróć plik, sprawdź, czy jego SHA-256 zgadza się z oryginałem, i uruchom ponownie: test musi znowu przejść.
Asystent mówił odwiedzającym, że webhook przenosi ich rozmowę. Nie przenosi z niej niczego.
commit e027e6b · chroniony przez apps/gateway/tests/test_webhook_content_claim.py
Ładunki webhooków celowo zawierają tylko KSZTAŁT tury - nazwę zdarzenia, znacznik czasu, liczbę kroków, kredyty - i nigdy jej treści. Asystent zapytany, czy webhooki zawierają rozmowę, odpowiedział: 'Tak - każdy ładunek webhooka zawiera pełną historię rozmowy dla tej tury.' To dokładne przeciwieństwo gwarancji, względem której testowana jest lista dozwolonych. Zmierzono 2 zmyślenia na 6 uruchomień przed poprawką.
| Poprawiony kod, przebiegi testów |
PASS |
21 passed in 1.15s |
| Błąd przywrócony, ten sam test |
WYKRYTO |
8 failed, 13 passed in 1.20s |
| Plik przywrócony, test uruchomiony |
PASS |
sha256 a8d4cb0b10787eff… |
Test nie jest pusty: nie przechodzi, gdy błąd wraca.
Kazaliśmy właścicielom kliknąć kartę w panelu, która nie istnieje.
commit b4a203a · chronione przez apps/gateway/tests/test_card_names.py
Baza wiedzy, dokumentacja i kafelek startowy mówiły właścicielom, żeby szukali karty 'Send turns to a webhook'. Prawdziwa karta w panelu nazywa się 'Send events to your own system'. Nazwę wymyślono przy pisaniu sekcji wiedzy i bez sprawdzenia rozpropagowano w trzech miejscach. Zmierzono: 2 z 2 odpowiedzi dotyczących konfiguracji wskazywały kontrolkę, która nigdy nie istniała.
| Poprawiony kod, przebiegi testów |
PASS |
5 passed in 1.12s |
| Błąd przywrócony, ten sam test |
WYKRYTO |
3 failed, 2 passed in 1.23s |
| Plik przywrócony, test uruchomiony |
PASS |
sha256 f6348e1a5bbae209… |
Test nie jest pusty: nie przechodzi, gdy błąd wraca.
Powitanie w trybie ciemnym renderowało się z kontrastem 1.73:1, praktycznie niewidoczne, a zabezpieczenie nie mogło tego wychwycić.
commit ca47f41 · chroniony przez apps/studio/test/themeContrast.test.mjs
Wykryte na zrzucie ekranu z prawdziwego iPhone'a, a nie w żadnym teście. Powitanie miało na sztywno ustawiony kolor #3a3a3c, co daje 1.73:1 względem panelu w trybie ciemnym, znacznie poniżej minimum 4.5:1 i ledwo czytelne. Widział to każdy odwiedzający po raz pierwszy w trybie ciemnym. Poprawka kieruje kolor przez zmienną motywu --pw-mist, więc podąża on za panelem; zabezpieczenie oblicza teraz rzeczywisty współczynnik kontrastu dla każdej pary w motywie, zamiast ufać, że kolor został ustawiony.
| Poprawiony kod, przebiegi testów |
PASS |
pass 5, fail 0 |
| Błąd przywrócony, ten sam test |
WYKRYTO |
pass 3, fail 2 |
| Plik przywrócony, test uruchomiony |
PASS |
sha256 54f8802b444b6194… |
Test nie jest pusty: nie przechodzi, gdy błąd wraca.
Nieudana tura zostawiała odwiedzającego w nieskończonym oczekiwaniu na martwym strumieniu.
commit 4bcc691 · chroniony przez apps/studio/test/streamError.test.mjs
Gdy wywołanie modelu się nie powiodło, serwer poprawnie wysłał ramkę błędu, ale widżet wpisał komunikat do elementu, który gałąź śladu nadzoru już ukryła, i nigdy nie zwinął śladu. Odwiedzający widział pulsujące bez końca „Czytam twoją wiadomość” przy turze, która już się nie powiodła: bez błędu, bez odzyskania, bez możliwości, by się o tym dowiedzieć. Tekst błędu był przypisany poprawnie i nigdzie nie został wyświetlony. Wykryte podczas prawdziwej awarii, gdy na koncie API skończyły się środki.
| Poprawiony kod, przebiegi testów |
PASS |
pass 4, fail 0 |
| Błąd przywrócony, ten sam test |
WYKRYTO |
pass 2, fail 2 |
| Plik przywrócony, test uruchomiony |
PASS |
sha256 54f8802b444b6194… |
Test nie jest pusty: nie przechodzi, gdy błąd wraca.
Zapis operacyjny
Co istnieje za platformą, a co nie zostało przetestowane. Tylko to, co może pokazać skrypt lub log.
- Kopie zapasowe: co noc o 03:17 UTC, pg_dump --clean --if-exists, gzip; wypychane do prywatnego zdalnego repozytorium git po każdym uruchomieniu; najnowsza
20261003T031701Z; przechowywanych 29 zrzutów.
- Ćwiczenie odtwarzania 2026-10-03: zrzut
20261003T031701Z odtworzony w 2 s w jednorazowym kontenerze pgvector/pgvector:pg16 na tym samym hoście: 34 najemców, 270 wierszy wiedzy, 47 tabel. Zrzut pochodzi z 03:17 UTC; o 13:26 UTC zaplanowane czyszczenie demo usunęło jednego porzuconego najemcę demo starszego niż 30 dni (log bramy), więc odtworzenie pokazuje o jednego najemcę więcej niż system produkcyjny w chwili ćwiczenia.
- Wycofanie: strona: tools/deploy-site.sh --rollback (drugie przełączenie symlinku na poprzednie wydanie); Studio: tools/deploy-studio.sh --rollback (poprzedni obraz, ze sprawdzeniem stanu).
- Cele odtworzenia: żadne nie są obiecane. Nocny zrzut ogranicza utratę danych do jednego dnia; brak deklarowanego czasu przywrócenia.
- Nieprzetestowane: obciążenie powyżej jednej instancji; przełączanie awaryjne między regionami; odtworzenie na innym hoście.
Z docs/ops-record.json, zapisanego przez ćwiczenie odtwarzania (docs/runbooks/db-backup.md).
Czego to nie dowodzi
To są kontrole, które sam uruchamiam na własnym kodzie. Pokazują, że konkretne testy wyłapują konkretne błędy: nie to, że system jest wolny od innych, nie to, że audyty były wyczerpujące, i nie to, że ktokolwiek niezależny go przejrzał. Harness jest w repozytorium; twierdzenie można sprawdzić, uruchamiając go.
PANTHEON · Udowodnij to, zaatakuj działający system · Zapis audytu · Omówienia · Projekty · CV
Zapytaj o dowolny defekt z tej listy i o to, jak jego test dowodzi poprawki.
- Pokaż mi prawdziwy błąd, który znalazł i naprawił
- Skąd wiadomo, że test może nie przejść?
- Co jest nadal otwarte?