Erik Horváth

Práca

Erik Horváth, DevOps inžinier, Nitra, na diaľku, kontrakt alebo B2B, plný úväzok od 2027

Skúsenosti a vzdelanie, diplomová práca, zamestnanie a projekty, práca s AI a to, čo netvrdím; čísla z meraní a z repozitárov majú očíslované zdroje, ich zoznam je na konci stránky.

Skúsenosti a vzdelanie

Od najnovších.

Zamestnanie

  1. – teraz

    DevOps inžinier

    Marketeam, s. r. o., Nitra

    Podrobnosti nižšie

  2. –

    AI inžinier – stáž

    HOFITECH s. r. o.

    Náplň práce je pod NDA.

  3. –

    Frontend vývojár (Angular)

    na voľnej nohe

  4. –

    Lektor programovania pre deti

    EDU PLAY s. r. o., Nitra

Vzdelanie

  1. – teraz

    Aplikovaná informatika, magisterské štúdium (prebieha)

    UKF Nitra

    Diplomová práca: introspekcia bežiaceho virtuálneho stroja KVM bez zberného agenta v hosťovi.

  2. –

    Bc. aplikovaná informatika

    UKF Nitra

    Bakalárska práca: nástroj GraphVisualization, ktorý krok za krokom ukazuje grafové algoritmy (Python, Tkinter).

  3. –

    Softvérové inžinierstvo

    UTB Zlín

    Nedokončené.

Technológie

Infraštruktúra
Docker/Compose, GitHub Actions, GHCR, Nginx, Linux
Jazyky
Python, PHP, C, SQL, Bash
Backend
Django/DRF, Symfony, PostgreSQL, Redis
Systémy
eBPF, KVM

Len to, čo dokladá kód alebo práca. Nástroje, ktoré poznám iba z projektov, kde kód napísal AI agent (napr. FastAPI, cosign), neuvádzam.

Diplomová práca

Hlavný projekt, s pomocou AI. Samostatne, magisterské štúdium prebieha; súkromný repozitár hyptcn3, 09/2026.

Čítam pamäť bežiaceho virtuálneho stroja zvonku.

Nástroj, ktorý beží vo vnútri virtuálneho stroja, môže útočník v tom istom stroji vypnúť alebo oklamať. Preto sa pozerám zvonku: z pamäte bežiaceho stroja KVM skladám jeho procesy, moduly jadra a sieťové sokety. Počas snímania v ňom nebeží žiadny zberný agent a stroj sa nezastavuje.

Výsledok som porovnal s tým, čo hlásili ps, lsmod a ss spustené priamo v hosťovi.1 Existujúci eBPF zberač som prevzal a opravil.2

Podmienka: profil jadra (kallsyms + BTF) z toho istého štartu hosťa, získaný z neho vopred.3

81 z 81

procesov stabilných počas snímky našla rekonštrukcia z pamäte: žiadny nechýbal, žiadny nebol navyše.1 K tomu 51/51 modulov jadra a 10/10 počúvajúcich soketov (+2 vysvetlené navyše). Jedna validačná relácia, porovnanie s ps, lsmod a ss v hosťovi.

Kód: 5 výňatkov

Obr. 1Ako je v3 poskladaná: bloková schéma

Obr. 1Ako je v3 poskladaná, od pamäte hosťa po model. Typ rámčeka rozlišuje prevzatý kód od kódu napísaného pre v3. Celá v3 vznikla s pomocou AI; rámček teda neoznačuje, kto kód písal, len či je prevzatý.

Legenda k obrázku 1

  • kód napísaný pre v3 (s pomocou AI)
  • prevzatý kód, ktorý som opravil
  • implementované, nenatrénované
  • validačná cesta: overenie voči stavu v hosťovi
  • údaje a súbory
Bloková schéma v3: pamäť hosťa, eBPF zberač, snímky, rekonštrukcia, validácia a model TCN. Rovnaký obsah je nižšie ako text.Hosť · KVMDebian 12, 2 vCPUbez zberného agentaps · lsmod · sspozemná pravdakallsyms + BTFprofil jadraRAM hosťa2,02 GiBVM beží ďalejčítajú sa z nej:– tabuľky stránok– procesy– moduly jadra– soketyeBPF programvmic_kvm.bpf.cčíta memsloty KVM4 opravy načítaniavmicollect (C)prevzatý, ~83 % riadkov CSHA-NI,priebežný hashper-bin príznaky.vmicdplné + deltasnímkysidecarper-binpríznakyRekonštrukciaguestparse · Python– posun jadra (KASLR)– tabuľky stránok, 4 úrovne– procesy, moduly, sokety– krížové kontrolyValidáciavoči ps, lsmod, ss81/81 procesovstabilných počas snímky51/51 modulov jadra10/10 soketov (+2)jedna relácia,binárka spredzmeny hashovaniaModel TCNimplementovaný,otestovanýnenatrénovanýpozemná pravda: spustená v hosťovi cez SSH, okolo snímkyprofil jadra odobraný z hosťa vopred, pre každý štart hosťavektor príznakovBloková schéma v3: pamäť hosťa, eBPF zberač, snímky, rekonštrukcia, validácia a model TCN. Rovnaký obsah je nižšie ako text.Hosť · KVMDebian 12, 2 vCPUbez zberného agentaps · lsmod · sspozemná pravda, cez SSHkallsyms + BTFprofil jadra pre daný štart hosťaRAM hosťa, 2,02 GiBVM beží ďalejeBPF programvmic_kvm.bpf.cčíta memsloty KVM4 opravy načítaniavmicollect (C)prevzatý, ~83 % riadkov CSHA-NI,priebežný hashper-binpríznaky.vmicdplné + deltasnímkysidecarper-binpríznakyRekonštrukciaguestparse · Python– posun jadra (KASLR)– tabuľky stránok, 4 úrovne– procesy, moduly, sokety– krížové kontrolyValidáciavoči ps, lsmod, ss81/81 procesovstabilných počas snímky51/51 modulov jadra10/10 soketov (+2)jedna relácia,binárka spred zmeny hashovaniaModel TCNimplementovaný,otestovanýnenatrénovanývektor príznakov
Schéma ako text
  1. Hosť: Debian 12 v KVM, 2 GiB RAM. Počas snímania v ňom nebeží žiadny zberný agent a stroj sa nezastavuje. Z jeho pamäte sa čítajú tabuľky stránok, procesy, moduly jadra a sokety.
  2. eBPF program vmic_kvm.bpf.c v jadre hostiteľa číta pamäť hosťa cez KVM memsloty. Program je prevzatý; moje sú štyri opravy, bez ktorých sa na jadre 7.1 nenačítal.Kód: eBPF: bpf_loop() namiesto cyklu, ktorý verifikátor odmietol
  3. Zberač vmicollect v C je prevzatý (~83 % riadkov C, autor neznámy). Pre v3 k nemu pribudol per-bin modul príznakov a priebežný hash s vetvou SHA-NI; zmenu hashovania napísal AI agent pod mojím vedením a poradie intrinsic volaní v nej je podľa referencie Intel/noloader.2Kód: SHA-NI s výberom vetvy cez CPUID za behu
  4. Výstupom sú plné a delta snímky .vmicd a k nim sidecar s per-bin príznakmi.
  5. Vlastná rekonštrukcia guestparse (Python, s pomocou AI) použije profil jadra odobraný z hosťa pre daný štart, nájde posun obrazu jadra (KASLR), prejde tabuľky stránok (so známou chybou masky PAT pri veľkých stránkach) a zostaví procesy, moduly a sokety. Krížové kontroly porovnávajú nezávislé štruktúry jadra (invarianty proti rootkitom).345Kód: Nájdenie posunu jadra (KASLR) v snímke · Prechod 4-úrovňových tabuliek stránok x86-64 · Krížová kontrola procesov (invariant proti rootkitom)
  6. Validácia: výsledok sa porovná s ps, lsmod a ss spustenými v hosťovi cez SSH. Jedna validačná relácia, ešte s binárkou spred zmeny hashovania: 81/81 procesov stabilných počas snímky, 51/51 modulov jadra, 10/10 počúvajúcich soketov (+2 vysvetlené navyše).1
  7. Per-bin príznaky idú do modelu TCN. Model je implementovaný a otestovaný, ale zámerne nenatrénovaný, takže žiadnu presnosť detekcie neuvádzam.6
Tabuľka 1. Merania v3 a ich podmienkyZostava: hostiteľ i7-12650H, Fedora 43, jadro 7.1 · hosť Debian 12, jadro 6.1, 2 vCPU, 2 GiB RAM · validačná relácia 18. 9. 2026.
ParameterPodmienkyHodnotanZdroj
Zber pamäte
Plná snímka RAM, 2,02 GiBkontrolný súčet vypnutý; VM sa nepozastavuje~0,39 s (medián 393,9 ms; 5 240 MiB/s)37
Cyklus snímky so SHA-256kontrolný súčet zapnutý; pred zmenou a po nej (priebežný hash vo feed() + vetva SHA-NI); merané na necommitnutých zmenách13,4 s → 2,5 s (5,4×)3 + 38
Daň za rýchlejší cyklusto isté meranie, kontrolný súčet zapnutýokno čítania pamäte 388 → 2 288 ms; zapísané v denníku meraní ako kompromis3 + 38
eBPF program na jadre 7.1prevzatý program sa nenačítal; 4 samostatné príčiny4 opravy: 1 cez nepriehľadnú definíciu štruktúry (BTF FWD/STRUCT pri kfunc), 3 cez bpf_loop() (8193 skokov, 2× limit 1M inštrukcií)–9kód
Rekonštrukcia a validácia
Validácia voči stavu v hosťovivoči ps, lsmod a ss -tulpn v hosťovi (cez SSH); jedna validačná relácia; binárka spred zmeny hashovania81/81 procesov stabilných počas snímky (0 chýbajúcich, 0 falošne pozitívnych) · 51/51 modulov jadra · 10/10 počúvajúcich soketov; +2 navyše: nenaviazaný UDP soket a DNS dopyt, ktoré ss -tulpn nevypíše11
Ďalšie merania (8): SHA-NI, príčina spomalenia, periodický zber, KASLR, príznaky a testy
Tabuľka 1, pokračovanie: ďalšie merania
ParameterPodmienkyHodnotanZdroj
Zber pamäte
SHA-NI vs. skalárny SHA-256samotný hash; vetva sa vyberá cez CPUID za behu357 → 2 151 MiB/s (6,0×); bitovo zhodné so sha256sum na 223 súboroch; UBSan bez nálezov310kód
Príčina 56× spomaleniaSHA-256 sa počítal nad celým 4 GiB riedkym súborom vrátane dier; porovnané s behom bez hashu; nie čisté A/B (iný čas, iné množstvo zapísaných dát)42,2 s → 0,75 s1 + 111
Periodický zber
Periodický delta zberperióda 5 s, 12 cyklov (1 plná + 11 delta snímok)0 zmeškaných slotov1212
Zmenené stránky medzi snímkaminečinný hosť, delta, perióda 5 s~0,046 % (medián 245 z 528 417 stránok)713
Latencia snímka → vektor príznakovperióda 2 s, delta, príznaky zapnutémedián 604 ms, p95 613 ms1214
Rekonštrukcia a validácia
Posun obrazu jadra VA→PA (phys_base, zahŕňa KASLR)nájdený vo validačnej snímke−2 MiB115kód
Príznaky a testy
C modul per-bin príznakov vs. Pythonnezávislá referencia v Pythone nad tými istými snímkamipresná zhoda na 6 snímkach × 131 binov616
Testy (pytest)čistý klon; preskočené testy potrebujú lokálne snímky213: 185 prejde, 28 sa preskočí–17

Každé číslo platí iba za podmienok vo svojom riadku.

Tri iterácie

v1 hypTcn (02–03/2026) → v2 hypTcn002 (03–08/2026) → v3 hyptcn3 (09/2026)
  1. v1hypTcn

    02–03/2026 · dnes súkromný repozitár

    Prvá iterácia s kódom: C obal nad libvmi → CGO → Go orchestrátor → binárny protokol cez Unix socket → TCN v Pythone. Iba syntetické dáta; Go binárka pre živú VM nebola na reálnej VM overená.

    S pomocou AI. 5 z 37 commitov má AI co-author trailer. Chýbajúci trailer pri jadre v C a Go nedokazuje, že ho AI nepísala.18

    Kód: CGO most z Go do C/libvmi (v1)

  2. v2hypTcn002

    03–08/2026 · druhý GitHub účet (avUnitfan)

    C/libvmi → CGO → Go → binárne rámce → TCN v PyTorch. Pribudol eBPF agent v hosťovi, takže v2 ako celok nie je bez agenta; KVM dirty ring je implementovaný, ale v praxi zablokovaný (sonda bežala v 200 ms polling režime). Jej metriky som odvolal.

    Kód napísal AI agent. 81 % z 408 commitov na develop má AI co-author trailer – kód písali AI agenti pod mojím vedením. Počet zahŕňa 37 commitov importovaných z v1.1920

    Kód: Vlastný V2P prechod nad libvmi (v2) · Konzument KVM dirty ringu (v2)

  3. v3hyptcn3

    09/2026 · súkromný repozitár

    Prevzatý a opravený eBPF zberač nad KVM memslotmi a vlastná rekonštrukcia v Pythone, overená voči stavu hlásenému z hosťa. Bez Go, CGO a libvmi.

    v3 vznikla s pomocou AI (~24 h história, veľké commity, review dokumenty písané AI; zmenu hashovania so SHA-NI napísal AI agent); moja rola: návrh, vedenie a kontrola meraní, ladenie, kontrola validácie, stiahnutie chybných výsledkov.21

    Kód: Prechod 4-úrovňových tabuliek stránok x86-64 · Krížová kontrola procesov (invariant proti rootkitom)

Našiel som chybu vo vlastných výsledkoch a stiahol ich

Neplatné, odvolané: F1 99,70 AUC 99,98

Takéto metriky detekcie mala druhá verzia (v2). Pri kontrole som zistil, že spôsob merania skresľoval výsledok, preto tieto čísla neplatia. Konkrétne išlo o dve chyby v metodike: labely patrili celým reláciám, nie jednotlivým oknám (confound na úrovni relácie), a okná z tej istej relácie sa dostali do trénovacej aj testovacej množiny (únik). Nikde ich preto neuvádzam ako výsledok.22

Čo som potom postavil

  • scripts/check_claims.sh – linter tvrdení: hľadá odvolané čísla z čiernej listiny a značky proveniencie {{res:…}} porovnáva s výsledkovými JSON súbormi. Nespúšťa ho CI ani hook a na aktuálnom commite ešte hlási nálezy (pozri Čo netvrdím).23
  • Test: signál, ktorý nesie iba identitu relácie, nesmie prekonať náhodu. Keby split znova pustil tú istú reláciu do tréningu aj testu, test zlyhá.24
Krok za krokom: prechod tabuľkami stránok (Obr. 2) interaktívne, s kódom
Obr. 2

Ako sa z adresy v pamäti stroja stane konkrétny bajt RAM

Ukážka z diplomovej práce: jeden krok, ktorý nástroj pri rekonštrukcii robí stále dokola – nájsť, kde vo fyzickej pamäti leží daná adresa. Prejdite si to po krokoch aj s kódom.

Prechod štyroch úrovní tabuliek stránok x86-64Virtuálna adresa 0xffffffffc0a3f040 rozdelená na indexy 511, 511, 5, 63 a posun v stránke; stav: Výsledok.Virtuálna adresa · 64 bitov0xffff ffff c0a3 f04063:48kópia b4747:3951138:3051129:21520:126311:00x040Koreňtabuliek stránok jadrainit_top_pgtpa 0x280a000symbol z profilu+ posun VA→PAPML4Linux: PGD512 × 8 B511nepoužitáPDPTLinux: PUD512 × 8 B511nepoužitáPDLinux: PMD512 × 8 B5nepoužitáPTLinux: PTE512 × 8 B63nepoužitáStránka4 KiB+0x040nedosiahnutá

Bez JavaScriptu sa zobrazia všetky kroky prvého príkladu naraz.

  1. Adresakrok 1 z 7

    Jadro hosťa si pamätá, kde leží každý modul, ako virtuálnu adresu. Zvonku vidíme iba fyzickú pamäť, takže adresu treba preložiť rovnako ako procesor: cez štyri tabuľky stránok.

    va = 0xffffffffc0a3f040 · oblasť modulov (od 0xffffffffc0000000) nie je lineárne mapovaná, preto prechod tabuliek · koreň: table = self._pgt_root() = 0x280a000

  2. PML4Linux: PGDkrok 2 z 7

    Bity 47 až 39 vyberú jeden z 512 riadkov najvyššej tabuľky. Riadok neobsahuje dáta, ale fyzickú adresu ďalšej tabuľky.

    idx = (va >> 39) & 0x1FF = 511 · položka 0x000000000280d067 · P=1 RW=1 NX=0 → ďalšia tabuľka 0x280d000

  3. PDPTLinux: PUDkrok 3 z 7

    Ďalších 9 bitov vyberie riadok v druhej tabuľke. Moduly ležia úplne hore v adresnom priestore, preto je aj tu index 511.

    idx = (va >> 30) & 0x1FF = 511 · položka 0x000000000280f067 · P=1 RW=1 PSE=0 NX=0 → 0x280f000

  4. PDLinux: PMDkrok 4 z 7

    Tretia tabuľka. Keby mal riadok nastavený bit PSE, prechod by tu skončil v 2 MiB stránke; tu nastavený nie je.

    idx = (va >> 21) & 0x1FF = 5 · položka 0x0000000004a1e067 · P=1 RW=1 PSE=0 NX=0 → 0x4a1e000

  5. PTLinux: PTEkrok 5 z 7

    Posledná tabuľka ukáže na konkrétnu 4 KiB stránku fyzickej pamäte.

    idx = (va >> 12) & 0x1FF = 63 · položka 0x8000000007b3c163 · P=1 RW=1 PAT=0 NX=1 · maska 0x000FFFFFFFFFF000 zahodí aj bit NX → 0x7b3c000

  6. Stránkakrok 6 z 7

    Zvyšných 12 bitov je posun v rámci stránky. Teraz vieme presne, ktorý bajt pamäte čítať.

    pa = table + (va & 0xFFF) = 0x7b3c000 + 0x040 = 0x7b3c040

  7. Výsledokkrok 7 z 7

    Na tejto fyzickej adrese leží štruktúra modulu aj s jeho menom. Takto rekonštrukcia prejde celý zoznam modulov; v jednej validačnej relácii sa všetkých 51 zhodovalo s lsmod v hosťovi.1

    modules(): mpa = self.walk_pa(nxt - o_list) → name = self.cstr(mpa + o_name, 56) · view.py:415, 419

guestparse/view.pyhyptcn3 · súkromné repo · výňatok · riadky 204–252 · ref 97b0c43 · vzniklo s pomocou AI
204 def walk_pa_detail(self, va):
222 out = {"pa": None, "level": None, "index": None,
223 "reason": None, "reason_code": None}
224 table = self._pgt_root()
225 if table is None:
226 out["reason_code"] = "bez_korena"
227 out["reason"] = ("neznamy posun jadra alebo profil nema "
228 "init_top_pgt")
229 return out
230 # bity 47:39 / 38:30 / 29:21 / 20:12
231 for level, shift in enumerate((39, 30, 21, 12)):
232 idx = (va >> shift) & 0x1FF
233 name = self.PGT_LEVELS[level]
234 ent = self.u64(table + idx * 8) if self._page_present(table) else None
235 if ent is None:
236 out.update(level=name, index=idx, reason_code="chyba_tabulka",
237 reason="tabulka %s na 0x%x nie je v snimke"
238 % (name, table))
239 return out
240 if not (ent & self.PTE_PRESENT):
241 out.update(level=name, index=idx, reason_code="chyba_polozka",
242 reason="polozka %s[%d] nie je pritomna"
243 % (name, idx))
244 return out
245 phys = ent & 0x000FFFFFFFFFF000
246 if level in (1, 2) and (ent & self.PTE_PSE):
247 size = 1 << shift
248 out["pa"] = phys + (va & (size - 1))
249 return out
250 table = phys
251 out["pa"] = table + (va & 0xFFF)
252 return out
Ďalšie výňatky v prehliadači kódu

PoznámkaPreklad virtuálnej adresy na fyzickú cez štyri úrovne tabuliek stránok x86-64 tak, ako ho robí vlastná funkcia walk_pa_detail (bez libvmi).4 Adresy a hodnoty položiek sú ilustračné, lebo snímka pamäte nie je súčasťou repozitára. Bitové polia, postup a kód sú skutočné.

Zamestnanie a projekty

Zamestnanie a projekty okrem diplomovej práce. Pri každom projekte uvádzam, ako vznikol, a odkazy na výňatky kódu. Diplomová práca je opísaná vyššie.

Zamestnanie · od 02/2026

Marketeam: Symfony 3.4 → 6.4, staging a pamäť Pretixu

  • Firemnú aplikáciu som migroval zo Symfony 3.4 na 6.4, teda o tri hlavné verzie, vrátane úprav pre zmenené API, závislosti a konfiguráciu.25
  • Postavil som stagingové prostredie a pripravujem infraštruktúru na nasadzovanie (Docker, CI/CD).25
  • Kontajner Pretixu, systému na predaj vstupeniek, zaberal 6,7 GB pamäte. Obmedzil som súbežnosť pracovných procesov Celery na dva a pamäť klesla na ~0,9 GB (namerané v práci).26 V kóde je to jeden riadok v konfigurácii supervisord.27

Verejná zmena:PR #1 v Marketeam-SK/pretixcommit 3e0dc2f07

Názov PR hovorí „Increase concurrency“; zmena v skutočnosti pridáva pevný limit --concurrency 2, predtým nebol nastavený žiadny.

Tímový projekt · 3 ľudia · 10/2025 – 01/2026 · SIprojekt (tímový repozitár)

Systém na evidenciu odborných praxí: backend a vlastný OAuth 2.0 server

Backend v Django/DRF je môj: 98,75 % riadkov Pythonu podľa git blame, 96,4 % s detekciou presunov a kópií. Frontend a SQL schému robili spolužiaci.28

Vlastný autorizačný server OAuth 2.0 bez knižnice pre OAuth server (tokeny vydáva SimpleJWT, assertion overuje PyJWT): 4 typy grantov, PKCE S256 a autentifikácia klienta private_key_jwt podľa RFC 7523.29

AI v histórii gitu: 0 commitov s AI spoluautorom

Medzi známymi medzerami: PKCE stále prijíma aj metódu plain a tá je predvolená; assertion pri private_key_jwt nemusí mať exp a jti sa proti opakovaniu nekontroluje.3029

SIprojekt: Kód: 5 výňatkov
Podrobnosti a technológie: SIprojekt
  • End-to-end test vygeneruje pár kľúčov RSA, podpíše JWT assertion a so získaným tokenom zavolá chránené API.31
  • Release pipeline v GitHub Actions má 11 krokov a zostaví image backendu aj frontendu do GHCR; úspešne prebehla 13. 1. 2026.32
  • Redis cache s invalidáciou riadenou signálmi a refaktor z „tučných“ view do servisnej vrstvy.

Prečo na tom záleží: OAuth 2.0 som implementoval na úrovni protokolu, nielen nakonfiguroval knižnicu – a viem, aké medzery v ňom zostali.

Technológie: Python · Django · DRF · SimpleJWT · PyJWT · PostgreSQL · Redis · Docker Compose · Nginx · GitHub Actions · GHCR

Výňatky v prehliadači kódu

Samostatný prototyp · 01/2026 · ~10 dní, 14 PR · scanforeshop (súkromný repozitár)

scanforeshop: skripty vložené do e-shopu za behu

Pri útokoch typu Magecart sa do stránky e-shopu dostane cudzí skript, ktorý odchytáva platobné údaje. scanforeshop otvorí stránku v prehliadači (Playwright) a ešte pred jej vlastným JavaScriptom obalí dve z funkcií, ktorými sa skripty vkladajú do stránky (appendChild, insertBefore). Oddelí tak externé skripty, ktoré poslal server v HTML, od tých, ktoré pribudli až za behu.33

Ako vzniklo: s pomocou AI (Codex). Stopou v kóde sú identifikátory s „codex“ v názve.34

Stav: prototyp. Obaľuje len appendChild a insertBefore, takže iné spôsoby vloženia nezachytí; ďalej sa uchovajú len skripty so src, takže inline vloženie sa nikdy neoznačí ako dynamické. Skóre príznak dynamického vloženia zatiaľ ignoruje.3335

scanforeshop: Kód: 4 výňatky
Podrobnosti a technológie: scanforeshop
  • Každý skript má identitu podľa SHA‑256. Deterministické porovnanie dvoch skenov vedie k upozorneniam, časovej osi a reportu v HTML alebo PDF.36
  • Riziko je vážené podľa typu stránky (úvodná, obchod, pokladňa) a testy kalibrujú falošné poplachy.

Prečo na tom záleží: skript vložený až v prehliadači v HTML zo servera nie je, takže ho treba zachytiť vo chvíli vloženia.

Technológie: Python · Django · DRF · Playwright · SQLite · Next.js (prototyp frontendu) · TypeScript · Docker Compose

Práca s AI agentmi: supply chain PoC a dolt kód napísali AI agenti pod mojím vedením · 2 projekty

Samostatný proof of concept · 06/2026 · sovereign-ai-poc (súkromný repozitár)

Podpísaný supply chain a monitor egressu (PoC)

Proof of concept suverénneho MLOps prostredia pre EÚ na docker-compose: Forgejo, MinIO, PostgreSQL, MLflow, registry Zot a verzovanie dát v DVC.

Ako vzniklo: kód napísal AI agent – Claude, vrátane akceptačných skriptov, pod mojím vedením; zadanie a architektúra sú moje.

Stav: PoC. Fáza 6 nie je hotová, model je len ukážkový (iris) a fázy 2, 4 a 5 sa z čistého klonu nespustia, lebo dataset v repozitári nie je.37

sovereign-ai-poc: Kód: 4 výňatky
Podrobnosti a technológie: sovereign-ai-poc
  • Image musí prejsť bránou Trivy (žiadna zraniteľnosť CRITICAL), cosign ho podpíše podľa digestu offline kľúčom a pribudne k nemu atestácia SPDX SBOM.38
  • Negatívne testy overujú, že nepodpísaný alebo zraniteľný image neprejde.39
  • Monitor v bpftrace obmedzený na cgroup jedného kontajnera odlíši bežné odchádzajúce spojenia od zámerného exfiltračného testu.40

Prečo na tom záleží: negatívne testy sú postavené tak, aby zlyhali, ak brána zlý image neodmietne – nekontrolujú len to, že dobrý prejde.

Technológie: Docker Compose · Forgejo · MinIO · PostgreSQL · MLflow · Zot · DVC · cosign · Trivy · SPDX SBOM · bpftrace · Bash

Výňatky v prehliadači kódu

Samostatné MVP · 07/2026 · dolt-platform (súkromný repozitár)

dolt: hodnotenie DevOps zručností podľa stopy práce

MVP, ktoré hodnotí juniorných DevOps inžinierov podľa toho, ako naozaj pracujú. Go CLI (len štandardná knižnica) vedie záznam práce ako JSONL reťazený hashmi SHA‑256 s kľúčom zariadenia ed25519; server vo FastAPI reťaz znova overí a deterministický scorer záznam ohodnotí.

Ako vzniklo: kód napísal AI agent – môj je produktový nápad, záznam architektonických rozhodnutí D‑001 až D‑015 a akceptačný harness s 27 kontrolami, ktorý som špecifikoval a zmrazil; do repozitára ho vložil agent.

Hranice: zmrazenie platilo len ako pokyn pre agenta, technicky vynútené nebolo – agent v jednom commite zmenil práva súboru eval/eval.sh. Server podpis ed25519 zatiaľ neoveruje.4142

dolt-platform: Kód: 3 výňatky
Podrobnosti a technológie: dolt-platform
  • Výsledok som reprodukoval: prešlo 27 z 27 kontrol.43

Prečo na tom záleží: keď kód píše agent, akceptačný harness je zmluva – agent má meniť kód, nie meradlo. Tu to platilo len pokynom, technicky vynútené to nebolo.

Technológie: Go (stdlib) · Python · FastAPI · Bash · ed25519 · reťazec hashov SHA-256 · Docker Compose (testovací scenár)

Ako pracujem s AI

Čo robím ja, čo agent a kde je to vidieť v histórii.

Najprv navrhnem riešenie a spíšem zadanie s akceptačnými kritériami. Veľkú časť kódu potom napíšu AI agenti. Kód čítam, testujem a kde to ide, overujem meraním na reálnom systéme. Keď výsledok neobstojí, stiahnem ho – tak ako som stiahol vlastné čísla z druhej verzie diplomovej práce.

Pri každom repozitári uvádzam, ako vznikol, aj s počtom commitov a AI co-author trailerov: tabuľka 1 na stránke Kód.

Čo netvrdím

Hlavné hranice tvrdení na jednom mieste, každá s dôvodom. Ďalšie známe chyby sú opísané priamo pri výňatkoch kódu.

Tabuľka 2. Hranice tvrdení
OblasťHranicaPrečo
Diplomová práca
Presnosť detekcieŽiadnu neuvádzam. Model TCN nie je natrénovaný.Model je implementovaný a otestovaný (kauzalita, receptívne pole), ale zámerne nenatrénovaný, takže číslo o presnosti neexistuje. Odvolané metriky z v2 neplatia.622
Rozsah validácieJedna validačná relácia na jednom hosťovi Debian 12 (18. 9. 2026).Výsledky validácie v tabuľke 1 platia pre túto reláciu. Na iné jadrá ani na hosťa pod záťažou ich nezovšeobecňujem.1
Validácia a rýchlejší cyklus snímkyVýsledok 81/81 (procesy stabilné počas snímky) platí pre binárku spred zmeny hashovania.Po zmene sa pri zapnutom kontrolnom súčte predĺžilo okno čítania pamäte z 388 na 2 288 ms. Vplyv dlhšieho okna na presnosť rekonštrukcie nie je zmeraný; denník meraní ho vedie ako otvorenú položku.81
Znalosť hosťaRekonštrukcia potrebuje profil jadra (kallsyms + BTF) odobraný z hosťa pre každý jeho štart.„Bez agenta“ znamená, že počas snímania v hosťovi nebeží žiadna súčasť nástroja ani zberný či bezpečnostný agent. Hosť sám beží ďalej normálne. Pozemná pravda (ps, lsmod, ss) sa vo validačnej relácii zbierala v hosťovi cez SSH.3
Autorstvo zberača vmicollect~83 % jeho riadkov C je prevzatých (autor neznámy); z môjho účtu (s pomocou AI) je ≈ 1,5 tis. riadkov C.Existujúci eBPF zberač som prevzal a opravil, nenapísal ho. Z môjho účtu pribudli per-bin modul a opravy načítania eBPF programu. Priebežný hash s vetvou SHA-NI napísal AI agent pod mojím vedením; poradie intrinsic volaní je podľa referencie Intel/noloader.244
Prechod tabuliek stránok vo v3Známa chyba: pri veľkých stránkach maska 0x000FFFFFFFFFF000 ponecháva v adrese bit 12 (PAT).Ak je PAT nastavený, fyzická adresa vyjde zle. v2 maskuje veľké stránky správne, takže v3 tu nie je jednoznačne lepšia.4Kód: Prechod 4-úrovňových tabuliek stránok x86-64
Linter tvrdení check_claims.shNa aktuálnom commite hlási 38 nálezov, väčšinou v docs/notebookLM.md.Nespúšťa ho CI ani hook, takže nič neblokuje. Netvrdím, že repozitár ním prechádza.23
Ostatné projekty a práca (7)
Tabuľka 2, pokračovanie: ostatné projekty a práca
OblasťHranicaPrečo
Ostatné projekty a práca
SIprojekt: Nginx a TLSTLS v produkcii netvrdím.Bezpečnostné hlavičky, rate limity a profil TLS 1.2/1.3 sú nakonfigurované, ale commitnutá produkčná konfigurácia TLS nikdy neservírovala (neprejde nginx -t).45
SIprojekt: OAuth 2.0 serverMedzi známymi medzerami: PKCE prijíma aj metódu plain (je predvolená), výmena kódu nie je atomická a assertion pri private_key_jwt nemusí mať exp, jti sa nekontroluje.Je to vlastná implementácia bez knižnice pre OAuth server, pripnutá na commit 2e96d44. Medzery sú vidieť v kóde a pri výňatkoch sú opísané s riadkami.3029Kód: Autentifikácia klienta cez private_key_jwt (RFC 7523)
KubernetesZáklady (minikube).Mám za sebou len spustenie klastra v minikube, preto Kubernetes neuvádzam medzi zručnosťami.
scanforeshopPrototyp so známymi medzerami.Skóre ignoruje príznak dynamického vloženia; obalené sú len appendChild a insertBefore (nie append, prepend, innerHTML či document.write) a zaznamená sa len priamo vložený skript, nie vnorený v inom elemente; ďalej sa uchovajú len skripty so src; dodávateľov porovnáva podreťazcom; aplikácia nemá autentifikáciu; frontend v Next.js je len prototyp (next build zlyhá).3335
dolt-platformZmrazenie harnessu platilo len ako pokyn pre agenta. Podpis ed25519 server neoveruje.Agent v jednom commite zmenil práva súboru eval/eval.sh. Ratchet zlyhá, len keď počet splnených kontrol klesne; výmenu jednej kontroly za inú nezachytí. Server znova overí hash-reťazec záznamu, ale kľúč zariadenia a podpis iba uloží.414342
sovereign-ai-poc„Zelený“ stav PoC nie je overený novým behom od začiatku do konca.Stojí na commit správach a NEXT.md. Fázy 2, 4 a 5 sa z čistého klonu nespustia, lebo dataset nie je v repozitári.37
Pamäť Pretixu (Marketeam)Úsporu pamäte som nameral v práci; verejný artefakt k nej nie je.Verejná je len jednoriadková zmena v zlúčenom PR. Jeho názov hovorí „Increase concurrency“, no zmena pridáva pevný limit --concurrency 2 tam, kde predtým žiadny nastavený nebol.2627

Zdroje

Každá číselná značka na webe vedie sem. Cesty sú relatívne ku koreňu repozitára pri commite, na ktorý je snímka pripnutá.

Zobraziť všetkých 48 zdrojov

Diplomová práca

  1. 1

    Rekonštrukcia porovnaná s ps, lsmod a ss v hosťovi (jedna validačná relácia, 18. 9. 2026)

    artefakthyptcn3 @ 97b0c43 · súkromný

    data/results/2026-09-18_zmrazeny_host/summary.json → values.validacia_voci_pozemnej_prave

    procesy: 83 v ps, z toho 81 stabilných počas snímky, nájdených 81, chýba 0, navyše 0 · moduly 51/51 · počúvajúce sokety 10/10, +2 navyše (nenaviazaný UDP soket a DNS dotaz, ktoré ss -tulpn nevypíše)

  2. 2

    vmicollect je prevzatý zberač: ~83 % jeho riadkov C je prevzatých (autor neznámy), moje je ≈ 1,5 tis. riadkov C

    git blamehyptcn3 @ 97b0c43 · súkromný

    README.mdcommit 6b9053d

    Import v commite 6b9053d („prevzatý stav, bez zmien“), pôvod uvádza README.md. Riadky z môjho účtu podľa git blame: per-bin modul, SHA-NI a priebežný hash, opravy načítania eBPF programu; zmenu hashovania napísal AI agent (data/results/2026-09-18_zmrazeny_host/env.json).

  3. 3

    Profil jadra hosťa (kallsyms + BTF) sa odoberá z hosťa vopred a platí pre jeden štart hosťa

    kódhyptcn3 @ 97b0c43 · súkromný

    scripts/get_profile.sh

    Profil nesie boot_id hosťa (profiles/debian12-6.1.0-42-cloud-amd64/README.md) a odoberá sa cez SSH alebo qemu-guest-agent. Samotný zber prístup do hosťa nepotrebuje.

  4. 4

    Vlastný prechod tabuliek stránok x86-64 (walk_pa_detail) s dôvodom zlyhania na každej úrovni

    kódhyptcn3 @ 97b0c43 · súkromný

    guestparse/view.py:204-252

    Známa chyba: pri veľkej stránke maska 0x000FFFFFFFFFF000 ponecháva v adrese bit 12 (PAT), riadky 245–248.

  5. 5

    Krížové kontroly proti rootkitom: hranice sys_call_table, zoznam úloh vs. strom potomkov, moduly vs. module_kset

    kódhyptcn3 @ 97b0c43 · súkromný

    guestparse/checks.py

  6. 6

    Model TCN: testy kauzality a receptívneho poľa; model je zámerne nenatrénovaný

    testhyptcn3 @ 97b0c43 · súkromný

    tcn/tests/test_tcn.py

    Žiadne číslo o presnosti detekcie neexistuje.

  7. 7

    Plná snímka 2,02 GiB bez kontrolného súčtu: medián čítania 393,9 ms, 5 240 MiB/s, VM nepozastavená

    artefakthyptcn3 @ 97b0c43 · súkromný

    data/results/2026-09-18_zmrazeny_host/summary.json → values.once_raw_hash_none

    vmicollect once, writer=raw, output.hash=none, 3 opakovania; paused: false.

  8. 8

    Cyklus snímky s SHA-256 pred zmenou a po nej (13,4 s → 2,5 s) a jeho daň (okno čítania 388 → 2 288 ms)

    artefakthyptcn3 @ 97b0c43 · súkromný

    data/results/optim_hash_20260918.json → values.pred.once_sha256, values.po.once_sha256

    Dve zmeny spolu: priebežný hash vo feed() namiesto hashu vo finish() nad riedkym súborom a vetva SHA-NI; zmenu napísal AI agent. Merané na necommitnutých zmenách, hashe binárok sú v súbore. Kompromis opisuje docs/MERANIA.md:576-605.

  9. 9

    Štyri dôvody, prečo sa eBPF program nenačítal na jadre 7.1, a ich opravy

    kódhyptcn3 @ 97b0c43 · súkromný

    vmicollect/bpf/vmic_kvm.bpf.ccommit 178ce4f

    Nezhoda BTF FWD/STRUCT pri kfunc (nepriehľadná definícia štruktúry); „sequence of 8193 jumps is too complex“ a dva limity 1M inštrukcií (bpf_loop()).

  10. 10

    SHA-NI s výberom cez CPUID: 357 → 2 151 MiB/s (6,0×), bitovo zhodné so sha256sum na 223 súboroch, UBSan bez nálezov

    artefakthyptcn3 @ 97b0c43 · súkromný

    data/results/optim_hash_20260918.json → values.sha256_priepustnost_mib_s, values.overenie

    Poradie intrinsic volaní v SHA-NI vetve je podľa referencie Intel / noloader SHA-Intrinsics (vmicollect/src/sha256.c:21-26).

  11. 11

    Príčina 56× spomalenia: SHA-256 nad celým 4 GiB riedkym súborom vrátane dier (42,2 s → 0,75 s)

    artefakthyptcn3 @ 97b0c43 · súkromný

    docs/MERANIA.md:135-156commit 18d4eaf

    Denník meraní sám uvádza, že dvojica behov nie je čisté A/B porovnanie (iný čas, 307 vs. 493 MiB zapísaných dát) a nedá sa vydávať za opakované meranie.

  12. 12

    Periodický zber s periódou 5 s: 12 cyklov, 0 zmeškaných slotov

    artefakthyptcn3 @ 97b0c43 · súkromný

    data/results/2026-09-18_zmrazeny_host/summary.json → values.run_delta_perioda_5s.summary_z_behu

    Výpis behu v run_delta_5s.json končí „0 zmeskanych slotov“.

  13. 13

    Nečinný hosť: medián 245 zmenených stránok z 528 417 medzi snímkami (~0,046 %)

    artefakthyptcn3 @ 97b0c43 · súkromný

    data/results/2026-09-18_zmrazeny_host/summary.json → values.run_delta_perioda_5s.prirastkove_snimky_bez_sedenia_ssh

  14. 14

    Latencia snímka → vektor príznakov: medián 604,3 ms, p95 612,6 ms

    artefakthyptcn3 @ 97b0c43 · súkromný

    data/results/latency_vector_20260918.json → values.suhrn["on_2.0s_delta"].latencia_ms

    Od začiatku cyklu zberu po zapísaný blok features; perióda 2 s, writer delta, hash vypnutý.

  15. 15

    Posun obrazu jadra VA→PA (phys_base, zahŕňa KASLR) nájdený v overovacej snímke: −2 MiB (−2 097 152 B)

    artefakthyptcn3 @ 97b0c43 · súkromný

    data/results/2026-09-18_zmrazeny_host/validate2.json → snapshot.ktext_shift

  16. 16

    C modul per-bin príznakov sa zhoduje s referenciou v Pythone na 6 snímkach × 131 binov

    artefakthyptcn3 @ 97b0c43 · súkromný

    data/results/perbin_crosscheck_20260918.json → values.vsetky_porovnania_ok

  17. 17

    Testy: 213 zozbieraných, 185 prejde, 28 sa na čistom klone preskočí

    testhyptcn3 @ 97b0c43 · súkromný

    python3 -m pytest -q na čistom klone pri 97b0c43; preskočené testy potrebujú lokálne snímky, ktoré v repozitári nie sú.

  18. 18

    v1 (hypTcn): 5 z 37 commitov má Co-Authored-By: Claude; Go binárka pre živú VM nebola na reálnej VM overená

    git históriahypTcn @ 9fa11b6 · súkromný

    PROJECT.md:247

    Commity s jadrom v C/Go trailer nemajú, Claude Code sa však v repozitári už používal, takže chýbajúci trailer nedokazuje opak. Repozitár je dnes súkromný.

  19. 19

    v2 (hypTcn002): 332 z 408 commitov na develop (81 %) má AI co-author trailer, vrátane 37 commitov importovaných z v1

    git históriaavUnitfan/hypTcn002 @ 0acd094 · súkromný

    commit 0acd094

    Druhý GitHub účet (avUnitfan). Naprieč všetkými vetvami 348 zo 424 (82 %).

  20. 20

    v2: eBPF agent v hosťovi a KVM dirty ring „implementovaný, zablokovaný“ (sonda bežala v 200 ms polling režime)

    kódavUnitfan/hypTcn002 @ 0acd094 · súkromný

    internal/extractor/kvm_dirty_ring.c:283-338

    Agent: tools/guest-agent/ a probe/ebpf_per_process/. Stav dirty ringu opisuje README.md:117-136 pri 0acd094 (ptrace_scope=1, libvirt 10.0).

  21. 21

    Diplomová práca v3: 0 trailerov, no s pomocou AI

    git históriahyptcn3 @ 97b0c43 · súkromný

    Približne 24 h histórie s veľkými commitmi, review dokumenty písané AI a zmenu hashovania so SHA-NI napísal AI agent. Moja rola: návrh, vedenie a kontrola meraní, ladenie, kontrola validácie a stiahnutie chybných výsledkov.

  22. 22

    Odvolané výsledky v2 a dôvod: labely na úrovni relácie a únik okien medzi trénovacou a testovacou množinou

    artefakthyptcn3 @ 97b0c43 · súkromný

    HONESTY.md → § 2

  23. 23

    Linter tvrdení: hľadá odvolané čísla a značky proveniencie {{res:…}} overuje voči výsledkovým JSON

    kódhyptcn3 @ 97b0c43 · súkromný

    scripts/check_claims.sh

    Nespúšťa ho CI ani hook, takže nič neblokuje. Na 97b0c43 končí s kódom 1: 38 nálezov, väčšinou v docs/notebookLM.md.

  24. 24

    Test: signál, ktorý nesie iba identitu relácie, nesmie prekonať náhodu

    testhyptcn3 @ 97b0c43 · súkromný

    tcn/tests/test_tcn.py:162-176

    test_split_neprepusta_identitu_session

Zamestnanie a projekty

  1. 25

    Marketeam: migrácia Symfony 3.4 → 6.4, staging a infraštruktúra na nasadzovanie

    vyhlásenie

    Moje vyhlásenie zo životopisu; firemný kód nie je verejný.

  2. 26

    Pamäť kontajnera Pretix: 6,7 GB pred zmenou, ~0,9 GB po nej

    meranie v práci

    Namerané v práci; hodnoty nie sú v žiadnom repozitári.

  3. 27

    Jednoriadková zmena --concurrency 2 pre pretix taskworker (supervisord)

    git história

    deployment/docker/supervisord/pretixtask.confcommit 3e0dc2f07

    Zlúčený PR #1 v Marketeam-SK/pretix; commit 3e0dc2f07 vo forku ErikHorvath-git/pretix. Názov PR znie „Increase concurrency for pretix taskworker“; diff pridáva --concurrency 2 k príkazu, ktorý predtým žiadny limit nemal.

  4. 28

    Podiel na backende: 11 075 z 11 215 riadkov Pythonu (98,75 %)

    git blameBally17/SIprojekt @ 2e96d44 · verejný

    git blame nad backendovým Pythonom bez migrácií; s detekciou presunov a kópií 96,4 %. Frontend (môj podiel 1,7 %) a SQL schéma sú prácou spolužiakov.

  5. 29

    OAuth 2.0 server: granty a autentifikácia klienta private_key_jwt

    kódBally17/SIprojekt @ 2e96d44 · verejný

    backend/services/auth/oauth/token_flow.py:20-71

    Ďalej pkce.py a authorization.py v tom istom priečinku. Známa medzera: jwt.decode (riadok 57) nevyžaduje claim exp a jti sa proti opakovaniu nekontroluje.

  6. 30

    PKCE: S256 aj plain; plain je predvolená

    kódBally17/SIprojekt @ 2e96d44 · verejný

    backend/services/auth/oauth/pkce.py:1-20

    pkce.py:5, 18 a authorization.py:64.

  7. 31

    End-to-end test klienta s podpísanou JWT assertion (RFC 7523)

    testBally17/SIprojekt @ 2e96d44 · verejný

    backend/tests/test_external_integration.py:232-265

  8. 32

    Release pipeline v GitHub Actions (11 krokov, image do GHCR)

    kódBally17/SIprojekt @ 2e96d44 · verejný

    .github/workflows/release.yml

    Úspešný beh 13. 1. 2026.

  9. 33

    Init skript: obalenie appendChild a insertBefore pred JavaScriptom stránky

    kódscanforeshop @ 23ba0ea · súkromný

    backend/services/discovery/__init__.py:9-45

    Obalené sú len tieto dve funkcie (riadky 41–42); ďalej sa uchovajú len záznamy so src (riadky 130–134).

  10. 34

    scanforeshop vznikol s pomocou AI (OpenAI Codex)

    vyhláseniescanforeshop @ 23ba0ea · súkromný

    Moje vyhlásenie z 25. 9. 2026. V gite nie sú AI trailery; v kóde sú identifikátory ako __codexDynamicScripts a data-codex-*.

  11. 35

    Výpočet skóre: šum, neoverené skripty a penalizácie za správanie, bez príznaku dynamického vloženia

    kódscanforeshop @ 23ba0ea · súkromný

    backend/services/scoring/engine.py:151-157

  12. 36

    Identita skriptu podľa SHA-256 a deterministický diff skenov

    kódscanforeshop @ 23ba0ea · súkromný

    backend/services/normalization/__init__.py:45-78

    Ďalej backend/services/diff/engine.py a pipeline.py.

  13. 37

    Stav PoC: fáza 6 nedokončená, „zelené“ fázy podľa commit správ

    git históriasovereign-ai-poc @ e9ded40 · súkromný

    NEXT.mdcommit e6a304b

    Dataset pre fázy 2, 4 a 5 nie je v repozitári, preto sa z čistého klonu nespustia.

  14. 38

    Supply chain: brána Trivy → podpis cosign podľa digestu → SBOM

    kódsovereign-ai-poc @ e9ded40 · súkromný

    scripts/supply_chain.sh:54-92

  15. 39

    Negatívne testy: nepodpísaný a zraniteľný image neprejde

    testsovereign-ai-poc @ e9ded40 · súkromný

    scripts/verify_phase3.sh:53-80

  16. 40

    Monitor egressu v bpftrace: bežné spojenia vs. zámerná exfiltrácia

    testsovereign-ai-poc @ e9ded40 · súkromný

    scripts/verify_phase5.sh:123-172

    Monitor je v infra/ebpf/egress_monitor.bt.

  17. 41

    Zmrazenie eval/ len pokynom; agent v commite b1390f9 zmenil práva eval/eval.sh

    git históriadolt-platform @ c65abb0 · súkromný

    run-loop.sh:20commit b1390f9

    Pokyn je v run-loop.sh:20 a v inštrukciách pre agenta. eval/eval.sh pribudol v commite b2bdee5 (s trailerom Claude); moje autorstvo zadania dokladá rozhodnutie D-012 v CONTEXT.md.

  18. 42

    Server reťaz overí, podpis ed25519 len uloží

    kóddolt-platform @ c65abb0 · súkromný

    server/app.py:19-28

    Ďalej server/chain.py.

  19. 43

    Akceptačný harness s 27 kontrolami a ratchetom; reprodukované 27/27

    testdolt-platform @ c65abb0 · súkromný

    eval/eval.sh:187-212

    Ratchet zlyhá, len keď počet PASS klesne pod doterajšie maximum (eval.sh:198–203). Rozhodnutia D-001 až D-015 sú v CONTEXT.md.

Čo netvrdím

  1. 44

    Commit, ktorým som do hyptcn3 prevzal zberač vmicollect bez zmien

    git históriahyptcn3 @ 97b0c43 · súkromný

    commit 6b9053d

    Správa commitu: „vmicollect: prevzaty stav k 2026-08-26, bez zmien“. Riadky, ktoré naposledy zmenil tento commit, sú v blame označené ako prevzatý kód, autor neznámy.

  2. 45

    Nginx: rate limity, profil TLS 1.2/1.3 a bezpečnostné hlavičky sú v konfigurácii

    kódBally17/SIprojekt @ 2e96d44 · verejný

    nginx/nginx.conf:31-66

    Commitnutá produkčná konfigurácia TLS nikdy neservírovala: nginx -t nad ňou zlyhá.

Kód: repozitáre

  1. 46

    Snapshot repozitárov z GitHub API

    git história

    Strom súborov, jazyky, počty commitov a výňatky pri pripnutom commite každého repozitára; generuje ho tools/snapshot pri builde. Text výňatku sa overuje voči hashu git blobu a riadok s kotvou musí ležať v danom rozsahu.

  2. 47

    Počty commitov a AI co-author trailerov v každom repozitári

    git história

    src/data/snapshot.json → repos[].commits.total, repos[].commits.aiCoAuthored

    Statická snímka tejto stránky (tools/snapshot). Počíta commity dosiahnuteľné z pripnutého commitu; trailer je riadok Co-Authored-By s menom Claude, Copilot, Cursor, Codex, GPT, OpenAI alebo Anthropic.

Kód: výňatky

  1. 48

    Git blame výňatkov na pripnutom commite (GitHub GraphQL)

    git blame

    Z commitu sa uloží len krátky hash, dátum a tri príznaky: autor je môj účet, AI co-author trailer, prevzatý commit. Mená, e-maily ani správy commitov sa neukladajú. Porovnané s lokálnym git blame --porcelain: všetkých 960 riadkov v 25 výňatkoch sa zhoduje.