I3175 — Two hosts presenting one node key are named as a duplicate, never folded into one flapping node
Detect two live instances advertising the same node id from different addresses within one expiry window, report them as a duplicate identity in mesh peers and as a failed check in mesh doctor, and keep the registry from counting their alternation as restarts.
PŘIPRAVENO vlna 0 · p2 · profil implementation · bezpečné souběžně
Připraveno. Všechny závislosti jsou hotové, takže majordomus plan start I3175 bude přijato.
Cíl
Detect two live instances advertising the same node id from different addresses within one expiry window, report them as a duplicate identity in mesh peers and as a failed check in mesh doctor, and keep the registry from counting their alternation as restarts.
Proč
A copied node.json (cloned disk image, restored backup) makes two machines one identity; the 09-11 federation design asked for a gate on duplicate node ids. Today the registry replaces the record on every new instance id (mesh/registry.rs:252-260), so two hosts sharing a key read as one node restarting endlessly. Sources: chatgpt-majordomus:c113#2, chatgpt-majordomus:c113#18.
Aktuální stav
Verified: TOFU rejects one node id under a different key (mesh/trust.rs:32); nothing detects one key under two live instances; mesh doctor checks identity, trust, journal, firewall, runtime.
Cílový stav
registry tracks concurrent instances per node within the expiry; doctor fails 'identity' naming both addresses.
Rozsah
- apps/majordomus-cli/src/mesh/registry.rs
- apps/majordomus-cli/src/mesh/doctor.rs
- docs/MESH.md
Mimo rozsah
- Revoking either host automatically
Závislosti
Žádné. Tento úkol je kořenem grafu.
Kritéria přijetí
- Two instances of one node id alternating inside one expiry are reported duplicate, with both addresses
- A real restart is still one restart
Validace
- majordomus plan validate
- cargo test --lib mesh::registry
Požadované důkazy
- test_duplicate_instances_are_named
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.
Canonical record: .ai/repo/project/issues/I3175.yaml. Read it back with majordomus plan show I3175.