Event sourcing, protože zdroj je event stream
WS ISIR publikuje číselně uspořádané neměnné akce. Cokoli jiného než uložit je doslova a přehrávat zahazuje jedinou vlastnost, kterou zdroj dává zadarmo. Tahle stránka popisuje mechaniku toho rozhodnutí; kód pro repliku a projektor zatím neexistuje a je na roadmapě jako fáze 1.
- Zdroj
- neměnné akce s pořadovým ID, publikované od roku 2008
- Replika
- append-only, idempotentní podle ID akce, nikdy se needituje
- Projekce
- odvozená, kdykoli znovu postavitelná z logu
- Oprava
- oprav projektor, zvyš jeho verzi, přehraj — nikdy ruční UPDATE
- Stav
- plánováno (fáze 1: replika a checkpoint, projekce)
Dvě vlastnosti, na kterých stojí celý návrh
Pořadová ID dělají z inkrementální synchronizace triviální úlohu: stačí se zeptat na všechno za ID N. Neměnnost dělá bezpečným přehrávání — nic, co už bylo staženo, se zpětně nezmění, takže lokální kopii lze bez rizika považovat za append-only.
Kdyby si systém z proudu udělal jen aktuální tabulku, obě vlastnosti by zahodil a každá oprava interpretace by znamenala znovu obtěžovat veřejnou službu v rámci limitu 3000 požadavků denně.
Checkpoint je jediné pohyblivé místo
- Zápis akcí a posun checkpointu proběhnou v jedné transakci: pád mezi nimi znamená znovunačtení dávky, ne tichou ztrátu dat.
- Zápis je idempotentní podle ID akce, takže opakovaná dávka je no-op, ne duplikát.
- Chyba parsování ani chybový stav zdroje checkpointem nepohnou — přeskočená dávka je neviditelná ztráta dat.
- Checkpoint se nikdy nevrací zpět, s výjimkou výslovného operátorského zásahu podle runbooku přehrání.
Proč se projekce nikdy nepatchuje ručně
Ruční UPDATE opraví jeden řádek a zároveň nenávratně rozpojí projekci od logu. Od té chvíle už přehrání nedá stejný výsledek jako to, co je v databázi, a projekce přestane být odvozená — stane se druhým zdrojem pravdy, který nikdo neumí zrekonstruovat.
Proto zní oprava vždycky stejně: oprav projektor, zvyš jeho verzi, přehraj z logu. Replika se přitom nedotkne.
Co event sourcing neřeší
Nezaručuje, že je interpretace správná — jen že jde opravit. Kvalita dat pořád stojí na extrakci ze skenů, prahu spolehlivosti a lidské kontrole. A levné přehrávání je podmíněné tím, že se výsledky extrakce cachují; bez cache by každá oprava stála celý backfill znovu.
Kde to v repozitáři žije
docs/ARCHITECTURE.md— pět definujících rozhodnutí, komponenty a úložištědocs/INGESTION.md— poll smyčka, invarianty příjmu, backfill versus živý provoz, přehrávání.claude/adr/0003-event-sourced-register-replica.md— rozhodnutí o append-only replice a odvozené projekci
Souvisí
Log je pravda, projekce je odvozená
Stav se rekonstruuje přehráním neměnného proudu událostí. Oprava chyby v interpretaci je rutina, ne krize — a nevyžaduje znovu zatěžovat veřejný rejstřík.
Detail
Výsledky extrakce jsou content-addressed a cachované
Dokument je identifikovaný SHA-256 svých bajtů a výsledek extrakce je uložený proti tomuto hashi. Přehrání projekce znovu použije cache a nespustí OCR ani LLM. Bez toho by každá oprava projektoru stála celý backfill znovu.
Detail
Replika a checkpoint
PlánovánoAppend-only log akcí, idempotentní zápis podle ID akce a checkpoint posouvaný ve stejné transakci jako zápis. Pád bude znamenat znovunačtení dávky, nikdy její přeskočení.
Detail