Erik HorváthDevOps inžinier · Nitra

Bc. Erik Horváth — DevOps inžinier, Nitra

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

V diplomovej práci z hostiteľa skladám obraz toho, čo v stroji beží: procesy, moduly jadra aj 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 o sebe hlási samotný stroj.

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

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.

Tabuľka 1. Základné údaje

Stručne a na jednom mieste. Podrobnosti a zdroje nasledujú nižšie.

Teraz
DevOps inžinier, Marketeam, s. r. o., Nitra · od 02/2026Migrácia Symfony 3.4 → 6.4, staging; pripravujem Docker a CI/CD. Podrobnosti
Hľadám
plný úväzok, kontrakt alebo B2B
Kde
Nitra · na diaľku · hybridne
Nástup
ihneď alebo podľa dohody
Jazyky
rodná slovenčina · angličtina B2
Vzdelanie
Bc. aplikovaná informatika, UKF Nitra (2025)magisterské štúdium prebieha
Technológie
Docker/Compose, GitHub Actions, GHCR, Nginx · Linux, Bash · Python, C, SQL, PHP/Symfony · Django/DRF, PostgreSQL, Redis · eBPF, KVMLen to, čo dokladá kód alebo práca; nástroje známe najmä z projektov s AI tu nie sú.

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.

Obr. 1

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).2 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é.

Diplomová práca

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

Čo beží vo virtuálnom stroji, zistené z jeho pamäte

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.

Nie je to naslepo: rekonštrukcia potrebuje profil jadra hosťa (kallsyms + BTF), ktorý sa z hosťa odoberie vopred, pre každý jeho štart.4 Výsledok som porovnal s tým, čo hlásili ps, lsmod a ss spustené priamo v hosťovi.1

Obr. 2Ako 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 2

  • 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.5Kó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).426Kó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.7
Tabuľka 2. 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)38
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 + 39
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 + 39
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í)–10kó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 2, 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álezov311kó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 + 112
Periodický zber
Periodický delta zberperióda 5 s, 12 cyklov (1 plná + 11 delta snímok)0 zmeškaných slotov1213
Zmenené stránky medzi snímkaminečinný hosť, delta, perióda 5 s~0,046 % (medián 245 z 528 417 stránok)714
Latencia snímka → vektor príznakovperióda 2 s, delta, príznaky zapnutémedián 604 ms, p95 613 ms1215
Rekonštrukcia a validácia
Posun obrazu jadra VA→PA (phys_base, zahŕňa KASLR)nájdený vo validačnej snímke−2 MiB13kó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

Práca

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

Ako vzniklo: 0 commitov s AI spoluautorom

Známa medzera: 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.2930

SIprojekt: Kód: 5 výňatkov
Podrobnosti a technológie: SIprojekt
  • 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.30
  • 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

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)

Kód

Väčšina repozitárov je súkromná, preto tu sú len vybrané výňatky.

Každý výňatok je pripnutý na commit a má git blame po riadkoch: moje commity, prevzatý kód a commity s AI co-author trailerom sú v okraji odlíšené. Poznámka nad kódom hovorí, prečo na ňom záleží, vrátane známych chýb.

Statický snapshot z GitHub API, vygenerovaný pri builde. Len výňatky — celý kód prejdeme na technickom hovore. Stav k 25. 9. 2026.44

  • Jazyky: Python 51 % · C 37 % · Shell 11 % · ostatné 0,9 %

    Ako vznikol: tabuľka 3

Diplomovka: predchádzajúce verzie (v1 → v2 → v3)

Ďalšie 3 repozitáre sú len v tabuľke 3, bez výňatkov kódu.

Súbory 305 súborov pri 97b0c43

guestparse25 súborov
__init__.py
__main__.py
checks.pyvýňatok
cli.py
image.py
profile.py
README.md
validate.py
view.py2 výňatky
204–252 Prechod 4-úrovňových tabuliek stránok x86-64
76–112 Nájdenie posunu jadra (KASLR) v snímke
vmicollect31 súborov
bpf2 súbory
vmic_bpf_abi.h
vmic_kvm.bpf.cvýňatok
src22 súborov
backend.c
backend_ebpf.c
backend_file.c
collector.c
config.c
hooks.c
internal.h
log.c
log.h
main.c
meta.c
perbin.c
perbin.h
retention.c
sched.c
sha256.cvýňatok
sha256.h
util.c
util.h
writer.c
writer_delta.c
writer_raw.c
Makefile
README.md
vmicollect.example.conf
.gitignore
HONESTY.md
README.md

Strom je filtrovaný: 90 z 305 súborov sa nezobrazuje.

zamknuté: súkromný kód, prejdeme ho na technickom pohovore výňatok: čitateľná časť súboru

Prechod 4-úrovňových tabuliek stránok x86-64

hyptcn3/guestparse/view.py

riadky 204–252pripnuté na 97b0c43snapshot vygenerovaný 25. 9. 2026bez driftu: main je stále na tomto commite

Prečo na tom záleží

Vlastný preklad (bez libvmi) virtuálnej adresy jadra hosťa na fyzickú priamo nad snímkou RAM, vrátane veľkých stránok 2 MiB / 1 GiB (bit PSE). Namiesto holého None vracia úroveň a kód dôvodu zlyhania, takže odlíši „tabuľka nebola zozbieraná“ od „jadro túto adresu nemapuje“ – na tom stojí diagnostika profilu. Známa chyba: pri veľkej stránke maska ponecháva v adrese bit 12 (PAT), takže ak je PAT nastavený, fyzická adresa vyjde zle.

Git blame:b574b8d 19. 9. 2026, commit z môjho účtu, 34 riadkov18d4eaf 18. 9. 2026, commit z môjho účtu, 15 riadkovzvýraznené riadky

204    def walk_pa_detail(self, va):205        """206        Preklad virtualnej adresy hosta prechodom tabuliek stranok207        (4 urovne, x86_64). Pokryva aj oblasti, ktore linearne mapovane nie su -208        moduly a vmalloc.209210        Vracia {'pa', 'level', 'index', 'reason', 'reason_code'}; 'pa' je None,211        ked sa prechod nedokoncil. Velke stranky (1 GiB, 2 MiB) sa rozpoznaju212        podla bitu PSE.213214        Kody dovodov (na nich stoji diagnoza, nie na samotnom None):215          bez_korena     - nepozname posun jadra alebo init_top_pgt216          chyba_tabulka  - tabulku na tej urovni snimka neobsahuje (nic to217                           nehovori o profile, iba o tom, co sa zozbieralo)218          chyba_polozka  - tabulka V SNIMKE JE, ale polozka pre tuto adresu219                           v nej nie je pritomna, teda jadro tuto virtualnu220                           adresu nemapuje221        """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 out230        # bity 47:39 / 38:30 / 29:21 / 20:12231        for level, shift in enumerate((39, 30, 21, 12)):232            idx = (va >> shift) & 0x1FF233            name = self.PGT_LEVELS[level]234            ent = self.u64(table + idx * 8) if self._page_present(table) else None235            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 out240            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 out245            phys = ent & 0x000FFFFFFFFFF000246            if level in (1, 2) and (ent & self.PTE_PSE):247                size = 1 << shift248                out["pa"] = phys + (va & (size - 1))249                return out250            table = phys251        out["pa"] = table + (va & 0xFFF)252        return out

„Z môjho účtu“ znamená, že autorom commitu je jeden z mojich GitHub účtov. Commit bez traileru ešte neznamená kód bez AI; ako repozitár vznikol, hovorí jeho štítok.4546

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.

Tabuľka 3. Commity a AI co-author trailery podľa repozitára47Počty sú zo statickej snímky z 25. 9. 2026, po commit, na ktorý je snímka pripnutá, a zahŕňajú všetkých autorov. Trailer Co-Authored-By zachytí len časť použitia AI: v3 diplomovej práce a scanforeshop majú 0 trailerov, no vznikli s pomocou AI. Stĺpec „Ako vzniklo“ preto vychádza z celej histórie a z môjho vyhlásenia, nie iba z trailerov.2134
RepozitárObdobieCommityS AI traileromAko vzniklo
Bally17/SIprojektSystém na evidenciu odborných praxí · tím 3 ľudí10/2025 – 01/2026497 commitov0 s AI trailerompodiel commitov s AI trailerom: 0 %0 commitov s AI spoluautorom
scanforeshopDetekcia skriptov vložených do e-shopu01/202669 commitov0 s AI trailerompodiel commitov s AI trailerom: 0 %s pomocou AI
hypTcnDiplomová práca v1 (hypTcn)02/2026 – 03/202637 commitov5 s AI trailerompodiel commitov s AI trailerom: 14 %s pomocou AI
avUnitfan/hypTcn002Diplomová práca v2 (hypTcn002) · účet avUnitfan03/2026 – 08/2026408 commitov332 s AI trailerompodiel commitov s AI trailerom: 81 %kód napísal AI agent
scrapeitallLookr API – agregátor verejných registrov04/2026 – 08/202625 commitov24 s AI trailerompodiel commitov s AI trailerom: 96 %kód napísal AI agent
sovereign-ai-pocSuverénny MLOps PoC pre EÚ (docker-compose)06/20268 commitov8 s AI trailerompodiel commitov s AI trailerom: 100 %kód napísal AI agent
dolt-platformHodnotenie DevOps zručností zo stopy práce07/202616 commitov16 s AI trailerompodiel commitov s AI trailerom: 100 %kód napísal AI agent
hyptcn3Diplomová práca v3: introspekcia KVM hosťa bez agenta09/202611 commitov0 s AI trailerompodiel commitov s AI trailerom: 0 %s pomocou AI
booking-systemRezervačný SaaS pre viacerých klientov09/202620 commitov16 s AI trailerompodiel commitov s AI trailerom: 80 %kód napísal AI agent
digitwinDigitálne dvojča doručovania (demo)09/20263 commity3 s AI trailerompodiel commitov s AI trailerom: 100 %kód napísal AI agent
Čo znamenajú označenia
kód napísal AI agent
väčšinu alebo všetok kód napísal AI agent; moje je zadanie, architektúra a vedenie, akceptačné testy a overenie tam, kde to uvádzam pri projekte.
s pomocou AI
AI sa na kóde podieľala, ale autorstvo je zmiešané alebo sa z gitu nedá presne určiť.
0 commitov s AI spoluautorom
žiadny commit v histórii nemá AI co-author trailer. Je to údaj o gite, nie tvrdenie o tom, ako sa kód písal.

Č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 4. 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.722
Rozsah validácieJedna validačná relácia na jednom hosťovi Debian 12 (18. 9. 2026).Výsledky validácie v tabuľke 2 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ímky81/81 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.91
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.4
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.546
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.2Kó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
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).48
SIprojekt: OAuth 2.0 serverZnáme medzery: 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.2930Kó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

Skúsenosti a vzdelanie

Od najnovších.

Zamestnanie

  1. – teraz

    DevOps inžinier · Marketeam, s. r. o., Nitra

    Migrácia Symfony 3.4 → 6.4, staging; pripravujem Docker a CI/CD.

    Podrobnosti v sekcii Práca

  2. –

    AI engineer, stáž · HOFITECH s. r. o.

    Náplň práce je pod NDA.

  3. –

    Frontend developer (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 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é.

Ďalej: Vodičský preukaz skupiny B · vo voľnom čase box a futbal

Kontakt

Napíšte mi alebo zavolajte. Plný úväzok, kontrakt aj B2B ma zaujímajú rovnako.

Ďalší krok je krátky hovor; ak chcete ísť do hĺbky, na technickom stretnutí spolu prejdeme ktorýkoľvek kód z tejto stránky, aj zo súkromných repozitárov.

Zdroje

Každá číselná značka na stránke 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

Úvod

  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)

Obrázok 1: prechod tabuliek stránok

  1. 2

    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.

  2. 3

    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

Diplomová práca

  1. 4

    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.

  2. 5

    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. 6

    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

  4. 7

    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.

  5. 8

    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.

  6. 9

    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.

  7. 10

    Š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()).

  8. 11

    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).

  9. 12

    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.

  10. 13

    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“.

  11. 14

    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

  12. 15

    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ý.

  13. 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

  14. 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ú.

  15. 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ý.

  16. 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 %).

  17. 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).

  18. 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.

  19. 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

  20. 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.

  21. 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

Práca

  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

    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.

  6. 30

    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.

  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.

Kód

  1. 44

    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. 45

    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.

  3. 46

    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.

Ako pracujem s AI

  1. 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.

Čo netvrdím

  1. 48

    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á.