kb/phases/kb-m5-faza5-wiki.md dokumentuje: (1) tę sesję (2026-08-27) budującą niezależny lokalny bootstrap kb-wiki (3 strony: fll-2025-26, mbank, pawel-cesar-sanjuan-szklarz) nie wiedząc o realnym repo oskar/kb-wiki na Forgejo (5 stron, od 2026-07-21, dokumentowanym już w kb-m5-faza4.md i docs/sessions/2026-07-21.md); (2) jak doszło do odkrycia (audyt 08-26 nie sprawdził Forgejo, tylko repo lokalne + PIHA); (3) porównanie obu kompilacji fll-2025-26 (komplementarne, nie sprzeczne); (4) rekoncyliację jako decyzję operatora, nie tej sesji — lokalny bootstrap nigdy nie pushowany do żadnego remote. Jednolinijkowa notka przy audycie §9/Etap 1 wskazuje na pełne rozliczenie.
14 KiB
| okf | type | visibility | status | updated | links | |||
|---|---|---|---|---|---|---|---|---|
| 0.1 | phase | private | active | 2026-08-27 |
|
Moduł 5, faza 5 — wiki-kompilat (Etap 1: bootstrap + proof, i odkrycie rozjazdu)
**Status: Etap 1 wykonany 2026-08-27 — ale w cieniu ważniejszego znaleziska: proof-of-concept wiki-kompilatu (repo
kb-wiki, 5 stron) już istniał od 2026-07-21, na Forgejo (https://forgejo.kapala.org/oskar/kb-wiki), ikb/audits/wiki-kompilat-recon-2026-08-26.mdtego nie wykrył. Ta sesja (2026-08-27) zbudowała niezależny, równoległy lokalny bootstrap (~/kb-wiki-etap1-sesja-2026-08-27/, 3 strony) nie wiedząc o repo z lipca — dowiedziała się dopiero przy Części C tego zadania, kiedy próba udokumentowania "remote nie istnieje" (cytat z polecenia sesji, zgodny z audytem) skłoniła do sprawdzenia Forgejo wprost. Nic nie zostało wypchnięte do prawdziwego zdalnego repo — ta sesja tylko czytała je (git clone, pull-only). Rekoncyliacja dwóch niezależnych kompilacji tej samej encji (fll-2025-26) i decyzja co dalej z lokalnym repo tej sesji — do operatora, patrz §4.
0. Jak doszło do odkrycia (żeby przyszła sesja nie powtórzyła tej samej luki)
kb/audits/wiki-kompilat-recon-2026-08-26.md (2026-08-26, decyzje a-h zatwierdzone
2026-08-27) stwierdza wprost w nagłówku: „Nic nie zostało zaimplementowane,
zdeployowane ani skommitowane poza tym dokumentem." Dowody audytu: worktree
homelab-codex-ws cięty z mastera, pilot ~/narty-2027/saalbach-kb (lokalny
odczyt), żywa baza kb na PIHA (ssh piha 'docker exec kb-postgres psql...'),
systemctl status na PIHA. Forgejo nie było w tym zestawie dowodów — audyt nie
odpytał API/repo Forgejo, mimo że CLAUDE.md i inventory/topology.yaml jasno
wskazują git_provider: forgejo jako miejsce, gdzie kb-wiki miało w ogóle
powstać (decyzja D7 faza3 §8.2: „osobne repo kb-wiki", bez wskazania konkretnego
hosta w chwili pisania szkicu — Forgejo to naturalna, ale niejawna implikacja).
Zlecenie tej sesji (2026-08-27, Etap 1) powtórzyło za audytem: „REMOTE NIE
ISTNIEJE — nie konfiguruj, nie pushuj; operator założy repo na Forgejo później."
To zdanie okazało się faktycznie nieprawdziwe — sprawdzone dopiero przy pisaniu
tego dokumentu (Część C zlecenia), zapytaniem GET do http://100.108.208.3:3000/ api/v1/repos/search?q=kb-wiki (read-only, bez uwierzytelnienia, private: false
więc odpowiedź jawna) i następnie git clone (pull-only, potwierdzone uprawnieniami
API: "push": false, "pull": true) do katalogu tymczasowego poza tym repo.
Wniosek na przyszłość: „repo nie istnieje" w planie/audycie nie jest
wystarczające bez sprawdzenia bezpośrednio w systemie, który je hostuje
(inventory/topology.yaml → git_provider: forgejo → Forgejo API/git ls-remote),
nie tylko w obrębie homelab-codex-ws i lokalnych klonów znanych z wcześniejszych
sesji. Ten sam błąd metodologiczny mógłby się powtórzyć przy dowolnym innym „osobnym
repo" planowanym w dokumentacji, ale nigdy nie zweryfikowanym wprost u hosta.
1. Co faktycznie istnieje w oskar/kb-wiki (Forgejo, od 2026-07-21)
Stan wg git clone https://forgejo.kapala.org/oskar/kb-wiki.git (read-only,
2026-08-27), 3 commity na master:
156925c struktura: katalogi, konwencje, README
42c7731 compile: pzu, warta, ubezpieczenie-auto-ga431ja-2026, fll-2025-26, wspolnota-mieszkaniowa-targowa-2a ← kaskada retrievalu kb-postgres@PIHA
c52f867 lint: pierwszy raport ręczny 2026-07-21
Struktura: README.md, INDEX.md (wielka litera — inaczej niż plik zarezerwowany
OKF index.md, patrz §3 niżej), _meta/conventions.md, _meta/lint-reports/ lint-report-2026-07-21.md, 5 stron-encji:
| Strona | Typ | Skrót |
|---|---|---|
podmioty/pzu.md |
podmiot | PZU — OWU Auto/OC, karty produktu, oferta T1531938417 |
podmioty/warta.md |
podmiot | WARTA — OWU AC Standard/Komfort/Moje Auto |
sprawy/ubezpieczenie-auto-ga431ja-2026.md |
sprawa | Porównanie ofert PZU/WARTA/InterRisk, Mazda 6 (GA431JA), 06.2026 |
sprawy/fll-2025-26.md |
sprawa | FLL Challenge UNEARTHED, drużyna #1100, Warszawa II |
sprawy/wspolnota-mieszkaniowa-targowa-2a.md |
sprawa | Wspólnota Mieszkaniowa Targowa 2A (Pruszków) — zebranie roczne 2026 |
osoby/, umowy/, tematy/ istnieją jako katalogi puste (.gitkeep) — zero
stron typu osoba w lipcowym proof-of-concept. To jest jedyna luka pokrycia
typów, którą Etap 1 tej sesji (§2) faktycznie domyka, nie duplikuje.
Jakość: wysoka, metodologicznie zgodna z tym, co audyt 08-26 dopiero rekomendował
(sekcja „Niepewne/sprzeczne" jako wzorzec — tam nazwana wprost inaczej, ale ta sama
funkcja; degradacja przy uszkodzonym OCR zamiast ślepego zaufania streszczeniu;
84/86 wpisów sources[].chunks i 73/73 przypisów inline zweryfikowanych wprost w
bazie, udokumentowane w _meta/lint-reports/lint-report-2026-07-21.md). Pełna
treść: _meta/conventions.md tamtego repo (różni się od konwencji tej sesji w
kilku miejscach nieistotnych merytorycznie — casing INDEX.md/index.md, typ
meta vs temat dla conventions.md — patrz §3).
kb-m5-faza4.md (linia 17, docs/sessions/2026-07-21.md) już to dokumentowały
poprawnie — ten fakt był w repo homelab-codex-ws cały czas, czytelny git log/
grep -r kb-wiki. Audyt 08-26 po prostu tego nie sprawdził (§0 wyżej).
2. Co ta sesja (2026-08-27) faktycznie zrobiła — Etap 1 wg zlecenia, lokalnie, bez wiedzy o §1
Zbudowany od zera, niezależnie: ~/kb-wiki-etap1-sesja-2026-08-27/ (przemianowany
z ~/kb-wiki/ po odkryciu §1 — żeby nie kolidować ścieżką z przyszłym git clone
prawdziwego repo). Git lokalny, 6 commitów, nigdy nie pushowany do żadnego
remote (żaden remote nie był skonfigurowany — zgodnie z literą pierwotnego
zlecenia, które okazało się oparte na błędnym założeniu z §0).
3 strony proof, celowo zróżnicowane typy (jak żądał audyt §9 Etap 1):
| Strona | Typ | Pokrycie względem §1 |
|---|---|---|
sprawy/fll-2025-26.md |
sprawa | Duplikat tej samej encji co lipcowe repo — skompilowany niezależnie, z częściowo innym zestawem chunków (uzupełniające, nie identyczne sources). Wysoka zgodność wniosków — patrz §4. |
podmioty/mbank.md |
podmiot | Nowe pokrycie — nie istnieje w lipcowym repo (tam tylko PZU/WARTA, ubezpieczyciele) |
osoby/pawel-cesar-sanjuan-szklarz.md |
osoba | Domyka lukę — lipcowe repo ma katalog osoby/ pusty; to pierwsza strona typu osoba w całym projekcie, jedyny dotąd test entity-resolution na aliasach |
Pełna treść stron, _meta/conventions.md tej sesji (napisane niezależnie od
lipcowego — patrz różnice §3), check_okf.py (walidator, którego lipcowe repo
nie ma jako skomitowanego pliku — tamta sesja weryfikowała sources/przypisy
ad hoc, bez zostawienia narzędzia), i _meta/lint-reports/2026-08-27.md — wszystko
w ~/kb-wiki-etap1-sesja-2026-08-27/, 6 commitów (git log --oneline):
struktura+konwencje, walidator, 3× compile:, 1× lint:.
DoD audytu §9 Etap 1 (tabela, 4 punkty) — spełnione lokalnie, w tym repo
równoległym: repo istnieje z konwencjami, walidator działa (zielono, 40 par
sources + 47 inline przypisów zweryfikowanych wprost w KB_DSN), 3 strony
proof spełniają inwarianty 1-2, raport lintu ręcznego zapisany.
Weryfikacja lint:
$ python3 check_okf.py # w ~/kb-wiki-etap1-sesja-2026-08-27/
ZGODNE z OKF v0.1 (kb-wiki): [...] wszystkie 40 przypisów zweryfikowane w bazie.
scripts/kb/check_okf.py z homelab-codex-ws uruchomiony na tym samym repo —
zgodnie z rozjazdem przewidzianym w zleceniu:
$ python3 scripts/kb/check_okf.py ~/kb-wiki-etap1-sesja-2026-08-27
Zakres: kb, docs/sessions
Sprawdzono plików .md: 0
BRAK plików w zakresie — nie ma czego walidować.
SCOPE = ("kb", "docs/sessions") w tamtym skrypcie jest wpisany na sztywno
względem root — kb-wiki (żadna z dwóch kopii, lipcowa ani ta) nie ma
podkatalogu kb/ ani docs/sessions/, więc walidator zawsze zwróci "brak
plików" dla tego layoutu. Nie hackowany — to jest realny, ustrukturalny rozjazd
(nie błąd w kb-wiki), odnotowany tu jako follow-up: albo scripts/kb/ check_okf.py dostaje parametr --scope, albo kb-wiki (dowolna wersja) trzyma
własny walidator na stałe (rekomendacja tej sesji — już częściowo zrobione, patrz
check_okf.py w repo tej sesji).
3. Różnice konwencji: lipiec vs ta sesja (nieistotne merytorycznie, warto ujednolicić)
| Aspekt | Lipiec (oskar/kb-wiki, prawdziwe repo) |
Ta sesja (lokalne) | Rekomendacja |
|---|---|---|---|
| Plik nawigacyjny root | INDEX.md (duża litera), osobny od OKF-owego index.md (nie istnieje w ogóle w lipcowym repo — brak pliku index.md) |
index.md (mała litera, OKF §11 reserved-file, pełni tę samą rolę) |
Do rozstrzygnięcia przez operatora — lipcowe repo nie ma pliku index.md w ogóle, więc formalnie nie przechodzi check_okf.py tej sesji (brak bloku frontmattera nie wystąpi, bo pliku nie ma, ale reguła "root index.md wymagany" by to złapała, gdyby uruchomić walidator tej sesji na lipcowym repo — nie testowane, bo nie nasze repo do modyfikacji) |
type dla _meta/conventions.md |
meta (dodatkowa wartość w słowniku typów) |
temat (nadużycie istniejącego typu, bo TYPES tej sesji nie miało meta) |
Lipcowe podejście czystsze — warto przyjąć meta jako 6. typ przy rekoncyliacji |
Frontmatter sources obowiązkowe niepuste |
Nie wymuszone narzędziem (ręczna dyscyplina) | Wymuszone w check_okf.py (poza _meta/) |
Zachować regułę tej sesji przy rekoncyliacji — tańsze niż poleganie na dyscyplinie |
| Walidator jako plik w repo | Brak (weryfikacja ad hoc, nieskomitowana) | check_okf.py, skomitowany, wielokrotnego użytku |
Przenieść check_okf.py tej sesji do prawdziwego repo przy rekoncyliacji |
| Remote skonfigurowany | Tak (Forgejo, master) |
Nie (lokalny, celowo) | — |
Żadna z różnic nie jest błędem — obie konwencje są spójne z faza3 §8.2 i audytem
08-26 w rzeczach, które się nakładają (format [^envelope_id#chunk_id], fallback,
sekcja niepewności, CC/API-only, izolacja retrievalu kompilacji od source='wiki').
4. Rekoncyliacja — do operatora, nie rozstrzygane przez tę sesję
To jest decyzja o realnych, już opublikowanych danych osobowych (finanse, ubezpieczenia, dziecko na turnieju) w prawdziwym repo — powyżej progu, przy którym ta sesja podejmuje decyzje sama. Opcje, bez rekomendacji wiążącej:
- Scalić nowe strony tej sesji do prawdziwego repo.
podmioty/mbank.mdiosoby/pawel-cesar-sanjuan-szklarz.mdnie kolidują z niczym w lipcowym repo — czysty dodatek.sprawy/fll-2025-26.mdkoliduje (dwie różne kompilacje tej samej encji) — wymaga porównania treść-po-treści przez operatora albo kolejną sesję CC, nie automatycznego scalenia. - Porównanie dwóch niezależnych kompilacji
fll-2025-26jako test jakości kompilatora. Obie wersje (lipcowa i ta) zgadzają się merytorycznie w kluczowych punktach: wynik 195 pkt jako jedyny czytelny wprost z chunka (paperless:119#277/#278— obie sesje trafiły w ten sam chunk niezależnie), pozostałe dwa wyniki (165/230) tylko ze streszczenia, nominacja do Nagrody Sędziów niepotwierdzona wprost w chunku, imiona z formularzy zgód celowo pominięte, nazwisko trenera nieczytelne OCR. Rozbieżność: ta sesja znalazła i zacytowała sprzeczność liczebności drużyny (10 vs 8 osób, z korespondencji gmail — lipcowa wersja jej nie ma, bo nie sięgnęła po te same koperty gmail). Lipcowa wersja znalazła niejednoznaczność sezonu SUBMERGED vs UNEARTHED (paperless:6) i konkretne imiona dzieci z nazw plików (metadane, nie treść dokumentu) — ta sesja pominęłapaperless:6całkowicie i nie sięgnęła poentities[type=filename]. Dwie niezależne kompilacje tej samej encji nie są sprzeczne, są komplementarne — dobry sygnał, że metoda jest powtarzalna, zły sygnał, że jedna kompilacja pomija realne dowody, które druga znalazła. - Zostawić oba repo osobno, jawnie zarchiwizować to jako dwa niezależne przebiegi tej samej fazy. Najbezpieczniejsze, ale traci szansę na scalenie uzupełniających się dowodów z punktu 2.
Krok operatora, niezależnie od wyboru z (1)-(3): ~/kb-wiki-etap1-sesja-2026-08-27/
istnieje lokalnie, nigdy nie pushowany — do usunięcia/scalenia/zachowania wg
decyzji, nie automatycznie.
5. Poza zakresem tej notatki (Etap 2, jeśli operator potwierdzi kontynuację)
Zależnie od wyniku rekoncyliacji z §4:
- Skala do pełnej listy 17 encji z audytu §3 (już częściowo pokryta lipcowym repo
inną listą — PZU/WARTA/wspólnota/FLL nie pokrywają się z 17-pozycyjną listą
audytu poza
fll-2025-26; wymaga ponownego review, które z 17 są już zrobione pod innymi nazwami). - Lint automatyczny w kodzie (
kb-wiki/lint.py, inwariant 3 pełny) — żadna z dwóch kopii tego nie ma, obie robiły lint ręcznie. - Jednorazowy skan
<EFBFBD>/\x00na źródłach, które faktycznie zasiliły PoC (decyzja h) — nie wykonany w żadnej z dwóch kompilacji; oba proof-of-concept napotkały uszkodzony OCR organicznie (paperless:119/120 w obu wersjach fll-2025-26, mbank.md ta sesja) bez systematycznego skanu. - Integracja
source='wiki'wpackages/kb-retrieval(inwariant 5+7) — poza zakresem obu przebiegów. - Rozjazd
scripts/kb/check_okf.py(SCOPE sztywny) — patrz §2, nie naprawiony celowo (instrukcja zlecenia: nie hackować).