I2733 — Obnovený průchod mesh.events vrátí každou událost právě jednou, napříč rozdělením sítě
Čtenář, který prochází mesh.events stránku po stránce a po každé odpovědi pokračuje od kurzoru, obdrží každou událost, kterou runtime přijme, právě jednou, včetně události od zapisovatele, který byl od meshe oddělen a označil ji razítkem na pozici, kterou procházení už minulo, nebo pod ní.
PŘIPRAVENO vlna 1 · p2 · profil implementation · bezpečné paralelně
Připraveno. Všechny závislosti jsou hotové, takže majordomus plan start I2733 bude přijato.
Cíl
Čtenář, který prochází mesh.events stránku po stránce a po každé odpovědi pokračuje od kurzoru, obdrží každou událost, kterou runtime přijme, právě jednou, včetně události od zapisovatele, který byl od meshe oddělen a označil ji razítkem na pozici, kterou procházení už minulo, nebo pod ní.
Proč
Leaf M02.5.1 (PR #1207, I2140) dokázal, že průchod obnovený z lamportu každé stránky vrátí každou událost jednou, zatímco vlastní události čtenáře a události peerů s razítkem nad pozicí průchodu stále přicházejí (unit testy paging_by_stamp_returns_every_event_exactly_once a paging_while_events_arrive_returns_every_event_exactly_once), a v docs/MESH.md pod 'Paging the raw journal' zdokumentoval jediný příchod mimo tento průchod: runtime odtržený od sítě dál zapisuje s vlastními hodinami Lamport a když se spojení vrátí, jeho události přijdou s razítkem na úrovni kurzoru čtenáře nebo pod ním. events_after filtruje lamport > after (apps/majordomus-cli/src/mesh/journal.rs:2367-2385), takže tyto události se obnovenému průchodu nikdy nevrátí; dostanou se jen do foldu mesh state nebo do průchodu restartovaného z dřívějšího after. Razítko Lamport patří svému zapisovateli, ne pořadí příchodu u čtenáře, takže žádný kurzor s jedním razítkem to nespraví; musí se změnit samotný kurzor.
Aktuální stav
mesh.events odpovídá lamport, razítkem poslední události na stránce, jako dalším after (apps/majordomus-cli/src/capability/builtin/mesh.rs:754-786) a stránka nikdy nekončí uprostřed série stejných razítek. Událost, která dorazí poté, co průchod minul její razítko, v průchodu tiše chybí, bez signálu pro čtenáře. Synchronizace mezi běhy už vyměňuje high-water marks po proudech (Journal::marks, marks_for, missing_for v apps/majordomus-cli/src/mesh/journal.rs:1765-1974); stránkování je nepoužívá.
Cílový stav
Kurzor, který odpovídá mesh.events a který přijímají mesh events --after a /events?after=, jmenuje každou událost, která už byla vrácena, takže obnovený průchod vrátí pozdní událost pod pozicí čtenáře jednou a nikdy žádnou neopakuje; docs/MESH.md tuto záruku uvádí a zrušuje uvedenou mezeru. Návrh se zvolí, až se tento úkol vezme, zaznamená se s důkazy a není zde. Kandidáti: (a) kurzor na zapisovatele, poslední vrácené (stream, seq) na stream, takže stránka vrátí události každého streamu nad jeho vlastním seq; (b) vektor verzí přes streamy, tytéž značky, které už synchronizace vyměňuje, nesený jako neprůhledný token; (c) high-water marks příchodu na runtime, lokální sekvence příchodu, ze které čtenář pokračuje, což drží token malý, ale platí jen proti runtime, který ho vydal. Každý musí uvést mez velikosti tokenu, jak se chová poté, co komprimace zahodí události pod značkou, a zda skalární lamport after zůstane přijat pro stávající čtenáře.
Rozsah
- apps/majordomus-cli/src/capability/builtin/mesh.rs
- apps/majordomus-cli/src/mesh/journal.rs
- apps/majordomus-cli/src/cli/local.rs
- apps/majordomus-cli/tests/mesh.rs
- docs/MESH.md
Mimo rozsah
- fold a digest mesh state, které už konvergují při jakémkoli pořadí doručení
- Protokol synchronizace a jeho rozpočet značek, které vlastní ostatní úkoly milníku
- Globální pořadí událostí napříč runtime; průchod je úplný a bez duplicit, ne linearizovatelný
Závislosti
Kritéria přijetí
- Test reprodukuje mezeru před opravou: dva runtimy, A a B, propojené; čtenář prochází mesh.events runtimu A s malým limitem za razítko B; spojení se přeruší, B připojí událost s lamportem rovným nebo pod kurzorem čtenáře, spojení se obnoví a A ji přijme; pokračování v průchodu od posledního zodpovězeného kurzoru tu událost vrátí
- Tentýž test s opakovaně obnoveným průchodem a pozdní událostí doručenou také dvakrát vrátí každou událost žurnálu přesně jednou za celý průchod
- Kurzor, který schéma dokumentuje, je kurzor, který další stránka přijímá v příkazové řádce, přes HTTP i přes MCP
- docs/MESH.md 'Paging the raw journal' uvádí záruku napříč oddíly a jmenuje test
Validace
- bin/majordomus plan validate
- cargo test --test mesh
- cargo test --lib mesh::journal
Požadované důkazy
- events_resume_across_partition_test
Důkazy
Nic nezaznamenáno. Za každým tokenem výše musí stát příkaz nebo artefakt, než lze tento úkol dokončit; vyprávění se odmítá.
Časová osa
- zahájeno
- —
- ověřeno
- —
- dokončeno
- —
Tato tři pole, důkazy výše a stav závislostí jsou vše, z čeho se stav skládá. Neexistuje žádné pole stavu, které by s nimi mohlo být v rozporu.
Kanonický záznam: .ai/repo/project/issues/I2733.yaml. Načtěte ho zpět pomocí majordomus plan show I2733.