Skip to content

Domy: start kolejnych domów obok Domu 1 - #84

Merged
mbeczynski merged 2 commits into
mainfrom
feat/domy-start
Oct 23, 2026
Merged

mbeczynski merged 2 commits into
mainfrom
feat/domy-start

Conversation

@mbeczynski

Copy link
Copy Markdown
Contributor

Co

kidwatch run uruchamia każdy dom z konfiguracją w bazie (zrodlo_konfiguracji = baza), nie tylko Dom 1. Dotąd domy ≠ 1 były tylko logowane („krok przed E6”).

  • Nadzorca (domy.Nadzorca, Przeladowanie.domy/czeka/po_zatrzymaniu/bramka_alarmu): co okres (10 s) porównuje listę domów ≠ 1 w trybie baza z działającymi. Dom z listy, który nie chodzi, startuje — także dodany przez dom-dodaj w trakcie pracy poda. Dom, którego na liście już nie ma, jest zatrzymywany z opróżnieniem kolejki, a panel, komendy i czujka MDM instancji przestają go widzieć.
  • Izolacja startu: błąd startu domu ≠ 1 nie kończy procesu. Daje stan dla panelu (StanyDomow), wpis w dzienniku, alarm instancji przez istniejącą bramkę odstępu RejestrDomow.alarm_startu (która przeżywa restart poda), start na ostatniej dobrej kopii, jeśli taka jest, i ponowienie po zmianie domy.wersja albo po 1/5/30 min przy błędzie przejściowym. Przeładowanie domu ≠ 1, po którym nie wstaje nic (ani nowa wersja, ani poprzednia, ani kopia), też już nie kończy procesu, gdy chodzi inny dom.
  • Dom nieskonfigurowany (konfiguracja_domu.czego_brakuje): brak włączonego źródła DNS, brak jego sekretu albo brak urządzenia przy domu, który nigdy nie wstał (nie ma kopii). Taki dom czeka cicho: log info, stan czeka w panelu, bez alarmu. Startuje sam po zapisaniu brakującej integracji. Zła wartość (walidacja, strażnik, sejf) albo brak klucza w domu, który już kiedyś działał, to awaria z alarmem.
  • Kolejka wstrzymana (§4.2): Outbox domu ≠ 1 bez trybu kont wstrzymuje wysyłkę jak dotąd (logika bez zmian), a do tego nowy hak na_wstrzymanie wysyła alarm instancji, najwyżej raz na 6 h na dom.
  • Panel: konfiguracje[dom_id] jest wypełniane przy starcie każdego domu i usuwane po jego zatrzymaniu. Ekran integracji pokazuje „Dom czeka na konfigurację: …”.
  • Aplikacja TV: dom ≠ 1 nie nadpisuje rejestru tv_app.AKTYWNA, który należy do Domu 1.

Dlaczego

Bez tego nie da się uruchomić Domu 2 (E6) bez przerywania Domu 1. Dom świeżo dodany, jeszcze bez klucza NextDNS, to normalny stan i nie powinien budzić administratora.

Dom 1 działa tak samo jak dotąd: start, kod 2 bez kopii, KIDWATCH_DOM_1_ZRODLO=yaml, a Dom 1 z config.yaml dalej się nie przeładowuje. Tryb yaml Domu 1 dostaje teraz obiekt przeładowania, ale wersja Domu 1 jest w nim zawsze None.

Testy

tests/test_domy_start.py używa prawdziwego Nadzorca, przeladowanie_domow, build_home_runtime i sejfu. Atrapy są tylko na brzegach: zdarzenia płyną z pliku, notki trafiają do kolektora, a tik dostaje czas ostatniego zdarzenia.

  • E6: day.jsonl w Domu 1 i równolegle telefon_android.jsonl w Domu 2. Notki każdego domu zgadzają się pole w pole z odtworzeniem osobno. dom_id notek jest zgodny z domem, a tabela events każdej bazy zawiera tylko jego źródła.
  • Dom ≠ 1 rzucający przy starcie: Dom 1 chodzi jak sam, alarm idzie raz, a po poprawce (nowa wersja) dom wstaje.
  • Przeładowanie Domu 2, po którym nic nie wstaje: proces żyje.
  • Dom dodany w trakcie pracy czeka bez alarmu (najpierw brak źródła, potem brak urządzenia), a po konfiguracji startuje sam.
  • Rozróżnienie „czeka” od błędu.
  • Dom znikający z listy jest zatrzymany z opróżnieniem kolejki.
  • kidwatch run w trzech wariantach: działa, rzuca, nieskonfigurowany.
  • Alarm wstrzymanej kolejki.
  • Test JS ekranu integracji.

Kanarki: 11 mutacji poprawki, każda daje czerwony test. Między innymi: kolejne_domy=False w run, błąd startu ustawiający _awaria, „czeka” wyłączone, brak sprawdzania listy w pętli, wspólna baza domów (przeciek), brak zatrzymania znikającego domu, brak haka wstrzymania, alarm bez odstępu.

uv run pytest -q jest cały zielony, uv run ruff check czysty.

Pomiar pamięci (macOS, skrypt poza repo, 10 domów z NextDNS i telefonem, bez otwartych strumieni SSE): około 1,4 MiB RSS na dom, z czego sterta Pythona to około 0,07 MiB.

Wdrożenie i wycofanie

  • Na produkcji jest dziś tylko Dom 1, więc po wdrożeniu nadzorca nie ma czego startować. Jedyna nowość to odczyt listy domów co 10 s.
  • Pierwszy dom ≠ 1 z dom-dodaj pojawi się w panelu jako „czeka na konfigurację”. Bramka bez pola odbiorca = alarm „powiadomienia wstrzymane” i notki czekające w kolejce domu, co jest zamierzone (§8 p. 1).
  • Wycofanie: poprzedni obraz. Schemat bazy się nie zmienia (brak nowych tabel i kolumn). Wpisy dom.start.alarm w dzienniku domów ≠ 1 stary obraz ignoruje.

🤖 Generated with Claude Code

Nadzorca co okres porownuje liste domow != 1 w trybie `baza` z dzialajacymi:
startuje brakujace (takze dodane w trakcie pracy poda), zatrzymuje te, ktore
zniknely z listy (z oproznieniem kolejki). Blad startu domu != 1 nie konczy
procesu: stan dla panelu, dziennik, alarm instancji przez bramke odstepu
z dziennika, start na kopii, ponowienie po zmianie wersji albo po 1/5/30 min.
Przeladowanie domu != 1 bez zadnej dzialajacej konfiguracji tez nie konczy
procesu, gdy chodzi inny dom.

Dom nieskonfigurowany (brak zrodla DNS, jego sekretu albo urzadzenia, bez
kopii) czeka cicho ze stanem `czeka` w panelu i startuje sam po zapisaniu
integracji. Kolejka domu != 1 wstrzymana bez trybu kont zglasza alarm
instancji (hak Outbox.na_wstrzymanie, logika wstrzymania bez zmian). Dom != 1
nie nadpisuje rejestru aplikacji TV Domu 1. Dom 1 bez zmian zachowania.

Test e2e: day.jsonl w Domu 1 rownolegle z telefon_android.jsonl w Domu 2
przez prawdziwego Nadzorce - wyniki jak osobno, bez przeciekow.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
)

- Alarm domu, ktory nie wstaje: zapasowy, rosnacy odstep w pamieci procesu
  (1 h, 2 h... do doby), niezalezny od dziennika — gdy zapis wpisu
  dom.start.alarm padnie albo kanal rzuci po doreczeniu, alarm nie idzie
  co obieg nadzorcy. Wpis tylko po faktycznej wysylce (bez kanalu — sam log).
- Przeladowanie domu != 1, po ktorym nic nie wstaje, nigdy nie konczy
  procesu przy kolejnych domach (takze gdy Dom 1 czeka w _restarty).
- Eskalacja do restartu poda tylko z powodu Domu 1 albo jedynego domu;
  dom czekajacy na restart liczy sie jako istniejacy.
- Jeden alarm „monitoring nie wystartowal” zamiast „dziala dalej na wersji”
  o domu, ktory nie dziala.
- Testy: liczba budow przy bledzie konfiguracji, kolejka pusta po
  zatrzymaniu domu (bez petli wysylki), Dom 1 w trybie baza i wymuszony yaml
  razem z Domem 2, Dom 1 w restarcie przy awariach Domu 2.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
mbeczynski added a commit that referenced this pull request Oct 23, 2026
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@mbeczynski
mbeczynski merged commit 834468f into main Oct 23, 2026
6 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant