Přeskočit na obsah

Tato stránka byla automaticky přeložena z angličtiny, jediného jazyka, ve kterém se tento web píše. Číst originál.

mesh-journal-converges — Žurnál kooperace je trvalý, konverguje při jakémkoli pořadí doručení a nikdy nenechá zastaralý nárok zvítězit

Událost, kterou runtime přijal, přežije pád, nebo je ohlášena jako ztracená; repliky se stejnou autentizovanou sadou událostí vytvoří týž digest při jakémkoli pořadí doručení; claim, který vypršel, se nikdy nevrátí, aby přebil claim přijatý za jeho nepřítomnosti, a každý konflikt claimů je oznámen; každá stránka žurnálu vrací každou událost jednou.

AKTIVNÍ 4 of 7 issues done

připraveno
3
blokováno
0
aktivní
0
verify
0
hotovo
4
zrušeno
0

Problém

Gramatika a fold podepsaného žurnálu jsou tam, kde se testují, v pořádku: události jsou podepsány nad kanonickým JSON (apps/majordomus-cli/src/mesh/journal.rs:934-948), fold řadí podle (lamport, stream, seq) (apps/majordomus-cli/src/mesh/state.rs:508-513) a proptesty permutují doručení. Jeho trvanlivost a tvrzení však v pořádku nejsou. Journal::persist ignoruje chyby zápisu (apps/majordomus-cli/src/mesh/journal.rs:1984), nikdy nevolá fsync a načtení mlčky zahazuje nerozparsovatelné řádky (apps/majordomus-cli/src/mesh/journal.rs:1407-1413); připojení za utržený konec slije další událost s poškozeným řádkem. Tvrzení nemají fencing: vypršení je verdikt při foldu, který se obrátí, když stejný stream po spánku nebo rozdělení sítě znovu zatepe (apps/majordomus-cli/src/mesh/journal.rs:1681-1697, apps/majordomus-cli/src/mesh/state.rs:656-661), a oživené tvrzení pak přebije tvrzení, které bylo v jeho nepřítomnosti oprávněně přijato. Uvolnění se kontroluje podle běhu, ne podle relace (apps/majordomus-cli/src/mesh/cooperation.rs:3373-3390). Rozpočet synchronizace ignoruje velikost značek (apps/majordomus-cli/src/mesh/journal.rs:1734-1766), takže vytížený žurnál může překročit MAX_LINK_MESSAGE (apps/majordomus-cli/src/mesh/link.rs:67,70). Stránkování mesh.events vrací jako kurzor maximální lamport žurnálu a události přeskakuje (apps/majordomus-cli/src/capability/builtin/mesh.rs:594-596, apps/majordomus-cli/src/mesh/journal.rs:2124-2133). docs/MESH.md:189-190 tvrdí, že testování permutací pokrývá jeden stream o šesti událostech. Změřeno v auditu základní linie běhu ze dne 2026-10-09 na masteru 1fb8d6be44 (plan/RUNTIME_BASELINE.md).

Výsledek

Událost, kterou runtime přijal, přežije pád, nebo je ohlášena jako ztracená; repliky se stejnou autentizovanou sadou událostí vytvoří týž digest při jakémkoli pořadí doručení; claim, který vypršel, se nikdy nevrátí, aby přebil claim přijatý za jeho nepřítomnosti, a každý konflikt claimů je oznámen; každá stránka žurnálu vrací každou událost jednou.

Aktuální stav

Trvalé: klíč uzlu a každá přijatá událost, bez fsync a s ignorovanými chybami zápisu. Jen v paměti: registr, spojení, nonce, náhrobky, beaty. Exkluzivita je lokální přijetí plus deterministické dodatečné pojmenování vítěze, bez fencing tokenu a bez oznámení při přechodu Held na Conflicted. Kontrola důvěry při opětovném načtení žurnálu a horní mez Lamport jsou I2124 (milník runtime-trust, probíhá na fix/a-remote-caller-cannot-write) a nejsou zde opakovány; kritérium runtime-trust, že „prošlý claim se nevrátí jako živý“, splňuje I2138 v tomto milníku.

Cílový stav

Každý řádek kontraktu konzistence z auditu (plan/RUNTIME_BASELINE.md) jmenuje test: utržený konec, selhaný zápis, pád během kompaktace, oživené tvrzení, uvolnění jinou relací, synchronizace na hranici značky, stránkování napříč sdílenými lamporty a náhodný vlastnostní test s více streamy s permutací a duplikací. docs/MESH.md uvádí exkluzivitu jako lokální přijetí s oznámenými konflikty, ne jako zámek.

Rozsah

  • apps/majordomus-cli/src/mesh/journal.rs
  • apps/majordomus-cli/src/mesh/state.rs
  • apps/majordomus-cli/src/mesh/cooperation.rs
  • apps/majordomus-cli/src/mesh/link.rs
  • apps/majordomus-cli/src/mesh/doctor.rs
  • apps/majordomus-cli/src/capability/builtin/mesh.rs
  • apps/majordomus-cli/tests/mesh_cooperation.rs
  • apps/majordomus-cli/tests/mesh_compaction.rs
  • apps/majordomus-cli/tests/mesh.rs
  • test/cases
  • test/mesh-lab
  • docs/MESH.md

Mimo rozsah

  • Globální zámek, kvorum nebo koordinátor. Invariant balíčku 5 dovoluje místo toho silné záruky odmítnout; dokumentace už linearizovatelnost vylučuje (docs/MESH.md:26-27,612-613) a tento milník tento postoj drží, pokud ADR nerozhodne jinak.
  • Kontrola důvěry při opětovném načtení žurnálu a hranice Lamportových hodin, což je I2124.
  • Uchovávání náhrobků, které dokumentace zaznamenává jako záměrné omezení.

Kritéria přijetí

  • Utržený nebo nečitelný řádek deníku počítá a hlásí mesh doctor a žádná úplná událost před ním ani po něm se neztratí
  • Selhání zápisu se hlásí a událost se nepotvrdí jako uložená
  • Tvrzení, které vypršelo a po rozdělení oživlo, je vůči tvrzení přijatému za jeho nepřítomnosti na každém runtime Conflicted, nikoli Held
  • Dvě repliky krmené týmiž ověřenými událostmi v libovolném pořadí a s duplicitami hlásí shodné digesty, což ověřuje multi-stream property test
  • Žádná synchronizační zpráva nepřekročí MAX_LINK_MESSAGE a stránky mesh.events vrací každou událost právě jednou

Validace

  • bin/majordomus plan validate
  • cargo test --lib mesh
  • cargo test --test mesh_cooperation --test mesh_compaction --test mesh
  • MJ_TEST_JOBS=4 bash test/run.sh 368_mesh_handover_resolves 493_mesh_compaction_keeps_what_is_live

Požadované důkazy

  • journal_durability_tests
  • claim_fencing_tests
  • multi_stream_convergence_proptest

Rizika

  • Přidání epochy do ClaimAcquired je změna na drátě; potřebuje verzi schématu linku nebo událostí řešenou tak, jak ji oceňuje I2164, jinak staré runtimy nové pole odmítnou nebo špatně přečtou.
  • fsync při každém připojení stojí latenci na cestě heartbeatu; zvolená mez se musí změřit, ne předpokládat.
  • I2124 upravuje stejnou cestu znovunačtení v apps/majordomus-cli/src/mesh/journal.rs; I2137 by měl přistát po něm.

Úkoly

Každý z nich je prováděcí kontrakt s vlastními kritérii přijetí, validačním příkazem a požadovanými důkazy. Sloupec wave je vrstva grafu závislostí, v níž úkol leží.

issuestatusvlnazávisí nanázev
I2137 HOTOVO 0 — Přijatá událost meshe je na disku dřív, než se počítá, a poškozený řádek žurnálu se nahlásí, nikdy tiše nesloučí ani nezahodí
I2139 HOTOVO 0 — Zpráva synchronizace zůstává pod hranicí odkazu, ať váží značky cokoli
I2140 HOTOVO 0 — Stránkování mesh.events vrací každou událost přesně jednou
I2706 HOTOVO 1 I2137 Vlastní událost, jejíž připojení selhalo, se nikdy nepotvrdí jako trvalá a opětovné načtení žurnálu je omezené velikostí
I2733 PŘIPRAVENO 1 I2140 Obnovený průchod mesh.events vrátí každou událost přesně jednou, napříč oddíly
I2825 PŘIPRAVENO 0 — Tvrzení uvolněné na jednom runtimu je uvolněno na každém runtimu, který ho drží, a odkaz na restartovaného peera se obnoví
I3174 PŘIPRAVENO 0 — An exclusive claim carries a fencing epoch, and a holder returning under an old epoch is refused

Graf

graf závislostí mesh-journal-convergesz .ai/repo/project
flowchart LR
    I2137["I2137<br/>An accepted mesh event is on disk before it counts, and a damaged journal line is reported, never fused or dropped silently"]:::done
    I2139["I2139<br/>A sync message stays under the link bound whatever the marks weigh"]:::done
    I2140["I2140<br/>Paging mesh.events returns every event exactly once"]:::done
    I2706["I2706<br/>An own event whose append failed is never acknowledged as durable, and a journal reload is bounded in size"]:::done
    I2733["I2733<br/>A resumed mesh.events walk returns every event exactly once, across partitions"]:::ready
    I2825["I2825<br/>A claim released on one runtime is released on every runtime that holds it, and a link to a restarted peer recovers"]:::ready
    I3174["I3174<br/>An exclusive claim carries a fencing epoch, and a holder returning under an old epoch is refused"]:::ready
    I2137 --> I2706
    I2140 --> I2733
    classDef done stroke:#16a34a,fill:#dcfce7,color:#14532d,stroke-width:2px
    classDef active stroke:#2563eb,fill:#eff6ff,color:#1e3a8a,stroke-width:2px
    classDef verify stroke:#7c3aed,fill:#f5f3ff,color:#4c1d95,stroke-width:2px
    classDef ready stroke:#0891b2,fill:#ecfeff,color:#164e63,stroke-width:2px
    classDef planned stroke:#0891b2,fill:#ecfeff,color:#164e63,stroke-width:2px
    classDef blocked stroke:#b45309,fill:#fffbeb,color:#78350f,stroke-width:2px
    classDef cancelled stroke:#6b7280,fill:#f9fafb,color:#374151,stroke-width:2px
    classDef superseded stroke:#6b7280,fill:#f9fafb,color:#374151,stroke-width:2px

Kanonický záznam: .ai/repo/project/milestones/mesh-journal-converges.yaml. Přečtěte jej zpět pomocí majordomus plan show mesh-journal-converges.

Prohledává názvy a popisy všech stránek, které tento web publikuje.