kvnklk Kevin Kulik
ctx: lab/sync-drift · offenopen
01 ~/workbench Alles Wichtige steht auf der Seite — die Konsole ist optional.Everything important is on the page — the console is optional.
kevin@workbench — kevinkulik.dev session: read-only
EXPLORER
kevinkulik.dev/
├─ lab/ ● sync-drift
├─ systems/
├─ work/
├─ homelab/
├─ notes/
└─ about
klicken = navigierenclick = navigate
shell: tree
whoami.md README.de.en.md
aktualisiertupdated 2026-08 [platzhalterplaceholder]

Kevin Kulik

diagnostischer technischer Operatordiagnostic technical operator

Ich gehe in unklare Situationen, trenne Signal von Rauschen, prüfe Implementierungen statt Etiketten zu glauben — und definiere den kleinsten verlässlichen nächsten Schritt.

Diese Seite ist die öffentliche Schicht meiner privaten technischen Arbeit: Untersuchungen, Systeme, Messungen, Notizen. Kein Portfolio, kein Funnel.

I walk into unclear situations, separate signal from noise, check implementations instead of trusting labels — and define the smallest reliable next step.

This site is the public layer of my private technical work: investigations, systems, measurements, notes. Not a portfolio, not a funnel.

INSPECTOR
fokussystems · diagnostics · privacy stackastro · svelte · linux · proxmox quellestatisch, ohne Trackerstatic, no trackers
BELEG-GRAMMATIKEVIDENCE GRAMMAR
observed measured verified
Jede Aussage trägt ihren Beleg-Status.Every claim carries its evidence state.
terminal — kvnklk@web
{{ln.pre}}{{ln.t}}
⇥ tab — {{suggestion}}
vorschläge:suggestions:
de aktiven active js: optional — alles ohne Skripte lesbaroptional — everything readable without scripts keine Tracker · keine Cookiesno trackers · no cookies
terminal — kvnklk@web · fullscreen
{{ln.pre}}{{ln.t}}
⇥ tab — {{suggestion}}
02 lab/sync-drift inhalt: platzhaltercontent: placeholder

Aktuelle Untersuchung: Sync-DriftCurrent investigation: sync drift

gestartetstarted 2026-07-28 commits: a3f21c · 9d04e7 status: offenopen
FALLSTRUKTURCASE STRUCTURE
1
Problem
beschriebendescribed
2
Vermutete UrsacheLikely cause
✓ inferred
3
BelegeEvidence
✓ measured · checked
4
EntscheidungDecision
✓ changed
5
ErgebnisOutcome
wird beobachtetunder observation
6
Nächster SchrittNext step
pending
NÄCHSTER SCHRITTNEXT STEP
Drift unter kontrollierter I/O-Last erneut messen, 7-Tage-Reihe.Re-measure drift under controlled I/O load, 7-day series.

Problem. Zwei Replikate einer lokalen Datei-Sync-Lösung driften unter Last auseinander: Replikat B liegt nach Sync-Läufen zeitweise deutlich hinter A — ohne Fehlermeldung, ohne auffälliges Log.

Problem. Two replicas of a local file-sync setup drift apart under load: replica B intermittently falls well behind A after sync runs — no error, nothing obvious in the logs.

log — untersuchungsverlaufinvestigation trail 5 einträgeentries
07-28 21:14
observed
Replikat B nach Sync-Lauf ~90 s hinter A. Reproduzierbar bei parallelem Schreiben.Replica B ~90 s behind A after a sync run. Reproducible with parallel writes.
07-30 19:02
checked
Zeitquellen geprüft: NTP auf beiden Hosts synchron, Offset < 5 ms. Uhr ist es nicht.Checked time sources: NTP in sync on both hosts, offset < 5 ms. It's not the clock.
08-02 22:41
measured
14-Tage-Messreihe: Drift korreliert mit I/O-Last auf B, nicht mit Dateianzahl.14-day series: drift correlates with I/O load on B, not with file count.
08-05 20:19
inferred
Hypothese: mtime-Vergleich scheitert, wenn Flushes unter Last verzögert ankommen.Hypothesis: mtime comparison fails when flushes land late under load.
08-09 21:55
changed
Vergleich auf Checksummen umgestellt, flush_wait eingeführt. commit a3f21c.Switched comparison to checksums, introduced flush_wait. commit a3f21c.
diff — sync.conf a3f21c
interval = 300
- compare = mtime
+ compare = checksum
- flush_wait = 0
+ flush_wait = 2000 # ms
verify_after = true
telemetrie — drift pro lauf, sekundentelemetry — drift per run, seconds [platzhalterplaceholder]
07-28 ↑ a3f21c (08-09) 08-11
ENTSCHEIDUNGDECISION
Checksummenbasierter Vergleich, trotz höherer CPU-Last. Korrektheit vor Effizienz — die Effizienz wird danach gemessen.Checksum-based comparison, despite higher CPU cost. Correctness before efficiency — efficiency gets measured afterwards.
ERGEBNIS · VORLÄUFIGOUTCOME · PRELIMINARY
Drift seit der Änderung < 2 s über 3 Tage. Zu früh für „behoben“ — offene Frage: Verhalten bei vollem Backup-Fenster.Drift < 2 s over 3 days since the change. Too early for “fixed” — open question: behaviour during a full backup window.
03 systems/ inhalt: platzhaltercontent: placeholder

Ausgewählte SystemeSelected systems

Als laufende Prozesse, nicht als Portfolio-Karten. Jeder Eintrag nennt Zweck, Beleg — und eine ehrliche Grenze.Shown as running processes, not portfolio cards. Each record states purpose, evidence — and an honest limitation.

NAMETYPTYPEZUSTANDSTATEZWECK · BELEG · GRENZEPURPOSE · EVIDENCE · LIMITGEÄNDERTCHANGED
{{sys.name}}
{{sys.type}}
{{sys.state}}
{{sys.purpose}}
▸ {{sys.evidence}} △ {{sys.limit}}
{{sys.changed}}
04 work/ — aktive experimenteactive experiments

WerkstattWorkshop

flush-wait-messreihemeasured
Nachlauf zur Sync-Drift-Änderung: CPU-Kosten des Checksummen-Vergleichs quantifizieren.Follow-up to the sync-drift change: quantifying the CPU cost of checksum comparison.
rack-statusdisplaypending
E-Ink-Anzeige am Rack: Systemzustand lesbar ohne Login, ohne Dashboard.E-ink panel on the rack: system state readable without login, without a dashboard.
notiz-sync, lokalobserved
Notizen zwischen Geräten ohne Cloud syncen — erste Beobachtungen zu Konfliktfällen.Syncing notes across devices without a cloud — first observations on conflict cases.
05 systems/homelab topologie: platzhaltertopology: placeholder

Homelab — Architektur & VorfälleHomelab — architecture & incidents

ARCHITEKTURARCHITECTURE
wan
firewall / router
switch · vlans
proxmox-host
vm: hermesrun
vm: irisexp
vm: monitoringrun
nas
storage
snapshots
sync — a↔b
clients
workstation
laptop
obd2-logger
offsite-backup · wöchentlichweekly
kein echtes HA — bewusstno real HA — deliberate
AUSGEWÄHLTE VORFÄLLESELECTED INCIDENTS
2026-06-14 Stromausfall → NAS-ResilveringPower cut → NAS resilvering behobenresolved
USV-Laufzeit war zu optimistisch angenommen. Shutdown-Trigger auf 40 % Restkapazität gesetzt, Annahme dokumentiert.UPS runtime had been assumed too optimistically. Shutdown trigger set at 40 % remaining capacity, assumption documented.
2026-04-02 DNS-Schleife nach VLAN-UmbauDNS loop after VLAN rework dokumentiertdocumented
Rekursive Auflösung lief über die Firewall zurück ins LAN. Ursache war die Regelreihenfolge, nicht der Resolver — geprüft, korrigiert, notiert.Recursive resolution looped through the firewall back into the LAN. The cause was rule ordering, not the resolver — checked, fixed, written down.
2026-07-28 Sync-Drift offenopen
Laufende Untersuchung mit vollständigem Fallprotokoll — Ongoing investigation with a full case record — zur Fallakteopen the case file
06 notes/

Technische NotizenTechnical notes

notiznote · 2026-07-12 ~6 min verified ×3 [platzhalterplaceholder]

Etiketten prüfen, nicht glaubenCheck the label, don't trust it

„Verschlüsselt“, „redundant“, „synchron“ — das sind Etiketten. Was ein System tatsächlich tut, steht nicht auf dem Etikett, sondern in der Implementierung. Die meisten Überraschungen, die ich untersucht habe, waren keine Bugs: Es waren Etiketten, denen zu lange geglaubt wurde.

Die billigste Prüfung ist fast immer verfügbar: eine Messung, ein Blick in den Traffic, ein Vergleich zweier Zustände. Diese Notiz sammelt drei Fälle, in denen das Etikett und das Verhalten auseinanderlagen — und was die jeweils kleinste Prüfung war.

“Encrypted”, “redundant”, “in sync” — those are labels. What a system actually does isn't printed on the label; it's in the implementation. Most surprises I've investigated weren't bugs: they were labels that had been trusted for too long.

The cheapest check is almost always available: a measurement, a look at the traffic, a diff of two states. This note collects three cases where label and behaviour disagreed — and what the smallest check was in each.

weiterlesenread on
2026-05-30 Der kleinste verlässliche nächste SchrittThe smallest reliable next step ~4 min 2026-03-18 Warum ich Messreihen aufhebeWhy I keep my measurement series ~5 min
07 about

Über · HerkunftAbout · origin

Ich arbeite seit Jahren an der gleichen Grundfrage: Was tut dieses System wirklich — und woher weiß ich das? Der Weg dorthin führte durch Administration, Entwicklung und viele Abende im eigenen Rack. Geblieben ist eine Arbeitsweise: beobachten, messen, prüfen, ändern, dokumentieren.

Diese Seite ist bewusst kein Schaufenster. Sie ist das Protokoll: was untersucht wurde, was sich geändert hat, was offen bleibt. Wenn hier etwas als verified markiert ist, wurde es geprüft — sonst steht dort etwas Ehrlicheres.

I've been working on the same underlying question for years: what does this system actually do — and how do I know? The route led through administration, development, and many evenings at my own rack. What remained is a way of working: observe, measure, check, change, document.

This site is deliberately not a showcase. It's the record: what was investigated, what changed, what stays open. Where something is marked verified, it was checked — otherwise it says something more honest.

DESIGN EXHIBITS not part of the site — mobile adaptation · component language · terminal states
A · mobile adaptation — workbench collapses to status header + one panel + terminal drawer
kvnklk ctx: sync-drift · offen
Kevin Kulik
diagnostischer technischer Operator
Untersuchungen, Systeme, Messungen, Notizen — die öffentliche Schicht privater technischer Arbeit.
→ lab/sync-drift → systems/
AKTUELLE UNTERSUCHUNG
sync-driftoffen
Replikate driften unter Last
SYSTEME
agent-workspaceaktiv
hermesaktiv
terminal — tippen zum Öffnen
A1 · home — terminal as a collapsed bottom bar
kvnklk
Kevin Kulik
diagnostischer technischer Operator
terminal — kvnklk@web schließen ⌄
whoami
kevin kulik — diagnostic technical operator
mode: investigate → check → change → document
help ls systems/ open lab/sync-drift
A2 · terminal drawer — sheet over dimmed content, never permanent
← lab/ sync-drift offen
1 ✓ 2 ✓ 3 ✓ 4 ✓ 5 Ergebnis ◐ 6 ⋯
Problem. Zwei Replikate driften unter Last auseinander — ohne Fehlermeldung.
07-28 21:14observed
Replikat B ~90 s hinter A nach Sync-Lauf.
08-02 22:41measured
Drift korreliert mit I/O-Last auf B.
A3 · case file — rail becomes a horizontal step strip
B · global component language
EVIDENCE STATES — the core grammar
observedseen directly, not yet quantified measurednumbers exist, series retained checkeda hypothesis was tested once verifiedindependently confirmed inferredbest explanation, marked as such changedan intervention, with commit ref pendingdefined but not yet done redactedexists, deliberately not public unsupportedclaim without evidence — flagged, never styled as fact
TYPE — Recursive, one family, three voices
Display — casual axis 0.55
Body — linear, proportional, 15–16 px, for everything meant to be read.
mono 'MONO' 1 — only where it carries meaning: paths, states, values
PALETTE — tinted dark neutrals + copper/amber
#171411 bg
#1e1a15 panel
#332c24 line
#c9834e copper
#e0a84f amber
#e9e2d6 text
Status colors (#8aa87a ok · #e0a84f attention · #c07a68 error · #8fa3b3 info) appear only where semantically meaningful — never decorative.
C · terminal interaction states — the live one is in section 01
C1 · idle — invitation, no forced typing
kvnklk@web — restricted shell. type a command or click a suggestion.
'help' lists commands. nothing on this site requires the shell.
helpwhoamitree
C2 · autocomplete — ghost completion, tab accepts
open lab/sync-drift
⇥ tab — open lab/sync-drift
↑ / ↓ — command history
C3 · error grammar — English, specific, always a way out
open labs/
path not found: labs/ — try 'tree'
deploy
command not found: deploy — try 'help'
C4 · navigation & fullscreen — user-controlled, easy exit
open lab/sync-drift
→ opening lab/sync-drift — scrolling
fullscreen
fullscreen — esc or 'exit' to leave · page keeps scrolling normally behind it