Przy każdej regeneracji gen_pages.py buduje archiwum do wrzucenia w okno
czatu: wszystkie pliki .md bundle'a z zachowaniem struktury katalogów
(28 plików: koncepty, indexy podkatalogów, log.md) plus wygenerowany
AI-README.md. Nie wchodzą pages/, zdjęcia, generatory ani __pycache__ —
paczka niesie samą wiedzę, nie rusztowanie.
Deterministycznie: stały czas modyfikacji wpisów (1980-01-01), stała
kolejność i stały poziom kompresji, więc archiwum jest bajt w bajt takie
samo, dopóki nie zmieni się treść — git nie widzi diffów z niczego
(zweryfikowane: dwa uruchomienia, ten sam md5).
Z tego samego powodu AI-README.md podaje jako datę nie odczyt zegara,
tylko najnowsze `ostatnia_aktualizacja` w bundle'u ("data treści") —
data z zegara robiłaby nową wersję pliku każdego dnia, także wtedy, gdy
nic nie doszło.
AI-README.md (PL + EN, generowany z bundle'a): czym jest baza, format
OKF (markdown + YAML frontmatter, jeden plik = jeden koncept), polecenie
odpowiadania wyłącznie z tych plików i objaśnienie dwóch pól niosących
pewność danych — `status_ceny` i `dostepnosc_6_13_02_2027`, z ostrzeżeniem,
żeby nie zgadywać dostępności przy 🔍 i nie podawać szacunków jako cen
potwierdzonych.
Link "Pobierz bazę (.zip) — wrzuć do ChatGPT/Claude'a i pytaj" jako piąty
kafel na start.html i pozycja w sekcji "Wejście" na linki.html.
Plus wpis do log.md podsumowujący całą zmianę terminu.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
porownanie.html:
- nowa kolumna „Dostępność 6–13.02” z pola `dostepnosc_6_13_02_2027`,
skrócona do emoji + werdyktu (✅ DOSTĘPNE / 🔍 do sprawdzenia /
❌ BRAK (zweryf.)), pełna notatka w atrybucie title
- sortowanie kolumny układa decyzyjnie (wolne → do sprawdzenia → brak),
nie alfabetycznie po emoji
- wiersz Glemm Lodge na czerwono i z przekreśloną nazwą: zweryfikowany
brak miejsc bije kolor statusu ceny (reguła CSS niżej wygrywa)
- karty `priorytet: ARCHIWALNA` wypadają z tabeli i z bilansu do osobnej
sekcji „Archiwum” na dole strony
- legenda i bilans statusów pod tabelą
Termin wyjazdu wyjechał do stałych TERM_LABEL/TERM_SHORT/TERM_NOTE:
nagłówki wszystkich stron (BUNDLE_NAME, też w gen_viz.py), lead
start.html, opis kafla porównania i raport braków biorą go stąd.
Zmiana terminu = zmiana stałych i regeneracja.
Raport braków czyta teraz dostępność z pola frontmattera zamiast zgadywać
z nagłówków w body, i pomija karty archiwalne. Wypis po regeneracji
podaje bilans ✅/🔍/❌.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
dom-dla-grupy i alpenparks-rehrenberg zostają w bazie jako karty
ARCHIWALNE: riscercz 08.2026 objął tylko obiekty z paczki, więc ich ceny
i dostępność opisują poprzedni termin (16–23.01) i dziś wprowadzałyby
w błąd. Oznaczone `priorytet: ARCHIWALNA (poza paczką 08.2026)` +
`archiwalna_od`, z ostrzeżeniem na górze body. Wypadają z tabeli
porównawczej i ze statusów dostępności (osobna sekcja Archiwum).
wyjazd.md przepisany od zera na nowy termin:
- tabela porównawcza czterech regionów z nowymi budżetami
- tabela dostępności 10 ofert z legendą ✅/❌/🔍 i bilansem
(1 zweryfikowany status, i to negatywny — 9 do weryfikacji)
- nowe wnioski przekrojowe (Kronplatz najlepiej znosi termin,
Saalbach traci przewagę cenową, Ischgl konkurencyjny z Kappl,
SFL bez styczniowej przewagi)
- nowa sekcja "Plan B na wypadek pełnego tygodnia" (13–20.02
i 27.02–06.03 na podstawie zweryfikowanego kalendarza Glemm Lodge)
Usunięte jako nieaktualne: wniosek o przewadze cenowej SFL (styczeń
= ich niski sezon), ranking ofert wyceniony po stawkach styczniowych,
rekomendacja terminu 16–23.01 i alternatywy 9–16.01.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Cztery regiony w jednym schemacie <region>/region.md + <region>/oferty/*.md.
Saalbach przestaje być wyjątkiem w korzeniu bundle'a.
- git mv region.md → saalbach/region.md, oferty/ → saalbach/oferty/
- linki bundle-relative przepisane: /region.md → /saalbach/region.md,
/oferty/* → /saalbach/oferty/*
- nowy saalbach/index.md wg §6, symetryczny do ischgl/kronplatz/sfl
Zdjęcia obiektów przetrwały bez zmian: mapowanie oferta→zdjęcia jest
kluczowane po polu `id` we frontmatterze (pages/img/<id>/), nie po
ścieżce pliku — gen_images.py:121,390 i gen_pages.py:695-709.
Region "Saalbach" w gen_pages.py bierze się z dirname konceptu, więc
przejście "" → "saalbach" obsługuje się samo.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
W _page_shell dopisek idzie do istniejącej stopki, tym samym małym
wyciszonym fontem co nota o generatorze. Viewer grafu stopki nie ma (main
wypełnia okno), więc w gen_viz.py dopisek ląduje w nagłówku obok "OKF
bundle", w tej samej klasie .muted — przez łatkę na _load_template, tak
samo jak dotychczasowa łatka na viz.js: repo upstream zostaje nietknięte,
a brak kotwicy przerywa regenerację zamiast po cichu gubić dopisek.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Kafel do /pages/linki.html był już czwarty w rzędzie, ale pod etykietą
"Linki do wysłania" — nazwa z ustaleń to "Wszystkie linki". Przy czterech
kaflach siatka auto-fit łamała się 3+1 i czwarty zostawał sam w wierszu;
minimum kolumny podniesione z 13rem do 16rem układa je 2×2, a na telefonie
i tak jest jedna kolumna.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Nowa strona z pełnymi URL-ami wszystkich 24 stron na https://narty27.kapala.org
(BASE_URL — jedyne miejsce z domeną w kodzie), w sekcjach: Wejście, Regiony,
Oferty per region z priorytetem PLAN A/B z frontmattera, Pozostałe. Każda
pozycja to klikalny link, widoczny adres tekstem do skopiowania i krótki opis.
Lista powstaje z tych samych danych co porownanie.html i start.html —
regiony z wyjazd.md, oferty z katalogów i frontmatterów, "Pozostałe" to
koncepty, których nie złapała żadna wcześniejsza sekcja. Nowa oferta wpada
na listę sama przy regeneracji.
Przyciski "Kopiuj wszystkie" (plain text: nazwa sekcji + adresy) i "Kopiuj
link startowy"; navigator.clipboard z odwrotem na zaznaczenie, bo po http
z adresu IP nie ma bezpiecznego kontekstu. Do nawigacji każdej strony
i na start.html doszła pozycja "Linki".
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>